Name: series-workflowjmdpn Phase: Failed StartedAt: 2026-06-29 20:26:21 +0000 UTC FinishedAt: 2026-06-29 20:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmdpn[0] Phase: Succeeded StartedAt: 2026-06-29 20:26:21 +0000 UTC FinishedAt: 2026-06-29 20:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmdpn[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 20:26:21 +0000 UTC FinishedAt: 2026-06-29 20:34:34 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOTgxMWNiYWFhMjlkZWQ3OTA0MDBhM2JmNmFkYjFjYmRlMWZjNzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6MzM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDRhY2UxMjYwNmU5MzdiLi5jNjFkNTFhMGMxMTJmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21tX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdGF0ZV90ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1faW50X2N0bF90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuaW5kZXggYTU2MjcxYzIzN2FlOWUuLmM1NTE0OGViZmU5MzRkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjQwLDQgJiM0MzsyNDAsNyBAQCBjaGFyICpzdHJkdXBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSwgblxuIFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xuIFxuJiM0MzsjZGVmaW5lIFNUUih4KSAjeFxuJiM0MzsjZGVmaW5lIFhTVFIoeCkgU1RSKHgpXG4mIzQzO1xuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fVEVTVF9VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxNi4uOTgyNjhiZTFhYTViMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyNDYsMzAgJiM0MzsxMjM4LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpXG4gXHQvKiBIT1NUX1JTUCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0hPU1RfUE9JTlRFUjtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJSVyYnA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDtcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IDdkM2EyN2JjMGQ4NDJhLi5lYzRkZmQ4MTc2MzY5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMzk2LDI1ICYjNDM7Mzk2LDI4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbi1cdHU2NCByYXg7XG4tXHR1NjQgcmN4O1xuLVx0dTY0IHJkeDtcbi1cdHU2NCByYng7XG4tXHR1NjQgcnNwO1xuLVx0dTY0IHJicDtcbi1cdHU2NCByc2k7XG4tXHR1NjQgcmRpO1xuLVx0dTY0IHI4O1xuLVx0dTY0IHI5O1xuLVx0dTY0IHIxMDtcbi1cdHU2NCByMTE7XG4tXHR1NjQgcjEyO1xuLVx0dTY0IHIxMztcbi1cdHU2NCByMTQ7XG4tXHR1NjQgcjE1O1xuLX07XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQVhcdDBcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JDWFx0MVxuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUkRYXHQyXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlhcdDNcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JTUFx0NFxuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUkJQXHQ1XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU0lcdDZcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JESVx0N1xuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjhcdDhcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1I5XHQ5XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTBcdDEwXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTFcdDExXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTJcdDEyXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTNcdDEzXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTRcdDE0XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTVcdDE1XG4mIzQzOyNkZWZpbmUgTlJfR1VFU1RfUkVHU1x0KEdVRVNUX1JFR1NfUjE1ICYjNDM7IDEpXG4mIzQzO1xuJiM0MztleHRlcm4gdTY0IGd1ZXN0X3JlZ3NbTlJfR1VFU1RfUkVHU107XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJlZywgaWR4KSBcXFxuJiM0MztcdFwmIzM0O3hjaGcgJSVcJiMzNDsgI3JlZyBcJiMzNDssIGd1ZXN0X3JlZ3MgJiM0MzsgOCAqXCYjMzQ7IFhTVFIoaWR4KSBcJiMzNDtcXG5cXHRcJiMzNDtcbiBcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG5AQCAtNTgyLDYgJiM0Mzs1ODUsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbClcbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O21vdiAlMCwgJSVjcjBcJiMzNDsgOiA6IFwmIzM0O3JcJiMzNDsgKHZhbCkgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNyMjtcbiYjNDM7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bW92ICUlY3IyLCAlW2NyMl1cJiMzNDtcbiYjNDM7XHRcdFx0ICAgICA6IC8qIG91dHB1dCAqLyBbY3IyXVwmIzM0Oz1yXCYjMzQ7KGNyMikpO1xuJiM0MztcdHJldHVybiBjcjI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxuIHtcbiBcdHU2NCBjcjM7XG5AQCAtODc3LDYgJiM0Mzs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7aW52bHBnICglMClcJiMzNDsgOiA6IFwmIzM0O3JcJiMzNDsoYWRkcikgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCYjMzQ7cmVwOyBub3BcJiMzNDsgOjo6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA0YmNmZDYwZTNhZWNiMC4uYTgwOGRjMjFjOWYyMTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICYjNDM7MjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcdHU2NCB2YWx1ZTtcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xuIFxuJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgsIEdVRVNUX1JFR1NfUkFYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCwgR1VFU1RfUkVHU19SQlgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4LCBHVUVTVF9SRUdTX1JDWCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCwgR1VFU1RfUkVHU19SQlApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpLCBHVUVTVF9SRUdTX1JTSSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4LCAgR1VFU1RfUkVHU19SOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjksICBHVUVTVF9SRUdTX1I5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSwgR1VFU1RfUkVHU19SMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyLCBHVUVTVF9SRUdTX1IxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCwgR1VFU1RfUkVHU19SMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1LCBHVUVTVF9SRUdTX1IxNSlcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7ZXZtY3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICYjNDM7MzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgJiM0MzszODcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTQwOCwyOCAmIzQzOzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbmluZGV4IGVmNTZkY2VmZTAxMTllLi4wZDY2YWZmMDQ5MzliYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTI5LDYgJiM0MzsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4gXG4mIzQzO3U2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xuJiM0MztcbiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcilcbiB7XG4gXHRzd2l0Y2ggKHZlY3Rvcikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuQEAgLTEzLDcgJiM0MzsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCYjMzQ7L2Rldi9zZXZcJiMzNDtcbiBcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xuIHU2NCByZmxhZ3M7XG4gXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXG5AQCAtMTI1LDcgJiM0MzsxMjQsNyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiBcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cdTAwM2VzdGFjaztcbi1cdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XG4mIzQzO1x0Z3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JESV0gPSAodTY0KXN2bTtcbiBcbiBcdGlmIChzdm0tXHUwMDNlbmNyM19ncGEpIHtcbiBcdFx0Y3RybC1cdTAwM2VtaXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfTlA7XG5AQCAtMTM3LDQ2ICYjNDM7MTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxuICAqIHNhdmUvcmVzdG9yZSA2NC1iaXQgZ2VuZXJhbCByZWdpc3RlcnMgZXhjZXB0IHJheCwgcmlwLCByc3BcbiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlXG4gICovXG4tI2RlZmluZSBTQVZFX0dQUl9DXHRcdFx0XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MmIzQzOzB4MTBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmR4LCBndWVzdF9yZWdzJiM0MzsweDE4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MmIzQzOzB4MzhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmRpLCBndWVzdF9yZWdzJiM0MzsweDQwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MmIzQzOzB4NTBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEwLCBndWVzdF9yZWdzJiM0MzsweDU4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MmIzQzOzB4NjhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEzLCBndWVzdF9yZWdzJiM0MzsweDcwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MmIzQzOzB4ODBcXG5cXHRcJiMzNDtcbi1cbi0jZGVmaW5lIExPQURfR1BSX0MgICAgICBTQVZFX0dQUl9DXG4mIzQzOyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCwgR1VFU1RfUkVHU19SQlgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4LCBHVUVTVF9SRUdTX1JDWCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCwgR1VFU1RfUkVHU19SQlApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpLCBHVUVTVF9SRUdTX1JTSSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4LCAgR1VFU1RfUkVHU19SOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjksICBHVUVTVF9SRUdTX1I5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSwgR1VFU1RfUkVHU19SMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyLCBHVUVTVF9SRUdTX1IxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCwgR1VFU1RfUkVHU19SMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1LCBHVUVTVF9SRUdTX1IxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwmIzM0O3ZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcJiMzNDtcbi1cdFx0XCYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRMT0FEX0dQUl9DXG4mIzQzO1x0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwmIzM0O1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcJiMzNDt2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJmbGFnc1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XCYjMzQ7bW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwmIzM0O1xuIFx0XHRcJiMzNDttb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXG5cXHRcJiMzNDtcbiBcdFx0XCYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdDogOiBbdm1jYl0gXCYjMzQ7clwmIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpXG4mIzQzO1x0XHQ6IFt2bWNiX3JmbGFnc10gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmZsYWdzKSxcbiYjNDM7XHRcdCAgW3ZtY2JfcmF4XSBcJiMzNDsmIzQzO21cJiMzNDsgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpLFxuJiM0MztcdFx0ICBbZ3Vlc3RfcmVnc19yYXhdIFwmIzM0OyYjNDM7cm1cJiMzNDsgKGd1ZXN0X3JlZ3NbR1VFU1RfUkVHU19SQVhdKVxuJiM0MztcdFx0OiBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKVxuIFx0XHQ6IFwmIzM0O3IxNVwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbmluZGV4IGU3ZGQ1NzkxOTU5YmExLi4zODA1MGM2MGEwNjcwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiAmIzQzOzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCYjMzQ7cmN4XCYjMzQ7LCBcJiMzNDtyc2lcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDtcbi1cbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtwdXNoICUlcmJwXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEzXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O2luICVbcG9ydF0sICUlYWxcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZGlcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTJcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTVcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7LFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICVbcG9ydF0sICUlYWxcJiMzNDtcbiYjNDM7XHRcdDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoVUNBTExfUElPX1BPUlQpLCBcJiMzNDtEXCYjMzQ7ICh1YykgOiBcJiMzNDtyYXhcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxuICNkZWZpbmUgRE9ORSAweGZmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmI3NmU1NmY3NDRlNzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDMyNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OU1x0XHQ1MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR09UT19QUkVWX0xJTkVcdFx0XCYjMzQ7XFwwMzNbQVxcclwmIzM0O1xuJiM0MzsjZGVmaW5lIFBSSU5UX0lURVIocywgeClcdFx0XHRcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmICh4ID09IDEpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHByaW50ZihzIFwmIzM0OyVkXFxuXCYjMzQ7LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHJpbnRmKEdPVE9fUFJFVl9MSU5FIHMgXCYjMzQ7JWRcXG5cJiMzNDssIHgpO1x0XHRcXFxuJiM0MztcdGZmbHVzaChzdGRvdXQpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBUUlNfUEVSX1BURVx0XHQ1MTJcbiYjNDM7I2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRFU1RfTUVNX0JBU0VfR1ZBXHQweGMwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBOUl9URVNUX0FERFJTXHRcdFBUUlNfUEVSX1BURVxuJiM0MzsjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgcHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7c3RhdGljIHU2NCBwdGVfaHVnZV9tYXNrO1xuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcbiYjNDM7e1xuJiM0MztcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4mIzQzO1x0dTY0ICpwZ3RhYmxlO1xuJiM0MztcdGludCBsZXZlbDtcbiYjNDM7XHRib29sIGxhNTc7XG4mIzQzO1xuJiM0MztcdGxhNTcgPSAhIShnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1Nyk7XG4mIzQzO1x0bGV2ZWwgPSBsYTU3ID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4mIzQzO1xuJiM0MztcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbiYjNDM7XHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKHB0ZSBcdTAwMjYgcHRlX3ByZXNlbnRfbWFzayk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlQoIShwdGUgXHUwMDI2IHB0ZV9odWdlX21hc2spKTtcbiYjNDM7XHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIFBHX0xFVkVMXzRLKV07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3BmX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1NjQgZmF1bHRfYWRkcjtcbiYjNDM7XHR1NjQgKnB0ZXA7XG4mIzQzO1xuJiM0MztcdGZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xuJiM0MztcbiYjNDM7XHRwdGVwID0gZ3Vlc3RfZ2V0X3B0ZShmYXVsdF9hZGRyKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHRlcCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcbiYjNDM7XG4mIzQzO1x0KnB0ZXAgfD0gcHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7XHRpbnZscGcoZmF1bHRfYWRkcik7XG4mIzQzO1xuJiM0MztcdGd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhZGRyLCB2YWw7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgTlJfVEVTVF9BRERSUykgKiBQQUdFX1NJWkU7XG4mIzQzO1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xuJiM0MztcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbiYjNDM7XHRcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcdTAwMjY9IH5wdGVfcHJlc2VudF9tYXNrO1xuJiM0MztcdFx0aW52bHBnKHZhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4mIzQzO3tcbiYjNDM7XHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gQklUKFVEX1ZFQ1RPUik7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRydW5fZ3Vlc3Qoc3ZtLVx1MDAzZXZtY2IsIHN2bS1cdTAwM2V2bWNiX2dwYSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZjcHVfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoc3RhdGUtXHUwMDNlbmVzdGVkLmZsYWdzIFx1MDAyNiBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3N0YXRlX2luamVjdF91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkID0gZmFsc2U7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbl9oYXNfcGF5bG9hZCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwYXJzZV9hcmdzX25lc3RlZChpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBuZXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDtuXCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAob3B0KSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7biYjMzk7OlxuJiM0MztcdFx0XHRuZXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDtVc2FnZTogJXMgWy1uXVxcblwmIzM0OywgYXJndlswXSk7XG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmVzdGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xuJiM0MztcdGludCByLCBpLCBsZXZlbCwgY291bnQgPSAwO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Ym9vbCBuZXN0ZWQ7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSk7XG4mIzQzO1xuJiM0MztcdG5lc3RlZCA9IHBhcnNlX2FyZ3NfbmVzdGVkKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobmVzdGVkKSB7XG4mIzQzO1x0XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3N2bSh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4mIzQzO1x0XHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuJiM0MztcdHB0ZV9odWdlX21hc2sgPSBQVEVfSFVHRV9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBwdGVfaHVnZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuJiM0MztcdGd2YSA9IHZtX2FsbG9jX3BhZ2Uodm0pO1xuJiM0MztcdCoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjtcbiYjNDM7XHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuJiM0MztcdCAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9URVNUX0FERFJTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgaSAqIGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuJiM0MztcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbiYjNDM7XHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xuJiM0MztcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4mIzQzO1x0ICogdGFibGUgbGV2ZWwuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbiYjNDM7XHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbiYjNDM7XHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbiYjNDM7XHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xuJiM0MztcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbiYjNDM7XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFwmIzM0Oywgcik7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjb3VudCYjNDM7JiM0MzsgXHUwMDNjIE5SX0lURVJBVElPTlMpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4mIzQzO1x0XHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4mIzQzO1x0XHRyID0gX192Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRcdGlmIChyID09IC0xKVxuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuJiM0MztcdFx0dmNwdV9zaWd1c3JfaWdub3JlKCk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbiYjNDM7XHRcdGlmICghcikge1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4mIzQzO1x0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHZDUFUgaXMgaW4gZ3Vlc3QgbW9kZSwgaW5qZWN0IGEgI1VEIHRvIHRyaWdnZXIgYW5cbiYjNDM7XHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobmVzdGVkIFx1MDAyNlx1MDAyNiB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpIFx1MDAyNlx1MDAyNiBjb3VudCAlIDIgPT0gMClcbiYjNDM7XHRcdFx0dmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbiYjNDM7XHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbiYjNDM7XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbiYjNDM7XHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0UFJJTlRfSVRFUihcJiMzNDtTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6IFwmIzM0OywgY291bnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwmIzM0O05vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cJiMzNDssIG5lc3RlZCA/IFwmIzM0OyAoaW4gTDIpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBndWVzdF9mYXVsdHMpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk4MTFjYmFhYTI5ZGVkNzkwNDAwYTNiZjZhZGIxY2JkZTFmYzcwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDIwOjMzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggNGFjZTEyNjA2ZTkzN2IuLmM2MWQ1MWEwYzExMmZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X3NyZWdzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21tX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0YXRlX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV92bWNhbGxfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc3ZtX2ludF9jdGxfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaAppbmRleCBhNTYyNzFjMjM3YWU5ZS4uYzU1MTQ4ZWJmZTkzNGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0yNDAsNCAmIzQzOzI0MCw3IEBAIGNoYXIgKnN0cmR1cF9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpLCBuCiAKIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpOwogCiYjNDM7I2RlZmluZSBTVFIoeCkgI3gKJiM0MzsjZGVmaW5lIFhTVFIoeCkgU1RSKHgpCiYjNDM7CiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX1RFU1RfVVRJTF9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IGJlNzliZGEwMjRiZjE2Li45ODI2OGJlMWFhNWIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKQEAgLTEyMDcsMzAgJiM0MzsxMjA3LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpCiAKIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgPSAwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNDYsMzAgJiM0MzsxMjM4LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpCiAJLyogSE9TVF9SU1AgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAppbmRleCA3ZDNhMjdiYzBkODQyYS4uZWM0ZGZkODE3NjM2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTM5NiwyNSAmIzQzOzM5NiwyOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheCkKICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpCQkoKHB0ZSkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLKQogI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiAKLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovCi1zdHJ1Y3QgZ3ByNjRfcmVncyB7Ci0JdTY0IHJheDsKLQl1NjQgcmN4OwotCXU2NCByZHg7Ci0JdTY0IHJieDsKLQl1NjQgcnNwOwotCXU2NCByYnA7Ci0JdTY0IHJzaTsKLQl1NjQgcmRpOwotCXU2NCByODsKLQl1NjQgcjk7Ci0JdTY0IHIxMDsKLQl1NjQgcjExOwotCXU2NCByMTI7Ci0JdTY0IHIxMzsKLQl1NjQgcjE0OwotCXU2NCByMTU7Ci19OwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQVgJMAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQ1gJMQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SRFgJMgomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlgJMwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU1AJNAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlAJNQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU0kJNgomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SREkJNwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SOAk4CiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1I5CTkKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjEwCTEwCiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1IxMQkxMQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTIJMTIKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjEzCTEzCiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1IxNAkxNAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTUJMTUKJiM0MzsjZGVmaW5lIE5SX0dVRVNUX1JFR1MJKEdVRVNUX1JFR1NfUjE1ICYjNDM7IDEpCiYjNDM7CiYjNDM7ZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdOwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00ocmVnLCBpZHgpIFwKJiM0MzsJJiMzNDt4Y2hnICUlJiMzNDsgI3JlZyAmIzM0OywgZ3Vlc3RfcmVncyAmIzQzOyA4IComIzM0OyBYU1RSKGlkeCkgJiMzNDtcblx0JiMzNDsKIAogc3RydWN0IGRlc2M2NCB7CiAJdTE2IGxpbWl0MDsKQEAgLTU4Miw2ICYjNDM7NTg1LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDttb3YgJTAsICUlY3IwJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgY3IyOwomIzQzOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlJWNyMiwgJVtjcjJdJiMzNDsKJiM0MzsJCQkgICAgIDogLyogb3V0cHV0ICovIFtjcjJdJiMzNDs9ciYjMzQ7KGNyMikpOwomIzQzOwlyZXR1cm4gY3IyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZCkKIHsKIAl1NjQgY3IzOwpAQCAtODc3LDYgJiM0Mzs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7aW52bHBnICglMCkmIzM0OyA6IDogJiMzNDtyJiMzNDsoYWRkcikgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCYjMzQ7cmVwOyBub3AmIzM0OyA6OjogJiMzNDttZW1vcnkmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggNGJjZmQ2MGUzYWVjYjAuLmE4MDhkYzIxYzlmMjEwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0yOTAsNiAmIzQzOzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7CiAJdTY0IHZhbHVlOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIAomIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCwgR1VFU1RfUkVHU19SQVgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KQomIzQzOwogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAogc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCkBAIC0zNjMsOSAmIzQzOzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpCiAJcmV0dXJuIHZhbHVlOwogfQogCi0vKgotICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzczLDM0ICYjNDM7Mzg3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiAJaWYgKGVuYWJsZV9ldm1jcykKIAkJcmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAogCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTQwOCwyOCAmIzQzOzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bXJlc3VtZSgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1yZXN1bWU7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKIAkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZWY1NmRjZWZlMDExOWUuLjBkNjZhZmYwNDkzOWJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwpAQCAtMjksNiAmIzQzOzI5LDggQEAgYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTsKIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkOwogdTY0IGd1ZXN0X3RzY19raHo7CiAKJiM0Mzt1NjQgZ3Vlc3RfcmVnc1tOUl9HVUVTVF9SRUdTXTsKJiM0MzsKIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKQogewogCXN3aXRjaCAodmVjdG9yKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAKICNkZWZpbmUgU0VWX0RFVl9QQVRIICYjMzQ7L2Rldi9zZXYmIzM0OwogCi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzOwogdTY0IHJmbGFnczsKIAogLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuCkBAIC0xMjUsNyAmIzQzOzEyNCw3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogCiAJdm1jYi0mZ3Q7c2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDsKIAl2bWNiLSZndDtzYXZlLnJzcCA9ICh1NjQpc3ZtLSZndDtzdGFjazsKLQlndWVzdF9yZWdzLnJkaSA9ICh1NjQpc3ZtOwomIzQzOwlndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkRJXSA9ICh1NjQpc3ZtOwogCiAJaWYgKHN2bS0mZ3Q7bmNyM19ncGEpIHsKIAkJY3RybC0mZ3Q7bWlzY19jdGwgfD0gU1ZNX01JU0NfRU5BQkxFX05QOwpAQCAtMTM3LDQ2ICYjNDM7MTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcAogICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZQogICovCi0jZGVmaW5lIFNBVkVfR1BSX0MJCQkJXAotCSYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXG5cdCYjMzQ7Ci0KLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0MKJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngsIEdVRVNUX1JFR1NfUkJYKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmR4LCBHVUVTVF9SRUdTX1JEWCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnAsIEdVRVNUX1JFR1NfUkJQKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmRpLCBHVUVTVF9SRUdTX1JESSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCwgIEdVRVNUX1JFR1NfUjgpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEwLCBHVUVTVF9SRUdTX1IxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEsIEdVRVNUX1JFR1NfUjExKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEzLCBHVUVTVF9SRUdTX1IxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQsIEdVRVNUX1JFR1NfUjE0KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpCiAKIC8qCiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2kKLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHkKJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseQogICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuCiAgKi8KIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpCiB7CiAJYXNtIHZvbGF0aWxlICgKIAkJJiMzNDt2bWxvYWQgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByZmxhZ3MKLQkJJiMzNDttb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcblx0JiMzNDsKLQkJTE9BRF9HUFJfQwomIzQzOwkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlW2d1ZXN0X3JlZ3NfcmF4XSwgJSVyMTVcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQogCQkmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCVNBVkVfR1BSX0MKLQkJJiMzNDttb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJmbGFncwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XG5cdCYjMzQ7CiAJCSYjMzQ7bW92ICUlcjE1LCByZmxhZ3Ncblx0JiMzNDsKLQkJJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JheF0sICUlcjE1XG5cdCYjMzQ7CS8vIHJheAomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbZ3Vlc3RfcmVnc19yYXhdXG5cdCYjMzQ7CiAJCSYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCTogOiBbdm1jYl0gJiMzNDtyJiMzNDsgKHZtY2IpLCBbdm1jYl9ncGFdICYjMzQ7YSYjMzQ7ICh2bWNiX2dwYSkKJiM0MzsJCTogW3ZtY2JfcmZsYWdzXSAmIzM0OyYjNDM7bSYjMzQ7ICh2bWNiLSZndDtzYXZlLnJmbGFncyksCiYjNDM7CQkgIFt2bWNiX3JheF0gJiMzNDsmIzQzO20mIzM0OyAodm1jYi0mZ3Q7c2F2ZS5yYXgpLAomIzQzOwkJICBbZ3Vlc3RfcmVnc19yYXhdICYjMzQ7JiM0MztybSYjMzQ7IChndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkFYXSkKJiM0MzsJCTogW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpCiAJCTogJiMzNDtyMTUmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCmluZGV4IGU3ZGQ1NzkxOTU5YmExLi4zODA1MGM2MGEwNjcwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCkBAIC0xMCwzNiAmIzQzOzEwLDggQEAKIAogdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKQogewotCS8qCi0JICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWAotCSAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuCi0JICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZQotCSAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQCi0JICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlCi0JICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqCi0JICovCi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSwlcCi0JJiMzNDtyY3gmIzM0OywgJiMzNDtyc2kmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDsKLQotCWFzbSB2b2xhdGlsZSgmIzM0O3B1c2ggJSVyYnBcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTVcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTJcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZGlcblx0JiMzNDsKLQkJICAgICAmIzM0O2luICVbcG9ydF0sICUlYWxcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmR4XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEzXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmJwXG5cdCYjMzQ7Ci0JCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDssCi0JCSAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJVtwb3J0XSwgJSVhbCYjMzQ7CiYjNDM7CQk6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksICYjMzQ7RCYjMzQ7ICh1YykgOiAmIzM0O3JheCYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAogdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtMjIsOSAmIzQzOzIyLDYgQEAKIAogI2RlZmluZSBTWU5DX1BPUlQJMHhlCiAKLSNkZWZpbmUgU1RSKHgpICN4Ci0jZGVmaW5lIFhTVFIocykgU1RSKHMpCi0KIC8qCiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS4KICAqIFJlcG9ydHMgU01SQU1fU1RBR0UgdmlhIHBvcnQgSU8sIHRoZW4gZG9lcyBSU00uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCkBAIC0yMiw5ICYjNDM7MjIsNiBAQAogI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwCiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmUKIAotI2RlZmluZSBTVFIoeCkgI3gKLSNkZWZpbmUgWFNUUihzKSBTVFIocykKLQogI2RlZmluZSBTWU5DX1BPUlQgMHhlCiAjZGVmaW5lIERPTkUgMHhmZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmI3NmU1NmY3NDRlNzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDMyNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OUwkJNTAwCiYjNDM7CiYjNDM7I2RlZmluZSBHT1RPX1BSRVZfTElORQkJJiMzNDtcMDMzW0FcciYjMzQ7CiYjNDM7I2RlZmluZSBQUklOVF9JVEVSKHMsIHgpCQkJCQlcCiYjNDM7ZG8gewkJCQkJCQkJXAomIzQzOwlpZiAoeCA9PSAxKQkJCQkJCVwKJiM0MzsJCXByaW50ZihzICYjMzQ7JWRcbiYjMzQ7LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAomIzQzOwllbHNlCQkJCQkJCVwKJiM0MzsJCXByaW50ZihHT1RPX1BSRVZfTElORSBzICYjMzQ7JWRcbiYjMzQ7LCB4KTsJCVwKJiM0MzsJZmZsdXNoKHN0ZG91dCk7CQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7I2RlZmluZSBQVFJTX1BFUl9QVEUJCTUxMgomIzQzOyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbCkJKCgodmFkZHIpICZndDsmZ3Q7IFBHX0xFVkVMX1NISUZUKGxldmVsKSkgJmFtcDsgKFBUUlNfUEVSX1BURSAtIDEpKQomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkEJMHhjMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQJMHhkMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgTlJfVEVTVF9BRERSUwkJUFRSU19QRVJfUFRFCiYjNDM7I2RlZmluZSBQQVRURVJOCQkJMHhhYmNkZWZhYmNkZWZhYmNkVUxMCiYjNDM7CiYjNDM7c3RhdGljIHU2NCBwdGVfcHJlc2VudF9tYXNrOwomIzQzO3N0YXRpYyB1NjQgcHRlX2h1Z2VfbWFzazsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzOwomIzQzOwomIzQzO3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKQomIzQzO3sKJiM0MzsJdTY0IHBndGFibGVfcGEsIHB0ZTsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CWJvb2wgbGE1NzsKJiM0MzsKJiM0MzsJbGE1NyA9ICEhKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBNTcpOwomIzQzOwlsZXZlbCA9IGxhNTcgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRzsKJiM0MzsKJiM0MzsJcGd0YWJsZV9wYSA9IGdldF9jcjMoKSAmYW1wOyBQSFlTSUNBTF9QQUdFX01BU0s7CiYjNDM7CWZvciAoOyBsZXZlbCAmZ3Q7IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7CiYjNDM7CQlwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTsKJiM0MzsJCXB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldOwomIzQzOwkJR1VFU1RfQVNTRVJUKHB0ZSAmYW1wOyBwdGVfcHJlc2VudF9tYXNrKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghKHB0ZSAmYW1wOyBwdGVfaHVnZV9tYXNrKSk7CiYjNDM7CQlwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwlyZXR1cm4gJmFtcDtwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXU2NCBmYXVsdF9hZGRyOwomIzQzOwl1NjQgKnB0ZXA7CiYjNDM7CiYjNDM7CWZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTsKJiM0MzsKJiM0MzsJcHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7CiYjNDM7CUdVRVNUX0FTU0VSVChwdGVwKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCEoKnB0ZXAgJmFtcDsgcHRlX3ByZXNlbnRfbWFzaykpOwomIzQzOwomIzQzOwkqcHRlcCB8PSBwdGVfcHJlc2VudF9tYXNrOwomIzQzOwlpbnZscGcoZmF1bHRfYWRkcik7CiYjNDM7CiYjNDM7CWd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJdTY0IHZhZGRyLCB2YWw7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZm9yICg7OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyAoaSAlIE5SX1RFU1RfQUREUlMpICogUEFHRV9TSVpFOwomIzQzOwkJV1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpOwomIzQzOwomIzQzOwkJLyogUmVhZCB0byB0cmlnZ2VyICNQRiAqLwomIzQzOwkJdmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7CiYjNDM7CiYjNDM7CQkvKiBDbGVhciB0aGUgcHJlc2VudCBiaXQgYWdhaW4gc28gaXQgZmF1bHRzIG5leHQgdGltZSAqLwomIzQzOwkJKmd1ZXN0X2dldF9wdGUodmFkZHIpICZhbXA7PSB+cHRlX3ByZXNlbnRfbWFzazsKJiM0MzsJCWludmxwZyh2YWRkcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKJiM0Mzt7CiYjNDM7CWdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJ1bl9ndWVzdChzdm0tJmd0O3ZtY2IsIHN2bS0mZ3Q7dm1jYl9ncGEpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3sKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwomIzQzOwkvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovCiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSB8IEJJVChQRl9WRUNUT1IpKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSAmYW1wOyAweGZmLCBVRF9WRUNUT1IpOwomIzQzOwkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKJiM0Mzt7CiYjNDM7CWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkKJiM0MzsJCWwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCWwxX3ZteF9jb2RlKHRlc3RfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzaWd1c3JfdGhyZWFkX2ZuKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKJiM0MzsJCXB0aHJlYWRfa2lsbCh2Y3B1X3RocmVhZCwgU0lHVVNSMSk7CiYjNDM7CQl1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9CiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpCiYjNDM7ewomIzQzOwlzYS5zYV9oYW5kbGVyID0gZHVtbXlfc2lnbmFsX2hhbmRsZXI7CiYjNDM7CXNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpCiYjNDM7ewomIzQzOwlzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKJiM0MzsJc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHN0YXRlLSZndDtuZXN0ZWQuZmxhZ3MgJmFtcDsgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBhcnNlX2FyZ3NfbmVzdGVkKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwlib29sIG5lc3RlZCA9IGZhbHNlOwomIzQzOwlpbnQgb3B0OwomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O24mIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzoKJiM0MzsJCQluZXN0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlwcmludGYoJiMzNDtVc2FnZTogJXMgWy1uXVxuJiMzNDssIGFyZ3ZbMF0pOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5lc3RlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTsKJiM0MzsJaW50IHIsIGksIGxldmVsLCBjb3VudCA9IDA7CiYjNDM7CXB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkOwomIzQzOwlncGFfdCBncGEsIHBndGFibGVfZ3BhOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJYm9vbCBuZXN0ZWQ7CiYjNDM7CWd2YV90IGd2YTsKJiM0MzsJdTY0IHB0ZTsKJiM0MzsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQpKTsKJiM0MzsKJiM0MzsJbmVzdGVkID0gcGFyc2VfYXJnc19uZXN0ZWQoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7CiYjNDM7CXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpOwomIzQzOwomIzQzOwlpZiAobmVzdGVkKSB7CiYjNDM7CQlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsJCWlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKQomIzQzOwkJCXZjcHVfYWxsb2Nfc3ZtKHZtLCAmYW1wO2d2YSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdmNwdV9hbGxvY192bXgodm0sICZhbXA7Z3ZhKTsKJiM0MzsJCXZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSygmYW1wO3ZtLSZndDttbXUpOwomIzQzOwlwdGVfaHVnZV9tYXNrID0gUFRFX0hVR0VfTUFTSygmYW1wO3ZtLSZndDttbXUpOwomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgcHRlX3ByZXNlbnRfbWFzayk7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBwdGVfaHVnZV9tYXNrKTsKJiM0MzsKJiM0MzsJLyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqLwomIzQzOwlndmEgPSB2bV9hbGxvY19wYWdlKHZtKTsKJiM0MzsJKih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOOwomIzQzOwlncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnQKJiM0MzsJICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX1RFU1RfQUREUlM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gfnB0ZV9wcmVzZW50X21hc2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGUKJiM0MzsJICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXMKJiM0MzsJICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2UKJiM0MzsJICogdGFibGUgbGV2ZWwuCiYjNDM7CSAqCiYjNDM7CSAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0bwomIzQzOwkgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLgomIzQzOwkgKi8KJiM0MzsJcGd0YWJsZV9ncGEgPSB2bS0mZ3Q7bW11LnBnZDsKJiM0MzsJZm9yIChsZXZlbCA9IHZtLSZndDttbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsICZndDs9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7CiYjNDM7CQl2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTsKJiM0MzsJCXBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTsKJiM0MzsJCXB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldOwomIzQzOwkJcGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovCiYjNDM7CXZjcHVfc2lndXNyX2lnbm9yZSgpOwomIzQzOwlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDtzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLAomIzQzOwkJCSAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpOwomIzQzOwlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWQmIzM0Oywgcik7CiYjNDM7CiYjNDM7CXdoaWxlIChjb3VudCYjNDM7JiM0MzsgJmx0OyBOUl9JVEVSQVRJT05TKSB7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZQomIzQzOwkJICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXZjcHVfc2lndXNyX2xpc3RlbigpOwomIzQzOwkJciA9IF9fdmNwdV9ydW4odmNwdSk7CiYjNDM7CQlpZiAociA9PSAtMSkKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpOwomIzQzOwkJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqLwomIzQzOwkJaWYgKCFyKSB7CiYjNDM7CQkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgJmFtcDt1YyksIFVDQUxMX0FCT1JUKTsKJiM0MzsJCQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuCiYjNDM7CQkgKiBMMi0mZ3Q7TDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXN0ZWQgJmFtcDsmYW1wOyB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpICZhbXA7JmFtcDsgY291bnQgJSAyID09IDApCiYjNDM7CQkJdmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpOwomIzQzOwomIzQzOwkJa3ZtX3ZtX3JlbGVhc2Uodm0pOwomIzQzOwkJdmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pOwomIzQzOwkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7CiYjNDM7CQl2Y3B1X2xvYWRfc3RhdGUodmNwdSwgc3RhdGUpOwomIzQzOwkJa3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTsKJiM0MzsKJiM0MzsJCVBSSU5UX0lURVIoJiMzNDtTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6ICYjMzQ7LCBjb3VudCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsJVEVTVF9BU1NFUlQoZ3Vlc3RfZmF1bHRzICZndDsgMCwgJiMzNDtObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWQmIzM0Oyk7CiYjNDM7CXByX2luZm8oJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcbiYjMzQ7LCBuZXN0ZWQgPyAmIzM0OyAoaW4gTDIpJiMzNDsgOiAmIzM0OyYjMzQ7LCBndWVzdF9mYXVsdHMpOwomIzQzOwomIzQzOwlwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTsKJiM0MzsJcHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDEKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA2NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGFsbCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBXYWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgZGlmZi4gWWVwLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHRoZXJlOiBgTWFrZWZpbGUua3ZtYCwgc29tZSBpbmNsdWRlIGZpbGVzLCBhbmQgYSBmZXcgc291cmNlIGZpbGVzIGZvciB2YXJpb3VzIHRlc3RzLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBldm1jc19zbW1fY29udHJvbHNfdGVzdC5jYCwgYHNtbV90ZXN0LmNgLCBhbmQgYHN0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jYCBhcmUgYW1vbmcgdGhlIG1vZGlmaWVkIHRlc3RzLgoKTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1RoaXMgaXMgYSBzZWxmdGVzdCBwYXRjaC4mIzM0OyBJdCBpc24mIzM5O3QgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnl0aGluZyBmdW5kYW1lbnRhbCB0byBhbiBhcmNoaXRlY3R1cmUuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSB1c2Vyc3BhY2UgdGVzdHMsIGRlc2lnbmVkIHRvIHZhbGlkYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgS1ZNIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCB0b3VjaGVzIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBjb2RlIHRoYXQgKm5lZWRzKiBmdXp6aW5nLgoKSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zOiBSZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBvbmx5IGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50IGNoYW5nZXMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIGNoYW5nZXMgdG8gY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uIGZsb3csIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3QgZml0LCByaWdodD8gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gdGVzdHMgc2VlbXMgY291bnRlci1pbnR1aXRpdmUuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIHBhdGggYmFzZWQgb24gbXkgYXNzZXNzbWVudCBvZiB0aGUgZGlmZi4KCkkgc2hvdWxkIHZlcmlmeSB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogb3RoZXIgY2hhbmdlcyBoaWRpbmcgYW55d2hlcmUuIE5vLCBldmVyeXRoaW5nIHN0aWxsIHN0YXJ0cyB3aXRoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA0Ljk1OTM1MzExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzI1NjgyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA0Ljk1OTM2MDg3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3ODcwNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4MTFjYmFhYTI5ZGVkNzkwNDAwYTNiZjZhZGIxY2JkZTFmYzcwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAyMDozMzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDRhY2UxMjYwNmU5MzdiLi5jNjFkNTFhMGMxMTJmYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0xMTEsNiArMTExLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zZXRfc3JlZ3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3RhdGVfdGVzdFxcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdm1faW50X2N0bF90ZXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uYzU1MTQ4ZWJmZTkzNGQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0yNDAsNCArMjQwLDcgQEAgY2hhciAqc3RyZHVwX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMiksIG5cXG4gXFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xcbiBcXG4rI2RlZmluZSBTVFIoeCkgI3hcXG4rI2RlZmluZSBYU1RSKHgpIFNUUih4KVxcbitcXG4gI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9URVNUX1VUSUxfSCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuaW5kZXggYmU3OWJkYTAyNGJmMTYuLjk4MjY4YmUxYWE1YjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMTIwNywzMCArMTIwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxcbiBcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTI0NiwzMCArMTIzOCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxcbiBcXHQvKiBIT1NUX1JTUCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgXFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yc3ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbmluZGV4IDdkM2EyN2JjMGQ4NDJhLi5lYzRkZmQ4MTc2MzY5YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtMzk2LDI1ICszOTYsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXFxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXFx0XFx0KChwdGUpIFxcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gXFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXFxuLXN0cnVjdCBncHI2NF9yZWdzIHtcXG4tXFx0dTY0IHJheDtcXG4tXFx0dTY0IHJjeDtcXG4tXFx0dTY0IHJkeDtcXG4tXFx0dTY0IHJieDtcXG4tXFx0dTY0IHJzcDtcXG4tXFx0dTY0IHJicDtcXG4tXFx0dTY0IHJzaTtcXG4tXFx0dTY0IHJkaTtcXG4tXFx0dTY0IHI4O1xcbi1cXHR1NjQgcjk7XFxuLVxcdHU2NCByMTA7XFxuLVxcdHU2NCByMTE7XFxuLVxcdHU2NCByMTI7XFxuLVxcdHU2NCByMTM7XFxuLVxcdHU2NCByMTQ7XFxuLVxcdHU2NCByMTU7XFxuLX07XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQVhcXHQwXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQ1hcXHQxXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRFhcXHQyXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQlhcXHQzXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SU1BcXHQ0XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQlBcXHQ1XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SU0lcXHQ2XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRElcXHQ3XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SOFxcdDhcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1I5XFx0OVxcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEwXFx0MTBcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxMVxcdDExXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTJcXHQxMlxcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEzXFx0MTNcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxNFxcdDE0XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTVcXHQxNVxcbisjZGVmaW5lIE5SX0dVRVNUX1JFR1NcXHQoR1VFU1RfUkVHU19SMTUgKyAxKVxcbitcXG4rZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xcbitcXG4rI2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZWcsIGlkeCkgXFxcXFxcbitcXHRcXFwieGNoZyAlJVxcXCIgI3JlZyBcXFwiLCBndWVzdF9yZWdzICsgOCAqXFxcIiBYU1RSKGlkeCkgXFxcIlxcXFxuXFxcXHRcXFwiXFxuIFxcbiBzdHJ1Y3QgZGVzYzY0IHtcXG4gXFx0dTE2IGxpbWl0MDtcXG5AQCAtNTgyLDYgKzU4NSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUwLCAlJWNyMFxcXCIgOiA6IFxcXCJyXFxcIiAodmFsKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxcbit7XFxuK1xcdHU2NCBjcjI7XFxuK1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUlY3IyLCAlW2NyMl1cXFwiXFxuK1xcdFxcdFxcdCAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl1cXFwiPXJcXFwiKGNyMikpO1xcbitcXHRyZXR1cm4gY3IyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXFxuIHtcXG4gXFx0dTY0IGNyMztcXG5AQCAtODc3LDYgKzg4OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxcbit7XFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJpbnZscGcgKCUwKVxcXCIgOiA6IFxcXCJyXFxcIihhZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicmVwOyBub3BcXFwiIDo6OiBcXFwibWVtb3J5XFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDRiY2ZkNjBlM2FlY2IwLi5hODA4ZGMyMWM5ZjIxMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5AQCAtMjkwLDYgKzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XFxuIFxcdHU2NCB2YWx1ZTtcXG4gfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTtcXG4gXFxuKyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCwgR1VFU1RfUkVHU19SQVgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KVxcbitcXG4gI2luY2x1ZGUgXFxcImV2bWNzLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcXG5AQCAtMzYzLDkgKzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpXFxuIFxcdHJldHVybiB2YWx1ZTtcXG4gfVxcbiBcXG4tLypcXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC5cXG4tICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMzczLDM0ICszODcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4gXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4gXFx0XFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1sYXVuY2g7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIigodTY0KUhPU1RfUlNQKSxcXG4gXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxcbi0gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00MDgsMjggKzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbiBcXHRpZiAoZW5hYmxlX2V2bWNzKVxcbiBcXHRcXHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5pbmRleCBlZjU2ZGNlZmUwMTE5ZS4uMGQ2NmFmZjA0OTM5YmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbkBAIC0yOSw2ICsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XFxuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xcbiB1NjQgZ3Vlc3RfdHNjX2toejtcXG4gXFxuK3U2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xcbitcXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXFxuIHtcXG4gXFx0c3dpdGNoICh2ZWN0b3IpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gXFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFxcXCIvZGV2L3NldlxcXCJcXG4gXFxuLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7XFxuIHU2NCByZmxhZ3M7XFxuIFxcbiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy5cXG5AQCAtMTI1LDcgKzEyNCw3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiBcXG4gXFx0dm1jYi1cXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcXG4gXFx0dm1jYi1cXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cXHUwMDNlc3RhY2s7XFxuLVxcdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XFxuK1xcdGd1ZXN0X3JlZ3NbR1VFU1RfUkVHU19SREldID0gKHU2NClzdm07XFxuIFxcbiBcXHRpZiAoc3ZtLVxcdTAwM2VuY3IzX2dwYSkge1xcbiBcXHRcXHRjdHJsLVxcdTAwM2VtaXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfTlA7XFxuQEAgLTEzNyw0NiArMTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcXG4gICovXFxuLSNkZWZpbmUgU0FWRV9HUFJfQ1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJjeCwgZ3Vlc3RfcmVncysweDEwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJzaSwgZ3Vlc3RfcmVncysweDM4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXI5LCAgZ3Vlc3RfcmVncysweDUwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMiwgZ3Vlc3RfcmVncysweDY4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxNSwgZ3Vlc3RfcmVncysweDgwXFxcXG5cXFxcdFxcXCJcXG4tXFxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcXG4rI2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KVxcbiBcXG4gLypcXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXFxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcXG4rICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcXG4gICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuXFxuICAqL1xcbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuIFxcdFxcdFxcXCJ2bWxvYWQgJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IHJmbGFncywgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJmbGFnc1xcbi1cXHRcXHRcXFwibW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgZ3Vlc3RfcmVncywgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbi1cXHRcXHRcXFwibW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdExPQURfR1BSX0NcXG4rXFx0XFx0XFxcIm1vdiByZmxhZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXFxcblxcXFx0XFxcIlxcbitcXHRcXHRcXFwibW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXFwidm1ydW4gJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRTQVZFX0dQUl9DXFxuLVxcdFxcdFxcXCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuIFxcdFxcdFxcXCJtb3YgJSVyMTUsIHJmbGFnc1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXFxcblxcXFx0XFxcIlxcbiBcXHRcXHRcXFwidm1zYXZlICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFt2bWNiXSBcXFwiclxcXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpXFxuK1xcdFxcdDogW3ZtY2JfcmZsYWdzXSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJmbGFncyksXFxuK1xcdFxcdCAgW3ZtY2JfcmF4XSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJheCksXFxuK1xcdFxcdCAgW2d1ZXN0X3JlZ3NfcmF4XSBcXFwiK3JtXFxcIiAoZ3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JBWF0pXFxuK1xcdFxcdDogW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKVxcbiBcXHRcXHQ6IFxcXCJyMTVcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuaW5kZXggZTdkZDU3OTE5NTliYTEuLjM4MDUwYzYwYTA2NzAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuQEAgLTEwLDM2ICsxMCw4IEBAXFxuIFxcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXFxuIHtcXG4tXFx0LypcXG4tXFx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxcbi1cXHQgKiBwcmVzZXJ2ZXMgTDIgR1BScyBhY3Jvc3MgYSBuZXN0ZWQgVk0tRXhpdC4gIElmIGEgdWNhbGwgZnJvbSBMMiwgZS5nLlxcbi1cXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXFxuLVxcdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXFxuLVxcdCAqIGluIHBhcnRpY3VsYXIgaXMgcHJvYmxlbWF0aWMpIGFsb25nIHdpdGggUkRYIGFuZCBSREkgKHdoaWNoIGFyZVxcbi1cXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcXG4tXFx0ICovXFxuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXFx0XFxcXFxcbi1cXHRcXFwicmN4XFxcIiwgXFxcInJzaVxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLCBcXFwicjExXFxcIlxcbi1cXG4tXFx0YXNtIHZvbGF0aWxlKFxcXCJwdXNoICUlcmJwXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTRcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjEzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxMlxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyYnhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcImluICVbcG9ydF0sICUlYWxcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyZGlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyZHhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyYnhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTJcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTNcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTRcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTVcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyYnBcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQ6IDogW3BvcnRdIFxcXCJkXFxcIiAoVUNBTExfUElPX1BPUlQpLCBcXFwiRFxcXCIgKHVjKSA6IFxcXCJyYXhcXFwiLCBcXFwibWVtb3J5XFxcIixcXG4tXFx0XFx0ICAgICBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0spO1xcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICVbcG9ydF0sICUlYWxcXFwiXFxuK1xcdFxcdDogOiBbcG9ydF0gXFxcImRcXFwiIChVQ0FMTF9QSU9fUE9SVCksIFxcXCJEXFxcIiAodWMpIDogXFxcInJheFxcXCIsIFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5pbmRleCA3N2NlODdjNDFhODY4ZS4uY2Y1M2JmNDY5N2UxZTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuQEAgLTIyLDkgKzIyLDYgQEBcXG4gXFxuICNkZWZpbmUgU1lOQ19QT1JUXFx0MHhlXFxuIFxcbi0jZGVmaW5lIFNUUih4KSAjeFxcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXFxuLVxcbiAvKlxcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cXG4gICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbkBAIC0yMiw5ICsyMiw2IEBAXFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxcbiAjZGVmaW5lIERPTkUgMHhmZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYjc2ZTU2Zjc0NGU3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXFxuQEAgLTAsMCArMSwzMjYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgR09UT19QUkVWX0xJTkVcXHRcXHRcXFwiXFxcXDAzM1tBXFxcXHJcXFwiXFxuKyNkZWZpbmUgUFJJTlRfSVRFUihzLCB4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHggPT0gMSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHByaW50ZihzIFxcXCIlZFxcXFxuXFxcIiwgeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4rXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRmKEdPVE9fUFJFVl9MSU5FIHMgXFxcIiVkXFxcXG5cXFwiLCB4KTtcXHRcXHRcXFxcXFxuK1xcdGZmbHVzaChzdGRvdXQpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgTlJfVEVTVF9BRERSU1xcdFxcdFBUUlNfUEVSX1BURVxcbisjZGVmaW5lIFBBVFRFUk5cXHRcXHRcXHQweGFiY2RlZmFiY2RlZmFiY2RVTExcXG4rXFxuK3N0YXRpYyB1NjQgcHRlX3ByZXNlbnRfbWFzaztcXG4rc3RhdGljIHU2NCBwdGVfaHVnZV9tYXNrO1xcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFx0Ym9vbCBsYTU3O1xcbitcXG4rXFx0bGE1NyA9ICEhKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1Nyk7XFxuK1xcdGxldmVsID0gbGE1NyA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHO1xcbitcXG4rXFx0cGd0YWJsZV9wYSA9IGdldF9jcjMoKSBcXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcXG4rXFx0Zm9yICg7IGxldmVsIFxcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcXG4rXFx0XFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0XFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XFxuK1xcdFxcdEdVRVNUX0FTU0VSVChwdGUgXFx1MDAyNiBwdGVfcHJlc2VudF9tYXNrKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCEocHRlIFxcdTAwMjYgcHRlX2h1Z2VfbWFzaykpO1xcbitcXHRcXHRwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpO1xcbitcXHR9XFxuK1xcbitcXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xcbitcXHRyZXR1cm4gXFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHU2NCBmYXVsdF9hZGRyO1xcbitcXHR1NjQgKnB0ZXA7XFxuK1xcbitcXHRmYXVsdF9hZGRyID0gZ2V0X2NyMigpO1xcbitcXHRHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7XFxuK1xcbitcXHRwdGVwID0gZ3Vlc3RfZ2V0X3B0ZShmYXVsdF9hZGRyKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHB0ZXApO1xcbitcXHRHVUVTVF9BU1NFUlQoISgqcHRlcCBcXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcXG4rXFxuK1xcdCpwdGVwIHw9IHB0ZV9wcmVzZW50X21hc2s7XFxuK1xcdGludmxwZyhmYXVsdF9hZGRyKTtcXG4rXFxuK1xcdGd1ZXN0X2ZhdWx0cysrO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZylcXG4re1xcbitcXHR1NjQgdmFkZHIsIHZhbDtcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0Zm9yICg7OyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgTlJfVEVTVF9BRERSUykgKiBQQUdFX1NJWkU7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cXG4rXFx0XFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcXG4rXFxuK1xcdFxcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXFxuK1xcdFxcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcXG4rXFx0XFx0aW52bHBnKHZhZGRyKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbit7XFxuK1xcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XFxuK1xcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJ1bl9ndWVzdChzdm0tXFx1MDAzZXZtY2IsIHN2bS1cXHUwMDNldm1jYl9ncGEpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfY29kZSwgKFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4re1xcbitcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XFxuK1xcbitcXHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSB8IEJJVChQRl9WRUNUT1IpKSk7XFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xcbitcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4re1xcbitcXHRpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdGwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxcbit7XFxuK1xcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcXG4rXFx0XFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcXG4rXFx0XFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fVxcbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcXG4rXFx0c2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdmNwdV9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gISEoc3RhdGUtXFx1MDAzZW5lc3RlZC5mbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcGFyc2VfYXJnc19uZXN0ZWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRib29sIG5lc3RlZCA9IGZhbHNlO1xcbitcXHRpbnQgb3B0O1xcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm5cXFwiKSkgIT0gLTEpIHtcXG4rXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4rXFx0XFx0Y2FzZSAnbic6XFxuK1xcdFxcdFxcdG5lc3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlVzYWdlOiAlcyBbLW5dXFxcXG5cXFwiLCBhcmd2WzBdKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbmVzdGVkO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcXG4rXFx0aW50IHIsIGksIGxldmVsLCBjb3VudCA9IDA7XFxuK1xcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xcbitcXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHU2NCAqcGd0YWJsZTtcXG4rXFx0Ym9vbCBuZXN0ZWQ7XFxuK1xcdGd2YV90IGd2YTtcXG4rXFx0dTY0IHB0ZTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSk7XFxuK1xcbitcXHRuZXN0ZWQgPSBwYXJzZV9hcmdzX25lc3RlZChhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgUEZfVkVDVE9SLCBndWVzdF9wZl9oYW5kbGVyKTtcXG4rXFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XFxuK1xcbitcXHRpZiAobmVzdGVkKSB7XFxuK1xcdFxcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIHx8IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXHRcXHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcXG4rXFx0XFx0XFx0dmNwdV9hbGxvY19zdm0odm0sIFxcdTAwMjZndmEpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2Z3ZhKTtcXG4rXFx0XFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xcbitcXHR9XFxuK1xcbitcXHRwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2dm0tXFx1MDAzZW1tdSk7XFxuK1xcdHB0ZV9odWdlX21hc2sgPSBQVEVfSFVHRV9NQVNLKFxcdTAwMjZ2bS1cXHUwMDNlbW11KTtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgcHRlX2h1Z2VfbWFzayk7XFxuK1xcbitcXHQvKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIHdyaXRlIHRoZSBwYXR0ZXJuIHRvIGl0ICovXFxuK1xcdGd2YSA9IHZtX2FsbG9jX3BhZ2Uodm0pO1xcbitcXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XFxuK1xcdGdwYSA9IGFkZHJfZ3ZhMmdwYSh2bSwgZ3ZhKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnRcXG4rXFx0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX1RFU1RfQUREUlM7IGkrKykge1xcbitcXHRcXHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xcbitcXHRcXHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xcbitcXHRcXHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcXG4rXFx0ICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXNcXG4rXFx0ICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2VcXG4rXFx0ICogdGFibGUgbGV2ZWwuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0b1xcbitcXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxcbitcXHQgKi9cXG4rXFx0cGd0YWJsZV9ncGEgPSB2bS1cXHUwMDNlbW11LnBnZDtcXG4rXFx0Zm9yIChsZXZlbCA9IHZtLVxcdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFxcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XFxuK1xcdFxcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcXG4rXFx0XFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XFxuK1xcdFxcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cXG4rXFx0dmNwdV9zaWd1c3JfaWdub3JlKCk7XFxuK1xcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcXG4rXFx0XFx0XFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XFxuK1xcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXFxcIiwgcik7XFxuK1xcbitcXHR3aGlsZSAoY291bnQrKyBcXHUwMDNjIE5SX0lURVJBVElPTlMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxcbitcXHRcXHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xcbitcXHRcXHRyID0gX192Y3B1X3J1bih2Y3B1KTtcXG4rXFx0XFx0aWYgKHIgPT0gLTEpXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobmVzdGVkIFxcdTAwMjZcXHUwMDI2IHZjcHVfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgY291bnQgJSAyID09IDApXFxuK1xcdFxcdFxcdHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdFBSSU5UX0lURVIoXFxcIlNhdmUrcmVzdG9yZSBpdGVyYXRpb25zOiBcXFwiLCBjb3VudCk7XFxuK1xcdH1cXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyBcXHUwMDNlIDAsIFxcXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxcXG5cXFwiLCBuZXN0ZWQgPyBcXFwiIChpbiBMMilcXFwiIDogXFxcIlxcXCIsIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcbitcXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcXG4rXFx0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA1LjYzODIyODgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1MzY4NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTgxMWNiYWFhMjlkZWQ3OTA0MDBhM2JmNmFkYjFjYmRlMWZjNzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6MzM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNGFjZTEyNjA2ZTkzN2IuLmM2MWQ1MWEwYzExMmZhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMSw2ICsxMTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGE1NjI3MWMyMzdhZTllLi5jNTUxNDhlYmZlOTM0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuQEAgLTI0MCw0ICsyNDAsNyBAQCBjaGFyICpzdHJkdXBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSwgblxuIFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xuIFxuKyNkZWZpbmUgU1RSKHgpICN4XG4rI2RlZmluZSBYU1RSKHgpIFNUUih4KVxuK1xuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fVEVTVF9VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxNi4uOTgyNjhiZTFhYTViMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICsxMjA3LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpXG4gXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyA9IDA7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCArMTIzOCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA3ZDNhMjdiYzBkODQyYS4uZWM0ZGZkODE3NjM2OWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTM5NiwyNSArMzk2LDI4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbi1cdHU2NCByYXg7XG4tXHR1NjQgcmN4O1xuLVx0dTY0IHJkeDtcbi1cdHU2NCByYng7XG4tXHR1NjQgcnNwO1xuLVx0dTY0IHJicDtcbi1cdHU2NCByc2k7XG4tXHR1NjQgcmRpO1xuLVx0dTY0IHI4O1xuLVx0dTY0IHI5O1xuLVx0dTY0IHIxMDtcbi1cdHU2NCByMTE7XG4tXHR1NjQgcjEyO1xuLVx0dTY0IHIxMztcbi1cdHU2NCByMTQ7XG4tXHR1NjQgcjE1O1xuLX07XG4rI2RlZmluZSBHVUVTVF9SRUdTX1JBWFx0MFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQ1hcdDFcbisjZGVmaW5lIEdVRVNUX1JFR1NfUkRYXHQyXG4rI2RlZmluZSBHVUVTVF9SRUdTX1JCWFx0M1xuKyNkZWZpbmUgR1VFU1RfUkVHU19SU1BcdDRcbisjZGVmaW5lIEdVRVNUX1JFR1NfUkJQXHQ1XG4rI2RlZmluZSBHVUVTVF9SRUdTX1JTSVx0NlxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRElcdDdcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjhcdDhcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjlcdDlcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEwXHQxMFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTFcdDExXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxMlx0MTJcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEzXHQxM1xuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTRcdDE0XG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxNVx0MTVcbisjZGVmaW5lIE5SX0dVRVNUX1JFR1NcdChHVUVTVF9SRUdTX1IxNSArIDEpXG4rXG4rZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xuK1xuKyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00ocmVnLCBpZHgpIFxcXG4rXHRcInhjaGcgJSVcIiAjcmVnIFwiLCBndWVzdF9yZWdzICsgOCAqXCIgWFNUUihpZHgpIFwiXFxuXFx0XCJcbiBcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG5AQCAtNTgyLDYgKzU4NSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJTAsICUlY3IwXCIgOiA6IFwiclwiICh2YWwpIDogXCJtZW1vcnlcIik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbit7XG4rXHR1NjQgY3IyO1xuK1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJSVjcjIsICVbY3IyXVwiXG4rXHRcdFx0ICAgICA6IC8qIG91dHB1dCAqLyBbY3IyXVwiPXJcIihjcjIpKTtcbitcdHJldHVybiBjcjI7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZClcbiB7XG4gXHR1NjQgY3IzO1xuQEAgLTg3Nyw2ICs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpXG4re1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJpbnZscGcgKCUwKVwiIDogOiBcInJcIihhZGRyKSA6IFwibWVtb3J5XCIpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwicmVwOyBub3BcIiA6OjogXCJtZW1vcnlcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA0YmNmZDYwZTNhZWNiMC4uYTgwOGRjMjFjOWYyMTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgsIEdVRVNUX1JFR1NfUkFYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpXG4rXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgKzM4NywyMyBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cbi0gKi9cbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtNDA4LDI4ICs0MTEsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5ZS4uMGQ2NmFmZjA0OTM5YmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbkBAIC0yOSw2ICsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4gXG4rdTY0IGd1ZXN0X3JlZ3NbTlJfR1VFU1RfUkVHU107XG4rXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuIFx0c3dpdGNoICh2ZWN0b3IpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5pbmRleCAxNDQ1Yjg5MDk4NmZkMS4uZDA3ZjEwYjVkYzk2MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCIvZGV2L3NldlwiXG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbiB1NjQgcmZsYWdzO1xuIFxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuQEAgLTEyNSw3ICsxMjQsNyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiBcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cdTAwM2VzdGFjaztcbi1cdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XG4rXHRndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkRJXSA9ICh1NjQpc3ZtO1xuIFxuIFx0aWYgKHN2bS1cdTAwM2VuY3IzX2dwYSkge1xuIFx0XHRjdHJsLVx1MDAzZW1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9OUDtcbkBAIC0xMzcsNDYgKzEzNiw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwieGNoZyAlJXJieCwgZ3Vlc3RfcmVncysweDIwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJicCwgZ3Vlc3RfcmVncysweDMwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXI4LCAgZ3Vlc3RfcmVncysweDQ4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMSwgZ3Vlc3RfcmVncysweDYwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxNCwgZ3Vlc3RfcmVncysweDc4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcblxcdFwiXG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpXG4gXG4gLypcbiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2lcbi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5XG4rICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwidm1sb2FkICVbdm1jYl9ncGFdXFxuXFx0XCJcbi1cdFx0XCJtb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwiXHQvLyByZmxhZ3Ncbi1cdFx0XCJtb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXFxuXFx0XCJcbi1cdFx0XCJtb3YgZ3Vlc3RfcmVncywgJSVyMTVcXG5cXHRcIlx0Ly8gcmF4XG4tXHRcdFwibW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwiXG4tXHRcdExPQURfR1BSX0NcbitcdFx0XCJtb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwiXG4rXHRcdFwibW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4rXHRcdFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwiXG4gXHRcdFwibW92ICUlcjE1LCByZmxhZ3NcXG5cXHRcIlxuLVx0XHRcIm1vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcIlx0Ly8gcmF4XG4tXHRcdFwibW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCJcbitcdFx0XCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuK1x0XHRcIm1vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXG5cXHRcIlxuIFx0XHRcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdDogOiBbdm1jYl0gXCJyXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFwiYVwiICh2bWNiX2dwYSlcbitcdFx0OiBbdm1jYl9yZmxhZ3NdIFwiK21cIiAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4rXHRcdCAgW3ZtY2JfcmF4XSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpLFxuK1x0XHQgIFtndWVzdF9yZWdzX3JheF0gXCIrcm1cIiAoZ3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JBWF0pXG4rXHRcdDogW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpXG4gXHRcdDogXCJyMTVcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5pbmRleCBlN2RkNTc5MTk1OWJhMS4uMzgwNTBjNjBhMDY3MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5AQCAtMTAsMzYgKzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCJyY3hcIiwgXCJyc2lcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsIFwicjExXCJcbi1cbi1cdGFzbSB2b2xhdGlsZShcInB1c2ggJSVyYnBcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJpbiAlW3BvcnRdLCAlJWFsXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnBcXG5cXHRcIlxuLVx0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiLFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4rXHRhc20gdm9sYXRpbGUoXCJpbiAlW3BvcnRdLCAlJWFsXCJcbitcdFx0OiA6IFtwb3J0XSBcImRcIiAoVUNBTExfUElPX1BPUlQpLCBcIkRcIiAodWMpIDogXCJyYXhcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSArMjIsNiBAQFxuIFxuICNkZWZpbmUgU1lOQ19QT1JUXHQweGVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAvKlxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxuICAqIFJlcG9ydHMgU01SQU1fU1RBR0UgdmlhIHBvcnQgSU8sIHRoZW4gZG9lcyBSU00uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Zi4uMjE2MTllNzU4MjcxOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJiNzZlNTZmNzQ0ZTc4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXG5AQCAtMCwwICsxLDMyNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBHT1RPX1BSRVZfTElORVx0XHRcIlxcMDMzW0FcXHJcIlxuKyNkZWZpbmUgUFJJTlRfSVRFUihzLCB4KVx0XHRcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmICh4ID09IDEpXHRcdFx0XHRcdFx0XFxcbitcdFx0cHJpbnRmKHMgXCIlZFxcblwiLCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbitcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHByaW50ZihHT1RPX1BSRVZfTElORSBzIFwiJWRcXG5cIiwgeCk7XHRcdFxcXG4rXHRmZmx1c2goc3Rkb3V0KTtcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIE5SX1RFU1RfQUREUlNcdFx0UFRSU19QRVJfUFRFXG4rI2RlZmluZSBQQVRURVJOXHRcdFx0MHhhYmNkZWZhYmNkZWZhYmNkVUxMXG4rXG4rc3RhdGljIHU2NCBwdGVfcHJlc2VudF9tYXNrO1xuK3N0YXRpYyB1NjQgcHRlX2h1Z2VfbWFzaztcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXHRib29sIGxhNTc7XG4rXG4rXHRsYTU3ID0gISEoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBNTcpO1xuK1x0bGV2ZWwgPSBsYTU3ID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4rXG4rXHRwZ3RhYmxlX3BhID0gZ2V0X2NyMygpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XG4rXHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4rXHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuK1x0XHRHVUVTVF9BU1NFUlQocHRlIFx1MDAyNiBwdGVfcHJlc2VudF9tYXNrKTtcbitcdFx0R1VFU1RfQVNTRVJUKCEocHRlIFx1MDAyNiBwdGVfaHVnZV9tYXNrKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcbitcbitcdCpwdGVwIHw9IHB0ZV9wcmVzZW50X21hc2s7XG4rXHRpbnZscGcoZmF1bHRfYWRkcik7XG4rXG4rXHRndWVzdF9mYXVsdHMrKztcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXG4re1xuK1x0dTY0IHZhZGRyLCB2YWw7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRmb3IgKDs7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBOUl9URVNUX0FERFJTKSAqIFBBR0VfU0laRTtcbitcdFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xuK1xuK1x0XHQvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovXG4rXHRcdHZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7XG4rXG4rXHRcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXG4rXHRcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcdTAwMjY9IH5wdGVfcHJlc2VudF9tYXNrO1xuK1x0XHRpbnZscGcodmFkZHIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuK3tcbitcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cnVuX2d1ZXN0KHN2bS1cdTAwM2V2bWNiLCBzdm0tXHUwMDNldm1jYl9ncGEpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgKyBVRF9WRUNUT1IpKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuK3tcbitcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuK1x0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1xuK1x0LyogSW50ZXJjZXB0IFVELCBpZ25vcmUgYW55ICNQRiAqL1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbitcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpO1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpKTtcbitcbitcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR3aGlsZSAoMSkge1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4rXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuK3tcbitcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcbitcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbitcdGVsc2VcbitcdFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxuK3tcbitcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcbitcdFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcbitcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XG4rc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xuK1x0c2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgYm9vbCB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiAhIShzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGFyc2VfYXJnc19uZXN0ZWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIG5lc3RlZCA9IGZhbHNlO1xuK1x0aW50IG9wdDtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiblwiKSkgIT0gLTEpIHtcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0Y2FzZSAnbic6XG4rXHRcdFx0bmVzdGVkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRwcmludGYoXCJVc2FnZTogJXMgWy1uXVxcblwiLCBhcmd2WzBdKTtcbitcdFx0XHRleGl0KDEpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gbmVzdGVkO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcbitcdGludCByLCBpLCBsZXZlbCwgY291bnQgPSAwO1xuK1x0cHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7XG4rXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRib29sIG5lc3RlZDtcbitcdGd2YV90IGd2YTtcbitcdHU2NCBwdGU7XG4rXG4rXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkpO1xuK1xuK1x0bmVzdGVkID0gcGFyc2VfYXJnc19uZXN0ZWQoYXJnYywgYXJndik7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4rXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgfHwga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuK1x0XHRcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcdTAwMjZndmEpO1xuK1x0XHRlbHNlXG4rXHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4rXHRcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcbitcdH1cbitcbitcdHB0ZV9wcmVzZW50X21hc2sgPSBQVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHRwdGVfaHVnZV9tYXNrID0gUFRFX0hVR0VfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9odWdlX21hc2spO1xuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9URVNUX0FERFJTOyBpKyspIHtcbitcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgKyBpICogZ2V0cGFnZXNpemUoKTtcbitcdFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcbitcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxuK1x0ICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXNcbitcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4rXHQgKiB0YWJsZSBsZXZlbC5cbitcdCAqXG4rXHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbitcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXG4rXHQgKi9cbitcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbitcdGZvciAobGV2ZWwgPSB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0dmlydF9tYXAodm0sIHBndGFibGVfZ3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbitcdFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xuK1x0XHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWChURVNUX01FTV9CQVNFX0dWQSwgbGV2ZWwpXTtcbitcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbitcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuK1x0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sXG4rXHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4rXHRURVNUX0FTU0VSVCghciwgXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWRcIiwgcik7XG4rXG4rXHR3aGlsZSAoY291bnQrKyBcdTAwM2MgTlJfSVRFUkFUSU9OUykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRpZiAociA9PSAtMSlcbitcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuK1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcbitcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbitcdFx0aWYgKCFyKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4rXHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjYgdmNwdV9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcdTAwMjZcdTAwMjYgY291bnQgJSAyID09IDApXG4rXHRcdFx0dmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpO1xuK1xuK1x0XHRrdm1fdm1fcmVsZWFzZSh2bSk7XG4rXHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbitcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4rXHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4rXHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4rXG4rXHRcdFBSSU5UX0lURVIoXCJTYXZlK3Jlc3RvcmUgaXRlcmF0aW9uczogXCIsIGNvdW50KTtcbitcdH1cbitcbitcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XG4rXHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwiTm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkXCIpO1xuK1x0cHJfaW5mbyhcIkd1ZXN0IHBhZ2UgZmF1bHRzJXM6ICVsdVxcblwiLCBuZXN0ZWQgPyBcIiAoaW4gTDIpXCIgOiBcIlwiLCBndWVzdF9mYXVsdHMpO1xuK1xuK1x0cHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7XG4rXHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQyMDozMzowNS42MzgyMzI2NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTUzNjYxMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYWxsIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkuIFdhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBkaWZmLiBZZXAsIGl0J3MgYWxsIGNvbnRhaW5lZCB0aGVyZTogYE1ha2VmaWxlLmt2bWAsIHNvbWUgaW5jbHVkZSBmaWxlcywgYW5kIGEgZmV3IHNvdXJjZSBmaWxlcyBmb3IgdmFyaW91cyB0ZXN0cy4gQWxyaWdodCwgbG9va3MgbGlrZSBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBzbW1fdGVzdC5jYCwgYW5kIGBzdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuY2AgYXJlIGFtb25nIHRoZSBtb2RpZmllZCB0ZXN0cy5cblxuTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCBcIlRoaXMgaXMgYSBzZWxmdGVzdCBwYXRjaC5cIiBJdCBpc24ndCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFueXRoaW5nIGZ1bmRhbWVudGFsIHRvIGFuIGFyY2hpdGVjdHVyZS4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IHVzZXJzcGFjZSB0ZXN0cywgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBLVk0gc3Vic3lzdGVtLiBUaGUgcGF0Y2ggZG9lc24ndCBsb29rIGxpa2UgaXQgdG91Y2hlcyB0aGUgdW5kZXJseWluZyBrZXJuZWwgY29kZSB0aGF0ICpuZWVkcyogZnV6emluZy5cblxuSSdtIHJlbWVtYmVyaW5nIHRoZSBpbnN0cnVjdGlvbnM6IFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaGFzIG9ubHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBLY29uZmlnIGNoYW5nZXMsIGNvbW1lbnQgY2hhbmdlcywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY2hhbmdlcyB0byBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG9uJ3QgYWZmZWN0IGV4ZWN1dGlvbiBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGlzIGxvb2tzIGxpa2UgYSBwZXJmZWN0IGZpdCwgcmlnaHQ/IEZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRlc3RzIHNlZW1zIGNvdW50ZXItaW50dWl0aXZlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIHBhdGggYmFzZWQgb24gbXkgYXNzZXNzbWVudCBvZiB0aGUgZGlmZi5cblxuSSBzaG91bGQgdmVyaWZ5IHRob3VnaCwgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgKm5vKiBvdGhlciBjaGFuZ2VzIGhpZGluZyBhbnl3aGVyZS4gTm8sIGV2ZXJ5dGhpbmcgc3RpbGwgc3RhcnRzIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBTbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQxLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6MzM6MTMuNTkxODk1NDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmdpn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 20:26:21 +0000 UTC FinishedAt: 2026-06-29 20:33:14 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOTgxMWNiYWFhMjlkZWQ3OTA0MDBhM2JmNmFkYjFjYmRlMWZjNzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6MzM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDRhY2UxMjYwNmU5MzdiLi5jNjFkNTFhMGMxMTJmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21tX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdGF0ZV90ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1faW50X2N0bF90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuaW5kZXggYTU2MjcxYzIzN2FlOWUuLmM1NTE0OGViZmU5MzRkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjQwLDQgJiM0MzsyNDAsNyBAQCBjaGFyICpzdHJkdXBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSwgblxuIFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xuIFxuJiM0MzsjZGVmaW5lIFNUUih4KSAjeFxuJiM0MzsjZGVmaW5lIFhTVFIoeCkgU1RSKHgpXG4mIzQzO1xuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fVEVTVF9VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxNi4uOTgyNjhiZTFhYTViMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyNDYsMzAgJiM0MzsxMjM4LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpXG4gXHQvKiBIT1NUX1JTUCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0hPU1RfUE9JTlRFUjtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJSVyYnA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDtcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IDdkM2EyN2JjMGQ4NDJhLi5lYzRkZmQ4MTc2MzY5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMzk2LDI1ICYjNDM7Mzk2LDI4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbi1cdHU2NCByYXg7XG4tXHR1NjQgcmN4O1xuLVx0dTY0IHJkeDtcbi1cdHU2NCByYng7XG4tXHR1NjQgcnNwO1xuLVx0dTY0IHJicDtcbi1cdHU2NCByc2k7XG4tXHR1NjQgcmRpO1xuLVx0dTY0IHI4O1xuLVx0dTY0IHI5O1xuLVx0dTY0IHIxMDtcbi1cdHU2NCByMTE7XG4tXHR1NjQgcjEyO1xuLVx0dTY0IHIxMztcbi1cdHU2NCByMTQ7XG4tXHR1NjQgcjE1O1xuLX07XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQVhcdDBcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JDWFx0MVxuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUkRYXHQyXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlhcdDNcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JTUFx0NFxuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUkJQXHQ1XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU0lcdDZcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1JESVx0N1xuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjhcdDhcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1I5XHQ5XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTBcdDEwXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTFcdDExXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTJcdDEyXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTNcdDEzXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTRcdDE0XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTVcdDE1XG4mIzQzOyNkZWZpbmUgTlJfR1VFU1RfUkVHU1x0KEdVRVNUX1JFR1NfUjE1ICYjNDM7IDEpXG4mIzQzO1xuJiM0MztleHRlcm4gdTY0IGd1ZXN0X3JlZ3NbTlJfR1VFU1RfUkVHU107XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJlZywgaWR4KSBcXFxuJiM0MztcdFwmIzM0O3hjaGcgJSVcJiMzNDsgI3JlZyBcJiMzNDssIGd1ZXN0X3JlZ3MgJiM0MzsgOCAqXCYjMzQ7IFhTVFIoaWR4KSBcJiMzNDtcXG5cXHRcJiMzNDtcbiBcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG5AQCAtNTgyLDYgJiM0Mzs1ODUsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbClcbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O21vdiAlMCwgJSVjcjBcJiMzNDsgOiA6IFwmIzM0O3JcJiMzNDsgKHZhbCkgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNyMjtcbiYjNDM7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bW92ICUlY3IyLCAlW2NyMl1cJiMzNDtcbiYjNDM7XHRcdFx0ICAgICA6IC8qIG91dHB1dCAqLyBbY3IyXVwmIzM0Oz1yXCYjMzQ7KGNyMikpO1xuJiM0MztcdHJldHVybiBjcjI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxuIHtcbiBcdHU2NCBjcjM7XG5AQCAtODc3LDYgJiM0Mzs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7aW52bHBnICglMClcJiMzNDsgOiA6IFwmIzM0O3JcJiMzNDsoYWRkcikgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCYjMzQ7cmVwOyBub3BcJiMzNDsgOjo6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA0YmNmZDYwZTNhZWNiMC4uYTgwOGRjMjFjOWYyMTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICYjNDM7MjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcdHU2NCB2YWx1ZTtcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xuIFxuJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgsIEdVRVNUX1JFR1NfUkFYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCwgR1VFU1RfUkVHU19SQlgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4LCBHVUVTVF9SRUdTX1JDWCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCwgR1VFU1RfUkVHU19SQlApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpLCBHVUVTVF9SRUdTX1JTSSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4LCAgR1VFU1RfUkVHU19SOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjksICBHVUVTVF9SRUdTX1I5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSwgR1VFU1RfUkVHU19SMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyLCBHVUVTVF9SRUdTX1IxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCwgR1VFU1RfUkVHU19SMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1LCBHVUVTVF9SRUdTX1IxNSlcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7ZXZtY3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICYjNDM7MzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgJiM0MzszODcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTQwOCwyOCAmIzQzOzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbmluZGV4IGVmNTZkY2VmZTAxMTllLi4wZDY2YWZmMDQ5MzliYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTI5LDYgJiM0MzsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4gXG4mIzQzO3U2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xuJiM0MztcbiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcilcbiB7XG4gXHRzd2l0Y2ggKHZlY3Rvcikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuQEAgLTEzLDcgJiM0MzsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCYjMzQ7L2Rldi9zZXZcJiMzNDtcbiBcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xuIHU2NCByZmxhZ3M7XG4gXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXG5AQCAtMTI1LDcgJiM0MzsxMjQsNyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiBcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cdTAwM2VzdGFjaztcbi1cdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XG4mIzQzO1x0Z3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JESV0gPSAodTY0KXN2bTtcbiBcbiBcdGlmIChzdm0tXHUwMDNlbmNyM19ncGEpIHtcbiBcdFx0Y3RybC1cdTAwM2VtaXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfTlA7XG5AQCAtMTM3LDQ2ICYjNDM7MTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxuICAqIHNhdmUvcmVzdG9yZSA2NC1iaXQgZ2VuZXJhbCByZWdpc3RlcnMgZXhjZXB0IHJheCwgcmlwLCByc3BcbiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlXG4gICovXG4tI2RlZmluZSBTQVZFX0dQUl9DXHRcdFx0XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MmIzQzOzB4MTBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmR4LCBndWVzdF9yZWdzJiM0MzsweDE4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MmIzQzOzB4MzhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmRpLCBndWVzdF9yZWdzJiM0MzsweDQwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MmIzQzOzB4NTBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEwLCBndWVzdF9yZWdzJiM0MzsweDU4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MmIzQzOzB4NjhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEzLCBndWVzdF9yZWdzJiM0MzsweDcwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MmIzQzOzB4ODBcXG5cXHRcJiMzNDtcbi1cbi0jZGVmaW5lIExPQURfR1BSX0MgICAgICBTQVZFX0dQUl9DXG4mIzQzOyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCwgR1VFU1RfUkVHU19SQlgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4LCBHVUVTVF9SRUdTX1JDWCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCwgR1VFU1RfUkVHU19SQlApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpLCBHVUVTVF9SRUdTX1JTSSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4LCAgR1VFU1RfUkVHU19SOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjksICBHVUVTVF9SRUdTX1I5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSwgR1VFU1RfUkVHU19SMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyLCBHVUVTVF9SRUdTX1IxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCwgR1VFU1RfUkVHU19SMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1LCBHVUVTVF9SRUdTX1IxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwmIzM0O3ZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcJiMzNDtcbi1cdFx0XCYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRMT0FEX0dQUl9DXG4mIzQzO1x0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwmIzM0O1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcJiMzNDt2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJmbGFnc1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XCYjMzQ7bW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwmIzM0O1xuIFx0XHRcJiMzNDttb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXG5cXHRcJiMzNDtcbiBcdFx0XCYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdDogOiBbdm1jYl0gXCYjMzQ7clwmIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpXG4mIzQzO1x0XHQ6IFt2bWNiX3JmbGFnc10gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmZsYWdzKSxcbiYjNDM7XHRcdCAgW3ZtY2JfcmF4XSBcJiMzNDsmIzQzO21cJiMzNDsgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpLFxuJiM0MztcdFx0ICBbZ3Vlc3RfcmVnc19yYXhdIFwmIzM0OyYjNDM7cm1cJiMzNDsgKGd1ZXN0X3JlZ3NbR1VFU1RfUkVHU19SQVhdKVxuJiM0MztcdFx0OiBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKVxuIFx0XHQ6IFwmIzM0O3IxNVwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbmluZGV4IGU3ZGQ1NzkxOTU5YmExLi4zODA1MGM2MGEwNjcwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiAmIzQzOzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCYjMzQ7cmN4XCYjMzQ7LCBcJiMzNDtyc2lcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDtcbi1cbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtwdXNoICUlcmJwXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEzXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O2luICVbcG9ydF0sICUlYWxcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZGlcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTJcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTVcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7LFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICVbcG9ydF0sICUlYWxcJiMzNDtcbiYjNDM7XHRcdDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoVUNBTExfUElPX1BPUlQpLCBcJiMzNDtEXCYjMzQ7ICh1YykgOiBcJiMzNDtyYXhcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxuICNkZWZpbmUgRE9ORSAweGZmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmI3NmU1NmY3NDRlNzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDMyNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OU1x0XHQ1MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR09UT19QUkVWX0xJTkVcdFx0XCYjMzQ7XFwwMzNbQVxcclwmIzM0O1xuJiM0MzsjZGVmaW5lIFBSSU5UX0lURVIocywgeClcdFx0XHRcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmICh4ID09IDEpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHByaW50ZihzIFwmIzM0OyVkXFxuXCYjMzQ7LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHJpbnRmKEdPVE9fUFJFVl9MSU5FIHMgXCYjMzQ7JWRcXG5cJiMzNDssIHgpO1x0XHRcXFxuJiM0MztcdGZmbHVzaChzdGRvdXQpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBUUlNfUEVSX1BURVx0XHQ1MTJcbiYjNDM7I2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRFU1RfTUVNX0JBU0VfR1ZBXHQweGMwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBOUl9URVNUX0FERFJTXHRcdFBUUlNfUEVSX1BURVxuJiM0MzsjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgcHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7c3RhdGljIHU2NCBwdGVfaHVnZV9tYXNrO1xuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcbiYjNDM7e1xuJiM0MztcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4mIzQzO1x0dTY0ICpwZ3RhYmxlO1xuJiM0MztcdGludCBsZXZlbDtcbiYjNDM7XHRib29sIGxhNTc7XG4mIzQzO1xuJiM0MztcdGxhNTcgPSAhIShnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1Nyk7XG4mIzQzO1x0bGV2ZWwgPSBsYTU3ID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4mIzQzO1xuJiM0MztcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbiYjNDM7XHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKHB0ZSBcdTAwMjYgcHRlX3ByZXNlbnRfbWFzayk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlQoIShwdGUgXHUwMDI2IHB0ZV9odWdlX21hc2spKTtcbiYjNDM7XHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIFBHX0xFVkVMXzRLKV07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3BmX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1NjQgZmF1bHRfYWRkcjtcbiYjNDM7XHR1NjQgKnB0ZXA7XG4mIzQzO1xuJiM0MztcdGZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xuJiM0MztcbiYjNDM7XHRwdGVwID0gZ3Vlc3RfZ2V0X3B0ZShmYXVsdF9hZGRyKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHRlcCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcbiYjNDM7XG4mIzQzO1x0KnB0ZXAgfD0gcHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7XHRpbnZscGcoZmF1bHRfYWRkcik7XG4mIzQzO1xuJiM0MztcdGd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhZGRyLCB2YWw7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgTlJfVEVTVF9BRERSUykgKiBQQUdFX1NJWkU7XG4mIzQzO1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xuJiM0MztcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbiYjNDM7XHRcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcdTAwMjY9IH5wdGVfcHJlc2VudF9tYXNrO1xuJiM0MztcdFx0aW52bHBnKHZhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4mIzQzO3tcbiYjNDM7XHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gQklUKFVEX1ZFQ1RPUik7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRydW5fZ3Vlc3Qoc3ZtLVx1MDAzZXZtY2IsIHN2bS1cdTAwM2V2bWNiX2dwYSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZjcHVfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoc3RhdGUtXHUwMDNlbmVzdGVkLmZsYWdzIFx1MDAyNiBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3N0YXRlX2luamVjdF91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkID0gZmFsc2U7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbl9oYXNfcGF5bG9hZCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwYXJzZV9hcmdzX25lc3RlZChpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBuZXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgb3B0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDtuXCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAob3B0KSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7biYjMzk7OlxuJiM0MztcdFx0XHRuZXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDtVc2FnZTogJXMgWy1uXVxcblwmIzM0OywgYXJndlswXSk7XG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmVzdGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xuJiM0MztcdGludCByLCBpLCBsZXZlbCwgY291bnQgPSAwO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Ym9vbCBuZXN0ZWQ7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSk7XG4mIzQzO1xuJiM0MztcdG5lc3RlZCA9IHBhcnNlX2FyZ3NfbmVzdGVkKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobmVzdGVkKSB7XG4mIzQzO1x0XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3N2bSh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4mIzQzO1x0XHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuJiM0MztcdHB0ZV9odWdlX21hc2sgPSBQVEVfSFVHRV9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBwdGVfaHVnZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuJiM0MztcdGd2YSA9IHZtX2FsbG9jX3BhZ2Uodm0pO1xuJiM0MztcdCoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjtcbiYjNDM7XHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuJiM0MztcdCAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9URVNUX0FERFJTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgaSAqIGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuJiM0MztcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbiYjNDM7XHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xuJiM0MztcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4mIzQzO1x0ICogdGFibGUgbGV2ZWwuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbiYjNDM7XHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbiYjNDM7XHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbiYjNDM7XHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xuJiM0MztcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbiYjNDM7XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFwmIzM0Oywgcik7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjb3VudCYjNDM7JiM0MzsgXHUwMDNjIE5SX0lURVJBVElPTlMpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4mIzQzO1x0XHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4mIzQzO1x0XHRyID0gX192Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRcdGlmIChyID09IC0xKVxuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuJiM0MztcdFx0dmNwdV9zaWd1c3JfaWdub3JlKCk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbiYjNDM7XHRcdGlmICghcikge1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4mIzQzO1x0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHZDUFUgaXMgaW4gZ3Vlc3QgbW9kZSwgaW5qZWN0IGEgI1VEIHRvIHRyaWdnZXIgYW5cbiYjNDM7XHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobmVzdGVkIFx1MDAyNlx1MDAyNiB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpIFx1MDAyNlx1MDAyNiBjb3VudCAlIDIgPT0gMClcbiYjNDM7XHRcdFx0dmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbiYjNDM7XHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbiYjNDM7XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbiYjNDM7XHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0UFJJTlRfSVRFUihcJiMzNDtTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6IFwmIzM0OywgY291bnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwmIzM0O05vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cJiMzNDssIG5lc3RlZCA/IFwmIzM0OyAoaW4gTDIpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBndWVzdF9mYXVsdHMpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk4MTFjYmFhYTI5ZGVkNzkwNDAwYTNiZjZhZGIxY2JkZTFmYzcwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDIwOjMzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggNGFjZTEyNjA2ZTkzN2IuLmM2MWQ1MWEwYzExMmZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X3NyZWdzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21tX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0YXRlX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV92bWNhbGxfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc3ZtX2ludF9jdGxfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaAppbmRleCBhNTYyNzFjMjM3YWU5ZS4uYzU1MTQ4ZWJmZTkzNGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0yNDAsNCAmIzQzOzI0MCw3IEBAIGNoYXIgKnN0cmR1cF9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpLCBuCiAKIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpOwogCiYjNDM7I2RlZmluZSBTVFIoeCkgI3gKJiM0MzsjZGVmaW5lIFhTVFIoeCkgU1RSKHgpCiYjNDM7CiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX1RFU1RfVVRJTF9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IGJlNzliZGEwMjRiZjE2Li45ODI2OGJlMWFhNWIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKQEAgLTEyMDcsMzAgJiM0MzsxMjA3LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpCiAKIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgPSAwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNDYsMzAgJiM0MzsxMjM4LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpCiAJLyogSE9TVF9SU1AgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAppbmRleCA3ZDNhMjdiYzBkODQyYS4uZWM0ZGZkODE3NjM2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTM5NiwyNSAmIzQzOzM5NiwyOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheCkKICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpCQkoKHB0ZSkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLKQogI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiAKLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovCi1zdHJ1Y3QgZ3ByNjRfcmVncyB7Ci0JdTY0IHJheDsKLQl1NjQgcmN4OwotCXU2NCByZHg7Ci0JdTY0IHJieDsKLQl1NjQgcnNwOwotCXU2NCByYnA7Ci0JdTY0IHJzaTsKLQl1NjQgcmRpOwotCXU2NCByODsKLQl1NjQgcjk7Ci0JdTY0IHIxMDsKLQl1NjQgcjExOwotCXU2NCByMTI7Ci0JdTY0IHIxMzsKLQl1NjQgcjE0OwotCXU2NCByMTU7Ci19OwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQVgJMAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQ1gJMQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SRFgJMgomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlgJMwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU1AJNAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SQlAJNQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SU0kJNgomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SREkJNwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SOAk4CiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1I5CTkKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjEwCTEwCiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1IxMQkxMQomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTIJMTIKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfUjEzCTEzCiYjNDM7I2RlZmluZSBHVUVTVF9SRUdTX1IxNAkxNAomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19SMTUJMTUKJiM0MzsjZGVmaW5lIE5SX0dVRVNUX1JFR1MJKEdVRVNUX1JFR1NfUjE1ICYjNDM7IDEpCiYjNDM7CiYjNDM7ZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdOwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00ocmVnLCBpZHgpIFwKJiM0MzsJJiMzNDt4Y2hnICUlJiMzNDsgI3JlZyAmIzM0OywgZ3Vlc3RfcmVncyAmIzQzOyA4IComIzM0OyBYU1RSKGlkeCkgJiMzNDtcblx0JiMzNDsKIAogc3RydWN0IGRlc2M2NCB7CiAJdTE2IGxpbWl0MDsKQEAgLTU4Miw2ICYjNDM7NTg1LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDttb3YgJTAsICUlY3IwJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgY3IyOwomIzQzOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlJWNyMiwgJVtjcjJdJiMzNDsKJiM0MzsJCQkgICAgIDogLyogb3V0cHV0ICovIFtjcjJdJiMzNDs9ciYjMzQ7KGNyMikpOwomIzQzOwlyZXR1cm4gY3IyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZCkKIHsKIAl1NjQgY3IzOwpAQCAtODc3LDYgJiM0Mzs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7aW52bHBnICglMCkmIzM0OyA6IDogJiMzNDtyJiMzNDsoYWRkcikgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCYjMzQ7cmVwOyBub3AmIzM0OyA6OjogJiMzNDttZW1vcnkmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggNGJjZmQ2MGUzYWVjYjAuLmE4MDhkYzIxYzlmMjEwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0yOTAsNiAmIzQzOzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7CiAJdTY0IHZhbHVlOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIAomIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCwgR1VFU1RfUkVHU19SQVgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KQomIzQzOwogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAogc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCkBAIC0zNjMsOSAmIzQzOzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpCiAJcmV0dXJuIHZhbHVlOwogfQogCi0vKgotICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzczLDM0ICYjNDM7Mzg3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiAJaWYgKGVuYWJsZV9ldm1jcykKIAkJcmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAogCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTQwOCwyOCAmIzQzOzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bXJlc3VtZSgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1yZXN1bWU7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKIAkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZWY1NmRjZWZlMDExOWUuLjBkNjZhZmYwNDkzOWJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwpAQCAtMjksNiAmIzQzOzI5LDggQEAgYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTsKIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkOwogdTY0IGd1ZXN0X3RzY19raHo7CiAKJiM0Mzt1NjQgZ3Vlc3RfcmVnc1tOUl9HVUVTVF9SRUdTXTsKJiM0MzsKIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKQogewogCXN3aXRjaCAodmVjdG9yKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAKICNkZWZpbmUgU0VWX0RFVl9QQVRIICYjMzQ7L2Rldi9zZXYmIzM0OwogCi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzOwogdTY0IHJmbGFnczsKIAogLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuCkBAIC0xMjUsNyAmIzQzOzEyNCw3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogCiAJdm1jYi0mZ3Q7c2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDsKIAl2bWNiLSZndDtzYXZlLnJzcCA9ICh1NjQpc3ZtLSZndDtzdGFjazsKLQlndWVzdF9yZWdzLnJkaSA9ICh1NjQpc3ZtOwomIzQzOwlndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkRJXSA9ICh1NjQpc3ZtOwogCiAJaWYgKHN2bS0mZ3Q7bmNyM19ncGEpIHsKIAkJY3RybC0mZ3Q7bWlzY19jdGwgfD0gU1ZNX01JU0NfRU5BQkxFX05QOwpAQCAtMTM3LDQ2ICYjNDM7MTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcAogICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZQogICovCi0jZGVmaW5lIFNBVkVfR1BSX0MJCQkJXAotCSYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXG5cdCYjMzQ7Ci0KLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0MKJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngsIEdVRVNUX1JFR1NfUkJYKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmR4LCBHVUVTVF9SRUdTX1JEWCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnAsIEdVRVNUX1JFR1NfUkJQKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmRpLCBHVUVTVF9SRUdTX1JESSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCwgIEdVRVNUX1JFR1NfUjgpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEwLCBHVUVTVF9SRUdTX1IxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEsIEdVRVNUX1JFR1NfUjExKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEzLCBHVUVTVF9SRUdTX1IxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQsIEdVRVNUX1JFR1NfUjE0KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpCiAKIC8qCiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2kKLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHkKJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseQogICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuCiAgKi8KIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpCiB7CiAJYXNtIHZvbGF0aWxlICgKIAkJJiMzNDt2bWxvYWQgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByZmxhZ3MKLQkJJiMzNDttb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcblx0JiMzNDsKLQkJTE9BRF9HUFJfQwomIzQzOwkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlW2d1ZXN0X3JlZ3NfcmF4XSwgJSVyMTVcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQogCQkmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCVNBVkVfR1BSX0MKLQkJJiMzNDttb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJmbGFncwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XG5cdCYjMzQ7CiAJCSYjMzQ7bW92ICUlcjE1LCByZmxhZ3Ncblx0JiMzNDsKLQkJJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JheF0sICUlcjE1XG5cdCYjMzQ7CS8vIHJheAomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbZ3Vlc3RfcmVnc19yYXhdXG5cdCYjMzQ7CiAJCSYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCTogOiBbdm1jYl0gJiMzNDtyJiMzNDsgKHZtY2IpLCBbdm1jYl9ncGFdICYjMzQ7YSYjMzQ7ICh2bWNiX2dwYSkKJiM0MzsJCTogW3ZtY2JfcmZsYWdzXSAmIzM0OyYjNDM7bSYjMzQ7ICh2bWNiLSZndDtzYXZlLnJmbGFncyksCiYjNDM7CQkgIFt2bWNiX3JheF0gJiMzNDsmIzQzO20mIzM0OyAodm1jYi0mZ3Q7c2F2ZS5yYXgpLAomIzQzOwkJICBbZ3Vlc3RfcmVnc19yYXhdICYjMzQ7JiM0MztybSYjMzQ7IChndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkFYXSkKJiM0MzsJCTogW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpCiAJCTogJiMzNDtyMTUmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCmluZGV4IGU3ZGQ1NzkxOTU5YmExLi4zODA1MGM2MGEwNjcwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCkBAIC0xMCwzNiAmIzQzOzEwLDggQEAKIAogdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKQogewotCS8qCi0JICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWAotCSAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuCi0JICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZQotCSAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQCi0JICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlCi0JICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqCi0JICovCi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSwlcCi0JJiMzNDtyY3gmIzM0OywgJiMzNDtyc2kmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDsKLQotCWFzbSB2b2xhdGlsZSgmIzM0O3B1c2ggJSVyYnBcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTVcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTJcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZGlcblx0JiMzNDsKLQkJICAgICAmIzM0O2luICVbcG9ydF0sICUlYWxcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmR4XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEzXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmJwXG5cdCYjMzQ7Ci0JCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDssCi0JCSAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJVtwb3J0XSwgJSVhbCYjMzQ7CiYjNDM7CQk6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksICYjMzQ7RCYjMzQ7ICh1YykgOiAmIzM0O3JheCYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAogdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtMjIsOSAmIzQzOzIyLDYgQEAKIAogI2RlZmluZSBTWU5DX1BPUlQJMHhlCiAKLSNkZWZpbmUgU1RSKHgpICN4Ci0jZGVmaW5lIFhTVFIocykgU1RSKHMpCi0KIC8qCiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS4KICAqIFJlcG9ydHMgU01SQU1fU1RBR0UgdmlhIHBvcnQgSU8sIHRoZW4gZG9lcyBSU00uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCkBAIC0yMiw5ICYjNDM7MjIsNiBAQAogI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwCiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmUKIAotI2RlZmluZSBTVFIoeCkgI3gKLSNkZWZpbmUgWFNUUihzKSBTVFIocykKLQogI2RlZmluZSBTWU5DX1BPUlQgMHhlCiAjZGVmaW5lIERPTkUgMHhmZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmI3NmU1NmY3NDRlNzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDMyNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OUwkJNTAwCiYjNDM7CiYjNDM7I2RlZmluZSBHT1RPX1BSRVZfTElORQkJJiMzNDtcMDMzW0FcciYjMzQ7CiYjNDM7I2RlZmluZSBQUklOVF9JVEVSKHMsIHgpCQkJCQlcCiYjNDM7ZG8gewkJCQkJCQkJXAomIzQzOwlpZiAoeCA9PSAxKQkJCQkJCVwKJiM0MzsJCXByaW50ZihzICYjMzQ7JWRcbiYjMzQ7LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAomIzQzOwllbHNlCQkJCQkJCVwKJiM0MzsJCXByaW50ZihHT1RPX1BSRVZfTElORSBzICYjMzQ7JWRcbiYjMzQ7LCB4KTsJCVwKJiM0MzsJZmZsdXNoKHN0ZG91dCk7CQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7I2RlZmluZSBQVFJTX1BFUl9QVEUJCTUxMgomIzQzOyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbCkJKCgodmFkZHIpICZndDsmZ3Q7IFBHX0xFVkVMX1NISUZUKGxldmVsKSkgJmFtcDsgKFBUUlNfUEVSX1BURSAtIDEpKQomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkEJMHhjMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQJMHhkMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgTlJfVEVTVF9BRERSUwkJUFRSU19QRVJfUFRFCiYjNDM7I2RlZmluZSBQQVRURVJOCQkJMHhhYmNkZWZhYmNkZWZhYmNkVUxMCiYjNDM7CiYjNDM7c3RhdGljIHU2NCBwdGVfcHJlc2VudF9tYXNrOwomIzQzO3N0YXRpYyB1NjQgcHRlX2h1Z2VfbWFzazsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzOwomIzQzOwomIzQzO3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKQomIzQzO3sKJiM0MzsJdTY0IHBndGFibGVfcGEsIHB0ZTsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CWJvb2wgbGE1NzsKJiM0MzsKJiM0MzsJbGE1NyA9ICEhKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBNTcpOwomIzQzOwlsZXZlbCA9IGxhNTcgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRzsKJiM0MzsKJiM0MzsJcGd0YWJsZV9wYSA9IGdldF9jcjMoKSAmYW1wOyBQSFlTSUNBTF9QQUdFX01BU0s7CiYjNDM7CWZvciAoOyBsZXZlbCAmZ3Q7IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7CiYjNDM7CQlwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTsKJiM0MzsJCXB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldOwomIzQzOwkJR1VFU1RfQVNTRVJUKHB0ZSAmYW1wOyBwdGVfcHJlc2VudF9tYXNrKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghKHB0ZSAmYW1wOyBwdGVfaHVnZV9tYXNrKSk7CiYjNDM7CQlwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwlyZXR1cm4gJmFtcDtwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXU2NCBmYXVsdF9hZGRyOwomIzQzOwl1NjQgKnB0ZXA7CiYjNDM7CiYjNDM7CWZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTsKJiM0MzsKJiM0MzsJcHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7CiYjNDM7CUdVRVNUX0FTU0VSVChwdGVwKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCEoKnB0ZXAgJmFtcDsgcHRlX3ByZXNlbnRfbWFzaykpOwomIzQzOwomIzQzOwkqcHRlcCB8PSBwdGVfcHJlc2VudF9tYXNrOwomIzQzOwlpbnZscGcoZmF1bHRfYWRkcik7CiYjNDM7CiYjNDM7CWd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJdTY0IHZhZGRyLCB2YWw7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZm9yICg7OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyAoaSAlIE5SX1RFU1RfQUREUlMpICogUEFHRV9TSVpFOwomIzQzOwkJV1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpOwomIzQzOwomIzQzOwkJLyogUmVhZCB0byB0cmlnZ2VyICNQRiAqLwomIzQzOwkJdmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7CiYjNDM7CiYjNDM7CQkvKiBDbGVhciB0aGUgcHJlc2VudCBiaXQgYWdhaW4gc28gaXQgZmF1bHRzIG5leHQgdGltZSAqLwomIzQzOwkJKmd1ZXN0X2dldF9wdGUodmFkZHIpICZhbXA7PSB+cHRlX3ByZXNlbnRfbWFzazsKJiM0MzsJCWludmxwZyh2YWRkcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKJiM0Mzt7CiYjNDM7CWdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJ1bl9ndWVzdChzdm0tJmd0O3ZtY2IsIHN2bS0mZ3Q7dm1jYl9ncGEpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3sKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwomIzQzOwkvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovCiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSB8IEJJVChQRl9WRUNUT1IpKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSAmYW1wOyAweGZmLCBVRF9WRUNUT1IpOwomIzQzOwkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKJiM0Mzt7CiYjNDM7CWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkKJiM0MzsJCWwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCWwxX3ZteF9jb2RlKHRlc3RfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzaWd1c3JfdGhyZWFkX2ZuKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKJiM0MzsJCXB0aHJlYWRfa2lsbCh2Y3B1X3RocmVhZCwgU0lHVVNSMSk7CiYjNDM7CQl1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9CiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpCiYjNDM7ewomIzQzOwlzYS5zYV9oYW5kbGVyID0gZHVtbXlfc2lnbmFsX2hhbmRsZXI7CiYjNDM7CXNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpCiYjNDM7ewomIzQzOwlzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKJiM0MzsJc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHN0YXRlLSZndDtuZXN0ZWQuZmxhZ3MgJmFtcDsgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBhcnNlX2FyZ3NfbmVzdGVkKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwlib29sIG5lc3RlZCA9IGZhbHNlOwomIzQzOwlpbnQgb3B0OwomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O24mIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzoKJiM0MzsJCQluZXN0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlwcmludGYoJiMzNDtVc2FnZTogJXMgWy1uXVxuJiMzNDssIGFyZ3ZbMF0pOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5lc3RlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTsKJiM0MzsJaW50IHIsIGksIGxldmVsLCBjb3VudCA9IDA7CiYjNDM7CXB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkOwomIzQzOwlncGFfdCBncGEsIHBndGFibGVfZ3BhOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJYm9vbCBuZXN0ZWQ7CiYjNDM7CWd2YV90IGd2YTsKJiM0MzsJdTY0IHB0ZTsKJiM0MzsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQpKTsKJiM0MzsKJiM0MzsJbmVzdGVkID0gcGFyc2VfYXJnc19uZXN0ZWQoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7CiYjNDM7CXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpOwomIzQzOwomIzQzOwlpZiAobmVzdGVkKSB7CiYjNDM7CQlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsJCWlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKQomIzQzOwkJCXZjcHVfYWxsb2Nfc3ZtKHZtLCAmYW1wO2d2YSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdmNwdV9hbGxvY192bXgodm0sICZhbXA7Z3ZhKTsKJiM0MzsJCXZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSygmYW1wO3ZtLSZndDttbXUpOwomIzQzOwlwdGVfaHVnZV9tYXNrID0gUFRFX0hVR0VfTUFTSygmYW1wO3ZtLSZndDttbXUpOwomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgcHRlX3ByZXNlbnRfbWFzayk7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBwdGVfaHVnZV9tYXNrKTsKJiM0MzsKJiM0MzsJLyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqLwomIzQzOwlndmEgPSB2bV9hbGxvY19wYWdlKHZtKTsKJiM0MzsJKih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOOwomIzQzOwlncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnQKJiM0MzsJICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX1RFU1RfQUREUlM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gfnB0ZV9wcmVzZW50X21hc2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGUKJiM0MzsJICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXMKJiM0MzsJICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2UKJiM0MzsJICogdGFibGUgbGV2ZWwuCiYjNDM7CSAqCiYjNDM7CSAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0bwomIzQzOwkgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLgomIzQzOwkgKi8KJiM0MzsJcGd0YWJsZV9ncGEgPSB2bS0mZ3Q7bW11LnBnZDsKJiM0MzsJZm9yIChsZXZlbCA9IHZtLSZndDttbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsICZndDs9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7CiYjNDM7CQl2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTsKJiM0MzsJCXBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTsKJiM0MzsJCXB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldOwomIzQzOwkJcGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovCiYjNDM7CXZjcHVfc2lndXNyX2lnbm9yZSgpOwomIzQzOwlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDtzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLAomIzQzOwkJCSAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpOwomIzQzOwlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWQmIzM0Oywgcik7CiYjNDM7CiYjNDM7CXdoaWxlIChjb3VudCYjNDM7JiM0MzsgJmx0OyBOUl9JVEVSQVRJT05TKSB7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZQomIzQzOwkJICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXZjcHVfc2lndXNyX2xpc3RlbigpOwomIzQzOwkJciA9IF9fdmNwdV9ydW4odmNwdSk7CiYjNDM7CQlpZiAociA9PSAtMSkKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpOwomIzQzOwkJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqLwomIzQzOwkJaWYgKCFyKSB7CiYjNDM7CQkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgJmFtcDt1YyksIFVDQUxMX0FCT1JUKTsKJiM0MzsJCQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuCiYjNDM7CQkgKiBMMi0mZ3Q7TDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXN0ZWQgJmFtcDsmYW1wOyB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpICZhbXA7JmFtcDsgY291bnQgJSAyID09IDApCiYjNDM7CQkJdmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpOwomIzQzOwomIzQzOwkJa3ZtX3ZtX3JlbGVhc2Uodm0pOwomIzQzOwkJdmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pOwomIzQzOwkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7CiYjNDM7CQl2Y3B1X2xvYWRfc3RhdGUodmNwdSwgc3RhdGUpOwomIzQzOwkJa3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTsKJiM0MzsKJiM0MzsJCVBSSU5UX0lURVIoJiMzNDtTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6ICYjMzQ7LCBjb3VudCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsJVEVTVF9BU1NFUlQoZ3Vlc3RfZmF1bHRzICZndDsgMCwgJiMzNDtObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWQmIzM0Oyk7CiYjNDM7CXByX2luZm8oJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcbiYjMzQ7LCBuZXN0ZWQgPyAmIzM0OyAoaW4gTDIpJiMzNDsgOiAmIzM0OyYjMzQ7LCBndWVzdF9mYXVsdHMpOwomIzQzOwomIzQzOwlwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTsKJiM0MzsJcHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDEKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA2NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGFsbCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBXYWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgZGlmZi4gWWVwLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHRoZXJlOiBgTWFrZWZpbGUua3ZtYCwgc29tZSBpbmNsdWRlIGZpbGVzLCBhbmQgYSBmZXcgc291cmNlIGZpbGVzIGZvciB2YXJpb3VzIHRlc3RzLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBldm1jc19zbW1fY29udHJvbHNfdGVzdC5jYCwgYHNtbV90ZXN0LmNgLCBhbmQgYHN0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jYCBhcmUgYW1vbmcgdGhlIG1vZGlmaWVkIHRlc3RzLgoKTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1RoaXMgaXMgYSBzZWxmdGVzdCBwYXRjaC4mIzM0OyBJdCBpc24mIzM5O3QgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnl0aGluZyBmdW5kYW1lbnRhbCB0byBhbiBhcmNoaXRlY3R1cmUuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSB1c2Vyc3BhY2UgdGVzdHMsIGRlc2lnbmVkIHRvIHZhbGlkYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgS1ZNIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCB0b3VjaGVzIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBjb2RlIHRoYXQgKm5lZWRzKiBmdXp6aW5nLgoKSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zOiBSZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBvbmx5IGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50IGNoYW5nZXMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIGNoYW5nZXMgdG8gY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgZXhlY3V0aW9uIGZsb3csIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3QgZml0LCByaWdodD8gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gdGVzdHMgc2VlbXMgY291bnRlci1pbnR1aXRpdmUuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIHBhdGggYmFzZWQgb24gbXkgYXNzZXNzbWVudCBvZiB0aGUgZGlmZi4KCkkgc2hvdWxkIHZlcmlmeSB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogb3RoZXIgY2hhbmdlcyBoaWRpbmcgYW55d2hlcmUuIE5vLCBldmVyeXRoaW5nIHN0aWxsIHN0YXJ0cyB3aXRoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA0Ljk1OTM1MzExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzI1NjgyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA0Ljk1OTM2MDg3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3ODcwNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4MTFjYmFhYTI5ZGVkNzkwNDAwYTNiZjZhZGIxY2JkZTFmYzcwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAyMDozMzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDRhY2UxMjYwNmU5MzdiLi5jNjFkNTFhMGMxMTJmYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0xMTEsNiArMTExLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zZXRfc3JlZ3NfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3RhdGVfdGVzdFxcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdm1faW50X2N0bF90ZXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uYzU1MTQ4ZWJmZTkzNGQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0yNDAsNCArMjQwLDcgQEAgY2hhciAqc3RyZHVwX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMiksIG5cXG4gXFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xcbiBcXG4rI2RlZmluZSBTVFIoeCkgI3hcXG4rI2RlZmluZSBYU1RSKHgpIFNUUih4KVxcbitcXG4gI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9URVNUX1VUSUxfSCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuaW5kZXggYmU3OWJkYTAyNGJmMTYuLjk4MjY4YmUxYWE1YjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMTIwNywzMCArMTIwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxcbiBcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTI0NiwzMCArMTIzOCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxcbiBcXHQvKiBIT1NUX1JTUCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgXFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yc3ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbmluZGV4IDdkM2EyN2JjMGQ4NDJhLi5lYzRkZmQ4MTc2MzY5YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtMzk2LDI1ICszOTYsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXFxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXFx0XFx0KChwdGUpIFxcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gXFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXFxuLXN0cnVjdCBncHI2NF9yZWdzIHtcXG4tXFx0dTY0IHJheDtcXG4tXFx0dTY0IHJjeDtcXG4tXFx0dTY0IHJkeDtcXG4tXFx0dTY0IHJieDtcXG4tXFx0dTY0IHJzcDtcXG4tXFx0dTY0IHJicDtcXG4tXFx0dTY0IHJzaTtcXG4tXFx0dTY0IHJkaTtcXG4tXFx0dTY0IHI4O1xcbi1cXHR1NjQgcjk7XFxuLVxcdHU2NCByMTA7XFxuLVxcdHU2NCByMTE7XFxuLVxcdHU2NCByMTI7XFxuLVxcdHU2NCByMTM7XFxuLVxcdHU2NCByMTQ7XFxuLVxcdHU2NCByMTU7XFxuLX07XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQVhcXHQwXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQ1hcXHQxXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRFhcXHQyXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQlhcXHQzXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SU1BcXHQ0XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQlBcXHQ1XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SU0lcXHQ2XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRElcXHQ3XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SOFxcdDhcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1I5XFx0OVxcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEwXFx0MTBcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxMVxcdDExXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTJcXHQxMlxcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEzXFx0MTNcXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxNFxcdDE0XFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTVcXHQxNVxcbisjZGVmaW5lIE5SX0dVRVNUX1JFR1NcXHQoR1VFU1RfUkVHU19SMTUgKyAxKVxcbitcXG4rZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xcbitcXG4rI2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZWcsIGlkeCkgXFxcXFxcbitcXHRcXFwieGNoZyAlJVxcXCIgI3JlZyBcXFwiLCBndWVzdF9yZWdzICsgOCAqXFxcIiBYU1RSKGlkeCkgXFxcIlxcXFxuXFxcXHRcXFwiXFxuIFxcbiBzdHJ1Y3QgZGVzYzY0IHtcXG4gXFx0dTE2IGxpbWl0MDtcXG5AQCAtNTgyLDYgKzU4NSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUwLCAlJWNyMFxcXCIgOiA6IFxcXCJyXFxcIiAodmFsKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxcbit7XFxuK1xcdHU2NCBjcjI7XFxuK1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUlY3IyLCAlW2NyMl1cXFwiXFxuK1xcdFxcdFxcdCAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl1cXFwiPXJcXFwiKGNyMikpO1xcbitcXHRyZXR1cm4gY3IyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXFxuIHtcXG4gXFx0dTY0IGNyMztcXG5AQCAtODc3LDYgKzg4OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxcbit7XFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJpbnZscGcgKCUwKVxcXCIgOiA6IFxcXCJyXFxcIihhZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicmVwOyBub3BcXFwiIDo6OiBcXFwibWVtb3J5XFxcIik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDRiY2ZkNjBlM2FlY2IwLi5hODA4ZGMyMWM5ZjIxMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5AQCAtMjkwLDYgKzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XFxuIFxcdHU2NCB2YWx1ZTtcXG4gfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTtcXG4gXFxuKyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCwgR1VFU1RfUkVHU19SQVgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KVxcbitcXG4gI2luY2x1ZGUgXFxcImV2bWNzLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcXG5AQCAtMzYzLDkgKzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpXFxuIFxcdHJldHVybiB2YWx1ZTtcXG4gfVxcbiBcXG4tLypcXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC5cXG4tICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMzczLDM0ICszODcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4gXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4gXFx0XFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1sYXVuY2g7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIigodTY0KUhPU1RfUlNQKSxcXG4gXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxcbi0gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00MDgsMjggKzQxMSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbiBcXHRpZiAoZW5hYmxlX2V2bWNzKVxcbiBcXHRcXHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5pbmRleCBlZjU2ZGNlZmUwMTE5ZS4uMGQ2NmFmZjA0OTM5YmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbkBAIC0yOSw2ICsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XFxuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xcbiB1NjQgZ3Vlc3RfdHNjX2toejtcXG4gXFxuK3U2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xcbitcXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXFxuIHtcXG4gXFx0c3dpdGNoICh2ZWN0b3IpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbmluZGV4IDE0NDViODkwOTg2ZmQxLi5kMDdmMTBiNWRjOTYzMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gXFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFxcXCIvZGV2L3NldlxcXCJcXG4gXFxuLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7XFxuIHU2NCByZmxhZ3M7XFxuIFxcbiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy5cXG5AQCAtMTI1LDcgKzEyNCw3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiBcXG4gXFx0dm1jYi1cXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcXG4gXFx0dm1jYi1cXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cXHUwMDNlc3RhY2s7XFxuLVxcdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XFxuK1xcdGd1ZXN0X3JlZ3NbR1VFU1RfUkVHU19SREldID0gKHU2NClzdm07XFxuIFxcbiBcXHRpZiAoc3ZtLVxcdTAwM2VuY3IzX2dwYSkge1xcbiBcXHRcXHRjdHJsLVxcdTAwM2VtaXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfTlA7XFxuQEAgLTEzNyw0NiArMTM2LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcXG4gICovXFxuLSNkZWZpbmUgU0FWRV9HUFJfQ1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJjeCwgZ3Vlc3RfcmVncysweDEwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJzaSwgZ3Vlc3RfcmVncysweDM4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXI5LCAgZ3Vlc3RfcmVncysweDUwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMiwgZ3Vlc3RfcmVncysweDY4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxNSwgZ3Vlc3RfcmVncysweDgwXFxcXG5cXFxcdFxcXCJcXG4tXFxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcXG4rI2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gsIEdVRVNUX1JFR1NfUkNYKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCwgR1VFU1RfUkVHU19SRFgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2ksIEdVRVNUX1JFR1NfUlNJKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSwgR1VFU1RfUkVHU19SREkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSwgIEdVRVNUX1JFR1NfUjkpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCwgR1VFU1RfUkVHU19SMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIsIEdVRVNUX1JFR1NfUjEyKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMywgR1VFU1RfUkVHU19SMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUsIEdVRVNUX1JFR1NfUjE1KVxcbiBcXG4gLypcXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXFxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcXG4rICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcXG4gICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuXFxuICAqL1xcbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuIFxcdFxcdFxcXCJ2bWxvYWQgJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IHJmbGFncywgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJmbGFnc1xcbi1cXHRcXHRcXFwibW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgZ3Vlc3RfcmVncywgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbi1cXHRcXHRcXFwibW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdExPQURfR1BSX0NcXG4rXFx0XFx0XFxcIm1vdiByZmxhZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXFxcblxcXFx0XFxcIlxcbitcXHRcXHRcXFwibW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXFwidm1ydW4gJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRTQVZFX0dQUl9DXFxuLVxcdFxcdFxcXCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuIFxcdFxcdFxcXCJtb3YgJSVyMTUsIHJmbGFnc1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXFxcblxcXFx0XFxcIlxcbiBcXHRcXHRcXFwidm1zYXZlICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFt2bWNiXSBcXFwiclxcXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpXFxuK1xcdFxcdDogW3ZtY2JfcmZsYWdzXSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJmbGFncyksXFxuK1xcdFxcdCAgW3ZtY2JfcmF4XSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJheCksXFxuK1xcdFxcdCAgW2d1ZXN0X3JlZ3NfcmF4XSBcXFwiK3JtXFxcIiAoZ3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JBWF0pXFxuK1xcdFxcdDogW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKVxcbiBcXHRcXHQ6IFxcXCJyMTVcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuaW5kZXggZTdkZDU3OTE5NTliYTEuLjM4MDUwYzYwYTA2NzAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuQEAgLTEwLDM2ICsxMCw4IEBAXFxuIFxcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXFxuIHtcXG4tXFx0LypcXG4tXFx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxcbi1cXHQgKiBwcmVzZXJ2ZXMgTDIgR1BScyBhY3Jvc3MgYSBuZXN0ZWQgVk0tRXhpdC4gIElmIGEgdWNhbGwgZnJvbSBMMiwgZS5nLlxcbi1cXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXFxuLVxcdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXFxuLVxcdCAqIGluIHBhcnRpY3VsYXIgaXMgcHJvYmxlbWF0aWMpIGFsb25nIHdpdGggUkRYIGFuZCBSREkgKHdoaWNoIGFyZVxcbi1cXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcXG4tXFx0ICovXFxuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXFx0XFxcXFxcbi1cXHRcXFwicmN4XFxcIiwgXFxcInJzaVxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLCBcXFwicjExXFxcIlxcbi1cXG4tXFx0YXNtIHZvbGF0aWxlKFxcXCJwdXNoICUlcmJwXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTRcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjEzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxMlxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyYnhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcImluICVbcG9ydF0sICUlYWxcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyZGlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyZHhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyYnhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTJcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTNcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTRcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyMTVcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwb3AgJSVyYnBcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQ6IDogW3BvcnRdIFxcXCJkXFxcIiAoVUNBTExfUElPX1BPUlQpLCBcXFwiRFxcXCIgKHVjKSA6IFxcXCJyYXhcXFwiLCBcXFwibWVtb3J5XFxcIixcXG4tXFx0XFx0ICAgICBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0spO1xcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICVbcG9ydF0sICUlYWxcXFwiXFxuK1xcdFxcdDogOiBbcG9ydF0gXFxcImRcXFwiIChVQ0FMTF9QSU9fUE9SVCksIFxcXCJEXFxcIiAodWMpIDogXFxcInJheFxcXCIsIFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5pbmRleCA3N2NlODdjNDFhODY4ZS4uY2Y1M2JmNDY5N2UxZTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuQEAgLTIyLDkgKzIyLDYgQEBcXG4gXFxuICNkZWZpbmUgU1lOQ19QT1JUXFx0MHhlXFxuIFxcbi0jZGVmaW5lIFNUUih4KSAjeFxcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXFxuLVxcbiAvKlxcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cXG4gICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuaW5kZXggZTI1NDJmNGNlZDYwNWYuLjIxNjE5ZTc1ODI3MThmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbkBAIC0yMiw5ICsyMiw2IEBAXFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxcbiAjZGVmaW5lIERPTkUgMHhmZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYjc2ZTU2Zjc0NGU3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXFxuQEAgLTAsMCArMSwzMjYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgR09UT19QUkVWX0xJTkVcXHRcXHRcXFwiXFxcXDAzM1tBXFxcXHJcXFwiXFxuKyNkZWZpbmUgUFJJTlRfSVRFUihzLCB4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHggPT0gMSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHByaW50ZihzIFxcXCIlZFxcXFxuXFxcIiwgeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4rXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRmKEdPVE9fUFJFVl9MSU5FIHMgXFxcIiVkXFxcXG5cXFwiLCB4KTtcXHRcXHRcXFxcXFxuK1xcdGZmbHVzaChzdGRvdXQpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgTlJfVEVTVF9BRERSU1xcdFxcdFBUUlNfUEVSX1BURVxcbisjZGVmaW5lIFBBVFRFUk5cXHRcXHRcXHQweGFiY2RlZmFiY2RlZmFiY2RVTExcXG4rXFxuK3N0YXRpYyB1NjQgcHRlX3ByZXNlbnRfbWFzaztcXG4rc3RhdGljIHU2NCBwdGVfaHVnZV9tYXNrO1xcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFx0Ym9vbCBsYTU3O1xcbitcXG4rXFx0bGE1NyA9ICEhKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1Nyk7XFxuK1xcdGxldmVsID0gbGE1NyA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHO1xcbitcXG4rXFx0cGd0YWJsZV9wYSA9IGdldF9jcjMoKSBcXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcXG4rXFx0Zm9yICg7IGxldmVsIFxcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcXG4rXFx0XFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0XFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XFxuK1xcdFxcdEdVRVNUX0FTU0VSVChwdGUgXFx1MDAyNiBwdGVfcHJlc2VudF9tYXNrKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCEocHRlIFxcdTAwMjYgcHRlX2h1Z2VfbWFzaykpO1xcbitcXHRcXHRwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpO1xcbitcXHR9XFxuK1xcbitcXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xcbitcXHRyZXR1cm4gXFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHU2NCBmYXVsdF9hZGRyO1xcbitcXHR1NjQgKnB0ZXA7XFxuK1xcbitcXHRmYXVsdF9hZGRyID0gZ2V0X2NyMigpO1xcbitcXHRHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7XFxuK1xcbitcXHRwdGVwID0gZ3Vlc3RfZ2V0X3B0ZShmYXVsdF9hZGRyKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHB0ZXApO1xcbitcXHRHVUVTVF9BU1NFUlQoISgqcHRlcCBcXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcXG4rXFxuK1xcdCpwdGVwIHw9IHB0ZV9wcmVzZW50X21hc2s7XFxuK1xcdGludmxwZyhmYXVsdF9hZGRyKTtcXG4rXFxuK1xcdGd1ZXN0X2ZhdWx0cysrO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZylcXG4re1xcbitcXHR1NjQgdmFkZHIsIHZhbDtcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0Zm9yICg7OyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgTlJfVEVTVF9BRERSUykgKiBQQUdFX1NJWkU7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cXG4rXFx0XFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcXG4rXFxuK1xcdFxcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXFxuK1xcdFxcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcXG4rXFx0XFx0aW52bHBnKHZhZGRyKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbit7XFxuK1xcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XFxuK1xcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJ1bl9ndWVzdChzdm0tXFx1MDAzZXZtY2IsIHN2bS1cXHUwMDNldm1jYl9ncGEpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfY29kZSwgKFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4re1xcbitcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XFxuK1xcbitcXHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSB8IEJJVChQRl9WRUNUT1IpKSk7XFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xcbitcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4re1xcbitcXHRpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdGwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxcbit7XFxuK1xcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcXG4rXFx0XFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcXG4rXFx0XFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fVxcbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcXG4rXFx0c2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdmNwdV9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gISEoc3RhdGUtXFx1MDAzZW5lc3RlZC5mbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcGFyc2VfYXJnc19uZXN0ZWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRib29sIG5lc3RlZCA9IGZhbHNlO1xcbitcXHRpbnQgb3B0O1xcbitcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm5cXFwiKSkgIT0gLTEpIHtcXG4rXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4rXFx0XFx0Y2FzZSAnbic6XFxuK1xcdFxcdFxcdG5lc3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRwcmludGYoXFxcIlVzYWdlOiAlcyBbLW5dXFxcXG5cXFwiLCBhcmd2WzBdKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbmVzdGVkO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcXG4rXFx0aW50IHIsIGksIGxldmVsLCBjb3VudCA9IDA7XFxuK1xcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xcbitcXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHU2NCAqcGd0YWJsZTtcXG4rXFx0Ym9vbCBuZXN0ZWQ7XFxuK1xcdGd2YV90IGd2YTtcXG4rXFx0dTY0IHB0ZTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSk7XFxuK1xcbitcXHRuZXN0ZWQgPSBwYXJzZV9hcmdzX25lc3RlZChhcmdjLCBhcmd2KTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgUEZfVkVDVE9SLCBndWVzdF9wZl9oYW5kbGVyKTtcXG4rXFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XFxuK1xcbitcXHRpZiAobmVzdGVkKSB7XFxuK1xcdFxcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIHx8IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXHRcXHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcXG4rXFx0XFx0XFx0dmNwdV9hbGxvY19zdm0odm0sIFxcdTAwMjZndmEpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2Z3ZhKTtcXG4rXFx0XFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xcbitcXHR9XFxuK1xcbitcXHRwdGVfcHJlc2VudF9tYXNrID0gUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2dm0tXFx1MDAzZW1tdSk7XFxuK1xcdHB0ZV9odWdlX21hc2sgPSBQVEVfSFVHRV9NQVNLKFxcdTAwMjZ2bS1cXHUwMDNlbW11KTtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgcHRlX2h1Z2VfbWFzayk7XFxuK1xcbitcXHQvKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIHdyaXRlIHRoZSBwYXR0ZXJuIHRvIGl0ICovXFxuK1xcdGd2YSA9IHZtX2FsbG9jX3BhZ2Uodm0pO1xcbitcXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XFxuK1xcdGdwYSA9IGFkZHJfZ3ZhMmdwYSh2bSwgZ3ZhKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnRcXG4rXFx0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX1RFU1RfQUREUlM7IGkrKykge1xcbitcXHRcXHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xcbitcXHRcXHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xcbitcXHRcXHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcXG4rXFx0ICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXNcXG4rXFx0ICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2VcXG4rXFx0ICogdGFibGUgbGV2ZWwuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0b1xcbitcXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxcbitcXHQgKi9cXG4rXFx0cGd0YWJsZV9ncGEgPSB2bS1cXHUwMDNlbW11LnBnZDtcXG4rXFx0Zm9yIChsZXZlbCA9IHZtLVxcdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFxcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XFxuK1xcdFxcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcXG4rXFx0XFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XFxuK1xcdFxcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cXG4rXFx0dmNwdV9zaWd1c3JfaWdub3JlKCk7XFxuK1xcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcXG4rXFx0XFx0XFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XFxuK1xcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXFxcIiwgcik7XFxuK1xcbitcXHR3aGlsZSAoY291bnQrKyBcXHUwMDNjIE5SX0lURVJBVElPTlMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxcbitcXHRcXHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xcbitcXHRcXHRyID0gX192Y3B1X3J1bih2Y3B1KTtcXG4rXFx0XFx0aWYgKHIgPT0gLTEpXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobmVzdGVkIFxcdTAwMjZcXHUwMDI2IHZjcHVfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgY291bnQgJSAyID09IDApXFxuK1xcdFxcdFxcdHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdFBSSU5UX0lURVIoXFxcIlNhdmUrcmVzdG9yZSBpdGVyYXRpb25zOiBcXFwiLCBjb3VudCk7XFxuK1xcdH1cXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyBcXHUwMDNlIDAsIFxcXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxcXG5cXFwiLCBuZXN0ZWQgPyBcXFwiIChpbiBMMilcXFwiIDogXFxcIlxcXCIsIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcbitcXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcXG4rXFx0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDIwOjMzOjA1LjYzODIyODgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1MzY4NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTgxMWNiYWFhMjlkZWQ3OTA0MDBhM2JmNmFkYjFjYmRlMWZjNzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMjA6MzM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNGFjZTEyNjA2ZTkzN2IuLmM2MWQ1MWEwYzExMmZhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMSw2ICsxMTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGE1NjI3MWMyMzdhZTllLi5jNTUxNDhlYmZlOTM0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuQEAgLTI0MCw0ICsyNDAsNyBAQCBjaGFyICpzdHJkdXBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSwgblxuIFxuIGNoYXIgKnN5c19nZXRfY3VyX2Nsb2Nrc291cmNlKHZvaWQpO1xuIFxuKyNkZWZpbmUgU1RSKHgpICN4XG4rI2RlZmluZSBYU1RSKHgpIFNUUih4KVxuK1xuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fVEVTVF9VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxNi4uOTgyNjhiZTFhYTViMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICsxMjA3LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpXG4gXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyA9IDA7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCArMTIzOCwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA3ZDNhMjdiYzBkODQyYS4uZWM0ZGZkODE3NjM2OWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTM5NiwyNSArMzk2LDI4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbi1cdHU2NCByYXg7XG4tXHR1NjQgcmN4O1xuLVx0dTY0IHJkeDtcbi1cdHU2NCByYng7XG4tXHR1NjQgcnNwO1xuLVx0dTY0IHJicDtcbi1cdHU2NCByc2k7XG4tXHR1NjQgcmRpO1xuLVx0dTY0IHI4O1xuLVx0dTY0IHI5O1xuLVx0dTY0IHIxMDtcbi1cdHU2NCByMTE7XG4tXHR1NjQgcjEyO1xuLVx0dTY0IHIxMztcbi1cdHU2NCByMTQ7XG4tXHR1NjQgcjE1O1xuLX07XG4rI2RlZmluZSBHVUVTVF9SRUdTX1JBWFx0MFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SQ1hcdDFcbisjZGVmaW5lIEdVRVNUX1JFR1NfUkRYXHQyXG4rI2RlZmluZSBHVUVTVF9SRUdTX1JCWFx0M1xuKyNkZWZpbmUgR1VFU1RfUkVHU19SU1BcdDRcbisjZGVmaW5lIEdVRVNUX1JFR1NfUkJQXHQ1XG4rI2RlZmluZSBHVUVTVF9SRUdTX1JTSVx0NlxuKyNkZWZpbmUgR1VFU1RfUkVHU19SRElcdDdcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjhcdDhcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjlcdDlcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEwXHQxMFxuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTFcdDExXG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxMlx0MTJcbisjZGVmaW5lIEdVRVNUX1JFR1NfUjEzXHQxM1xuKyNkZWZpbmUgR1VFU1RfUkVHU19SMTRcdDE0XG4rI2RlZmluZSBHVUVTVF9SRUdTX1IxNVx0MTVcbisjZGVmaW5lIE5SX0dVRVNUX1JFR1NcdChHVUVTVF9SRUdTX1IxNSArIDEpXG4rXG4rZXh0ZXJuIHU2NCBndWVzdF9yZWdzW05SX0dVRVNUX1JFR1NdO1xuK1xuKyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00ocmVnLCBpZHgpIFxcXG4rXHRcInhjaGcgJSVcIiAjcmVnIFwiLCBndWVzdF9yZWdzICsgOCAqXCIgWFNUUihpZHgpIFwiXFxuXFx0XCJcbiBcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG5AQCAtNTgyLDYgKzU4NSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJTAsICUlY3IwXCIgOiA6IFwiclwiICh2YWwpIDogXCJtZW1vcnlcIik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbit7XG4rXHR1NjQgY3IyO1xuK1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJSVjcjIsICVbY3IyXVwiXG4rXHRcdFx0ICAgICA6IC8qIG91dHB1dCAqLyBbY3IyXVwiPXJcIihjcjIpKTtcbitcdHJldHVybiBjcjI7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZClcbiB7XG4gXHR1NjQgY3IzO1xuQEAgLTg3Nyw2ICs4ODksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpXG4re1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJpbnZscGcgKCUwKVwiIDogOiBcInJcIihhZGRyKSA6IFwibWVtb3J5XCIpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwicmVwOyBub3BcIiA6OjogXCJtZW1vcnlcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA0YmNmZDYwZTNhZWNiMC4uYTgwOGRjMjFjOWYyMTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgsIEdVRVNUX1JFR1NfUkFYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpXG4rXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgKzM4NywyMyBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cbi0gKi9cbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtNDA4LDI4ICs0MTEsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5ZS4uMGQ2NmFmZjA0OTM5YmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbkBAIC0yOSw2ICsyOSw4IEBAIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4gXG4rdTY0IGd1ZXN0X3JlZ3NbTlJfR1VFU1RfUkVHU107XG4rXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuIFx0c3dpdGNoICh2ZWN0b3IpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5pbmRleCAxNDQ1Yjg5MDk4NmZkMS4uZDA3ZjEwYjVkYzk2MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCIvZGV2L3NldlwiXG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbiB1NjQgcmZsYWdzO1xuIFxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuQEAgLTEyNSw3ICsxMjQsNyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiBcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yaXAgPSAodTY0KWd1ZXN0X3JpcDtcbiBcdHZtY2ItXHUwMDNlc2F2ZS5yc3AgPSAodTY0KXN2bS1cdTAwM2VzdGFjaztcbi1cdGd1ZXN0X3JlZ3MucmRpID0gKHU2NClzdm07XG4rXHRndWVzdF9yZWdzW0dVRVNUX1JFR1NfUkRJXSA9ICh1NjQpc3ZtO1xuIFxuIFx0aWYgKHN2bS1cdTAwM2VuY3IzX2dwYSkge1xuIFx0XHRjdHJsLVx1MDAzZW1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9OUDtcbkBAIC0xMzcsNDYgKzEzNiw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwieGNoZyAlJXJieCwgZ3Vlc3RfcmVncysweDIwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJicCwgZ3Vlc3RfcmVncysweDMwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXI4LCAgZ3Vlc3RfcmVncysweDQ4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMSwgZ3Vlc3RfcmVncysweDYwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxNCwgZ3Vlc3RfcmVncysweDc4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcblxcdFwiXG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4LCBHVUVTVF9SRUdTX1JCWCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCwgR1VFU1RfUkVHU19SQ1gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgsIEdVRVNUX1JFR1NfUkRYKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwLCBHVUVTVF9SRUdTX1JCUCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSwgR1VFU1RfUkVHU19SU0kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGksIEdVRVNUX1JFR1NfUkRJKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgsICBHVUVTVF9SRUdTX1I4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5LCAgR1VFU1RfUkVHU19SOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTAsIEdVRVNUX1JFR1NfUjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExLCBHVUVTVF9SRUdTX1IxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMiwgR1VFU1RfUkVHU19SMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMsIEdVRVNUX1JFR1NfUjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0LCBHVUVTVF9SRUdTX1IxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSwgR1VFU1RfUkVHU19SMTUpXG4gXG4gLypcbiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2lcbi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5XG4rICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwidm1sb2FkICVbdm1jYl9ncGFdXFxuXFx0XCJcbi1cdFx0XCJtb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwiXHQvLyByZmxhZ3Ncbi1cdFx0XCJtb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXFxuXFx0XCJcbi1cdFx0XCJtb3YgZ3Vlc3RfcmVncywgJSVyMTVcXG5cXHRcIlx0Ly8gcmF4XG4tXHRcdFwibW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwiXG4tXHRcdExPQURfR1BSX0NcbitcdFx0XCJtb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwiXG4rXHRcdFwibW92ICVbZ3Vlc3RfcmVnc19yYXhdLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4rXHRcdFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwiXG4gXHRcdFwibW92ICUlcjE1LCByZmxhZ3NcXG5cXHRcIlxuLVx0XHRcIm1vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcIlx0Ly8gcmF4XG4tXHRcdFwibW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCJcbitcdFx0XCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuK1x0XHRcIm1vdiAlJXIxNSwgJVtndWVzdF9yZWdzX3JheF1cXG5cXHRcIlxuIFx0XHRcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdDogOiBbdm1jYl0gXCJyXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFwiYVwiICh2bWNiX2dwYSlcbitcdFx0OiBbdm1jYl9yZmxhZ3NdIFwiK21cIiAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4rXHRcdCAgW3ZtY2JfcmF4XSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpLFxuK1x0XHQgIFtndWVzdF9yZWdzX3JheF0gXCIrcm1cIiAoZ3Vlc3RfcmVnc1tHVUVTVF9SRUdTX1JBWF0pXG4rXHRcdDogW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpXG4gXHRcdDogXCJyMTVcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5pbmRleCBlN2RkNTc5MTk1OWJhMS4uMzgwNTBjNjBhMDY3MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5AQCAtMTAsMzYgKzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCJyY3hcIiwgXCJyc2lcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsIFwicjExXCJcbi1cbi1cdGFzbSB2b2xhdGlsZShcInB1c2ggJSVyYnBcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJpbiAlW3BvcnRdLCAlJWFsXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnBcXG5cXHRcIlxuLVx0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiLFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4rXHRhc20gdm9sYXRpbGUoXCJpbiAlW3BvcnRdLCAlJWFsXCJcbitcdFx0OiA6IFtwb3J0XSBcImRcIiAoVUNBTExfUElPX1BPUlQpLCBcIkRcIiAodWMpIDogXCJyYXhcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjhlLi5jZjUzYmY0Njk3ZTFlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSArMjIsNiBAQFxuIFxuICNkZWZpbmUgU1lOQ19QT1JUXHQweGVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAvKlxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxuICAqIFJlcG9ydHMgU01SQU1fU1RBR0UgdmlhIHBvcnQgSU8sIHRoZW4gZG9lcyBSU00uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Zi4uMjE2MTllNzU4MjcxOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RyZXNzX3NhdmVfcmVzdG9yZV9wZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJiNzZlNTZmNzQ0ZTc4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0cmVzc19zYXZlX3Jlc3RvcmVfcGZfdGVzdC5jXG5AQCAtMCwwICsxLDMyNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBHT1RPX1BSRVZfTElORVx0XHRcIlxcMDMzW0FcXHJcIlxuKyNkZWZpbmUgUFJJTlRfSVRFUihzLCB4KVx0XHRcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmICh4ID09IDEpXHRcdFx0XHRcdFx0XFxcbitcdFx0cHJpbnRmKHMgXCIlZFxcblwiLCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbitcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHByaW50ZihHT1RPX1BSRVZfTElORSBzIFwiJWRcXG5cIiwgeCk7XHRcdFxcXG4rXHRmZmx1c2goc3Rkb3V0KTtcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIE5SX1RFU1RfQUREUlNcdFx0UFRSU19QRVJfUFRFXG4rI2RlZmluZSBQQVRURVJOXHRcdFx0MHhhYmNkZWZhYmNkZWZhYmNkVUxMXG4rXG4rc3RhdGljIHU2NCBwdGVfcHJlc2VudF9tYXNrO1xuK3N0YXRpYyB1NjQgcHRlX2h1Z2VfbWFzaztcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXHRib29sIGxhNTc7XG4rXG4rXHRsYTU3ID0gISEoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBNTcpO1xuK1x0bGV2ZWwgPSBsYTU3ID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4rXG4rXHRwZ3RhYmxlX3BhID0gZ2V0X2NyMygpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XG4rXHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4rXHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuK1x0XHRHVUVTVF9BU1NFUlQocHRlIFx1MDAyNiBwdGVfcHJlc2VudF9tYXNrKTtcbitcdFx0R1VFU1RfQVNTRVJUKCEocHRlIFx1MDAyNiBwdGVfaHVnZV9tYXNrKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IHB0ZV9wcmVzZW50X21hc2spKTtcbitcbitcdCpwdGVwIHw9IHB0ZV9wcmVzZW50X21hc2s7XG4rXHRpbnZscGcoZmF1bHRfYWRkcik7XG4rXG4rXHRndWVzdF9mYXVsdHMrKztcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXG4re1xuK1x0dTY0IHZhZGRyLCB2YWw7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRmb3IgKDs7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBOUl9URVNUX0FERFJTKSAqIFBBR0VfU0laRTtcbitcdFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xuK1xuK1x0XHQvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovXG4rXHRcdHZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHZhbCwgUEFUVEVSTik7XG4rXG4rXHRcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXG4rXHRcdCpndWVzdF9nZXRfcHRlKHZhZGRyKSBcdTAwMjY9IH5wdGVfcHJlc2VudF9tYXNrO1xuK1x0XHRpbnZscGcodmFkZHIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuK3tcbitcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cnVuX2d1ZXN0KHN2bS1cdTAwM2V2bWNiLCBzdm0tXHUwMDNldm1jYl9ncGEpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsIChTVk1fRVhJVF9FWENQX0JBU0UgKyBVRF9WRUNUT1IpKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuK3tcbitcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuK1x0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1xuK1x0LyogSW50ZXJjZXB0IFVELCBpZ25vcmUgYW55ICNQRiAqL1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbitcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCkpO1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpKTtcbitcbitcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR3aGlsZSAoMSkge1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4rXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuK3tcbitcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcbitcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbitcdGVsc2VcbitcdFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxuK3tcbitcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcbitcdFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcbitcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XG4rc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xuK1x0c2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgYm9vbCB2Y3B1X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiAhIShzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZjcHVfc3RhdGVfaW5qZWN0X3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGFyc2VfYXJnc19uZXN0ZWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIG5lc3RlZCA9IGZhbHNlO1xuK1x0aW50IG9wdDtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiblwiKSkgIT0gLTEpIHtcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0Y2FzZSAnbic6XG4rXHRcdFx0bmVzdGVkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRwcmludGYoXCJVc2FnZTogJXMgWy1uXVxcblwiLCBhcmd2WzBdKTtcbitcdFx0XHRleGl0KDEpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gbmVzdGVkO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcbitcdGludCByLCBpLCBsZXZlbCwgY291bnQgPSAwO1xuK1x0cHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7XG4rXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRib29sIG5lc3RlZDtcbitcdGd2YV90IGd2YTtcbitcdHU2NCBwdGU7XG4rXG4rXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkpO1xuK1xuK1x0bmVzdGVkID0gcGFyc2VfYXJnc19uZXN0ZWQoYXJnYywgYXJndik7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4rXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgfHwga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuK1x0XHRcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcdTAwMjZndmEpO1xuK1x0XHRlbHNlXG4rXHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4rXHRcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcbitcdH1cbitcbitcdHB0ZV9wcmVzZW50X21hc2sgPSBQVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHRwdGVfaHVnZV9tYXNrID0gUFRFX0hVR0VfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9wcmVzZW50X21hc2spO1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHB0ZV9odWdlX21hc2spO1xuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9URVNUX0FERFJTOyBpKyspIHtcbitcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgKyBpICogZ2V0cGFnZXNpemUoKTtcbitcdFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcbitcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+cHRlX3ByZXNlbnRfbWFzaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxuK1x0ICogZ3Vlc3QgI1BGIGhhbmRsZXIgY2FuIHdhbGsgdGhlbS4gQWxsIFBURXMgZm9yIHRlc3QgdmlydHVhbCBhZGRyZXNzZXNcbitcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4rXHQgKiB0YWJsZSBsZXZlbC5cbitcdCAqXG4rXHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbitcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXG4rXHQgKi9cbitcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbitcdGZvciAobGV2ZWwgPSB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0dmlydF9tYXAodm0sIHBndGFibGVfZ3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbitcdFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xuK1x0XHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWChURVNUX01FTV9CQVNFX0dWQSwgbGV2ZWwpXTtcbitcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbitcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuK1x0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sXG4rXHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4rXHRURVNUX0FTU0VSVCghciwgXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWRcIiwgcik7XG4rXG4rXHR3aGlsZSAoY291bnQrKyBcdTAwM2MgTlJfSVRFUkFUSU9OUykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRpZiAociA9PSAtMSlcbitcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuK1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcbitcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbitcdFx0aWYgKCFyKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4rXHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjYgdmNwdV9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcdTAwMjZcdTAwMjYgY291bnQgJSAyID09IDApXG4rXHRcdFx0dmNwdV9zdGF0ZV9pbmplY3RfdWQoc3RhdGUpO1xuK1xuK1x0XHRrdm1fdm1fcmVsZWFzZSh2bSk7XG4rXHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbitcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4rXHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4rXHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4rXG4rXHRcdFBSSU5UX0lURVIoXCJTYXZlK3Jlc3RvcmUgaXRlcmF0aW9uczogXCIsIGNvdW50KTtcbitcdH1cbitcbitcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XG4rXHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwiTm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkXCIpO1xuK1x0cHJfaW5mbyhcIkd1ZXN0IHBhZ2UgZmF1bHRzJXM6ICVsdVxcblwiLCBuZXN0ZWQgPyBcIiAoaW4gTDIpXCIgOiBcIlwiLCBndWVzdF9mYXVsdHMpO1xuK1xuK1x0cHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7XG4rXHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQyMDozMzowNS42MzgyMzI2NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTUzNjYxMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYWxsIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkuIFdhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBkaWZmLiBZZXAsIGl0J3MgYWxsIGNvbnRhaW5lZCB0aGVyZTogYE1ha2VmaWxlLmt2bWAsIHNvbWUgaW5jbHVkZSBmaWxlcywgYW5kIGEgZmV3IHNvdXJjZSBmaWxlcyBmb3IgdmFyaW91cyB0ZXN0cy4gQWxyaWdodCwgbG9va3MgbGlrZSBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBzbW1fdGVzdC5jYCwgYW5kIGBzdHJlc3Nfc2F2ZV9yZXN0b3JlX3BmX3Rlc3QuY2AgYXJlIGFtb25nIHRoZSBtb2RpZmllZCB0ZXN0cy5cblxuTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCBcIlRoaXMgaXMgYSBzZWxmdGVzdCBwYXRjaC5cIiBJdCBpc24ndCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFueXRoaW5nIGZ1bmRhbWVudGFsIHRvIGFuIGFyY2hpdGVjdHVyZS4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IHVzZXJzcGFjZSB0ZXN0cywgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBLVk0gc3Vic3lzdGVtLiBUaGUgcGF0Y2ggZG9lc24ndCBsb29rIGxpa2UgaXQgdG91Y2hlcyB0aGUgdW5kZXJseWluZyBrZXJuZWwgY29kZSB0aGF0ICpuZWVkcyogZnV6emluZy5cblxuSSdtIHJlbWVtYmVyaW5nIHRoZSBpbnN0cnVjdGlvbnM6IFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaGFzIG9ubHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBLY29uZmlnIGNoYW5nZXMsIGNvbW1lbnQgY2hhbmdlcywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgb3IgY2hhbmdlcyB0byBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG9uJ3QgYWZmZWN0IGV4ZWN1dGlvbiBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBUaGlzIGxvb2tzIGxpa2UgYSBwZXJmZWN0IGZpdCwgcmlnaHQ/IEZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRlc3RzIHNlZW1zIGNvdW50ZXItaW50dWl0aXZlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIHBhdGggYmFzZWQgb24gbXkgYXNzZXNzbWVudCBvZiB0aGUgZGlmZi5cblxuSSBzaG91bGQgdmVyaWZ5IHRob3VnaCwgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgKm5vKiBvdGhlciBjaGFuZ2VzIGhpZGluZyBhbnl3aGVyZS4gTm8sIGV2ZXJ5dGhpbmcgc3RpbGwgc3RhcnRzIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBTbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGlzIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQxLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMjA6MzM6MTMuNTkxODk1NDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmdpn[1] Phase: Running StartedAt: 2026-06-29 20:34:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmdpn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-29 20:34:34 +0000 UTC FinishedAt: 2026-06-29 20:34:48 +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,}