Name: series-workflowch4sj Phase: Failed StartedAt: 2026-08-01 07:20:39 +0000 UTC FinishedAt: 2026-08-01 07:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch4sj[0] Phase: Succeeded StartedAt: 2026-08-01 07:20:39 +0000 UTC FinishedAt: 2026-08-01 07:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch4sj[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 07:20:39 +0000 UTC FinishedAt: 2026-08-01 07:23: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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byB1c2UgY3VzdG9tIHB0aHJlYWQgd3JhcHBlcnMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZWNjNWFjM2RmYWNmYjVhMzNmZjc1ZjFkZjRhOWY5NTYyZGJkMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggZjhiMDI1OTc4OTdiZC4uMDMxNjBhZDY2NmY1OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbkBAIC0xNDEsMzMgJiM0MzsxNDEsMjcgQEAgc3RhdGljIHZvaWQgdGVzdF9ydW4oc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuIFx0cHRocmVhZF90IHB0X3ZjcHVfbWlncmF0aW9uO1xuIFx0dW5zaWduZWQgaW50IGk7XG4tXHRpbnQgcmV0O1xuIFxuIFx0cHRocmVhZF9tdXRleF9pbml0KFx1MDAyNnZjcHVfZG9uZV9tYXBfbG9jaywgTlVMTCk7XG4gXHR2Y3B1X2RvbmVfbWFwID0gYml0bWFwX3phbGxvYyh0ZXN0X2FyZ3MubnJfdmNwdXMpO1xuIFx0VEVTVF9BU1NFUlQodmNwdV9kb25lX21hcCwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZjcHUgZG9uZSBiaXRtYXBcJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZwdF92Y3B1X3J1bltpXSwgTlVMTCwgdGVzdF92Y3B1X3J1bixcbi1cdFx0XHRcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbi1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB2Q1BVLSVkIHB0aHJlYWRcJiMzNDssIGkpO1xuLVx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjICh1bnNpZ25lZCBsb25nKXRlc3RfYXJncy5ucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sXG4mIzQzO1x0XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbiBcbiBcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcykge1xuIFx0XHRzcmFuZCh0aW1lKE5VTEwpKTtcbiBcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsXG4tXHRcdFx0XHRcdHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuLVx0XHRURVNUX0FTU0VSVCghcmV0LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHRoZSBtaWdyYXRpb24gcHRocmVhZFwmIzM0Oyk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFx0fVxuIFxuLVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFxuIFx0Yml0bWFwX2ZyZWUodmNwdV9kb25lX21hcCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcbmluZGV4IDVlMjMxOTk4NjE3ZTcuLjNjYjg1OTMyZWU4NWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcbkBAIC05ODgsNyAmIzQzOzk4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcbiBcdHN0cnVjdCB0ZXN0X2FyZ3MgYXJncyA9IHt9O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRndmFfdCBhcmdzX2d2YTtcbi1cdGludCBnaWNfZmQsIHJldDtcbiYjNDM7XHRpbnQgZ2ljX2ZkO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpO1xuIFxuQEAgLTEwMDQsMTUgJiM0MzsxMDA0LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcbiBcbiBcdGdpY19mZCA9IHZnaWNfdjNfc2V0dXAodm0sIDIsIDY0KTtcbiBcbi1cdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xuLVx0aWYgKHJldClcbi1cdFx0VEVTVF9GQUlMKFwmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcblwmIzM0OywgcmV0KTtcbi1cdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuLVx0aWYgKHJldClcbi1cdFx0VEVTVF9GQUlMKFwmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDEgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzBdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1swXSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuIFxuLVx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4tXHRwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbih0aHJbMV0sIE5VTEwpO1xuIFxuIFx0Y2xvc2UoZ2ljX2ZkKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbmluZGV4IGQ2NGQ0MzRkM2YwNmUuLjlhNjljNDM5YTBmOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xuQEAgLTMxMSwyMyAmIzQzOzMxMSwyMyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuIFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXHUwMDI2dGVzdF9zZXR1cF9iYXJyaWVyLCBOVUxMLCBucl92Y3B1cyAmIzQzOyBucl9kZXZpY2VzICYjNDM7IDEpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyX3RocmVhZCwgdmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXZpY2VzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmxwaV90aHJlYWRzW2ldLCBOVUxMLCBscGlfd29ya2VyX3RocmVhZCwgKHZvaWQgKilpKTtcbiBcbiBcdHB0aHJlYWRfYmFycmllcl93YWl0KFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllcik7XG4gXG4gXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspXG4tXHRcdHB0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9qb2luKGxwaV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGRlbHRhID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG4gXHR3cml0ZV9ndWVzdF9nbG9iYWwodm0sIHRlc3RfZGF0YS5yZXF1ZXN0X3ZjcHVzX3N0b3AsIHRydWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdHJlcG9ydF9zdGF0cyhkZWx0YSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbmluZGV4IGU4NDE5ZDdkYTFlYWIuLmFmNWViMDMzNGE3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbkBAIC02OTEsNyAmIzQzOzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4gXG4gXHRmb3IgKGl0ZXJhdGlvbiA9IDE7IGl0ZXJhdGlvbiBcdTAwM2M9IHAtXHUwMDNlaXRlcmF0aW9uczsgaXRlcmF0aW9uJiM0MzsmIzQzOykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGksIHJlYXBfaTtcbkBAIC04MDUsNyAmIzQzOzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRXUklURV9PTkNFKGhvc3RfcXVpdCwgdHJ1ZSk7XG4gXHRzZW1fcG9zdChcdTAwMjZzZW1fdmNwdV9jb250KTtcbiBcbi1cdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O1RvdGFsIGJpdHMgY2hlY2tlZDogZGlydHkgKCVsdSksIGNsZWFyICglbHUpXFxuXCYjMzQ7LFxuIFx0XHRob3N0X2RpcnR5X2NvdW50LCBob3N0X2NsZWFyX2NvdW50KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcbmluZGV4IDMxNDdmNWM5N2U5NDMuLjRhYmFkNzE1ODk4OTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuQEAgLTUsNyAmIzQzOzUsNiBAQFxuICAqIHJldHVybiBub3RpZmllcnMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NlbWFwaG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuQEAgLTE0LDIwICYjNDM7MTMsMjMgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fc3lzY2FsbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dWNhbGxfY29tbW9uLmhcJiMzNDtcbiBcbi0jZGVmaW5lIFZDUFVfTlVNIDRcbi0jZGVmaW5lIFNMRUVQSU5HX1RIUkVBRF9OVU0gKDEgXHUwMDNjXHUwMDNjIDQpXG4tI2RlZmluZSBGT1JLX05VTSAoMVVMTCBcdTAwM2NcdTAwM2MgOSlcbi0jZGVmaW5lIERFTEFZX1VTX01BWCAyMDAwXG4mIzQzOyNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuJiM0MzsjZGVmaW5lIE5SX1NMRUVQRVJTX1BFUl9WQ1BVXHQxNlxuJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTEyXG4mIzQzOyNkZWZpbmUgREVMQVlfVVNfTUFYXHRcdDIwMDBcbiBcbiBzZW1fdCAqc2VtO1xuJiM0MztzdGF0aWMgY3B1X3NldF90IGNoaWxkX2NwdV9zZXQ7XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbiBcdGZvciAoOzspXG4gXHRcdDsgIC8qIFNvbWUgYnVzeSB3b3JrICovXG4tXHRwcmludGYoXCYjMzQ7U2hvdWxkIG5vdCBiZSByZWFjaGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqcnVuX3ZjcHUodm9pZCAqYXJnKVxuQEAgLTM3LDg0ICYjNDM7MzksNDcgQEAgc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZylcbiBcbiBcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0VEVTVF9BU1NFUlQoZmFsc2UsIFwmIzM0OyVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXCYjMzQ7LFxuLVx0XHQgICAgX19mdW5jX18sIHJ1bi1cdTAwM2VleGl0X3JlYXNvbixcbi1cdFx0ICAgIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbi1cdHB0aHJlYWRfZXhpdChOVUxMKTtcbiYjNDM7XHRURVNUX0ZBSUwoXCYjMzQ7dkNQVSVkIGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXNcJiMzNDssXG4mIzQzO1x0XHQgIHZjcHUtXHUwMDNlaWQsIHJ1bi1cdTAwM2VleGl0X3JlYXNvbiwgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqc2xlZXBpbmdfdGhyZWFkKHZvaWQgKmFyZylcbiB7XG4gXHRpbnQgZmQ7XG4gXG4tXHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdHdoaWxlICgxKSB7XG4gXHRcdGZkID0gb3BlbihcJiMzNDsvZGV2L251bGxcJiMzNDssIE9fUkRXUik7XG4gXHRcdGNsb3NlKGZkKTtcbiBcdH1cbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcJiMzNDslczogZXhpdGVkXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0cixcbi1cdFx0XHRcdCAgICAgICB2b2lkICooKmYpKHZvaWQgKiksIHZvaWQgKmFyZylcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQsIGF0dHIsIGYsIGFyZyk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0OyVzOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZFwmIzM0OywgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcJiMzNDslczogZmFpbGVkIHNldCBhZmZpbml0eVwmIzM0OywgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfam9pbihwdGhyZWFkX3QgdGhyZWFkLCB2b2lkICoqcmV0dmFsKVxuLXtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfam9pbih0aHJlYWQsIHJldHZhbCk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0OyVzOiBmYWlsZWQgdG8gam9pbiB0aHJlYWRcJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRURVNUX0ZBSUwoXCYjMzQ7JXM6IGV4aXRlZFwmIzM0OywgX19mdW5jX18pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydW5fdGVzdCh1MzIgcnVuKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVx0Y3B1X3NldF90IGNwdV9zZXQ7XG4tXHRwdGhyZWFkX3QgdGhyZWFkc1tWQ1BVX05VTV07XG4tXHRwdGhyZWFkX3QgdGhyb3dfYXdheTtcbi1cdHZvaWQgKmI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiBcdHUzMiBpLCBqO1xuIFxuLVx0Q1BVX1pFUk8oXHUwMDI2Y3B1X3NldCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBWQ1BVX05VTTsgaSYjNDM7JiM0MzspXG4tXHRcdENQVV9TRVQoaSwgXHUwMDI2Y3B1X3NldCk7XG4tXG4tXHR2bSA9IHZtX2NyZWF0ZShWQ1BVX05VTSk7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGUoTlJfVkNQVVMpO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6IFslZF0gc3RhcnQgdmNwdXNcXG5cJiMzNDssIF9fZnVuY19fLCBydW4pO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcnVuX3ZjcHUsIHZjcHUpO1xuLVx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyZWFkc1tpXSwgXHUwMDI2Y3B1X3NldCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBTTEVFUElOR19USFJFQURfTlVNOyAmIzQzOyYjNDM7aikge1xuLVx0XHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyb3dfYXdheSwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLFxuLVx0XHRcdFx0XHQgICAgKHZvaWQgKilOVUxMKTtcbi1cdFx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyb3dfYXdheSwgXHUwMDI2Y3B1X3NldCk7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9TTEVFUEVSU19QRVJfVkNQVTsgJiM0MzsmIzQzO2opIHtcbiYjNDM7XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLCAodm9pZCAqKU5VTEwpO1xuJiM0MztcdFx0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRwcl9kZWJ1ZyhcJiMzNDslczogWyVkXSBhbGwgdGhyZWFkcyBsYXVuY2hlZFxcblwmIzM0OywgX19mdW5jX18sIHJ1bik7XG4gXHRzZW1fcG9zdChzZW0pO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07ICYjNDM7JiM0MztpKVxuLVx0XHRjaGVja19qb2luKHRocmVhZHNbaV0sIFx1MDAyNmIpO1xuLVx0LyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovXG4tXHRURVNUX0FTU0VSVChmYWxzZSwgXCYjMzQ7JXM6IFslZF0gY2hpbGQgZXNjYXBlZCB0aGUgbmluamFcJiMzNDssIF9fZnVuY19fLCBydW4pO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciB0aGUgcGFyZW50IHRvIFNJR0tJTEwgdGhpcyBjaGlsZC4gKi9cbiYjNDM7XHR3aGlsZSAoMSk7XG4gfVxuIFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuQEAgLTE0NywxNiAmIzQzOzExMiwzNCBAQCB2b2lkIHdhaXRfZm9yX2NoaWxkX3NldHVwKHBpZF90IHBpZClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2NoaWxkX2NwdV9zZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoQ1BVX0NPVU5UKFx1MDAyNmNoaWxkX2NwdV9zZXQpIFx1MDAzYyAyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjcHUgPSBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfc2VsZigpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiYjNDM7XHRDUFVfQ0xSKGNwdSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChDUFVfQ09VTlQoXHUwMDI2Y2hpbGRfY3B1X3NldCkgXHUwMDNlIE5SX1ZDUFVTKVxuJiM0MztcdFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFx1MDAyNmNoaWxkX2NwdV9zZXQpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuIFx0dTMyIGk7XG4gXHRpbnQgcywgcjtcbiBcdHBpZF90IHBpZDtcbiBcbiYjNDM7XHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XG4mIzQzO1xuIFx0c2VtID0gc2VtX29wZW4oXCYjMzQ7dm1fc2VtXCYjMzQ7LCBPX0NSRUFUIHwgT19FWENMLCAwNjQ0LCAwKTtcbiBcdHNlbV91bmxpbmsoXCYjMzQ7dm1fc2VtXCYjMzQ7KTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEZPUktfTlVNOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHBpZCA9IGZvcmsoKTtcbiBcdFx0VEVTVF9BU1NFUlQocGlkIFx1MDAzZT0gMCwgXCYjMzQ7JXM6IHVuYWJsZSB0byBmb3JrXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGlmIChwaWQgPT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiBcbkBAIC05Niw2ICYjNDM7OTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtYWR2aXNlLCAzLCB2b2lkICosIGFkZHIsIHNpemVfdCwgbGVuZ3RoLCBpbnQsIGFkdmljZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2dldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcbiYjNDM7XHRcdCAgICAgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgY3B1c2V0KTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsXG4mIzQzO1x0XHQgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY29uc3QgY3B1X3NldF90ICosIGNwdXNldCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCwgY3B1X3NldF90ICpjcHVzZXQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVfc2V0X3QpLCBjcHVzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IGNwdV9zZXRfdCAqY3B1c2V0KVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dHlwZWRlZiB2b2lkICooKnB0aHJlYWRfZm5fdCkodm9pZCAqKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGF0dHIsIHB0aHJlYWRfZm5fdCwgZm4sIHZvaWQgKiwgYXJnKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9qb2luLCAyLCBwdGhyZWFkX3QsIHRocmVhZCwgdm9pZCAqKiwgdGhyZWFkX3JldHVybik7XG4mIzQzO19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfY2FuY2VsLCAxLCBwdGhyZWFkX3QsIHRocmVhZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZChwdGhyZWFkX3QgdGhyZWFkLCB2b2lkICoqcilcbiYjNDM7e1xuJiM0MztcdGt2bV9wdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpXG4mIzQzO3tcbiYjNDM7XHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbmNlbCYjNDM7Sm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xuJiM0MzsgKiBhbmQgaXMgZXhwZWN0ZWQgdG8gZXhpdCBvbmx5IGluIHJlc3BvbnNlIHRvIGNhbmNlbGxhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqcjtcbiYjNDM7XG4mIzQzO1x0X19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQsIFx1MDAyNnIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHIgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbiYjNDM7XHRcdCAgICBcJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwgcik7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBrdm1fZnJlZV9mZChmZClcdFx0XFxcbiBkbyB7XHRcdFx0XHRcXFxuIFx0a3ZtX2Nsb3NlKGZkKTtcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggYjM5ZTcxM2MzMGE0Ni4uNWE3YTQ1NWI1Mzg3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0xMDg0LDYgJiM0MzsxMDg0LDggQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdm0gKnZtKTtcbiBcbiB2b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cyk7XG4gXG4mIzQzO2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XG4mIzQzO1xuIGludCBfX3Bpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcbkBAIC0xMDk0LDcgJiM0MzsxMDk2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpXG4gXHRURVNUX0FTU0VSVCghciwgXCYjMzQ7RmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAmIzM5OyV1JiMzOTtcJiMzNDssIGNwdSk7XG4gfVxuIFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Y3B1ID0ga3ZtX3BpY2tfcmFuZG9tX2NwdShwb3NzaWJsZV9jcHVzKTtcbiYjNDM7XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbiYjNDM7XHRyZXR1cm4gY3B1O1xuJiM0Mzt9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fYW55X2NwdShwdGhyZWFkX3QgdGFzaylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuaW5kZXggMjQwZjZmMGZkYmU0My4uMTY4YzUyNzM0ZmVmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTI5Niw3ICYjNDM7Mjk2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcbkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcbmluZGV4IDVkNzU5MGQwMTg2ODEuLmViYjI0Nzg4NzhkZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG5AQCAtMTI4LDcgJiM0MzsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0Y2xvc2UoX19ldmVudGZkKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnJhY2luZ190aHJlYWQsIE5VTEwsIHNlY29uZGFyeV9pcnFmZF9qdWdnbGVyLCB2bTIpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwOyBpJiM0MzsmIzQzOykge1xuIFx0XHRXUklURV9PTkNFKF9fZXZlbnRmZCwga3ZtX25ld19ldmVudGZkKCkpO1xuQEAgLTEzOSw1ICYjNDM7MTM5LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UoZG9uZSwgdHJ1ZSk7XG4tXHRwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihyYWNpbmdfdGhyZWFkLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcbmluZGV4IGE5MTBlM2FiYjhjNzEuLjk3NDgxM2VhODk1MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG5AQCAtMzY0LDggJiM0MzszNjQsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0KmN1cnJlbnRfc3RhZ2UgPSBLVk1fQkVGT1JFX01BUFBJTkdTO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLFxuLVx0XHRcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXG4mIzQzO1x0XHRcdFx0ICAgdGVzdF9hcmdzLnZjcHVzW2ldKTtcbiBcbiBcdHZjcHVzX2NvbXBsZXRlX25ld19zdGFnZSgqY3VycmVudF9zdGFnZSk7XG4gXHRwcl9pbmZvKFwmIzM0O1N0YXJ0ZWQgYWxsIHZDUFVzIHN1Y2Nlc3NmdWxseVxcblwmIzM0Oyk7XG5AQCAtNDEzLDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdHJldCA9IHNlbV9kZXN0cm95KFx1MDAyNnRlc3Rfc3RhZ2VfdXBkYXRlZCk7XG4gXHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXCYjMzQ7RXJyb3IgaW4gc2VtX2Rlc3Ryb3lcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMzc5NDU3NWQyY2EwYy4uOWRkYzA0N2Q1YzI3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5AQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCB2b2lkIGt2bV9wcmludF92Y3B1X3Bpbm5pbmdfaGVscCh2b2lkKVxuIFx0ICAgICAgIFwmIzM0OyAgICAgKGRlZmF1bHQ6IG5vIHBpbm5pbmcpXFxuXCYjMzQ7LCBuYW1lLCBuYW1lKTtcbiB9XG4gXG4tdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4mIzQzO2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiB7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiBcdGludCBucl9jcHVzO1xuQEAgLTY4MCwxMyAmIzQzOzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiBcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4gXG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuLVx0XHRcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIGNwdTtcbiBcdH1cbi1cbiBcdFRFU1RfRkFJTChcJiMzNDtGYWlsZWQgdG8gZmluZCByYW5kb20gQ1BVIGluIHBvc3NpYmxlX2NwdXNcJiMzNDspO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCAzNTk5Yjc1ZDk3YzkxLi4yODY0NTYyZjU3YjQwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgdm9pZCBtZW1zdHJlc3Nfc3RhcnRfdmNwdV90aHJlYWRzKGludCBucl92Y3B1cyxcbiBcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IGk7XG4gXHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VydW5uaW5nLCBmYWxzZSk7XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHUtXHUwMDNldGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1KTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMTIsNyAmIzQzOzMxMiw3IEBAIHZvaWQgbWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKGludCBucl92Y3B1cylcbiBcdFdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRvZ2dsZV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgc2xvdHMsIGJvb2wgZW5hYmxlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbmluZGV4IGVmOGQ3NmY3MWY4MzcuLmY3Y2U1YTZkZGNjMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbkBAIC0xNjcsOCAmIzQzOzE2Nyw4IEBAIHN0cnVjdCB1ZmZkX2Rlc2MgKnVmZmRfc2V0dXBfZGVtYW5kX3BhZ2luZyhpbnQgdWZmZF9tb2RlLCB1c2Vjb25kc190IGRlbGF5LFxuIFx0XHR1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyX2FyZ3NbaV0uaGFuZGxlciA9IGhhbmRsZXI7XG4gXHRcdHVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXS5waXBlID0gcGlwZXNbMF07XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxuLVx0XHRcdCAgICAgICBcdTAwMjZ1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyX2FyZ3NbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4gXG4gXHRcdFBFUl9WQ1BVX0RFQlVHKFwmIzM0O0NyZWF0ZWQgdWZmZCB0aHJlYWQgJWkgZm9yIEhWQSByYW5nZSBbJXAsICVwKVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICAgaSwgaHZhLCBodmEgJiM0MzsgbGVuKTtcbkBAIC0xODcsOCAmIzQzOzE4Nyw3IEBAIHZvaWQgdWZmZF9zdG9wX2RlbWFuZF9wYWdpbmcoc3RydWN0IHVmZmRfZGVzYyAqdWZmZClcbiBcdFx0XHQgICAgXCYjMzQ7VW5hYmxlIHRvIHdyaXRlIHRvIHBpcGVmZCAlaSBmb3IgdWZmZF9kZXNjICVwXCYjMzQ7LCBpLCB1ZmZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVmZmQtXHUwMDNlbnVtX3JlYWRlcnM7ICYjNDM7JiM0MztpKVxuLVx0XHRURVNUX0FTU0VSVCghcHRocmVhZF9qb2luKHVmZmQtXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCksXG4tXHRcdFx0ICAgIFwmIzM0O1B0aHJlYWRfam9pbiBmYWlsZWQgb24gcmVhZGVyICVpIGZvciB1ZmZkX2Rlc2MgJXBcJiMzNDssIGksIHVmZmQpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih1ZmZkLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpO1xuIFxuIFx0Y2xvc2UodWZmZC1cdTAwM2V1ZmZkKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCA0ZDlhZDYxMDRhNmVkLi5lMTI5OTYxMWJlMzIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzY2LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4ge1xuIFx0cHJfaW5mb192KFwmIzM0O0xhdW5jaGluZyB0aGUgdGVzdCBWTVxcblwmIzM0Oyk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgZGF0YSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmRhdGEtXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMzgxLDcgJiM0MzszODEsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhKVxuIFxuIHN0YXRpYyB2b2lkIHdhaXRfZ3Vlc3RfZXhpdChzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSlcbiB7XG4tXHRwdGhyZWFkX2pvaW4oZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbGV0X2d1ZXN0X3J1bihzdHJ1Y3Qgc3luY19hcmVhICpzeW5jKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuaW5kZXggM2Q1ZjMzYTYzYjJiNC4uNzQxZTM0Mzk2MmVkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgcHRocmVhZF90ICpzcGF3bl93b3JrZXJzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyxcbiBcdFx0aW5mb1tpXS52Y3B1ID0gdmNwdXNbaV07XG4gXHRcdGluZm9baV0uc3RhcnRfZ3BhID0gZ3BhO1xuIFx0XHRpbmZvW2ldLmVuZF9ncGEgPSBncGEgJiM0MzsgbnJfYnl0ZXM7XG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLCBcdTAwMjZpbmZvW2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgXHUwMDI2aW5mb1tpXSk7XG4gXHR9XG4gXHRyZXR1cm4gdGhyZWFkcztcbiB9XG5AQCAtNDA5LDcgJiM0Mzs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdC8qXG4gXHQgKiBEZWxpYmVyYXRlbHkgZXhpdCB3aXRob3V0IGRlbGV0aW5nIHRoZSByZW1haW5pbmcgbWVtc2xvdHMgb3IgY2xvc2luZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuaW5kZXggYTBmY2FlM2NiN2E4Yi4uYzU3NjMxYWFiM2QzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5AQCAtODQsNyAmIzQzOzg0LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcbiBcdCAqIENvbmN1cnJlbnRseSBkZWxldGUgKGFuZCByZWNyZWF0ZSkgdGhlIHNsb3QgdG8gdGVzdCBLVk0mIzM5O3MgaGFuZGxpbmdcbiBcdCAqIG9mIGEgcmFjaW5nIG1lbXNsb3QgZGVsZXRpb24gd2l0aCBwcmVmYXVsdGluZy5cbiBcdCAqL1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2c2xvdF93b3JrZXIsIE5VTEwsIGRlbGV0ZV9zbG90X3dvcmtlciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuIFxuIFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0xMTYsNyAmIzQzOzExNiw3IEBAIHN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXNsb3RfcmVjcmVhdGVkKSB7XG4gXHRcdFx0V1JJVEVfT05DRShkYXRhLnJlY3JlYXRlX3Nsb3QsIHRydWUpO1xuLVx0XHRcdHB0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7XG4mIzQzO1x0XHRcdGt2bV9wdGhyZWFkX2pvaW4oc2xvdF93b3JrZXIsIE5VTEwpO1xuIFx0XHRcdHNsb3RfcmVjcmVhdGVkID0gdHJ1ZTtcbiBcbiBcdFx0XHQvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuaW5kZXggNTU3ZTM5M2MyMjNiOS4uZGYzZTVhZDFjMzkzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG5AQCAtMjQxLDggJiM0MzsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0ICovXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylrdm1fZ2V0dGlkKCkpO1xuIFxuIFx0aWYgKGxhdGVuY3kgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG5AQCAtMzE0LDcgJiM0MzszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgICAgXCYjMzQ7ICBlLmcuIHZpYSBjcHVpZGxlLm9mZj0xIG9yIHZpYSAtbCBcdTAwM2NsYXRlbmN5XHUwMDNlLCBvciBydW4gd2l0aCAtdSB0b1xcblwmIzM0O1xuIFx0XHQgICAgXCYjMzQ7ICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLlwmIzM0OywgaSk7XG4gXG4tXHRwdGhyZWFkX2pvaW4obWlncmF0aW9uX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY1xuaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKVxuIFx0SE9TVF9TWU5DKHQudmNwdSwgU1RBR0VfU0tFWVNfU0VUKTtcbiBcdHByZXBhcmVfbWVtMTIoKTtcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcnVuX2d1ZXN0LCBcdTAwMjZ0LnZjcHUpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNtcHhjaGdfaXRlcl9vdXRlcjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZG8ge1xuQEAgLTcwMSw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jbXB4Y2hnX2tleV9jb25jdXJyZW50KHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFJFQUQsIG1lbTIsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7XG4gXHRURVNUX0FTU0VSVChwb3Bjb3VudF9lcSgqKF9fdWludDEyOF90ICopbWVtMSwgKihfX3VpbnQxMjhfdCAqKW1lbTIpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBhMTUyYWI2NWM2NTc3Li5kZmZlOTY1NGY0NWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiBcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZSh2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsICp2Y3B1KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21vdmVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHQvKiBEZWZlcmVkIHN5bmMgZnJvbSB3aGVuIHRoZSBtZW1zbG90IHdhcyBtaXNhbGlnbmVkIChhYm92ZSkuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG4gXG4tXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIH1cbkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0ICovXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgMCk7XG4gXG4tXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0cnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcbmluZGV4IDBiODhjNzQzZWU3ZDUuLmJjM2M2MmI3MmM1OGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5AQCAtNTQ4LDE1ICYjNDM7NTQ4LDE1IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuLVx0XHRwdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHRocmVhZCwgXHUwMDI2Y3B1c2V0KTtcbiBcdFx0VEVTVF9BU1NFUlQoQ1BVX0NPVU5UKFx1MDAyNmNwdXNldCkgPT0gMSBcdTAwMjZcdTAwMjYgQ1BVX0lTU0VUKGNwdSwgXHUwMDI2Y3B1c2V0KSxcbiBcdFx0XHQgICAgXCYjMzQ7V29ya2VyIGZhaWxlZCB0byBpbmhlcml0IHBhcmVudCYjMzk7cyBDUFUgYWZmaW5pdHlcJiMzNDspO1xuIFxuIFx0XHRkb1xuIFx0XHRcdHNjaGVkX3lpZWxkKCk7XG4gXHRcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXHUwMDNjIE1JTl9SVU5fREVMQVlfTlMpO1xuLVx0XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuIFx0XHRURVNUX0FTU0VSVChydW5fZGVsYXkgXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxuIFx0XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuaW5kZXggNzcxNTM1ZjlhYWQzYy4uZmUzOGNjNGNiYTA1MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuQEAgLTIyMiwzMCAmIzQzOzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY2FuY2VsIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcJiMzNDssXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cbi1cdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIFwmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdVszXTtcbiBcdGd2YV90IGhjYWxsX3BhZ2U7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbi1cdGludCBzdGFnZSA9IDEsIHI7XG4mIzQzO1x0aW50IHN0YWdlID0gMTtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbiBcbiBcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0hZUEVSVl9TRU5EX0lQSSkpO1xuQEAgLTI3MiwxMSAmIzQzOzI1NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdVswXSk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwmIzM0Oywgcik7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwmIzM0OywgZXJybm8pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHZjcHVfcnVuKHZjcHVbMF0pO1xuQEAgLTMwMiw5ICYjNDM7MjgyLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBkb25lOlxuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1swXSwgdmNwdVsxXSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5pbmRleCBiNGJlOWExNzUzNzlmLi44NGYyMmYzOWM4ZjIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5AQCAtNTQ4LDIzICYjNDM7NTQ4LDYgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0dm9pZCAqcmV0dmFsO1xuLVx0aW50IHI7XG4tXG4tXHRyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwmIzM0Oyxcbi1cdFx0ICAgIHZjcHUtXHUwMDNlaWQsIHIpO1xuLVx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICBcJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIHJldHZhbCk7XG4tfVxuLVxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtNTc1LDcgJiM0Mzs1NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dTY0ICpwdGU7XG4gXHRzdHJ1Y3QgdGVzdF9kYXRhICpkYXRhO1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuLVx0aW50IHN0YWdlID0gMSwgciwgaTtcbiYjNDM7XHRpbnQgc3RhZ2UgPSAxLCBpO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1RMQkZMVVNIKSk7XG4gXG5AQCAtNjMyLDExICYjNDM7NjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHZjcHVfc2V0X21zcih2Y3B1WzJdLCBIVl9YNjRfTVNSX1ZQX0lOREVYLCBXT1JLRVJfVkNQVV9JRF8yKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMl0pO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZFwmIzM0Oyk7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR2Y3B1X3J1bih2Y3B1WzBdKTtcbkBAIC02NjEsOCAmIzQzOzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR9XG4gXG4gZG9uZTpcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1sxXSwgdmNwdVsyXSk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jXG5pbmRleCAxZDJmNWQ0ZmQ0NWQ3Li4zYWEwNjczZjc5ZjMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jXG5AQCAtNDEyLDEzICYjNDM7NDEyLDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92XG4gXHRcdCAqL1xuIFx0XHR2aXJ0X21hcCh2bSwgZ3BhLCBncGEsIFBFUl9DUFVfREFUQV9TSVpFIC8gdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgX190ZXN0X21lbV9jb252ZXJzaW9ucywgdmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbmluZGV4IDEwZGI5ZmU2ZDkwNjMuLmU2ZDE2ZTlkNjEyMDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xuQEAgLTY1LDEzICYjNDM7NjUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wcml2YXRlX2FjY2Vzc19tZW1zbG90X2RlbGV0ZWQodm9pZClcbiBcdC8qIFJlcXVlc3QgdG8gYWNjZXNzIHBhZ2UgcHJpdmF0ZWx5ICovXG4gXHR2bV9tZW1fc2V0X3ByaXZhdGUodm0sIEVYSVRTX1RFU1RfR1BBLCBFWElUU19URVNUX1NJWkUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dm1fdGhyZWFkLCBOVUxMLFxuLVx0XHQgICAgICAgKHZvaWQgKigqKSh2b2lkICopKXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbixcbi1cdFx0ICAgICAgICh2b2lkICopdmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZtX3RocmVhZCwgTlVMTCxcbiYjNDM7XHRcdFx0ICAgKHB0aHJlYWRfZm5fdClydW5fdmNwdV9nZXRfZXhpdF9yZWFzb24sICh2b2lkICopdmNwdSk7XG4gXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgRVhJVFNfVEVTVF9TTE9UKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcdTAwMjZ0aHJlYWRfcmV0dXJuKTtcbiBcdGV4aXRfcmVhc29uID0gKHUzMikodTY0KXRocmVhZF9yZXR1cm47XG4gXG4gXHRURVNUX0FTU0VSVF9FUShleGl0X3JlYXNvbiwgS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcbmluZGV4IGNiYzkyYTg2MmVhOWMuLjdhMGJkOWY3YmE2YzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTUFYX1ZDUFVTOyBpJiM0MzsmIzQzOylcbiBcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9BUElDQkFTRSwgTEFQSUNfWDJBUElDKTtcbiBcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pLCAwKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlLCB2Y3B1c1swXSk7XG4gXG4gXHR2Y3B1TiA9IHZjcHVzW0tWTV9NQVhfVkNQVVMgLSAxXTtcbiBcdGZvciAodCA9IHRpbWUoTlVMTCkgJiM0MzsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbkBAIC02NSw4ICYjNDM7NjUsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHR2Y3B1X3NldF9tc3IodmNwdU4sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19ESVNBQkxFRCk7XG4gXHR9XG4gXG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpLCAwKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuaW5kZXggZDU5YWJiMTk4ZDg2Zi4uZGUwMDZlMWM4NjFjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jXG5AQCAtMTI4LDEwICYjNDM7MTI4LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2V2X21pZ3JhdGVfbG9ja2luZyh2b2lkKVxuIFx0XHQgICAgICAgc2l6ZW9mKGlucHV0W2ldLnNvdXJjZV92bXMpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSlcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2cHRbaV0sIE5VTEwsIGxvY2tpbmdfdGVzdF90aHJlYWQsIFx1MDAyNmlucHV0W2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXHUwMDI2aW5wdXRbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICYjNDM7JiM0MztpKVxuLVx0XHRwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgJiM0MzsmIzQzO2kpXG4gXHRcdGt2bV92bV9mcmVlKGlucHV0W2ldLnZtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG5pbmRleCA1YjBjMjM1OWJiYjQzLi45ZDc2YzJlZDc4NGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNcbkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpXG4gXHRcdCAgICAhIShydW4tXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpLFxuIFx0XHQgICAgISEocnVuLVx1MDAzZXMucmVncy5zcmVncy5lZmVyIFx1MDAyNiBFRkVSX0xNRSkpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pLCAwKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pO1xuIFxuIFx0Zm9yICh0ID0gdGltZShOVUxMKSAmIzQzOyBUSU1FT1VUOyB0aW1lKE5VTEwpIFx1MDAzYyB0Oykge1xuIFx0XHQvKlxuQEAgLTE5OSw4ICYjNDM7MTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jYW5jZWwodGhyZWFkKSwgMCk7XG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTtcbiBcbiBcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNcbmluZGV4IDU5ZGE4ZDRkYTYwNzkuLjJhM2E5YmQ4YjMzOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNcbkBAIC05NCwxMiAmIzQzOzk0LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRwdGhyZWFkX3QgY3B1X3RocmVhZHNbTlJfVEVTVF9WQ1BVU107XG4gXHR1bnNpZ25lZCBsb25nIGNwdTtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBOUl9URVNUX1ZDUFVTOyBjcHUmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmNwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7XG4gXG4gXHR1bnNpZ25lZCBsb25nIGZhaWx1cmVzID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBOUl9URVNUX1ZDUFVTOyBjcHUmIzQzOyYjNDM7KSB7XG4gXHRcdHZvaWQgKnRoaXNfY3B1X2ZhaWx1cmVzO1xuLVx0XHRwdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XG4gXHRcdGZhaWx1cmVzICYjNDM7PSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDNhMzI2YzVlNzRjYWIuLjc4ZTdhYWU4ZmFiOGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIyOCwyNSAmIzQzOzIyOCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2FuY2VsX2pvaW5fdmNwdV90aHJlYWQocHRocmVhZF90IHRocmVhZCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHZvaWQgKnJldHZhbDtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsXG4tXHRcdCAgICBcJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIFwmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAgIHU2NCAqcGlwaXNfcmN2ZClcbiB7XG5AQCAtMzg3LDcgJiM0MzszNjgsNiBAQCB2b2lkIGdldF9jbWRsaW5lX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50ICpydW5fc2VjcyxcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdGludCByO1xuIFx0aW50IHdhaXRfc2VjcztcbiBcdGNvbnN0IGludCBtYXhfaGFsdGVyX3dhaXQgPSAxMDtcbiBcdGludCBydW5fc2VjcyA9IDA7XG5AQCAtNDI4LDkgJiM0Mzs0MDgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xuIFxuIFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXHUwMDI2cGFyYW1zWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGhhbHRlciBmYWlsZWQgZXJybm89JWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1swXSk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWRcXG5cJiMzNDspO1xuIFxuIFx0d2FpdF9zZWNzID0gMDtcbkBAIC00NDcsOCAmIzQzOzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFwmIzM0O0hhbHRlciB2Q1BVIHRocmVhZCByZXBvcnRlZCBpdHMgQVBJQyBJRDogJXUgYWZ0ZXIgJWQgc2Vjb25kcy5cXG5cJiMzNDssXG4gXHRcdGRhdGEtXHUwMDNlaGFsdGVyX2FwaWNfaWQsIHdhaXRfc2Vjcyk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1sxXSk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1sxXSk7XG4gXG4gXHRmcHJpbnRmKHN0ZGVycixcbiBcdFx0XCYjMzQ7SVBJIHNlbmRlciB2Q1BVIHRocmVhZCBzdGFydGVkLiBMZXR0aW5nIHZDUFVzIHJ1biBmb3IgJWQgc2Vjb25kcy5cXG5cJiMzNDssXG5AQCAtNDYyLDggJiM0Mzs0MzksOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0LypcbiBcdCAqIENhbmNlbCB0aHJlYWRzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHN0b3AuXG4gXHQgKi9cbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHBhcmFtc1swXS52Y3B1KTtcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHBhcmFtc1sxXS52Y3B1KTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaG9zdCBzdXBwb3J0IElkbGUgSExULCBpLmUuIEtWTSAqbWlnaHQqIGJlIHVzaW5nIElkbGUgSExULFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG5pbmRleCA1MDc2ZjZhNzU0NTU3Li5hMjI2YTJmZDYxZDk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuY1xuQEAgLTQzNyw3ICYjNDM7NDM3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0cHRocmVhZF90IHRocmVhZDtcbiBcdGJvb2wgdmVyYm9zZTtcbi1cdGludCByZXQ7XG4gXG4gXHR2ZXJib3NlID0gYXJnYyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKCFzdHJuY21wKGFyZ3ZbMV0sIFwmIzM0Oy12XCYjMzQ7LCAzKSB8fFxuIFx0XHRcdCAgICAgICAhc3RybmNtcChhcmd2WzFdLCBcJiMzNDstLXZlcmJvc2VcJiMzNDssIDEwKSk7XG5AQCAtODk0LDggJiM0Mzs4OTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFx0aWYgKHZlcmJvc2UpXG4gXHRcdFx0XHRcdHByaW50ZihcJiMzNDtUZXN0aW5nIHNoaW5mbyBsb2NrIGNvcnJ1cHRpb24gKEtWTV9YRU5fSFZNX0VWVENITl9TRU5EKVxcblwmIzM0Oyk7XG4gXG4tXHRcdFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNmp1Z2dsZV9zaGluZm9fc3RhdGUsICh2b2lkICopdm0pO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlc1wmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XG4gXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xuIFx0XHRcdFx0XHQucG9ydCA9IDEsXG5AQCAtOTQ5LDExICYjNDM7OTQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRcdFRFU1RfQVNTRVJUKCFldnRjaG5faXJxX2V4cGVjdGVkLFxuIFx0XHRcdFx0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZXZlbnQgY2hhbm5lbCBJUlEgYnV0IGl0IGRpZG4mIzM5O3QgaGFwcGVuXCYjMzQ7KTtcbiBcbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4tXHRcdFx0XHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXCYjMzQ7cHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbi1cbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aHJlYWQsIDApO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwmIzM0O3B0aHJlYWRfam9pbigpIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHRcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRcdFx0Y2FzZSBURVNUX0dVRVNUX1NBV19JUlE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byB1c2UgY3VzdG9tIHB0aHJlYWQgd3JhcHBlcnMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWNjNWFjM2RmYWNmYjVhMzNmZjc1ZjFkZjRhOWY5NTYyZGJkMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jCmluZGV4IGY4YjAyNTk3ODk3YmQuLjAzMTYwYWQ2NjZmNTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwpAQCAtMTQxLDMzICYjNDM7MTQxLDI3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcnVuKHN0cnVjdCBrdm1fdm0gKnZtKQogewogCXB0aHJlYWRfdCBwdF92Y3B1X21pZ3JhdGlvbjsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0OwogCiAJcHRocmVhZF9tdXRleF9pbml0KCZhbXA7dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTsKIAl2Y3B1X2RvbmVfbWFwID0gYml0bWFwX3phbGxvYyh0ZXN0X2FyZ3MubnJfdmNwdXMpOwogCVRFU1RfQVNTRVJUKHZjcHVfZG9uZV9tYXAsICYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZjcHUgZG9uZSBiaXRtYXAmIzM0Oyk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3B0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLAotCQkJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTsKLQkJVEVTVF9BU1NFUlQoIXJldCwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHZDUFUtJWQgcHRocmVhZCYjMzQ7LCBpKTsKLQl9CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sCiYjNDM7CQkJCSAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7CiAKIAkvKiBTcGF3biBhIHRocmVhZCB0byBjb250cm9sIHRoZSB2Q1BVIG1pZ3JhdGlvbnMgKi8KIAlpZiAodGVzdF9hcmdzLm1pZ3JhdGlvbl9mcmVxX21zKSB7CiAJCXNyYW5kKHRpbWUoTlVMTCkpOwogCi0JCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsCi0JCQkJCXRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpOwotCQlURVNUX0FTU0VSVCghcmV0LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkJiMzNDspOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpOwogCX0KIAotCiAJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3RfYXJncy5ucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfam9pbihwdF92Y3B1X3J1bltpXSwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTsKIAogCWlmICh0ZXN0X2FyZ3MubWlncmF0aW9uX2ZyZXFfbXMpCi0JCXB0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTsKIAogCWJpdG1hcF9mcmVlKHZjcHVfZG9uZV9tYXApOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwppbmRleCA1ZTIzMTk5ODYxN2U3Li4zY2I4NTkzMmVlODVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwpAQCAtOTg4LDcgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpCiAJc3RydWN0IHRlc3RfYXJncyBhcmdzID0ge307CiAJc3RydWN0IGt2bV92bSAqdm07CiAJZ3ZhX3QgYXJnc19ndmE7Ci0JaW50IGdpY19mZCwgcmV0OwomIzQzOwlpbnQgZ2ljX2ZkOwogCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpOwogCkBAIC0xMDA0LDE1ICYjNDM7MTAwNCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpCiAKIAlnaWNfZmQgPSB2Z2ljX3YzX3NldHVwKHZtLCAyLCA2NCk7CiAKLQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pOwotCWlmIChyZXQpCi0JCVRFU1RfRkFJTCgmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxuJiMzNDssIHJldCk7Ci0JcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJbMV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzFdKTsKLQlpZiAocmV0KQotCQlURVNUX0ZBSUwoJiMzNDtDYW4mIzM5O3QgY3JlYXRlIHRocmVhZCBmb3IgdmNwdSAxICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJbMF0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzBdKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyWzFdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1sxXSk7CiAKLQlwdGhyZWFkX2pvaW4odGhyWzBdLCBOVUxMKTsKLQlwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih0aHJbMF0sIE5VTEwpOwomIzQzOwlrdm1fcHRocmVhZF9qb2luKHRoclsxXSwgTlVMTCk7CiAKIAljbG9zZShnaWNfZmQpOwogCWt2bV92bV9mcmVlKHZtKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwppbmRleCBkNjRkNDM0ZDNmMDZlLi45YTY5YzQzOWEwZjhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCkBAIC0zMTEsMjMgJiM0MzszMTEsMjMgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZCkKIAlwdGhyZWFkX2JhcnJpZXJfaW5pdCgmYW1wO3Rlc3Rfc2V0dXBfYmFycmllciwgTlVMTCwgbnJfdmNwdXMgJiM0MzsgbnJfZGV2aWNlcyAmIzQzOyAxKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcl90aHJlYWQsIHZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpOwogCiAJcHRocmVhZF9iYXJyaWVyX3dhaXQoJmFtcDt0ZXN0X3NldHVwX2JhcnJpZXIpOwogCiAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2RldmljZXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4obHBpX3RocmVhZHNbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7CiAKIAlkZWx0YSA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwogCXdyaXRlX2d1ZXN0X2dsb2JhbCh2bSwgdGVzdF9kYXRhLnJlcXVlc3RfdmNwdXNfc3RvcCwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJlcG9ydF9zdGF0cyhkZWx0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IGU4NDE5ZDdkYTFlYWIuLmFmNWViMDMzNGE3NGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCkBAIC02OTEsNyAmIzQzOzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAKIAlURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTsKIAogCWZvciAoaXRlcmF0aW9uID0gMTsgaXRlcmF0aW9uICZsdDs9IHAtJmd0O2l0ZXJhdGlvbnM7IGl0ZXJhdGlvbiYjNDM7JiM0MzspIHsKIAkJdW5zaWduZWQgbG9uZyBpLCByZWFwX2k7CkBAIC04MDUsNyAmIzQzOzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJV1JJVEVfT05DRShob3N0X3F1aXQsIHRydWUpOwogCXNlbV9wb3N0KCZhbXA7c2VtX3ZjcHVfY29udCk7CiAKLQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpOwomIzQzOwlrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTsKIAogCXByX2luZm8oJiMzNDtUb3RhbCBiaXRzIGNoZWNrZWQ6IGRpcnR5ICglbHUpLCBjbGVhciAoJWx1KVxuJiMzNDssCiAJCWhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jCmluZGV4IDMxNDdmNWM5N2U5NDMuLjRhYmFkNzE1ODk4OTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICogcmV0dXJuIG5vdGlmaWVycy4KICAqLwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O3NlbWFwaG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwpAQCAtMTQsMjAgJiM0MzsxMywyMyBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF91dGlsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgVkNQVV9OVU0gNAotI2RlZmluZSBTTEVFUElOR19USFJFQURfTlVNICgxICZsdDsmbHQ7IDQpCi0jZGVmaW5lIEZPUktfTlVNICgxVUxMICZsdDsmbHQ7IDkpCi0jZGVmaW5lIERFTEFZX1VTX01BWCAyMDAwCiYjNDM7I2RlZmluZSBOUl9WQ1BVUwkJNAomIzQzOyNkZWZpbmUgTlJfU0xFRVBFUlNfUEVSX1ZDUFUJMTYKJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlMJCTUxMgomIzQzOyNkZWZpbmUgREVMQVlfVVNfTUFYCQkyMDAwCiAKIHNlbV90ICpzZW07CiYjNDM7c3RhdGljIGNwdV9zZXRfdCBjaGlsZF9jcHVfc2V0OwogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiB7CiAJZm9yICg7OykKIAkJOyAgLyogU29tZSBidXN5IHdvcmsgKi8KLQlwcmludGYoJiMzNDtTaG91bGQgbm90IGJlIHJlYWNoZWQuXG4mIzM0Oyk7CiYjNDM7CUdVRVNUX0FTU0VSVCgwKTsKIH0KIAogc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZykKQEAgLTM3LDg0ICYjNDM7MzksNDcgQEAgc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZykKIAogCXZjcHVfcnVuKHZjcHUpOwogCi0JVEVTVF9BU1NFUlQoZmFsc2UsICYjMzQ7JXM6IGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXMmIzM0OywKLQkJICAgIF9fZnVuY19fLCBydW4tJmd0O2V4aXRfcmVhc29uLAotCQkgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi0mZ3Q7ZXhpdF9yZWFzb24pKTsKLQlwdGhyZWFkX2V4aXQoTlVMTCk7CiYjNDM7CVRFU1RfRkFJTCgmIzM0O3ZDUFUlZCBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzJiMzNDssCiYjNDM7CQkgIHZjcHUtJmd0O2lkLCBydW4tJmd0O2V4aXRfcmVhc29uLCBleGl0X3JlYXNvbl9zdHIocnVuLSZndDtleGl0X3JlYXNvbikpOwogfQogCiBzdGF0aWMgdm9pZCAqc2xlZXBpbmdfdGhyZWFkKHZvaWQgKmFyZykKIHsKIAlpbnQgZmQ7CiAKLQl3aGlsZSAodHJ1ZSkgewomIzQzOwl3aGlsZSAoMSkgewogCQlmZCA9IG9wZW4oJiMzNDsvZGV2L251bGwmIzM0OywgT19SRFdSKTsKIAkJY2xvc2UoZmQpOwogCX0KLQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDslczogZXhpdGVkJiMzNDssIF9fZnVuY19fKTsKLQlwdGhyZWFkX2V4aXQoTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKLQkJCQkgICAgICAgdm9pZCAqKCpmKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBmLCBhcmcpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwgJiMzNDslczogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQmIzM0OywgX19mdW5jX18pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldCkKLXsKLQlpbnQgcjsKLQotCXIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwgJiMzNDslczogZmFpbGVkIHNldCBhZmZpbml0eSYjMzQ7LCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19qb2luKHB0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKipyZXR2YWwpCi17Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgcmV0dmFsKTsKLQlURVNUX0FTU0VSVChyID09IDAsICYjMzQ7JXM6IGZhaWxlZCB0byBqb2luIHRocmVhZCYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CVRFU1RfRkFJTCgmIzM0OyVzOiBleGl0ZWQmIzM0OywgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCBydW5fdGVzdCh1MzIgcnVuKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQljcHVfc2V0X3QgY3B1X3NldDsKLQlwdGhyZWFkX3QgdGhyZWFkc1tWQ1BVX05VTV07Ci0JcHRocmVhZF90IHRocm93X2F3YXk7Ci0Jdm9pZCAqYjsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKIAl1MzIgaSwgajsKIAotCUNQVV9aRVJPKCZhbXA7Y3B1X3NldCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IFZDUFVfTlVNOyBpJiM0MzsmIzQzOykKLQkJQ1BVX1NFVChpLCAmYW1wO2NwdV9zZXQpOwotCi0Jdm0gPSB2bV9jcmVhdGUoVkNQVV9OVU0pOwomIzQzOwl2bSA9IHZtX2NyZWF0ZShOUl9WQ1BVUyk7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzOiBbJWRdIHN0YXJ0IHZjcHVzXG4mIzM0OywgX19mdW5jX18sIHJ1bik7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IFZDUFVfTlVNOyAmIzQzOyYjNDM7aSkgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfVkNQVVM7ICYjNDM7JiM0MztpKSB7CiAJCXZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7CiAKLQkJY2hlY2tfY3JlYXRlX3RocmVhZCgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTsKLQkJY2hlY2tfc2V0X2FmZmluaXR5KHRocmVhZHNbaV0sICZhbXA7Y3B1X3NldCk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTsKJiM0MzsJCWt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHRocmVhZCwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgU0xFRVBJTkdfVEhSRUFEX05VTTsgJiM0MzsmIzQzO2opIHsKLQkJCWNoZWNrX2NyZWF0ZV90aHJlYWQoJmFtcDt0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsCi0JCQkJCSAgICAodm9pZCAqKU5VTEwpOwotCQkJY2hlY2tfc2V0X2FmZmluaXR5KHRocm93X2F3YXksICZhbXA7Y3B1X3NldCk7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICYjNDM7JiM0MztqKSB7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBzbGVlcGluZ190aHJlYWQsICh2b2lkICopTlVMTCk7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkodGhyZWFkLCAmYW1wO2NoaWxkX2NwdV9zZXQpOwogCQl9CiAJfQogCXByX2RlYnVnKCYjMzQ7JXM6IFslZF0gYWxsIHRocmVhZHMgbGF1bmNoZWRcbiYjMzQ7LCBfX2Z1bmNfXywgcnVuKTsKIAlzZW1fcG9zdChzZW0pOwotCWZvciAoaSA9IDA7IGkgJmx0OyBWQ1BVX05VTTsgJiM0MzsmIzQzO2kpCi0JCWNoZWNrX2pvaW4odGhyZWFkc1tpXSwgJmFtcDtiKTsKLQkvKiBTaG91bGQgbm90IGJlIHJlYWNoZWQgKi8KLQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDslczogWyVkXSBjaGlsZCBlc2NhcGVkIHRoZSBuaW5qYSYjMzQ7LCBfX2Z1bmNfXywgcnVuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgdGhlIHBhcmVudCB0byBTSUdLSUxMIHRoaXMgY2hpbGQuICovCiYjNDM7CXdoaWxlICgxKTsKIH0KIAogdm9pZCB3YWl0X2Zvcl9jaGlsZF9zZXR1cChwaWRfdCBwaWQpCkBAIC0xNDcsMTYgJiM0MzsxMTIsMzQgQEAgdm9pZCB3YWl0X2Zvcl9jaGlsZF9zZXR1cChwaWRfdCBwaWQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfY2hpbGRfY3B1X3NldCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjaGlsZF9jcHVfc2V0KSwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKJiM0MzsKJiM0MzsJaWYgKENQVV9DT1VOVCgmYW1wO2NoaWxkX2NwdV9zZXQpICZsdDsgMikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKJiM0MzsJQ1BVX0NMUihjcHUsICZhbXA7Y2hpbGRfY3B1X3NldCk7CiYjNDM7CiYjNDM7CXdoaWxlIChDUFVfQ09VTlQoJmFtcDtjaGlsZF9jcHVfc2V0KSAmZ3Q7IE5SX1ZDUFVTKQomIzQzOwkJQ1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KCZhbXA7Y2hpbGRfY3B1X3NldCksICZhbXA7Y2hpbGRfY3B1X3NldCk7CiYjNDM7fQomIzQzOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXUzMiBpOwogCWludCBzLCByOwogCXBpZF90IHBpZDsKIAomIzQzOwlzZXR1cF9jaGlsZF9jcHVfc2V0KCk7CiYjNDM7CiAJc2VtID0gc2VtX29wZW4oJiMzNDt2bV9zZW0mIzM0OywgT19DUkVBVCB8IE9fRVhDTCwgMDY0NCwgMCk7CiAJc2VtX3VubGluaygmIzM0O3ZtX3NlbSYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBGT1JLX05VTTsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7CiAJCXBpZCA9IGZvcmsoKTsKIAkJVEVTVF9BU1NFUlQocGlkICZndDs9IDAsICYjMzQ7JXM6IHVuYWJsZSB0byBmb3JrJiMzNDssIF9fZnVuY19fKTsKIAkJaWYgKHBpZCA9PSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAppbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF91dGlsLmgmZ3Q7CiAKQEAgLTk2LDYgJiM0Mzs5Nyw1MiBAQCBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spOwogCiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9nZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsCiYjNDM7CQkgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIGNwdXNldCk7CiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsCiYjNDM7CQkgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY29uc3QgY3B1X3NldF90ICosIGNwdXNldCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1c2V0KQomIzQzO3sKJiM0MzsJa3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsCiYjNDM7CQkJCQkgICBjb25zdCBjcHVfc2V0X3QgKmNwdXNldCkKJiM0Mzt7CiYjNDM7CWt2bV9wdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7CiYjNDM7fQomIzQzOwomIzQzO3R5cGVkZWYgdm9pZCAqKCpwdGhyZWFkX2ZuX3QpKHZvaWQgKik7CiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsCiYjNDM7CQkgICAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGF0dHIsIHB0aHJlYWRfZm5fdCwgZm4sIHZvaWQgKiwgYXJnKTsKJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2pvaW4sIDIsIHB0aHJlYWRfdCwgdGhyZWFkLCB2b2lkICoqLCB0aHJlYWRfcmV0dXJuKTsKJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NhbmNlbCwgMSwgcHRocmVhZF90LCB0aHJlYWQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKipyKQomIzQzO3sKJiM0MzsJa3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpCiYjNDM7ewomIzQzOwlfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsJiM0MztKb2luIGEgcHRocmVhZCB0aGF0IHdhcyBjb25maWd1cmVkIHdpdGggUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCiYjNDM7ICogYW5kIGlzIGV4cGVjdGVkIHRvIGV4aXQgb25seSBpbiByZXNwb25zZSB0byBjYW5jZWxsYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHB0aHJlYWRfdCB0aHJlYWQpCiYjNDM7ewomIzQzOwl2b2lkICpyOwomIzQzOwomIzQzOwlfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgJmFtcDtyKTsKJiM0MzsJVEVTVF9BU1NFUlQociA9PSBQVEhSRUFEX0NBTkNFTEVELAomIzQzOwkJICAgICYjMzQ7ZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXAmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwgcik7CiYjNDM7fQomIzQzOwogI2RlZmluZSBrdm1fZnJlZV9mZChmZCkJCVwKIGRvIHsJCQkJXAogCWt2bV9jbG9zZShmZCk7CQlcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCBiMzllNzEzYzMwYTQ2Li41YTdhNDU1YjUzODc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTEwODQsNiAmIzQzOzEwODQsOCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92bSAqdm0pOwogCiB2b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cyk7CiAKJiM0MztpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpOwomIzQzOwogaW50IF9fcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSkKQEAgLTEwOTQsNyAmIzQzOzEwOTYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSkKIAlURVNUX0FTU0VSVCghciwgJiMzNDtGYWlsZWQgdG8gc2V0IHRocmVhZCBhZmZpbml0eSB0byBwQ1BVICYjMzk7JXUmIzM5OyYjMzQ7LCBjcHUpOwogfQogCi12b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJY3B1ID0ga3ZtX3BpY2tfcmFuZG9tX2NwdShwb3NzaWJsZV9jcHVzKTsKJiM0MzsJcGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7CiYjNDM7CXJldHVybiBjcHU7CiYjNDM7fQogCiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwppbmRleCAyNDBmNmYwZmRiZTQzLi4xNjhjNTI3MzRmZWY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwpAQCAtMjk2LDcgJiM0MzsyOTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYXZhaWxhYmxlX2NwdXMpLCAmYW1wO2F2YWlsYWJsZV9jcHVzKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07CkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZG9uZSwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmMKaW5kZXggNWQ3NTkwZDAxODY4MS4uZWJiMjQ3ODg3OGRlOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jCkBAIC0xMjgsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAljbG9zZShfX2V2ZW50ZmQpOwogCi0JcHRocmVhZF9jcmVhdGUoJmFtcDtyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDA7IGkmIzQzOyYjNDM7KSB7CiAJCVdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7CkBAIC0xMzksNSAmIzQzOzEzOSw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJV1JJVEVfT05DRShkb25lLCB0cnVlKTsKLQlwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYwppbmRleCBhOTEwZTNhYmI4YzcxLi45NzQ4MTNlYTg5NTMzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmMKQEAgLTM2NCw4ICYjNDM7MzY0LDggQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAkqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsCi0JCQkgICAgICAgdGVzdF9hcmdzLnZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsCiYjNDM7CQkJCSAgIHRlc3RfYXJncy52Y3B1c1tpXSk7CiAKIAl2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpOwogCXByX2luZm8oJiMzNDtTdGFydGVkIGFsbCB2Q1BVcyBzdWNjZXNzZnVsbHlcbiYjMzQ7KTsKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJldCA9IHNlbV9kZXN0cm95KCZhbXA7dGVzdF9zdGFnZV91cGRhdGVkKTsKIAlURVNUX0FTU0VSVChyZXQgPT0gMCwgJiMzNDtFcnJvciBpbiBzZW1fZGVzdHJveSYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwppbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpCiAJICAgICAgICYjMzQ7ICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcbiYjMzQ7LCBuYW1lLCBuYW1lKTsKIH0KIAotdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpCiYjNDM7aW50IGt2bV9waWNrX3JhbmRvbV9jcHUoY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQogewogCWludCB0YXJnZXRfaWR4OwogCWludCBucl9jcHVzOwpAQCAtNjgwLDEzICYjNDM7NjgwLDExIEBAIHZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQogCXRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NCgmYW1wO2t2bV9ybmcpICUgbnJfY3B1czsKIAogCWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHsKLQkJaWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpICZhbXA7JmFtcDsgdGFyZ2V0X2lkeC0tID09IDApIHsKLQkJCXBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgJmFtcDsmYW1wOyB0YXJnZXRfaWR4LS0gPT0gMCkKJiM0MzsJCQlyZXR1cm4gY3B1OwogCX0KLQogCVRFU1RfRkFJTCgmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1cyYjMzQ7KTsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYwppbmRleCAzNTk5Yjc1ZDk3YzkxLi4yODY0NTYyZjU3YjQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgdm9pZCBtZW1zdHJlc3Nfc3RhcnRfdmNwdV90aHJlYWRzKGludCBucl92Y3B1cywKIAkJdmNwdS0mZ3Q7dmNwdV9pZHggPSBpOwogCQlXUklURV9PTkNFKHZjcHUtJmd0O3J1bm5pbmcsIGZhbHNlKTsKIAotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHUtJmd0O3RocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1LSZndDt0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHUpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKQEAgLTMxMiw3ICYjNDM7MzEyLDcgQEAgdm9pZCBtZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMoaW50IG5yX3ZjcHVzKQogCVdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXS50aHJlYWQsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCB0b2dnbGVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHNsb3RzLCBib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKaW5kZXggZWY4ZDc2ZjcxZjgzNy4uZjdjZTVhNmRkY2MyMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKQEAgLTE2Nyw4ICYjNDM7MTY3LDggQEAgc3RydWN0IHVmZmRfZGVzYyAqdWZmZF9zZXR1cF9kZW1hbmRfcGFnaW5nKGludCB1ZmZkX21vZGUsIHVzZWNvbmRzX3QgZGVsYXksCiAJCXVmZmRfZGVzYy0mZ3Q7cmVhZGVyX2FyZ3NbaV0uaGFuZGxlciA9IGhhbmRsZXI7CiAJCXVmZmRfZGVzYy0mZ3Q7cmVhZGVyX2FyZ3NbaV0ucGlwZSA9IHBpcGVzWzBdOwogCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLAotCQkJICAgICAgICZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJfYXJnc1tpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt1ZmZkX2Rlc2MtJmd0O3JlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sCiYjNDM7CQkJCSAgICZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJfYXJnc1tpXSk7CiAKIAkJUEVSX1ZDUFVfREVCVUcoJiMzNDtDcmVhdGVkIHVmZmQgdGhyZWFkICVpIGZvciBIVkEgcmFuZ2UgWyVwLCAlcClcbiYjMzQ7LAogCQkJICAgICAgIGksIGh2YSwgaHZhICYjNDM7IGxlbik7CkBAIC0xODcsOCAmIzQzOzE4Nyw3IEBAIHZvaWQgdWZmZF9zdG9wX2RlbWFuZF9wYWdpbmcoc3RydWN0IHVmZmRfZGVzYyAqdWZmZCkKIAkJCSAgICAmIzM0O1VuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcCYjMzQ7LCBpLCB1ZmZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB1ZmZkLSZndDtudW1fcmVhZGVyczsgJiM0MzsmIzQzO2kpCi0JCVRFU1RfQVNTRVJUKCFwdGhyZWFkX2pvaW4odWZmZC0mZ3Q7cmVhZGVyc1tpXSwgTlVMTCksCi0JCQkgICAgJiMzNDtQdGhyZWFkX2pvaW4gZmFpbGVkIG9uIHJlYWRlciAlaSBmb3IgdWZmZF9kZXNjICVwJiMzNDssIGksIHVmZmQpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbih1ZmZkLSZndDtyZWFkZXJzW2ldLCBOVUxMKTsKIAogCWNsb3NlKHVmZmQtJmd0O3VmZmQpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCmluZGV4IDRkOWFkNjEwNGE2ZWQuLmUxMjk5NjExYmUzMjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyB2b2lkIGxhdW5jaF92bShzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSkKIHsKIAlwcl9pbmZvX3YoJiMzNDtMYXVuY2hpbmcgdGhlIHRlc3QgVk1cbiYjMzQ7KTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7ZGF0YS0mZ3Q7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7ZGF0YS0mZ3Q7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTsKIAogCS8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovCiAJd2FpdF9mb3JfdmNwdSgpOwpAQCAtMzgxLDcgJiM0MzszODEsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhKQogCiBzdGF0aWMgdm9pZCB3YWl0X2d1ZXN0X2V4aXQoc3RydWN0IHZtX2RhdGEgKmRhdGEpCiB7Ci0JcHRocmVhZF9qb2luKGRhdGEtJmd0O3ZjcHVfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbihkYXRhLSZndDt2Y3B1X3RocmVhZCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwppbmRleCAzZDVmMzNhNjNiMmI0Li43NDFlMzQzOTYyZWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jCkBAIC0yMjIsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBwdGhyZWFkX3QgKnNwYXduX3dvcmtlcnMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzLAogCQlpbmZvW2ldLnZjcHUgPSB2Y3B1c1tpXTsKIAkJaW5mb1tpXS5zdGFydF9ncGEgPSBncGE7CiAJCWluZm9baV0uZW5kX2dwYSA9IGdwYSAmIzQzOyBucl9ieXRlczsKLQkJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgJmFtcDtpbmZvW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLCAmYW1wO2luZm9baV0pOwogCX0KIAlyZXR1cm4gdGhyZWFkczsKIH0KQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSB2Q1BVcyBhY3R1YWxseSByYW4uICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKIAogCS8qCiAJICogRGVsaWJlcmF0ZWx5IGV4aXQgd2l0aG91dCBkZWxldGluZyB0aGUgcmVtYWluaW5nIG1lbXNsb3RzIG9yIGNsb3NpbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwppbmRleCBhMGZjYWUzY2I3YThiLi5jNTc2MzFhYWIzZDM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCkBAIC04NCw3ICYjNDM7ODQsNyBAQCBzdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LAogCSAqIENvbmN1cnJlbnRseSBkZWxldGUgKGFuZCByZWNyZWF0ZSkgdGhlIHNsb3QgdG8gdGVzdCBLVk0mIzM5O3MgaGFuZGxpbmcKIAkgKiBvZiBhIHJhY2luZyBtZW1zbG90IGRlbGV0aW9uIHdpdGggcHJlZmF1bHRpbmcuCiAJICovCi0JcHRocmVhZF9jcmVhdGUoJmFtcDtzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCAmYW1wO2RhdGEpOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDtzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCAmYW1wO2RhdGEpOwogCiAJd2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKQogCQljcHVfcmVsYXgoKTsKQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCwKIAkJICovCiAJCWlmICghc2xvdF9yZWNyZWF0ZWQpIHsKIAkJCVdSSVRFX09OQ0UoZGF0YS5yZWNyZWF0ZV9zbG90LCB0cnVlKTsKLQkJCXB0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7CiAJCQlzbG90X3JlY3JlYXRlZCA9IHRydWU7CiAKIAkJCS8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMKaW5kZXggNTU3ZTM5M2MyMjNiOS4uZGYzZTVhZDFjMzkzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwpAQCAtMjQxLDggJiM0MzsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlciwKLQkJICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlciwKJiM0MzsJCQkgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7CiAKIAlpZiAobGF0ZW5jeSAmZ3Q7PSAwKSB7CiAJCS8qCkBAIC0zMTQsNyAmIzQzOzMxNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAgICAmIzM0OyAgZS5nLiB2aWEgY3B1aWRsZS5vZmY9MSBvciB2aWEgLWwgJmx0O2xhdGVuY3kmZ3Q7LCBvciBydW4gd2l0aCAtdSB0b1xuJiMzNDsKIAkJICAgICYjMzQ7ICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLiYjMzQ7LCBpKTsKIAotCXB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTsKIAogCWt2bV92bV9mcmVlKHZtKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmMKaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jCkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKQogCUhPU1RfU1lOQyh0LnZjcHUsIFNUQUdFX1NLRVlTX1NFVCk7CiAJcHJlcGFyZV9tZW0xMigpOwogCU1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpOwotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsICZhbXA7dC52Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsICZhbXA7dC52Y3B1KTsKIAogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgY21weGNoZ19pdGVyX291dGVyOyBpJiM0MzsmIzQzOykgewogCQlkbyB7CkBAIC03MDEsNyAmIzQzOzcwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKQogCQl9CiAJfQogCi0JcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKIAogCU1PUCh0LnZjcHUsIExPR0lDQUwsIFJFQUQsIG1lbTIsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7CiAJVEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCmluZGV4IGExNTJhYjY1YzY1NzcuLmRmZmU5NjU0ZjQ1YmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwpAQCAtMTMzLDcgJiM0MzsxMzMsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCwKIAlodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTsKIAltZW1zZXQoaHZhLCAwLCAyICogNDA5Nik7CiAKLQlwdGhyZWFkX2NyZWF0ZSh2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsICp2Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpOwogCiAJLyogRW5zdXJlIHRoZSBndWVzdCB0aHJlYWQgaXMgc3B1biB1cC4gKi8KIAl3YWl0X2Zvcl92Y3B1KCk7CkBAIC0yMTYsNyAmIzQzOzIxNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbW92ZV9tZW1vcnlfcmVnaW9uKGJvb2wgZGlzYWJsZV9zbG90X3phcF9xdWlyaykKIAkvKiBEZWZlcmVkIHN5bmMgZnJvbSB3aGVuIHRoZSBtZW1zbG90IHdhcyBtaXNhbGlnbmVkIChhYm92ZSkuICovCiAJd2FpdF9mb3JfdmNwdSgpOwogCi0JcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7CiAKIAlrdm1fdm1fZnJlZSh2bSk7CiB9CkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKQogCSAqLwogCXZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCAwKTsKIAotCXB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpOwogCiAJcnVuID0gdmNwdS0mZ3Q7cnVuOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwppbmRleCAwYjg4Yzc0M2VlN2Q1Li5iYzNjNjJiNzJjNThjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMKQEAgLTU0OCwxNSAmIzQzOzU0OCwxNSBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKIAogCQkvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi8KIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgZG9fc3RlYWxfdGltZSwgTlVMTCk7Ci0JCXB0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHRocmVhZCwgJmFtcDtjcHVzZXQpOwogCQlURVNUX0FTU0VSVChDUFVfQ09VTlQoJmFtcDtjcHVzZXQpID09IDEgJmFtcDsmYW1wOyBDUFVfSVNTRVQoY3B1LCAmYW1wO2NwdXNldCksCiAJCQkgICAgJiMzNDtXb3JrZXIgZmFpbGVkIHRvIGluaGVyaXQgcGFyZW50JiMzOTtzIENQVSBhZmZpbml0eSYjMzQ7KTsKIAogCQlkbwogCQkJc2NoZWRfeWllbGQoKTsKIAkJd2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSAmbHQ7IE1JTl9SVU5fREVMQVlfTlMpOwotCQlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5OwogCQlURVNUX0FTU0VSVChydW5fZGVsYXkgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKIAkJCSAgICAmIzM0O0V4cGVjdGVkIHJ1bl9kZWxheSAmZ3Q7PSAlbGQsIGdvdCAlbGQmIzM0OywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKaW5kZXggNzcxNTM1ZjlhYWQzYy4uZmUzOGNjNGNiYTA1MSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKQEAgLTIyMiwzMCAmIzQzOzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm9pZCAqcmV0dmFsOwotCWludCByOwotCi0JciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZCYjMzQ7LAotCQkgICAgdmNwdS0mZ3Q7aWQsIHIpOwotCi0JciA9IHB0aHJlYWRfam9pbih0aHJlYWQsICZhbXA7cmV0dmFsKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZCYjMzQ7LAotCQkgICAgdmNwdS0mZ3Q7aWQsIHIpOwotCVRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELAotCQkgICAgJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELAotCQkgICAgcmV0dmFsKTsKLX0KLQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVbM107CiAJZ3ZhX3QgaGNhbGxfcGFnZTsKIAlwdGhyZWFkX3QgdGhyZWFkc1syXTsKLQlpbnQgc3RhZ2UgPSAxLCByOwomIzQzOwlpbnQgc3RhZ2UgPSAxOwogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCVRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0hZUEVSVl9TRU5EX0lQSSkpOwpAQCAtMjcyLDExICYjNDM7MjU1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpOwogCXZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMF0pOwogCi0JciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pOwotCVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCByKTsKLQotCXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQgZXJybm89JWQmIzM0OywgZXJybm8pOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTsKIAogCXdoaWxlICh0cnVlKSB7CiAJCXZjcHVfcnVuKHZjcHVbMF0pOwpAQCAtMzAyLDkgJiM0MzsyODIsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogZG9uZToKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCB2Y3B1WzFdKTsKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTsKJiM0MzsJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pOwogCWt2bV92bV9mcmVlKHZtKTsKIAotCXJldHVybiByOwomIzQzOwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKaW5kZXggYjRiZTlhMTc1Mzc5Zi4uODRmMjJmMzljOGYyMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKQEAgLTU0OCwyMyAmIzQzOzU0OCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2b2lkICpyZXR2YWw7Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwotCVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0JVEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsCi0JCSAgICAmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwJiMzNDssIFBUSFJFQURfQ0FOQ0VMRUQsCi0JCSAgICByZXR2YWwpOwotfQotCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXN0cnVjdCBrdm1fdm0gKnZtOwpAQCAtNTc1LDcgJiM0Mzs1NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXU2NCAqcHRlOwogCXN0cnVjdCB0ZXN0X2RhdGEgKmRhdGE7CiAJc3RydWN0IHVjYWxsIHVjOwotCWludCBzdGFnZSA9IDEsIHIsIGk7CiYjNDM7CWludCBzdGFnZSA9IDEsIGk7CiAKIAlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfVExCRkxVU0gpKTsKIApAQCAtNjMyLDExICYjNDM7NjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl2Y3B1X3NldF9tc3IodmNwdVsyXSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgV09SS0VSX1ZDUFVfSURfMik7CiAJdmNwdV9zZXRfaHZfY3B1aWQodmNwdVsyXSk7CiAKLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQmIzM0Oyk7Ci0KLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQmIzM0Oyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pOwogCiAJd2hpbGUgKHRydWUpIHsKIAkJdmNwdV9ydW4odmNwdVswXSk7CkBAIC02NjEsOCAmIzQzOzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiBkb25lOgotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pOwotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHZjcHVbMl0pOwomIzQzOwlrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTsKJiM0MzsJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7CiAJa3ZtX3ZtX2ZyZWUodm0pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCkBAIC00MTIsMTMgJiM0Mzs0MTIsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3YKIAkJICovCiAJCXZpcnRfbWFwKHZtLCBncGEsIGdwYSwgUEVSX0NQVV9EQVRBX1NJWkUgLyB2bS0mZ3Q7cGFnZV9zaXplKTsKIAotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTsKIAl9CiAKIAlXUklURV9PTkNFKHJ1bl92Y3B1cywgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwogCiAJa3ZtX3ZtX2ZyZWUodm0pOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMKaW5kZXggMTBkYjlmZTZkOTA2My4uZTZkMTZlOWQ2MTIwMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYwpAQCAtNjUsMTMgJiM0Mzs2NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKQogCS8qIFJlcXVlc3QgdG8gYWNjZXNzIHBhZ2UgcHJpdmF0ZWx5ICovCiAJdm1fbWVtX3NldF9wcml2YXRlKHZtLCBFWElUU19URVNUX0dQQSwgRVhJVFNfVEVTVF9TSVpFKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dm1fdGhyZWFkLCBOVUxMLAotCQkgICAgICAgKHZvaWQgKigqKSh2b2lkICopKXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbiwKLQkJICAgICAgICh2b2lkICopdmNwdSk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZtX3RocmVhZCwgTlVMTCwKJiM0MzsJCQkgICAocHRocmVhZF9mbl90KXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbiwgKHZvaWQgKil2Y3B1KTsKIAogCXZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCBFWElUU19URVNUX1NMT1QpOwogCi0JcHRocmVhZF9qb2luKHZtX3RocmVhZCwgJmFtcDt0aHJlYWRfcmV0dXJuKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih2bV90aHJlYWQsICZhbXA7dGhyZWFkX3JldHVybik7CiAJZXhpdF9yZWFzb24gPSAodTMyKSh1NjQpdGhyZWFkX3JldHVybjsKIAogCVRFU1RfQVNTRVJUX0VRKGV4aXRfcmVhc29uLCBLVk1fRVhJVF9NRU1PUllfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jCmluZGV4IGNiYzkyYTg2MmVhOWMuLjdhMGJkOWY3YmE2YzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmMKQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9NQVhfVkNQVVM7IGkmIzQzOyYjNDM7KQogCQl2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpOwogCi0JVEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2UsIHZjcHVzWzBdKSwgMCk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pOwogCiAJdmNwdU4gPSB2Y3B1c1tLVk1fTUFYX1ZDUFVTIC0gMV07CiAJZm9yICh0ID0gdGltZShOVUxMKSAmIzQzOyBUSU1FT1VUOyB0aW1lKE5VTEwpICZsdDsgdDspIHsKQEAgLTY1LDggJiM0Mzs2NSw3IEBAIGludCBtYWluKHZvaWQpCiAJCXZjcHVfc2V0X21zcih2Y3B1TiwgTVNSX0lBMzJfQVBJQ0JBU0UsIExBUElDX0RJU0FCTEVEKTsKIAl9CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTsKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7CiAKIAlrdm1fdm1fZnJlZSh2bSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYwppbmRleCBkNTlhYmIxOThkODZmLi5kZTAwNmUxYzg2MWMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jCkBAIC0xMjgsMTAgJiM0MzsxMjgsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zZXZfbWlncmF0ZV9sb2NraW5nKHZvaWQpCiAJCSAgICAgICBzaXplb2YoaW5wdXRbaV0uc291cmNlX3ZtcykpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSkKLQkJcHRocmVhZF9jcmVhdGUoJmFtcDtwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgJmFtcDtpbnB1dFtpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDtwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgJmFtcDtpbnB1dFtpXSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICYjNDM7JiM0MztpKQotCQlwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSkKIAkJa3ZtX3ZtX2ZyZWUoaW5wdXRbaV0udm0pOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jCmluZGV4IDViMGMyMzU5YmJiNDMuLjlkNzZjMmVkNzg0YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmMKQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcikKIAkJICAgICEhKHJ1bi0mZ3Q7cy5yZWdzLnNyZWdzLmNyNCAmYW1wOyBYODZfQ1I0X1BBRSksCiAJCSAgICAhIShydW4tJmd0O3MucmVncy5zcmVncy5lZmVyICZhbXA7IEVGRVJfTE1FKSk7CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKSwgMCk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKTsKIAogCWZvciAodCA9IHRpbWUoTlVMTCkgJiM0MzsgVElNRU9VVDsgdGltZShOVUxMKSAmbHQ7IHQ7KSB7CiAJCS8qCkBAIC0xOTksOCAmIzQzOzE5OSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpCiAJCX0KIAl9CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTsKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7CiAKIAlrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwppbmRleCA1OWRhOGQ0ZGE2MDc5Li4yYTNhOWJkOGIzMzhhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwpAQCAtOTQsMTIgJiM0Mzs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXB0aHJlYWRfdCBjcHVfdGhyZWFkc1tOUl9URVNUX1ZDUFVTXTsKIAl1bnNpZ25lZCBsb25nIGNwdTsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IE5SX1RFU1RfVkNQVVM7IGNwdSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7Y3B1X3RocmVhZHNbY3B1XSwgTlVMTCwgcnVuX3ZjcHUsICh2b2lkICopY3B1KTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO2NwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7CiAKIAl1bnNpZ25lZCBsb25nIGZhaWx1cmVzID0gMDsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IE5SX1RFU1RfVkNQVVM7IGNwdSYjNDM7JiM0MzspIHsKIAkJdm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7Ci0JCXB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCAmYW1wO3RoaXNfY3B1X2ZhaWx1cmVzKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgJmFtcDt0aGlzX2NwdV9mYWlsdXJlcyk7CiAJCWZhaWx1cmVzICYjNDM7PSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlczsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwppbmRleCAzYTMyNmM1ZTc0Y2FiLi43OGU3YWFlOGZhYjhkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCkBAIC0yMjgsMjUgJiM0MzsyMjgsNiBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm9pZCAqcmV0dmFsOwotCWludCByOwotCi0JciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JVEVTVF9BU1NFUlQociA9PSAwLAotCQkgICAgJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwKLQkJICAgICYjMzQ7cHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWQmIzM0OywKLQkJICAgIHZjcHUtJmd0O2lkLCByKTsKLQlURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCwKLQkJICAgICYjMzQ7ZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXAmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwKLQkJICAgIHJldHZhbCk7Ci19Ci0KIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgICB1NjQgKnBpcGlzX3JjdmQpCiB7CkBAIC0zODcsNyAmIzQzOzM2OCw2IEBAIHZvaWQgZ2V0X2NtZGxpbmVfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgKnJ1bl9zZWNzLAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWludCByOwogCWludCB3YWl0X3NlY3M7CiAJY29uc3QgaW50IG1heF9oYWx0ZXJfd2FpdCA9IDEwOwogCWludCBydW5fc2VjcyA9IDA7CkBAIC00MjgsOSAmIzQzOzQwOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkOwogCiAJLyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi8KLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgJmFtcDtwYXJhbXNbMF0pOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwKLQkJICAgICYjMzQ7cHRocmVhZF9jcmVhdGUgaGFsdGVyIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCBlcnJubyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCAmYW1wO3BhcmFtc1swXSk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWRcbiYjMzQ7KTsKIAogCXdhaXRfc2VjcyA9IDA7CkBAIC00NDcsOCAmIzQzOzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHJlcG9ydGVkIGl0cyBBUElDIElEOiAldSBhZnRlciAlZCBzZWNvbmRzLlxuJiMzNDssCiAJCWRhdGEtJmd0O2hhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpOwogCi0JciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsICZhbXA7cGFyYW1zWzFdKTsKLQlURVNUX0FTU0VSVChyID09IDAsICYjMzQ7cHRocmVhZF9jcmVhdGUgc2VuZGVyIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCBlcnJubyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCAmYW1wO3BhcmFtc1sxXSk7CiAKIAlmcHJpbnRmKHN0ZGVyciwKIAkJJiMzNDtJUEkgc2VuZGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWQuIExldHRpbmcgdkNQVXMgcnVuIGZvciAlZCBzZWNvbmRzLlxuJiMzNDssCkBAIC00NjIsOCAmIzQzOzQzOSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJLyoKIAkgKiBDYW5jZWwgdGhyZWFkcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBzdG9wLgogCSAqLwotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHBhcmFtc1swXS52Y3B1KTsKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCBwYXJhbXNbMV0udmNwdSk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMF0pOwomIzQzOwlrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTsKIAogCS8qCiAJICogSWYgdGhlIGhvc3Qgc3VwcG9ydCBJZGxlIEhMVCwgaS5lLiBLVk0gKm1pZ2h0KiBiZSB1c2luZyBJZGxlIEhMVCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jCmluZGV4IDUwNzZmNmE3NTQ1NTcuLmEyMjZhMmZkNjFkOTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYwpAQCAtNDM3LDcgJiM0Mzs0MzcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXN0cnVjdCBrdm1fdm0gKnZtOwogCXB0aHJlYWRfdCB0aHJlYWQ7CiAJYm9vbCB2ZXJib3NlOwotCWludCByZXQ7CiAKIAl2ZXJib3NlID0gYXJnYyAmZ3Q7IDEgJmFtcDsmYW1wOyAoIXN0cm5jbXAoYXJndlsxXSwgJiMzNDstdiYjMzQ7LCAzKSB8fAogCQkJICAgICAgICFzdHJuY21wKGFyZ3ZbMV0sICYjMzQ7LS12ZXJib3NlJiMzNDssIDEwKSk7CkBAIC04OTQsOCAmIzQzOzg5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJaWYgKHZlcmJvc2UpCiAJCQkJCXByaW50ZigmIzM0O1Rlc3Rpbmcgc2hpbmZvIGxvY2sgY29ycnVwdGlvbiAoS1ZNX1hFTl9IVk1fRVZUQ0hOX1NFTkQpXG4mIzM0Oyk7CiAKLQkJCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgJmFtcDtqdWdnbGVfc2hpbmZvX3N0YXRlLCAodm9pZCAqKXZtKTsKLQkJCQlURVNUX0FTU0VSVChyZXQgPT0gMCwgJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgJmFtcDtqdWdnbGVfc2hpbmZvX3N0YXRlLCAodm9pZCAqKXZtKTsKIAogCQkJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiB1eGUgPSB7CiAJCQkJCS5wb3J0ID0gMSwKQEAgLTk0OSwxMSAmIzQzOzk0Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJVEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsCiAJCQkJCSAgICAmIzM0O0V4cGVjdGVkIGV2ZW50IGNoYW5uZWwgSVJRIGJ1dCBpdCBkaWRuJiMzOTt0IGhhcHBlbiYjMzQ7KTsKIAotCQkJCXJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JCQkJVEVTVF9BU1NFUlQocmV0ID09IDAsICYjMzQ7cHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzJiMzNDssIHN0cmVycm9yKHJldCkpOwotCi0JCQkJcmV0ID0gcHRocmVhZF9qb2luKHRocmVhZCwgMCk7Ci0JCQkJVEVTVF9BU1NFUlQocmV0ID09IDAsICYjMzQ7cHRocmVhZF9qb2luKCkgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihyZXQpKTsKJiM0MzsJCQkJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTsKIAkJCQlnb3RvIGRvbmU7CiAKIAkJCWNhc2UgVEVTVF9HVUVTVF9TQVdfSVJROgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY5MwoJCQkJCQkJb3V0cHV0OiA3MwoJCQkJCQkJdGhvdWdodHM6IDEwMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBObyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBgcHRocmVhZF9jcmVhdGVgIGFuZCBgcHRocmVhZF9qb2luYCB3aXRoIHRoZWlyIEtWTS1zcGVjaWZpYyBjb3VudGVycGFydHMgKGBrdm1fcHRocmVhZF9jcmVhdGVgLCBga3ZtX3B0aHJlYWRfam9pbmApIGFuZCBhZGRpbmcgc29tZSB3cmFwcGVycyBpbiBga3ZtX3N5c2NhbGxzLmhgLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgaXMgKnVzZXJzcGFjZSogdGVzdCBjb2RlISBJdCYjMzk7cyBub3QgcGFydCBvZiB0aGUga2VybmVsIGl0c2VsZi4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRoYXQgY2hhbmdlcyB0byBEb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBkbyBub3Qgd2FycmFudCBmdXp6aW5nLiAgVGhpcyBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgc2VsZnRlc3RzIGFuZCB0aGF0JiMzOTtzIGl0OyB0aGF0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUga2VybmVsIHNvdXJjZSB0aGF0ICpydW5zKiBpbiB0aGUga2VybmVsIHNwYWNlLiBTbywgYmFzZWQgb24gdGhhdCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7bm8mIzM0Oy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZmlsZSBsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXM6CgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaGAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNgCgpBbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjIyOjQ4LjY4MDcyOTU2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY3NTQ3ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gdXNlIGN1c3RvbSBwdGhyZWFkIHdyYXBwZXJzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OC42ODA3Mzg3NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTA5NTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlY2M1YWMzZGZhY2ZiNWEzM2ZmNzVmMWRmNGE5Zjk1NjJkYmQyNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IGY4YjAyNTk3ODk3YmQuLjAzMTYwYWQ2NjZmNTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcXG5AQCAtMTQxLDMzICsxNDEsMjcgQEAgc3RhdGljIHZvaWQgdGVzdF9ydW4oc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4gXFx0cHRocmVhZF90IHB0X3ZjcHVfbWlncmF0aW9uO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdHB0aHJlYWRfbXV0ZXhfaW5pdChcXHUwMDI2dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTtcXG4gXFx0dmNwdV9kb25lX21hcCA9IGJpdG1hcF96YWxsb2ModGVzdF9hcmdzLm5yX3ZjcHVzKTtcXG4gXFx0VEVTVF9BU1NFUlQodmNwdV9kb25lX21hcCwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1IGRvbmUgYml0bWFwXFxcIik7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnB0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLFxcbi1cXHRcXHRcXHRcXHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7XFxuLVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHZDUFUtJWQgcHRocmVhZFxcXCIsIGkpO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkrKylcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdF92Y3B1X3J1bltpXSwgTlVMTCwgdGVzdF92Y3B1X3J1bixcXG4rXFx0XFx0XFx0XFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcXG4gXFxuIFxcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xcbiBcXHRpZiAodGVzdF9hcmdzLm1pZ3JhdGlvbl9mcmVxX21zKSB7XFxuIFxcdFxcdHNyYW5kKHRpbWUoTlVMTCkpO1xcbiBcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcXG4tXFx0XFx0VEVTVF9BU1NFUlQoIXJldCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkXFxcIik7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xcbiBcXHR9XFxuIFxcbi1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3RfYXJncy5ucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2FyZ3MubWlncmF0aW9uX2ZyZXFfbXMpXFxuLVxcdFxcdHB0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xcbiBcXG4gXFx0Yml0bWFwX2ZyZWUodmNwdV9kb25lX21hcCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xcbmluZGV4IDVlMjMxOTk4NjE3ZTcuLjNjYjg1OTMyZWU4NWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xcbkBAIC05ODgsNyArOTg4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3R3b19jcHVzKHZvaWQgKmdjb2RlKVxcbiBcXHRzdHJ1Y3QgdGVzdF9hcmdzIGFyZ3MgPSB7fTtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdGd2YV90IGFyZ3NfZ3ZhO1xcbi1cXHRpbnQgZ2ljX2ZkLCByZXQ7XFxuK1xcdGludCBnaWNfZmQ7XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKDIsIGdjb2RlLCB2Y3B1cyk7XFxuIFxcbkBAIC0xMDA0LDE1ICsxMDA0LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcXG4gXFxuIFxcdGdpY19mZCA9IHZnaWNfdjNfc2V0dXAodm0sIDIsIDY0KTtcXG4gXFxuLVxcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJbMF0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzBdKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0VEVTVF9GQUlMKFxcXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4tXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRURVNUX0ZBSUwoXFxcIkNhbid0IGNyZWF0ZSB0aHJlYWQgZm9yIHZjcHUgMSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XFxuLVxcdHB0aHJlYWRfam9pbih0aHJbMV0sIE5VTEwpO1xcbitcXHRrdm1fcHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcXG4gXFxuIFxcdGNsb3NlKGdpY19mZCk7XFxuIFxcdGt2bV92bV9mcmVlKHZtKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXFxuaW5kZXggZDY0ZDQzNGQzZjA2ZS4uOWE2OWM0MzlhMGY4ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5AQCAtMzExLDIzICszMTEsMjMgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gXFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllciwgTlVMTCwgbnJfdmNwdXMgKyBucl9kZXZpY2VzICsgMSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcl90aHJlYWQsIHZjcHVzW2ldKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXZpY2VzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpO1xcbiBcXG4gXFx0cHRocmVhZF9iYXJyaWVyX3dhaXQoXFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllcik7XFxuIFxcbiBcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXZpY2VzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4obHBpX3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0ZGVsdGEgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcXG4gXFx0d3JpdGVfZ3Vlc3RfZ2xvYmFsKHZtLCB0ZXN0X2RhdGEucmVxdWVzdF92Y3B1c19zdG9wLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0cmVwb3J0X3N0YXRzKGRlbHRhKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuaW5kZXggZTg0MTlkN2RhMWVhYi4uYWY1ZWIwMzM0YTc0ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0VEVTVF9BU1NFUlRfRVEodmNwdV9zdG9wLCBmYWxzZSk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsIHZjcHUpO1xcbiBcXG4gXFx0Zm9yIChpdGVyYXRpb24gPSAxOyBpdGVyYXRpb24gXFx1MDAzYz0gcC1cXHUwMDNlaXRlcmF0aW9uczsgaXRlcmF0aW9uKyspIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBpLCByZWFwX2k7XFxuQEAgLTgwNSw3ICs4MDUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRXUklURV9PTkNFKGhvc3RfcXVpdCwgdHJ1ZSk7XFxuIFxcdHNlbV9wb3N0KFxcdTAwMjZzZW1fdmNwdV9jb250KTtcXG4gXFxuLVxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwiVG90YWwgYml0cyBjaGVja2VkOiBkaXJ0eSAoJWx1KSwgY2xlYXIgKCVsdSlcXFxcblxcXCIsXFxuIFxcdFxcdGhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcXG5pbmRleCAzMTQ3ZjVjOTdlOTQzLi40YWJhZDcxNTg5ODk5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xcbkBAIC01LDcgKzUsNiBAQFxcbiAgKiByZXR1cm4gbm90aWZpZXJzLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZW1hcGhvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuQEAgLTE0LDIwICsxMywyMyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfdXRpbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcImt2bV9zeXNjYWxscy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInVjYWxsX2NvbW1vbi5oXFxcIlxcbiBcXG4tI2RlZmluZSBWQ1BVX05VTSA0XFxuLSNkZWZpbmUgU0xFRVBJTkdfVEhSRUFEX05VTSAoMSBcXHUwMDNjXFx1MDAzYyA0KVxcbi0jZGVmaW5lIEZPUktfTlVNICgxVUxMIFxcdTAwM2NcXHUwMDNjIDkpXFxuLSNkZWZpbmUgREVMQVlfVVNfTUFYIDIwMDBcXG4rI2RlZmluZSBOUl9WQ1BVU1xcdFxcdDRcXG4rI2RlZmluZSBOUl9TTEVFUEVSU19QRVJfVkNQVVxcdDE2XFxuKyNkZWZpbmUgTlJfSVRFUkFUSU9OU1xcdFxcdDUxMlxcbisjZGVmaW5lIERFTEFZX1VTX01BWFxcdFxcdDIwMDBcXG4gXFxuIHNlbV90ICpzZW07XFxuK3N0YXRpYyBjcHVfc2V0X3QgY2hpbGRfY3B1X3NldDtcXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcXG4ge1xcbiBcXHRmb3IgKDs7KVxcbiBcXHRcXHQ7ICAvKiBTb21lIGJ1c3kgd29yayAqL1xcbi1cXHRwcmludGYoXFxcIlNob3VsZCBub3QgYmUgcmVhY2hlZC5cXFxcblxcXCIpO1xcbitcXHRHVUVTVF9BU1NFUlQoMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXFxuQEAgLTM3LDg0ICszOSw0NyBAQCBzdGF0aWMgdm9pZCAqcnVuX3ZjcHUodm9pZCAqYXJnKVxcbiBcXG4gXFx0dmNwdV9ydW4odmNwdSk7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChmYWxzZSwgXFxcIiVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXFxcIixcXG4tXFx0XFx0ICAgIF9fZnVuY19fLCBydW4tXFx1MDAzZWV4aXRfcmVhc29uLFxcbi1cXHRcXHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4tXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbitcXHRURVNUX0ZBSUwoXFxcInZDUFUlZCBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXFxcIixcXG4rXFx0XFx0ICB2Y3B1LVxcdTAwM2VpZCwgcnVuLVxcdTAwM2VleGl0X3JlYXNvbiwgZXhpdF9yZWFzb25fc3RyKHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKnNsZWVwaW5nX3RocmVhZCh2b2lkICphcmcpXFxuIHtcXG4gXFx0aW50IGZkO1xcbiBcXG4tXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0ZmQgPSBvcGVuKFxcXCIvZGV2L251bGxcXFwiLCBPX1JEV1IpO1xcbiBcXHRcXHRjbG9zZShmZCk7XFxuIFxcdH1cXG4tXFx0VEVTVF9BU1NFUlQoZmFsc2UsIFxcXCIlczogZXhpdGVkXFxcIiwgX19mdW5jX18pO1xcbi1cXHRwdGhyZWFkX2V4aXQoTlVMTCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0cixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKigqZikodm9pZCAqKSwgdm9pZCAqYXJnKVxcbi17XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgZiwgYXJnKTtcXG4tXFx0VEVTVF9BU1NFUlQociA9PSAwLCBcXFwiJXM6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkXFxcIiwgX19mdW5jX18pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcXG4te1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsIFxcXCIlczogZmFpbGVkIHNldCBhZmZpbml0eVxcXCIsIF9fZnVuY19fKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2pvaW4ocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnJldHZhbClcXG4te1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCByZXR2YWwpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsIFxcXCIlczogZmFpbGVkIHRvIGpvaW4gdGhyZWFkXFxcIiwgX19mdW5jX18pO1xcbitcXHRURVNUX0ZBSUwoXFxcIiVzOiBleGl0ZWRcXFwiLCBfX2Z1bmNfXyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KHUzMiBydW4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFx0Y3B1X3NldF90IGNwdV9zZXQ7XFxuLVxcdHB0aHJlYWRfdCB0aHJlYWRzW1ZDUFVfTlVNXTtcXG4tXFx0cHRocmVhZF90IHRocm93X2F3YXk7XFxuLVxcdHZvaWQgKmI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuIFxcdHUzMiBpLCBqO1xcbiBcXG4tXFx0Q1BVX1pFUk8oXFx1MDAyNmNwdV9zZXQpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkNQVV9OVU07IGkrKylcXG4tXFx0XFx0Q1BVX1NFVChpLCBcXHUwMDI2Y3B1X3NldCk7XFxuLVxcbi1cXHR2bSA9IHZtX2NyZWF0ZShWQ1BVX05VTSk7XFxuK1xcdHZtID0gdm1fY3JlYXRlKE5SX1ZDUFVTKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlczogWyVkXSBzdGFydCB2Y3B1c1xcXFxuXFxcIiwgX19mdW5jX18sIHJ1bik7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBWQ1BVX05VTTsgKytpKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WQ1BVUzsgKytpKSB7XFxuIFxcdFxcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHRcXHRjaGVja19jcmVhdGVfdGhyZWFkKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XFxuLVxcdFxcdGNoZWNrX3NldF9hZmZpbml0eSh0aHJlYWRzW2ldLCBcXHUwMDI2Y3B1X3NldCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHRocmVhZCwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFNMRUVQSU5HX1RIUkVBRF9OVU07ICsraikge1xcbi1cXHRcXHRcXHRjaGVja19jcmVhdGVfdGhyZWFkKFxcdTAwMjZ0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAodm9pZCAqKU5VTEwpO1xcbi1cXHRcXHRcXHRjaGVja19zZXRfYWZmaW5pdHkodGhyb3dfYXdheSwgXFx1MDAyNmNwdV9zZXQpO1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICsraikge1xcbitcXHRcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLCAodm9pZCAqKU5VTEwpO1xcbitcXHRcXHRcXHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFxcdTAwMjZjaGlsZF9jcHVfc2V0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCIlczogWyVkXSBhbGwgdGhyZWFkcyBsYXVuY2hlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJ1bik7XFxuIFxcdHNlbV9wb3N0KHNlbSk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBWQ1BVX05VTTsgKytpKVxcbi1cXHRcXHRjaGVja19qb2luKHRocmVhZHNbaV0sIFxcdTAwMjZiKTtcXG4tXFx0LyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovXFxuLVxcdFRFU1RfQVNTRVJUKGZhbHNlLCBcXFwiJXM6IFslZF0gY2hpbGQgZXNjYXBlZCB0aGUgbmluamFcXFwiLCBfX2Z1bmNfXywgcnVuKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gU0lHS0lMTCB0aGlzIGNoaWxkLiAqL1xcbitcXHR3aGlsZSAoMSk7XFxuIH1cXG4gXFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxcbkBAIC0xNDcsMTYgKzExMiwzNCBAQCB2b2lkIHdhaXRfZm9yX2NoaWxkX3NldHVwKHBpZF90IHBpZClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZXR1cF9jaGlsZF9jcHVfc2V0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFxcdTAwMjZjaGlsZF9jcHVfc2V0KTtcXG4rXFxuK1xcdGlmIChDUFVfQ09VTlQoXFx1MDAyNmNoaWxkX2NwdV9zZXQpIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbitcXHRDUFVfQ0xSKGNwdSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbitcXG4rXFx0d2hpbGUgKENQVV9DT1VOVChcXHUwMDI2Y2hpbGRfY3B1X3NldCkgXFx1MDAzZSBOUl9WQ1BVUylcXG4rXFx0XFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFxcdTAwMjZjaGlsZF9jcHVfc2V0KSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbit9XFxuK1xcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0dTMyIGk7XFxuIFxcdGludCBzLCByO1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbitcXHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XFxuK1xcbiBcXHRzZW0gPSBzZW1fb3BlbihcXFwidm1fc2VtXFxcIiwgT19DUkVBVCB8IE9fRVhDTCwgMDY0NCwgMCk7XFxuIFxcdHNlbV91bmxpbmsoXFxcInZtX3NlbVxcXCIpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZPUktfTlVNOyArK2kpIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lURVJBVElPTlM7ICsraSkge1xcbiBcXHRcXHRwaWQgPSBmb3JrKCk7XFxuIFxcdFxcdFRFU1RfQVNTRVJUKHBpZCBcXHUwMDNlPSAwLCBcXFwiJXM6IHVuYWJsZSB0byBmb3JrXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRpZiAocGlkID09IDApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfdXRpbC5oXFx1MDAzZVxcbiBcXG5AQCAtOTYsNiArOTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xcbiBfX0tWTV9TWVNDQUxMX0RFRklORShzY2hlZF9nZXRhZmZpbml0eSwgMywgcGlkX3QsIHBpZCwgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgbWFzayk7XFxuIFxcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2dldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcXG4rXFx0XFx0ICAgICBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBjcHVzZXQpO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX3NldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcXG4rXFx0XFx0ICAgICBzaXplX3QsIGNwdXNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCAqLCBjcHVzZXQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1c2V0KVxcbit7XFxuK1xcdGt2bV9wdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcHRocmVhZF9zZXRhZmZpbml0eShwdGhyZWFkX3QgdGhyZWFkLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjcHVfc2V0X3QgKmNwdXNldClcXG4re1xcbitcXHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVfc2V0X3QpLCBjcHVzZXQpO1xcbit9XFxuK1xcbit0eXBlZGVmIHZvaWQgKigqcHRocmVhZF9mbl90KSh2b2lkICopO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NyZWF0ZSwgNCwgcHRocmVhZF90ICosIHRocmVhZCxcXG4rXFx0XFx0ICAgICBjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBhdHRyLCBwdGhyZWFkX2ZuX3QsIGZuLCB2b2lkICosIGFyZyk7XFxuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfam9pbiwgMiwgcHRocmVhZF90LCB0aHJlYWQsIHZvaWQgKiosIHRocmVhZF9yZXR1cm4pO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NhbmNlbCwgMSwgcHRocmVhZF90LCB0aHJlYWQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnIpXFxuK3tcXG4rXFx0a3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpXFxuK3tcXG4rXFx0X19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQsIE5VTEwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDYW5jZWwrSm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xcbisgKiBhbmQgaXMgZXhwZWN0ZWQgdG8gZXhpdCBvbmx5IGluIHJlc3BvbnNlIHRvIGNhbmNlbGxhdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxcbit7XFxuK1xcdHZvaWQgKnI7XFxuK1xcbitcXHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgXFx1MDAyNnIpO1xcbitcXHRURVNUX0FTU0VSVChyID09IFBUSFJFQURfQ0FOQ0VMRUQsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXBcXFwiLCBQVEhSRUFEX0NBTkNFTEVELCByKTtcXG4rfVxcbitcXG4gI2RlZmluZSBrdm1fZnJlZV9mZChmZClcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGt2bV9jbG9zZShmZCk7XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbmluZGV4IGIzOWU3MTNjMzBhNDYuLjVhN2E0NTViNTM4NzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMTA4NCw2ICsxMDg0LDggQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4gXFxuIHZvaWQga3ZtX3NldF9maWxlc19ybGltaXQodTMyIG5yX3ZjcHVzKTtcXG4gXFxuK2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XFxuK1xcbiBpbnQgX19waW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcXG5AQCAtMTA5NCw3ICsxMDk2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpXFxuIFxcdFRFU1RfQVNTRVJUKCFyLCBcXFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXFxcIiwgY3B1KTtcXG4gfVxcbiBcXG4tdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpO1xcbitzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGNwdSA9IGt2bV9waWNrX3JhbmRvbV9jcHUocG9zc2libGVfY3B1cyk7XFxuK1xcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xcbitcXHRyZXR1cm4gY3B1O1xcbit9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5pbmRleCAyNDBmNmYwZmRiZTQzLi4xNjhjNTI3MzRmZWY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5AQCAtMjk2LDcgKzI5Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksIFxcdTAwMjZhdmFpbGFibGVfY3B1cyk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xcbitcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07XFxuQEAgLTM1Niw3ICszNTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcXG5pbmRleCA1ZDc1OTBkMDE4NjgxLi5lYmIyNDc4ODc4ZGU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXFxuQEAgLTEyOCw3ICsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0Y2xvc2UoX19ldmVudGZkKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDsgaSsrKSB7XFxuIFxcdFxcdFdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7XFxuQEAgLTEzOSw1ICsxMzksNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR9XFxuIFxcbiBcXHRXUklURV9PTkNFKGRvbmUsIHRydWUpO1xcbi1cXHRwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcXG5pbmRleCBhOTEwZTNhYmI4YzcxLi45NzQ4MTNlYTg5NTMzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXFxuQEAgLTM2NCw4ICszNjQsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHQqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXFxuLVxcdFxcdFxcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xcbitcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXFxuK1xcdFxcdFxcdFxcdCAgIHRlc3RfYXJncy52Y3B1c1tpXSk7XFxuIFxcbiBcXHR2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpO1xcbiBcXHRwcl9pbmZvKFxcXCJTdGFydGVkIGFsbCB2Q1BVcyBzdWNjZXNzZnVsbHlcXFxcblxcXCIpO1xcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XFxuIFxcbiBcXHRyZXQgPSBzZW1fZGVzdHJveShcXHUwMDI2dGVzdF9zdGFnZV91cGRhdGVkKTtcXG4gXFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFxcXCJFcnJvciBpbiBzZW1fZGVzdHJveVxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5pbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcXG4gXFx0ICAgICAgIFxcXCIgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcXFxuXFxcIiwgbmFtZSwgbmFtZSk7XFxuIH1cXG4gXFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKVxcbitpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXFxuIHtcXG4gXFx0aW50IHRhcmdldF9pZHg7XFxuIFxcdGludCBucl9jcHVzO1xcbkBAIC02ODAsMTMgKzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcXG4gXFx0dGFyZ2V0X2lkeCA9IGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XFxuIFxcbiBcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIENQVV9TRVRTSVpFOyBjcHUrKykge1xcbi1cXHRcXHRpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApIHtcXG4tXFx0XFx0XFx0cGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApXFxuK1xcdFxcdFxcdHJldHVybiBjcHU7XFxuIFxcdH1cXG4tXFxuIFxcdFRFU1RfRkFJTChcXFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXFxcIik7XFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbmluZGV4IDM1OTliNzVkOTdjOTEuLjI4NjQ1NjJmNTdiNDAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgbWVtc3RyZXNzX3N0YXJ0X3ZjcHVfdGhyZWFkcyhpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gaTtcXG4gXFx0XFx0V1JJVEVfT05DRSh2Y3B1LVxcdTAwM2VydW5uaW5nLCBmYWxzZSk7XFxuIFxcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdS1cXHUwMDNldGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2V0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHUpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBtZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMoaW50IG5yX3ZjcHVzKVxcbiBcXHRXUklURV9PTkNFKG1lbXN0cmVzc19hcmdzLnN0b3BfdmNwdXMsIHRydWUpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdG9nZ2xlX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBzbG90cywgYm9vbCBlbmFibGUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcXG5pbmRleCBlZjhkNzZmNzFmODM3Li5mN2NlNWE2ZGRjYzIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcXG5AQCAtMTY3LDggKzE2Nyw4IEBAIHN0cnVjdCB1ZmZkX2Rlc2MgKnVmZmRfc2V0dXBfZGVtYW5kX3BhZ2luZyhpbnQgdWZmZF9tb2RlLCB1c2Vjb25kc190IGRlbGF5LFxcbiBcXHRcXHR1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcl9hcmdzW2ldLmhhbmRsZXIgPSBoYW5kbGVyO1xcbiBcXHRcXHR1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcl9hcmdzW2ldLnBpcGUgPSBwaXBlc1swXTtcXG4gXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sXFxuLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJfYXJnc1tpXSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJfYXJnc1tpXSk7XFxuIFxcbiBcXHRcXHRQRVJfVkNQVV9ERUJVRyhcXFwiQ3JlYXRlZCB1ZmZkIHRocmVhZCAlaSBmb3IgSFZBIHJhbmdlIFslcCwgJXApXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgaSwgaHZhLCBodmEgKyBsZW4pO1xcbkBAIC0xODcsOCArMTg3LDcgQEAgdm9pZCB1ZmZkX3N0b3BfZGVtYW5kX3BhZ2luZyhzdHJ1Y3QgdWZmZF9kZXNjICp1ZmZkKVxcbiBcXHRcXHRcXHQgICAgXFxcIlVuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcFxcXCIsIGksIHVmZmQpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVmZmQtXFx1MDAzZW51bV9yZWFkZXJzOyArK2kpXFxuLVxcdFxcdFRFU1RfQVNTRVJUKCFwdGhyZWFkX2pvaW4odWZmZC1cXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCksXFxuLVxcdFxcdFxcdCAgICBcXFwiUHRocmVhZF9qb2luIGZhaWxlZCBvbiByZWFkZXIgJWkgZm9yIHVmZmRfZGVzYyAlcFxcXCIsIGksIHVmZmQpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHVmZmQtXFx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0Y2xvc2UodWZmZC1cXHUwMDNldWZmZCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuaW5kZXggNGQ5YWQ2MTA0YTZlZC4uZTEyOTk2MTFiZTMyMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIHtcXG4gXFx0cHJfaW5mb192KFxcXCJMYXVuY2hpbmcgdGhlIHRlc3QgVk1cXFxcblxcXCIpO1xcbiBcXG4tXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNmRhdGEtXFx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgZGF0YSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2ZGF0YS1cXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXFxuIFxcdHdhaXRfZm9yX3ZjcHUoKTtcXG5AQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIFxcbiBzdGF0aWMgdm9pZCB3YWl0X2d1ZXN0X2V4aXQoc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIHtcXG4tXFx0cHRocmVhZF9qb2luKGRhdGEtXFx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbihkYXRhLVxcdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXFxuaW5kZXggM2Q1ZjMzYTYzYjJiNC4uNzQxZTM0Mzk2MmVkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyBwdGhyZWFkX3QgKnNwYXduX3dvcmtlcnMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzLFxcbiBcXHRcXHRpbmZvW2ldLnZjcHUgPSB2Y3B1c1tpXTtcXG4gXFx0XFx0aW5mb1tpXS5zdGFydF9ncGEgPSBncGE7XFxuIFxcdFxcdGluZm9baV0uZW5kX2dwYSA9IGdwYSArIG5yX2J5dGVzO1xcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFxcdTAwMjZpbmZvW2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgXFx1MDAyNmluZm9baV0pO1xcbiBcXHR9XFxuIFxcdHJldHVybiB0aHJlYWRzO1xcbiB9XFxuQEAgLTQwOSw3ICs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIERlbGliZXJhdGVseSBleGl0IHdpdGhvdXQgZGVsZXRpbmcgdGhlIHJlbWFpbmluZyBtZW1zbG90cyBvciBjbG9zaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xcbmluZGV4IGEwZmNhZTNjYjdhOGIuLmM1NzYzMWFhYjNkMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4gXFx0ICogQ29uY3VycmVudGx5IGRlbGV0ZSAoYW5kIHJlY3JlYXRlKSB0aGUgc2xvdCB0byB0ZXN0IEtWTSdzIGhhbmRsaW5nXFxuIFxcdCAqIG9mIGEgcmFjaW5nIG1lbXNsb3QgZGVsZXRpb24gd2l0aCBwcmVmYXVsdGluZy5cXG4gXFx0ICovXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2xvdF93b3JrZXIsIE5VTEwsIGRlbGV0ZV9zbG90X3dvcmtlciwgXFx1MDAyNmRhdGEpO1xcbiBcXG4gXFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxcbiBcXHRcXHRjcHVfcmVsYXgoKTtcXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIXNsb3RfcmVjcmVhdGVkKSB7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UoZGF0YS5yZWNyZWF0ZV9zbG90LCB0cnVlKTtcXG4tXFx0XFx0XFx0cHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcXG4rXFx0XFx0XFx0a3ZtX3B0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7XFxuIFxcdFxcdFxcdHNsb3RfcmVjcmVhdGVkID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbmluZGV4IDU1N2UzOTNjMjIzYjkuLmRmM2U1YWQxYzM5MzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuQEAgLTI0MSw4ICsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHQgKi9cXG4gXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcXG4tXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxcbitcXHRcXHRcXHQgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7XFxuIFxcbiBcXHRpZiAobGF0ZW5jeSBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTMxNCw3ICszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHQgICAgXFxcIiAgZS5nLiB2aWEgY3B1aWRsZS5vZmY9MSBvciB2aWEgLWwgXFx1MDAzY2xhdGVuY3lcXHUwMDNlLCBvciBydW4gd2l0aCAtdSB0b1xcXFxuXFxcIlxcbiBcXHRcXHQgICAgXFxcIiAgZGlzYWJsZSB0aGlzIHNhbml0eSBjaGVjay5cXFwiLCBpKTtcXG4gXFxuLVxcdHB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcXG4gXFxuIFxcdGt2bV92bV9mcmVlKHZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXFxuaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY1xcbkBAIC02NzgsNyArNjc4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jbXB4Y2hnX2tleV9jb25jdXJyZW50KHZvaWQpXFxuIFxcdEhPU1RfU1lOQyh0LnZjcHUsIFNUQUdFX1NLRVlTX1NFVCk7XFxuIFxcdHByZXBhcmVfbWVtMTIoKTtcXG4gXFx0TU9QKHQudmNwdSwgTE9HSUNBTCwgV1JJVEUsIG1lbTEsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7XFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHJ1bl9ndWVzdCwgXFx1MDAyNnQudmNwdSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFxcdTAwMjZ0LnZjcHUpO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBjbXB4Y2hnX2l0ZXJfb3V0ZXI7IGkrKykge1xcbiBcXHRcXHRkbyB7XFxuQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NtcHhjaGdfa2V5X2NvbmN1cnJlbnQodm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xcbiBcXG4gXFx0TU9QKHQudmNwdSwgTE9HSUNBTCwgUkVBRCwgbWVtMiwgbWF4X2Jsb2NrLCBHQUREUl9WKG1lbTIpKTtcXG4gXFx0VEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG5pbmRleCBhMTUyYWI2NWM2NTc3Li5kZmZlOTY1NGY0NWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcXG4gXFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XFxuIFxcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUodmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCAqdmNwdSk7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGd1ZXN0IHRocmVhZCBpcyBzcHVuIHVwLiAqL1xcbiBcXHR3YWl0X2Zvcl92Y3B1KCk7XFxuQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21vdmVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXFxuIFxcdC8qIERlZmVyZWQgc3luYyBmcm9tIHdoZW4gdGhlIG1lbXNsb3Qgd2FzIG1pc2FsaWduZWQgKGFib3ZlKS4gKi9cXG4gXFx0d2FpdF9mb3JfdmNwdSgpO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIFxcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIH1cXG5AQCAtMzAyLDcgKzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxcbiBcXHQgKi9cXG4gXFx0dm1fbWVtX3JlZ2lvbl9kZWxldGUodm0sIDApO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIFxcbiBcXHRydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbmluZGV4IDBiODhjNzQzZWU3ZDUuLmJjM2M2MmI3MmM1OGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5AQCAtNTQ4LDE1ICs1NDgsMTUgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXFxuIFxcbiBcXHRcXHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cXG4gXFx0XFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcXG4tXFx0XFx0cHRocmVhZF9nZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVzZXQpLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eSh0aHJlYWQsIFxcdTAwMjZjcHVzZXQpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChDUFVfQ09VTlQoXFx1MDAyNmNwdXNldCkgPT0gMSBcXHUwMDI2XFx1MDAyNiBDUFVfSVNTRVQoY3B1LCBcXHUwMDI2Y3B1c2V0KSxcXG4gXFx0XFx0XFx0ICAgIFxcXCJXb3JrZXIgZmFpbGVkIHRvIGluaGVyaXQgcGFyZW50J3MgQ1BVIGFmZmluaXR5XFxcIik7XFxuIFxcbiBcXHRcXHRkb1xcbiBcXHRcXHRcXHRzY2hlZF95aWVsZCgpO1xcbiBcXHRcXHR3aGlsZSAoZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5IFxcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUyk7XFxuLVxcdFxcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuIFxcdFxcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQocnVuX2RlbGF5IFxcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXFxuIFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcXG5pbmRleCA3NzE1MzVmOWFhZDNjLi5mZTM4Y2M0Y2JhMDUxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcXG5AQCAtMjIyLDMwICsyMjIsMTMgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHR2b2lkICpyZXR2YWw7XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcXFwiLFxcbi1cXHRcXHQgICAgdmNwdS1cXHUwMDNlaWQsIHIpO1xcbi1cXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcXG4tXFx0XFx0ICAgIFxcXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFxcXCIsIFBUSFJFQURfQ0FOQ0VMRUQsXFxuLVxcdFxcdCAgICByZXR2YWwpO1xcbi19XFxuLVxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVbM107XFxuIFxcdGd2YV90IGhjYWxsX3BhZ2U7XFxuIFxcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xcbi1cXHRpbnQgc3RhZ2UgPSAxLCByO1xcbitcXHRpbnQgc3RhZ2UgPSAxO1xcbiBcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuIFxcbiBcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfU0VORF9JUEkpKTtcXG5AQCAtMjcyLDExICsyNTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xcbiBcXHR2Y3B1X3NldF9odl9jcHVpZCh2Y3B1WzBdKTtcXG4gXFxuLVxcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFxcXCIsIHIpO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkIGVycm5vPSVkXFxcIiwgZXJybm8pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuIFxcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHR2Y3B1X3J1bih2Y3B1WzBdKTtcXG5AQCAtMzAyLDkgKzI4Miw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdH1cXG4gXFxuIGRvbmU6XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY1xcbmluZGV4IGI0YmU5YTE3NTM3OWYuLjg0ZjIyZjM5YzhmMjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY1xcbkBAIC01NDgsMjMgKzU0OCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0dm9pZCAqcmV0dmFsO1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY2FuY2VsIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcXFwiLFxcbi1cXHRcXHQgICAgdmNwdS1cXHUwMDNlaWQsIHIpO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfam9pbih0aHJlYWQsIFxcdTAwMjZyZXR2YWwpO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXFxcIixcXG4tXFx0XFx0ICAgIHZjcHUtXFx1MDAzZWlkLCByKTtcXG4tXFx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXFxuLVxcdFxcdCAgICBcXFwiZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXBcXFwiLCBQVEhSRUFEX0NBTkNFTEVELFxcbi1cXHRcXHQgICAgcmV0dmFsKTtcXG4tfVxcbi1cXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG5AQCAtNTc1LDcgKzU1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdHU2NCAqcHRlO1xcbiBcXHRzdHJ1Y3QgdGVzdF9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuLVxcdGludCBzdGFnZSA9IDEsIHIsIGk7XFxuK1xcdGludCBzdGFnZSA9IDEsIGk7XFxuIFxcbiBcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfVExCRkxVU0gpKTtcXG4gXFxuQEAgLTYzMiwxMSArNjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0dmNwdV9zZXRfbXNyKHZjcHVbMl0sIEhWX1g2NF9NU1JfVlBfSU5ERVgsIFdPUktFUl9WQ1BVX0lEXzIpO1xcbiBcXHR2Y3B1X3NldF9odl9jcHVpZCh2Y3B1WzJdKTtcXG4gXFxuLVxcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlKCkgZmFpbGVkXFxcIik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZFxcXCIpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuIFxcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHR2Y3B1X3J1bih2Y3B1WzBdKTtcXG5AQCAtNjYxLDggKzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdH1cXG4gXFxuIGRvbmU6XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xcbmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xcbkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0dmlydF9tYXAodm0sIGdwYSwgZ3BhLCBQRVJfQ1BVX0RBVEFfU0laRSAvIHZtLVxcdTAwM2VwYWdlX3NpemUpO1xcbiBcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBfX3Rlc3RfbWVtX2NvbnZlcnNpb25zLCB2Y3B1c1tpXSk7XFxuIFxcdH1cXG4gXFxuIFxcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7XFxuIFxcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcXG5pbmRleCAxMGRiOWZlNmQ5MDYzLi5lNmQxNmU5ZDYxMjAwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xcbkBAIC02NSwxMyArNjUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wcml2YXRlX2FjY2Vzc19tZW1zbG90X2RlbGV0ZWQodm9pZClcXG4gXFx0LyogUmVxdWVzdCB0byBhY2Nlc3MgcGFnZSBwcml2YXRlbHkgKi9cXG4gXFx0dm1fbWVtX3NldF9wcml2YXRlKHZtLCBFWElUU19URVNUX0dQQSwgRVhJVFNfVEVTVF9TSVpFKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXFxuLVxcdFxcdCAgICAgICAodm9pZCAqKCopKHZvaWQgKikpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLFxcbi1cXHRcXHQgICAgICAgKHZvaWQgKil2Y3B1KTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXFxuK1xcdFxcdFxcdCAgIChwdGhyZWFkX2ZuX3QpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLCAodm9pZCAqKXZjcHUpO1xcbiBcXG4gXFx0dm1fbWVtX3JlZ2lvbl9kZWxldGUodm0sIEVYSVRTX1RFU1RfU0xPVCk7XFxuIFxcbi1cXHRwdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcXHUwMDI2dGhyZWFkX3JldHVybik7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcXHUwMDI2dGhyZWFkX3JldHVybik7XFxuIFxcdGV4aXRfcmVhc29uID0gKHUzMikodTY0KXRocmVhZF9yZXR1cm47XFxuIFxcbiBcXHRURVNUX0FTU0VSVF9FUShleGl0X3JlYXNvbiwgS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jXFxuaW5kZXggY2JjOTJhODYyZWE5Yy4uN2EwYmQ5ZjdiYTZjOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgS1ZNX01BWF9WQ1BVUzsgaSsrKVxcbiBcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpO1xcbiBcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pLCAwKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2UsIHZjcHVzWzBdKTtcXG4gXFxuIFxcdHZjcHVOID0gdmNwdXNbS1ZNX01BWF9WQ1BVUyAtIDFdO1xcbiBcXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcXHUwMDNjIHQ7KSB7XFxuQEAgLTY1LDggKzY1LDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0XFx0dmNwdV9zZXRfbXNyKHZjcHVOLCBNU1JfSUEzMl9BUElDQkFTRSwgTEFQSUNfRElTQUJMRUQpO1xcbiBcXHR9XFxuIFxcbi1cXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xcbitcXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xcbiBcXG4gXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jXFxuaW5kZXggZDU5YWJiMTk4ZDg2Zi4uZGUwMDZlMWM4NjFjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcXG5AQCAtMTI4LDEwICsxMjgsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zZXZfbWlncmF0ZV9sb2NraW5nKHZvaWQpXFxuIFxcdFxcdCAgICAgICBzaXplb2YoaW5wdXRbaV0uc291cmNlX3ZtcykpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXFx1MDAyNmlucHV0W2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXFx1MDAyNmlucHV0W2ldKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgKytpKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHB0W2ldLCBOVUxMKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXFxuIFxcdFxcdGt2bV92bV9mcmVlKGlucHV0W2ldLnZtKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNcXG5pbmRleCA1YjBjMjM1OWJiYjQzLi45ZDc2YzJlZDc4NGI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcXG4gXFx0XFx0ICAgICEhKHJ1bi1cXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcXHUwMDI2IFg4Nl9DUjRfUEFFKSxcXG4gXFx0XFx0ICAgICEhKHJ1bi1cXHUwMDNlcy5yZWdzLnNyZWdzLmVmZXIgXFx1MDAyNiBFRkVSX0xNRSkpO1xcbiBcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKSwgMCk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pO1xcbiBcXG4gXFx0Zm9yICh0ID0gdGltZShOVUxMKSArIFRJTUVPVVQ7IHRpbWUoTlVMTCkgXFx1MDAzYyB0Oykge1xcbiBcXHRcXHQvKlxcbkBAIC0xOTksOCArMTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xcbitcXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xcbiBcXG4gXFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXFxuaW5kZXggNTlkYThkNGRhNjA3OS4uMmEzYTliZDhiMzM4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXFxuQEAgLTk0LDEyICs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRwdGhyZWFkX3QgY3B1X3RocmVhZHNbTlJfVEVTVF9WQ1BVU107XFxuIFxcdHVuc2lnbmVkIGxvbmcgY3B1O1xcbiBcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIE5SX1RFU1RfVkNQVVM7IGNwdSsrKVxcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2Y3B1X3RocmVhZHNbY3B1XSwgTlVMTCwgcnVuX3ZjcHUsICh2b2lkICopY3B1KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xcbiBcXG4gXFx0dW5zaWduZWQgbG9uZyBmYWlsdXJlcyA9IDA7XFxuIFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspIHtcXG4gXFx0XFx0dm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7XFxuLVxcdFxcdHB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKGNwdV90aHJlYWRzW2NwdV0sIFxcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XFxuIFxcdFxcdGZhaWx1cmVzICs9ICh1bnNpZ25lZCBsb25nKXRoaXNfY3B1X2ZhaWx1cmVzO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5pbmRleCAzYTMyNmM1ZTc0Y2FiLi43OGU3YWFlOGZhYjhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xcbkBAIC0yMjgsMjUgKzIyOCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0dm9pZCAqcmV0dmFsO1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsXFxuLVxcdFxcdCAgICBcXFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCxcXG4tXFx0XFx0ICAgIFxcXCJwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxcbi1cXHRcXHQgICAgXFxcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXFxcIiwgUFRIUkVBRF9DQU5DRUxFRCxcXG4tXFx0XFx0ICAgIHJldHZhbCk7XFxuLX1cXG4tXFxuIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG5AQCAtMzg3LDcgKzM2OCw2IEBAIHZvaWQgZ2V0X2NtZGxpbmVfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgKnJ1bl9zZWNzLFxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbi1cXHRpbnQgcjtcXG4gXFx0aW50IHdhaXRfc2VjcztcXG4gXFx0Y29uc3QgaW50IG1heF9oYWx0ZXJfd2FpdCA9IDEwO1xcbiBcXHRpbnQgcnVuX3NlY3MgPSAwO1xcbkBAIC00MjgsOSArNDA4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xcbiBcXG4gXFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXFx1MDAyNnBhcmFtc1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCxcXG4tXFx0XFx0ICAgIFxcXCJwdGhyZWFkX2NyZWF0ZSBoYWx0ZXIgZmFpbGVkIGVycm5vPSVkXFxcIiwgZXJybm8pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcXHUwMDI2cGFyYW1zWzBdKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJIYWx0ZXIgdkNQVSB0aHJlYWQgc3RhcnRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHR3YWl0X3NlY3MgPSAwO1xcbkBAIC00NDcsOCArNDI1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFxcIkhhbHRlciB2Q1BVIHRocmVhZCByZXBvcnRlZCBpdHMgQVBJQyBJRDogJXUgYWZ0ZXIgJWQgc2Vjb25kcy5cXFxcblxcXCIsXFxuIFxcdFxcdGRhdGEtXFx1MDAzZWhhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpO1xcbiBcXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXFx1MDAyNnBhcmFtc1sxXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCwgXFxcInB0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcXFwiLCBlcnJubyk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFxcdTAwMjZwYXJhbXNbMV0pO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFxuIFxcdFxcdFxcXCJJUEkgc2VuZGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWQuIExldHRpbmcgdkNQVXMgcnVuIGZvciAlZCBzZWNvbmRzLlxcXFxuXFxcIixcXG5AQCAtNDYyLDggKzQzOSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdC8qXFxuIFxcdCAqIENhbmNlbCB0aHJlYWRzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHN0b3AuXFxuIFxcdCAqL1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCBwYXJhbXNbMF0udmNwdSk7XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHBhcmFtc1sxXS52Y3B1KTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGhvc3Qgc3VwcG9ydCBJZGxlIEhMVCwgaS5lLiBLVk0gKm1pZ2h0KiBiZSB1c2luZyBJZGxlIEhMVCxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcXG5pbmRleCA1MDc2ZjZhNzU0NTU3Li5hMjI2YTJmZDYxZDk0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXFxuQEAgLTQzNyw3ICs0MzcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4gXFx0cHRocmVhZF90IHRocmVhZDtcXG4gXFx0Ym9vbCB2ZXJib3NlO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0dmVyYm9zZSA9IGFyZ2MgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2ICghc3RybmNtcChhcmd2WzFdLCBcXFwiLXZcXFwiLCAzKSB8fFxcbiBcXHRcXHRcXHQgICAgICAgIXN0cm5jbXAoYXJndlsxXSwgXFxcIi0tdmVyYm9zZVxcXCIsIDEwKSk7XFxuQEAgLTg5NCw4ICs4OTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRcXHRpZiAodmVyYm9zZSlcXG4gXFx0XFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJUZXN0aW5nIHNoaW5mbyBsb2NrIGNvcnJ1cHRpb24gKEtWTV9YRU5fSFZNX0VWVENITl9TRU5EKVxcXFxuXFxcIik7XFxuIFxcbi1cXHRcXHRcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBcXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XFxuLVxcdFxcdFxcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcXFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBcXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XFxuIFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xcbiBcXHRcXHRcXHRcXHRcXHQucG9ydCA9IDEsXFxuQEAgLTk0OSwxMSArOTQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFx0XFx0VEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgZXZlbnQgY2hhbm5lbCBJUlEgYnV0IGl0IGRpZG4ndCBoYXBwZW5cXFwiKTtcXG4gXFxuLVxcdFxcdFxcdFxcdHJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuLVxcdFxcdFxcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcXFwicHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuLVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCAwKTtcXG4tXFx0XFx0XFx0XFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFxcXCJwdGhyZWFkX2pvaW4oKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuIFxcdFxcdFxcdGNhc2UgVEVTVF9HVUVTVF9TQVdfSVJROlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OS4zODA4NzAyMzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjI2NzM5NzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWVjYzVhYzNkZmFjZmI1YTMzZmY3NWYxZGY0YTlmOTU2MmRiZDI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDc6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggZjhiMDI1OTc4OTdiZC4uMDMxNjBhZDY2NmY1OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbkBAIC0xNDEsMzMgKzE0MSwyNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3J1bihzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4gXHRwdGhyZWFkX3QgcHRfdmNwdV9taWdyYXRpb247XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdGludCByZXQ7XG4gXG4gXHRwdGhyZWFkX211dGV4X2luaXQoXHUwMDI2dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTtcbiBcdHZjcHVfZG9uZV9tYXAgPSBiaXRtYXBfemFsbG9jKHRlc3RfYXJncy5ucl92Y3B1cyk7XG4gXHRURVNUX0FTU0VSVCh2Y3B1X2RvbmVfbWFwLCBcIkZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1IGRvbmUgYml0bWFwXCIpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sXG4tXHRcdFx0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7XG4tXHRcdFRFU1RfQVNTRVJUKCFyZXQsIFwiRmFpbGVkIHRvIGNyZWF0ZSB2Q1BVLSVkIHB0aHJlYWRcIiwgaSk7XG4tXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkrKylcbitcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnB0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLFxuK1x0XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbiBcbiBcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcykge1xuIFx0XHRzcmFuZCh0aW1lKE5VTEwpKTtcbiBcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsXG4tXHRcdFx0XHRcdHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuLVx0XHRURVNUX0FTU0VSVCghcmV0LCBcIkZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkXCIpO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFx0fVxuIFxuLVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbihwdF92Y3B1X3J1bltpXSwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7XG4gXG4gXHRiaXRtYXBfZnJlZSh2Y3B1X2RvbmVfbWFwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuaW5kZXggNWUyMzE5OTg2MTdlNy4uM2NiODU5MzJlZTg1YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2lycS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuQEAgLTk4OCw3ICs5ODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpXG4gXHRzdHJ1Y3QgdGVzdF9hcmdzIGFyZ3MgPSB7fTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0Z3ZhX3QgYXJnc19ndmE7XG4tXHRpbnQgZ2ljX2ZkLCByZXQ7XG4rXHRpbnQgZ2ljX2ZkO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpO1xuIFxuQEAgLTEwMDQsMTUgKzEwMDQsMTEgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3R3b19jcHVzKHZvaWQgKmdjb2RlKVxuIFxuIFx0Z2ljX2ZkID0gdmdpY192M19zZXR1cCh2bSwgMiwgNjQpO1xuIFxuLVx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzBdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1swXSk7XG4tXHRpZiAocmV0KVxuLVx0XHRURVNUX0ZBSUwoXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcblwiLCByZXQpO1xuLVx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzFdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1sxXSk7XG4tXHRpZiAocmV0KVxuLVx0XHRURVNUX0ZBSUwoXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDEgKCVkKVxcblwiLCByZXQpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuIFxuLVx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4tXHRwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzBdLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbiBcbiBcdGNsb3NlKGdpY19mZCk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCBkNjRkNDM0ZDNmMDZlLi45YTY5YzQzOWEwZjhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0zMTEsMjMgKzMxMSwyMyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuIFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXHUwMDI2dGVzdF9zZXR1cF9iYXJyaWVyLCBOVUxMLCBucl92Y3B1cyArIG5yX2RldmljZXMgKyAxKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyX3RocmVhZCwgdmNwdXNbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSsrKVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XG4gXG4gXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZ0ZXN0X3NldHVwX2JhcnJpZXIpO1xuIFxuIFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2RldmljZXM7IGkrKylcbi1cdFx0cHRocmVhZF9qb2luKGxwaV90aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRkZWx0YSA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpO1xuIFx0d3JpdGVfZ3Vlc3RfZ2xvYmFsKHZtLCB0ZXN0X2RhdGEucmVxdWVzdF92Y3B1c19zdG9wLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXBvcnRfc3RhdHMoZGVsdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCBlODQxOWQ3ZGExZWFiLi5hZjVlYjAzMzRhNzRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5AQCAtNjkxLDcgKzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTtcbiBcbiBcdGZvciAoaXRlcmF0aW9uID0gMTsgaXRlcmF0aW9uIFx1MDAzYz0gcC1cdTAwM2VpdGVyYXRpb25zOyBpdGVyYXRpb24rKykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGksIHJlYXBfaTtcbkBAIC04MDUsNyArODA1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdFdSSVRFX09OQ0UoaG9zdF9xdWl0LCB0cnVlKTtcbiBcdHNlbV9wb3N0KFx1MDAyNnNlbV92Y3B1X2NvbnQpO1xuIFxuLVx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0cHJfaW5mbyhcIlRvdGFsIGJpdHMgY2hlY2tlZDogZGlydHkgKCVsdSksIGNsZWFyICglbHUpXFxuXCIsXG4gXHRcdGhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuaW5kZXggMzE0N2Y1Yzk3ZTk0My4uNGFiYWQ3MTU4OTg5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKiByZXR1cm4gbm90aWZpZXJzLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzZW1hcGhvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbkBAIC0xNCwyMCArMTMsMjMgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwia3ZtX3N5c2NhbGxzLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ1Y2FsbF9jb21tb24uaFwiXG4gXG4tI2RlZmluZSBWQ1BVX05VTSA0XG4tI2RlZmluZSBTTEVFUElOR19USFJFQURfTlVNICgxIFx1MDAzY1x1MDAzYyA0KVxuLSNkZWZpbmUgRk9SS19OVU0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpXG4tI2RlZmluZSBERUxBWV9VU19NQVggMjAwMFxuKyNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuKyNkZWZpbmUgTlJfU0xFRVBFUlNfUEVSX1ZDUFVcdDE2XG4rI2RlZmluZSBOUl9JVEVSQVRJT05TXHRcdDUxMlxuKyNkZWZpbmUgREVMQVlfVVNfTUFYXHRcdDIwMDBcbiBcbiBzZW1fdCAqc2VtO1xuK3N0YXRpYyBjcHVfc2V0X3QgY2hpbGRfY3B1X3NldDtcbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4ge1xuIFx0Zm9yICg7OylcbiBcdFx0OyAgLyogU29tZSBidXN5IHdvcmsgKi9cbi1cdHByaW50ZihcIlNob3VsZCBub3QgYmUgcmVhY2hlZC5cXG5cIik7XG4rXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXG5AQCAtMzcsODQgKzM5LDQ3IEBAIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXG4gXG4gXHR2Y3B1X3J1bih2Y3B1KTtcbiBcbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcIiVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXCIsXG4tXHRcdCAgICBfX2Z1bmNfXywgcnVuLVx1MDAzZWV4aXRfcmVhc29uLFxuLVx0XHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuLVx0cHRocmVhZF9leGl0KE5VTEwpO1xuK1x0VEVTVF9GQUlMKFwidkNQVSVkIGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXNcIixcbitcdFx0ICB2Y3B1LVx1MDAzZWlkLCBydW4tXHUwMDNlZXhpdF9yZWFzb24sIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKnNsZWVwaW5nX3RocmVhZCh2b2lkICphcmcpXG4ge1xuIFx0aW50IGZkO1xuIFxuLVx0d2hpbGUgKHRydWUpIHtcbitcdHdoaWxlICgxKSB7XG4gXHRcdGZkID0gb3BlbihcIi9kZXYvbnVsbFwiLCBPX1JEV1IpO1xuIFx0XHRjbG9zZShmZCk7XG4gXHR9XG4tXHRURVNUX0FTU0VSVChmYWxzZSwgXCIlczogZXhpdGVkXCIsIF9fZnVuY19fKTtcbi1cdHB0aHJlYWRfZXhpdChOVUxMKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NyZWF0ZV90aHJlYWQocHRocmVhZF90ICp0aHJlYWQsIHB0aHJlYWRfYXR0cl90ICphdHRyLFxuLVx0XHRcdFx0ICAgICAgIHZvaWQgKigqZikodm9pZCAqKSwgdm9pZCAqYXJnKVxuLXtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgZiwgYXJnKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCwgXCIlczogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWRcIiwgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcIiVzOiBmYWlsZWQgc2V0IGFmZmluaXR5XCIsIF9fZnVuY19fKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2pvaW4ocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnJldHZhbClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCByZXR2YWwpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcIiVzOiBmYWlsZWQgdG8gam9pbiB0aHJlYWRcIiwgX19mdW5jX18pO1xuK1x0VEVTVF9GQUlMKFwiJXM6IGV4aXRlZFwiLCBfX2Z1bmNfXyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KHUzMiBydW4pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRjcHVfc2V0X3QgY3B1X3NldDtcbi1cdHB0aHJlYWRfdCB0aHJlYWRzW1ZDUFVfTlVNXTtcbi1cdHB0aHJlYWRfdCB0aHJvd19hd2F5O1xuLVx0dm9pZCAqYjtcbitcdHB0aHJlYWRfdCB0aHJlYWQ7XG4gXHR1MzIgaSwgajtcbiBcbi1cdENQVV9aRVJPKFx1MDAyNmNwdV9zZXQpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07IGkrKylcbi1cdFx0Q1BVX1NFVChpLCBcdTAwMjZjcHVfc2V0KTtcbi1cbi1cdHZtID0gdm1fY3JlYXRlKFZDUFVfTlVNKTtcbitcdHZtID0gdm1fY3JlYXRlKE5SX1ZDUFVTKTtcbiBcbiBcdHByX2RlYnVnKFwiJXM6IFslZF0gc3RhcnQgdmNwdXNcXG5cIiwgX19mdW5jX18sIHJ1bik7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBWQ1BVX05VTTsgKytpKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgKytpKSB7XG4gXHRcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcnVuX3ZjcHUsIHZjcHUpO1xuLVx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyZWFkc1tpXSwgXHUwMDI2Y3B1X3NldCk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTtcbitcdFx0a3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkodGhyZWFkLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgU0xFRVBJTkdfVEhSRUFEX05VTTsgKytqKSB7XG4tXHRcdFx0Y2hlY2tfY3JlYXRlX3RocmVhZChcdTAwMjZ0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsXG4tXHRcdFx0XHRcdCAgICAodm9pZCAqKU5VTEwpO1xuLVx0XHRcdGNoZWNrX3NldF9hZmZpbml0eSh0aHJvd19hd2F5LCBcdTAwMjZjcHVfc2V0KTtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICsraikge1xuK1x0XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHNsZWVwaW5nX3RocmVhZCwgKHZvaWQgKilOVUxMKTtcbitcdFx0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRwcl9kZWJ1ZyhcIiVzOiBbJWRdIGFsbCB0aHJlYWRzIGxhdW5jaGVkXFxuXCIsIF9fZnVuY19fLCBydW4pO1xuIFx0c2VtX3Bvc3Qoc2VtKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZDUFVfTlVNOyArK2kpXG4tXHRcdGNoZWNrX2pvaW4odGhyZWFkc1tpXSwgXHUwMDI2Yik7XG4tXHQvKiBTaG91bGQgbm90IGJlIHJlYWNoZWQgKi9cbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcIiVzOiBbJWRdIGNoaWxkIGVzY2FwZWQgdGhlIG5pbmphXCIsIF9fZnVuY19fLCBydW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIHBhcmVudCB0byBTSUdLSUxMIHRoaXMgY2hpbGQuICovXG4rXHR3aGlsZSAoMSk7XG4gfVxuIFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuQEAgLTE0NywxNiArMTEyLDM0IEBAIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBzZXR1cF9jaGlsZF9jcHVfc2V0KHZvaWQpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuK1xuK1x0aWYgKENQVV9DT1VOVChcdTAwMjZjaGlsZF9jcHVfc2V0KSBcdTAwM2MgMilcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4rXHRDUFVfQ0xSKGNwdSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4rXG4rXHR3aGlsZSAoQ1BVX0NPVU5UKFx1MDAyNmNoaWxkX2NwdV9zZXQpIFx1MDAzZSBOUl9WQ1BVUylcbitcdFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFx1MDAyNmNoaWxkX2NwdV9zZXQpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbit9XG4rXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHUzMiBpO1xuIFx0aW50IHMsIHI7XG4gXHRwaWRfdCBwaWQ7XG4gXG4rXHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XG4rXG4gXHRzZW0gPSBzZW1fb3BlbihcInZtX3NlbVwiLCBPX0NSRUFUIHwgT19FWENMLCAwNjQ0LCAwKTtcbiBcdHNlbV91bmxpbmsoXCJ2bV9zZW1cIik7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGT1JLX05VTTsgKytpKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9JVEVSQVRJT05TOyArK2kpIHtcbiBcdFx0cGlkID0gZm9yaygpO1xuIFx0XHRURVNUX0FTU0VSVChwaWQgXHUwMDNlPSAwLCBcIiVzOiB1bmFibGUgdG8gZm9ya1wiLCBfX2Z1bmNfXyk7XG4gXHRcdGlmIChwaWQgPT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfdXRpbC5oXHUwMDNlXG4gXG5AQCAtOTYsNiArOTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtYWR2aXNlLCAzLCB2b2lkICosIGFkZHIsIHNpemVfdCwgbGVuZ3RoLCBpbnQsIGFkdmljZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfZ2V0YWZmaW5pdHlfbnAsIDMsIHB0aHJlYWRfdCwgdGhyZWFkLFxuK1x0XHQgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIGNwdXNldCk7XG4rX19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsXG4rXHRcdCAgICAgc2l6ZV90LCBjcHVzZXRzaXplLCBjb25zdCBjcHVfc2V0X3QgKiwgY3B1c2V0KTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCwgY3B1X3NldF90ICpjcHVzZXQpXG4re1xuK1x0a3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNwdV9zZXRfdCAqY3B1c2V0KVxuK3tcbitcdGt2bV9wdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7XG4rfVxuK1xuK3R5cGVkZWYgdm9pZCAqKCpwdGhyZWFkX2ZuX3QpKHZvaWQgKik7XG4rX19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsXG4rXHRcdCAgICAgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgYXR0ciwgcHRocmVhZF9mbl90LCBmbiwgdm9pZCAqLCBhcmcpO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfam9pbiwgMiwgcHRocmVhZF90LCB0aHJlYWQsIHZvaWQgKiosIHRocmVhZF9yZXR1cm4pO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfY2FuY2VsLCAxLCBwdGhyZWFkX3QsIHRocmVhZCk7XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnIpXG4re1xuK1x0a3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgcik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZChwdGhyZWFkX3QgdGhyZWFkKVxuK3tcbitcdF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkLCBOVUxMKTtcbit9XG4rXG4rLypcbisgKiBDYW5jZWwrSm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xuKyAqIGFuZCBpcyBleHBlY3RlZCB0byBleGl0IG9ubHkgaW4gcmVzcG9uc2UgdG8gY2FuY2VsbGF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxuK3tcbitcdHZvaWQgKnI7XG4rXG4rXHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgXHUwMDI2cik7XG4rXHRURVNUX0FTU0VSVChyID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4rXHRcdCAgICBcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCIsIFBUSFJFQURfQ0FOQ0VMRUQsIHIpO1xuK31cbitcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFxcXG4gXHRrdm1fY2xvc2UoZmQpO1x0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5pbmRleCBiMzllNzEzYzMwYTQ2Li41YTdhNDU1YjUzODc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuQEAgLTEwODQsNiArMTA4NCw4IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4gXG4gdm9pZCBrdm1fc2V0X2ZpbGVzX3JsaW1pdCh1MzIgbnJfdmNwdXMpO1xuIFxuK2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XG4rXG4gaW50IF9fcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuQEAgLTEwOTQsNyArMTA5NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXCIsIGNwdSk7XG4gfVxuIFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbitzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGNwdSA9IGt2bV9waWNrX3JhbmRvbV9jcHUocG9zc2libGVfY3B1cyk7XG4rXHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbitcdHJldHVybiBjcHU7XG4rfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHBpbl90YXNrX3RvX2FueV9jcHUocHRocmVhZF90IHRhc2spXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcbmluZGV4IDI0MGY2ZjBmZGJlNDMuLjE2OGM1MjczNGZlZjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcbkBAIC0yOTYsNyArMjk2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKylcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcbiBcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07XG5AQCAtMzU2LDcgKzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcbmluZGV4IDVkNzU5MGQwMTg2ODEuLmViYjI0Nzg4NzhkZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG5AQCAtMTI4LDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRjbG9zZShfX2V2ZW50ZmQpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSsrKSB7XG4gXHRcdFdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7XG5AQCAtMTM5LDUgKzEzOSw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR9XG4gXG4gXHRXUklURV9PTkNFKGRvbmUsIHRydWUpO1xuLVx0cHRocmVhZF9qb2luKHJhY2luZ190aHJlYWQsIE5VTEwpO1xuK1x0a3ZtX3B0aHJlYWRfam9pbihyYWNpbmdfdGhyZWFkLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcbmluZGV4IGE5MTBlM2FiYjhjNzEuLjk3NDgxM2VhODk1MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG5AQCAtMzY0LDggKzM2NCw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHQqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLFxuLVx0XHRcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcixcbitcdFx0XHRcdCAgIHRlc3RfYXJncy52Y3B1c1tpXSk7XG4gXG4gXHR2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpO1xuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgYWxsIHZDUFVzIHN1Y2Nlc3NmdWxseVxcblwiKTtcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXQgPSBzZW1fZGVzdHJveShcdTAwMjZ0ZXN0X3N0YWdlX3VwZGF0ZWQpO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwiRXJyb3IgaW4gc2VtX2Rlc3Ryb3lcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcbiBcdCAgICAgICBcIiAgICAgKGRlZmF1bHQ6IG5vIHBpbm5pbmcpXFxuXCIsIG5hbWUsIG5hbWUpO1xuIH1cbiBcbi12b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbitpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4ge1xuIFx0aW50IHRhcmdldF9pZHg7XG4gXHRpbnQgbnJfY3B1cztcbkBAIC02ODAsMTMgKzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiBcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4gXG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgQ1BVX1NFVFNJWkU7IGNwdSsrKSB7XG4tXHRcdGlmIChDUFVfSVNTRVQoY3B1LCBwb3NzaWJsZV9jcHVzKSBcdTAwMjZcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApIHtcbi1cdFx0XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMClcbitcdFx0XHRyZXR1cm4gY3B1O1xuIFx0fVxuLVxuIFx0VEVTVF9GQUlMKFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbmluZGV4IDM1OTliNzVkOTdjOTEuLjI4NjQ1NjJmNTdiNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgbWVtc3RyZXNzX3N0YXJ0X3ZjcHVfdGhyZWFkcyhpbnQgbnJfdmNwdXMsXG4gXHRcdHZjcHUtXHUwMDNldmNwdV9pZHggPSBpO1xuIFx0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlcnVubmluZywgZmFsc2UpO1xuIFxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG5AQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgbWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKGludCBucl92Y3B1cylcbiBcdFdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRvZ2dsZV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgc2xvdHMsIGJvb2wgZW5hYmxlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbmluZGV4IGVmOGQ3NmY3MWY4MzcuLmY3Y2U1YTZkZGNjMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbkBAIC0xNjcsOCArMTY3LDggQEAgc3RydWN0IHVmZmRfZGVzYyAqdWZmZF9zZXR1cF9kZW1hbmRfcGFnaW5nKGludCB1ZmZkX21vZGUsIHVzZWNvbmRzX3QgZGVsYXksXG4gXHRcdHVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXS5oYW5kbGVyID0gaGFuZGxlcjtcbiBcdFx0dWZmZF9kZXNjLVx1MDAzZXJlYWRlcl9hcmdzW2ldLnBpcGUgPSBwaXBlc1swXTtcbiBcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dWZmZF9kZXNjLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sXG4tXHRcdFx0ICAgICAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZF9mbixcbitcdFx0XHRcdCAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4gXG4gXHRcdFBFUl9WQ1BVX0RFQlVHKFwiQ3JlYXRlZCB1ZmZkIHRocmVhZCAlaSBmb3IgSFZBIHJhbmdlIFslcCwgJXApXFxuXCIsXG4gXHRcdFx0ICAgICAgIGksIGh2YSwgaHZhICsgbGVuKTtcbkBAIC0xODcsOCArMTg3LDcgQEAgdm9pZCB1ZmZkX3N0b3BfZGVtYW5kX3BhZ2luZyhzdHJ1Y3QgdWZmZF9kZXNjICp1ZmZkKVxuIFx0XHRcdCAgICBcIlVuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcFwiLCBpLCB1ZmZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVmZmQtXHUwMDNlbnVtX3JlYWRlcnM7ICsraSlcbi1cdFx0VEVTVF9BU1NFUlQoIXB0aHJlYWRfam9pbih1ZmZkLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpLFxuLVx0XHRcdCAgICBcIlB0aHJlYWRfam9pbiBmYWlsZWQgb24gcmVhZGVyICVpIGZvciB1ZmZkX2Rlc2MgJXBcIiwgaSwgdWZmZCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odWZmZC1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMKTtcbiBcbiBcdGNsb3NlKHVmZmQtXHUwMDNldWZmZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuaW5kZXggNGQ5YWQ2MTA0YTZlZC4uZTEyOTk2MTFiZTMyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4ge1xuIFx0cHJfaW5mb192KFwiTGF1bmNoaW5nIHRoZSB0ZXN0IFZNXFxuXCIpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2ZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsIGRhdGEpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmRhdGEtXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4gXG4gc3RhdGljIHZvaWQgd2FpdF9ndWVzdF9leGl0KHN0cnVjdCB2bV9kYXRhICpkYXRhKVxuIHtcbi1cdHB0aHJlYWRfam9pbihkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4oZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDNkNWYzM2E2M2IyYjQuLjc0MWUzNDM5NjJlZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuQEAgLTIyMiw3ICsyMjIsNyBAQCBzdGF0aWMgcHRocmVhZF90ICpzcGF3bl93b3JrZXJzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyxcbiBcdFx0aW5mb1tpXS52Y3B1ID0gdmNwdXNbaV07XG4gXHRcdGluZm9baV0uc3RhcnRfZ3BhID0gZ3BhO1xuIFx0XHRpbmZvW2ldLmVuZF9ncGEgPSBncGEgKyBucl9ieXRlcztcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFx1MDAyNmluZm9baV0pO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFx1MDAyNmluZm9baV0pO1xuIFx0fVxuIFx0cmV0dXJuIHRocmVhZHM7XG4gfVxuQEAgLTQwOSw3ICs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdC8qXG4gXHQgKiBEZWxpYmVyYXRlbHkgZXhpdCB3aXRob3V0IGRlbGV0aW5nIHRoZSByZW1haW5pbmcgbWVtc2xvdHMgb3IgY2xvc2luZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuaW5kZXggYTBmY2FlM2NiN2E4Yi4uYzU3NjMxYWFiM2QzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5AQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LFxuIFx0ICogQ29uY3VycmVudGx5IGRlbGV0ZSAoYW5kIHJlY3JlYXRlKSB0aGUgc2xvdCB0byB0ZXN0IEtWTSdzIGhhbmRsaW5nXG4gXHQgKiBvZiBhIHJhY2luZyBtZW1zbG90IGRlbGV0aW9uIHdpdGggcHJlZmF1bHRpbmcuXG4gXHQgKi9cbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuIFxuIFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcbiBcdFx0ICovXG4gXHRcdGlmICghc2xvdF9yZWNyZWF0ZWQpIHtcbiBcdFx0XHRXUklURV9PTkNFKGRhdGEucmVjcmVhdGVfc2xvdCwgdHJ1ZSk7XG4tXHRcdFx0cHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcbitcdFx0XHRrdm1fcHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcbiBcdFx0XHRzbG90X3JlY3JlYXRlZCA9IHRydWU7XG4gXG4gXHRcdFx0LypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbmluZGV4IDU1N2UzOTNjMjIzYjkuLmRmM2U1YWQxYzM5MzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuQEAgLTI0MSw4ICsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0ICovXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxuK1x0XHRcdCAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiBcbiBcdGlmIChsYXRlbmN5IFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuQEAgLTMxNCw3ICszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgICAgXCIgIGUuZy4gdmlhIGNwdWlkbGUub2ZmPTEgb3IgdmlhIC1sIFx1MDAzY2xhdGVuY3lcdTAwM2UsIG9yIHJ1biB3aXRoIC11IHRvXFxuXCJcbiBcdFx0ICAgIFwiICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLlwiLCBpKTtcbiBcbi1cdHB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4obWlncmF0aW9uX3RocmVhZCwgTlVMTCk7XG4gXG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbmluZGV4IDAyNDQ4NDg2MjFiMzQuLmNlOGRiOTZjY2Y3ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKVxuIFx0SE9TVF9TWU5DKHQudmNwdSwgU1RBR0VfU0tFWVNfU0VUKTtcbiBcdHByZXBhcmVfbWVtMTIoKTtcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY21weGNoZ19pdGVyX291dGVyOyBpKyspIHtcbiBcdFx0ZG8ge1xuQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NtcHhjaGdfa2V5X2NvbmN1cnJlbnQodm9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4gXG4gXHRNT1AodC52Y3B1LCBMT0dJQ0FMLCBSRUFELCBtZW0yLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuIFx0VEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuaW5kZXggYTE1MmFiNjVjNjU3Ny4uZGZmZTk2NTRmNDViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiBcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBndWVzdCB0aHJlYWQgaXMgc3B1biB1cC4gKi9cbiBcdHdhaXRfZm9yX3ZjcHUoKTtcbkBAIC0yMTYsNyArMjE2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9tb3ZlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0LyogRGVmZXJlZCBzeW5jIGZyb20gd2hlbiB0aGUgbWVtc2xvdCB3YXMgbWlzYWxpZ25lZCAoYWJvdmUpLiAqL1xuIFx0d2FpdF9mb3JfdmNwdSgpO1xuIFxuLVx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIH1cbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9kZWxldGVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHQgKi9cbiBcdHZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCAwKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbiBcbiBcdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5pbmRleCAwYjg4Yzc0M2VlN2Q1Li5iYzNjNjJiNzJjNThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuQEAgLTU0OCwxNSArNTQ4LDE1IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuLVx0XHRwdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNwdXNldCk7XG4gXHRcdFRFU1RfQVNTRVJUKENQVV9DT1VOVChcdTAwMjZjcHVzZXQpID09IDEgXHUwMDI2XHUwMDI2IENQVV9JU1NFVChjcHUsIFx1MDAyNmNwdXNldCksXG4gXHRcdFx0ICAgIFwiV29ya2VyIGZhaWxlZCB0byBpbmhlcml0IHBhcmVudCdzIENQVSBhZmZpbml0eVwiKTtcbiBcbiBcdFx0ZG9cbiBcdFx0XHRzY2hlZF95aWVsZCgpO1xuIFx0XHR3aGlsZSAoZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5IFx1MDAzYyBNSU5fUlVOX0RFTEFZX05TKTtcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuIFx0XHRURVNUX0FTU0VSVChydW5fZGVsYXkgXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxuIFx0XHRcdCAgICBcIkV4cGVjdGVkIHJ1bl9kZWxheSBcdTAwM2U9ICVsZCwgZ290ICVsZFwiLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcbmluZGV4IDc3MTUzNWY5YWFkM2MuLmZlMzhjYzRjYmEwNTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcbkBAIC0yMjIsMzAgKzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCIsXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwiLCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdVszXTtcbiBcdGd2YV90IGhjYWxsX3BhZ2U7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbi1cdGludCBzdGFnZSA9IDEsIHI7XG4rXHRpbnQgc3RhZ2UgPSAxO1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1NFTkRfSVBJKSk7XG5AQCAtMjcyLDExICsyNTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1WzBdLCAyLCBoY2FsbF9wYWdlLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMF0pO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwiLCByKTtcbi1cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4tXHRURVNUX0FTU0VSVCghciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQgZXJybm89JWRcIiwgZXJybm8pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR2Y3B1X3J1bih2Y3B1WzBdKTtcbkBAIC0zMDIsOSArMjgyLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBkb25lOlxuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1swXSwgdmNwdVsxXSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcbitcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMF0pO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5pbmRleCBiNGJlOWExNzUzNzlmLi44NGYyMmYzOWM4ZjIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5AQCAtNTQ4LDIzICs1NDgsNiBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCIsXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwiLCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbkBAIC01NzUsNyArNTU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHU2NCAqcHRlO1xuIFx0c3RydWN0IHRlc3RfZGF0YSAqZGF0YTtcbiBcdHN0cnVjdCB1Y2FsbCB1Yztcbi1cdGludCBzdGFnZSA9IDEsIHIsIGk7XG4rXHRpbnQgc3RhZ2UgPSAxLCBpO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1RMQkZMVVNIKSk7XG4gXG5AQCAtNjMyLDExICs2MTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9zZXRfbXNyKHZjcHVbMl0sIEhWX1g2NF9NU1JfVlBfSU5ERVgsIFdPUktFUl9WQ1BVX0lEXzIpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdVsyXSk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWRcIik7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWRcIik7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHZjcHVfcnVuKHZjcHVbMF0pO1xuQEAgLTY2MSw4ICs2NDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0fVxuIFxuIGRvbmU6XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCB2Y3B1WzFdKTtcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHZjcHVbMl0pO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdlxuIFx0XHQgKi9cbiBcdFx0dmlydF9tYXAodm0sIGdwYSwgZ3BhLCBQRVJfQ1BVX0RBVEFfU0laRSAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbitcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbmluZGV4IDEwZGI5ZmU2ZDkwNjMuLmU2ZDE2ZTlkNjEyMDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xuQEAgLTY1LDEzICs2NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKVxuIFx0LyogUmVxdWVzdCB0byBhY2Nlc3MgcGFnZSBwcml2YXRlbHkgKi9cbiBcdHZtX21lbV9zZXRfcHJpdmF0ZSh2bSwgRVhJVFNfVEVTVF9HUEEsIEVYSVRTX1RFU1RfU0laRSk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXG4tXHRcdCAgICAgICAodm9pZCAqKCopKHZvaWQgKikpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLFxuLVx0XHQgICAgICAgKHZvaWQgKil2Y3B1KTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXG4rXHRcdFx0ICAgKHB0aHJlYWRfZm5fdClydW5fdmNwdV9nZXRfZXhpdF9yZWFzb24sICh2b2lkICopdmNwdSk7XG4gXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgRVhJVFNfVEVTVF9TTE9UKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuK1x0a3ZtX3B0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuIFx0ZXhpdF9yZWFzb24gPSAodTMyKSh1NjQpdGhyZWFkX3JldHVybjtcbiBcbiBcdFRFU1RfQVNTRVJUX0VRKGV4aXRfcmVhc29uLCBLVk1fRVhJVF9NRU1PUllfRkFVTFQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuaW5kZXggY2JjOTJhODYyZWE5Yy4uN2EwYmQ5ZjdiYTZjOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX01BWF9WQ1BVUzsgaSsrKVxuIFx0XHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlLCB2Y3B1c1swXSksIDApO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pO1xuIFxuIFx0dmNwdU4gPSB2Y3B1c1tLVk1fTUFYX1ZDUFVTIC0gMV07XG4gXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbkBAIC02NSw4ICs2NSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRcdHZjcHVfc2V0X21zcih2Y3B1TiwgTVNSX0lBMzJfQVBJQ0JBU0UsIExBUElDX0RJU0FCTEVEKTtcbiBcdH1cbiBcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfY2FuY2VsKHRocmVhZCksIDApO1xuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcbmluZGV4IGQ1OWFiYjE5OGQ4NmYuLmRlMDA2ZTFjODYxYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuQEAgLTEyOCwxMCArMTI4LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2V2X21pZ3JhdGVfbG9ja2luZyh2b2lkKVxuIFx0XHQgICAgICAgc2l6ZW9mKGlucHV0W2ldLnNvdXJjZV92bXMpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnB0W2ldLCBOVUxMLCBsb2NraW5nX3Rlc3RfdGhyZWFkLCBcdTAwMjZpbnB1dFtpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXHUwMDI2aW5wdXRbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICsraSlcbi1cdFx0cHRocmVhZF9qb2luKHB0W2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgKytpKVxuIFx0XHRrdm1fdm1fZnJlZShpbnB1dFtpXS52bSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xuaW5kZXggNWIwYzIzNTliYmI0My4uOWQ3NmMyZWQ3ODRiNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpXG4gXHRcdCAgICAhIShydW4tXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpLFxuIFx0XHQgICAgISEocnVuLVx1MDAzZXMucmVncy5zcmVncy5lZmVyIFx1MDAyNiBFRkVSX0xNRSkpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pLCAwKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2VyLCAodm9pZCAqKXJ1bik7XG4gXG4gXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbiBcdFx0LypcbkBAIC0xOTksOCArMTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jYW5jZWwodGhyZWFkKSwgMCk7XG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xuIFxuIFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuaW5kZXggNTlkYThkNGRhNjA3OS4uMmEzYTliZDhiMzM4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuQEAgLTk0LDEyICs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cHRocmVhZF90IGNwdV90aHJlYWRzW05SX1RFU1RfVkNQVVNdO1xuIFx0dW5zaWduZWQgbG9uZyBjcHU7XG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNmNwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xuIFxuIFx0dW5zaWduZWQgbG9uZyBmYWlsdXJlcyA9IDA7XG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspIHtcbiBcdFx0dm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7XG4tXHRcdHB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xuIFx0XHRmYWlsdXJlcyArPSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDNhMzI2YzVlNzRjYWIuLjc4ZTdhYWU4ZmFiOGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIyOCwyNSArMjI4LDYgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0dm9pZCAqcmV0dmFsO1xuLVx0aW50IHI7XG4tXG4tXHRyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcIixcbi1cdFx0ICAgIHZjcHUtXHUwMDNlaWQsIHIpO1xuLVx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICBcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCIsIFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICByZXR2YWwpO1xuLX1cbi1cbiB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICAgdTY0ICpwaXBpc19yY3ZkKVxuIHtcbkBAIC0zODcsNyArMzY4LDYgQEAgdm9pZCBnZXRfY21kbGluZV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCAqcnVuX3NlY3MsXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgcjtcbiBcdGludCB3YWl0X3NlY3M7XG4gXHRjb25zdCBpbnQgbWF4X2hhbHRlcl93YWl0ID0gMTA7XG4gXHRpbnQgcnVuX3NlY3MgPSAwO1xuQEAgLTQyOCw5ICs0MDgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xuIFxuIFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXHUwMDI2cGFyYW1zWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9jcmVhdGUgaGFsdGVyIGZhaWxlZCBlcnJubz0lZFwiLCBlcnJubyk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1swXSk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJIYWx0ZXIgdkNQVSB0aHJlYWQgc3RhcnRlZFxcblwiKTtcbiBcbiBcdHdhaXRfc2VjcyA9IDA7XG5AQCAtNDQ3LDggKzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFwiSGFsdGVyIHZDUFUgdGhyZWFkIHJlcG9ydGVkIGl0cyBBUElDIElEOiAldSBhZnRlciAlZCBzZWNvbmRzLlxcblwiLFxuIFx0XHRkYXRhLVx1MDAzZWhhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcdTAwMjZwYXJhbXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcInB0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcIiwgZXJybm8pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcdTAwMjZwYXJhbXNbMV0pO1xuIFxuIFx0ZnByaW50ZihzdGRlcnIsXG4gXHRcdFwiSVBJIHNlbmRlciB2Q1BVIHRocmVhZCBzdGFydGVkLiBMZXR0aW5nIHZDUFVzIHJ1biBmb3IgJWQgc2Vjb25kcy5cXG5cIixcbkBAIC00NjIsOCArNDM5LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdC8qXG4gXHQgKiBDYW5jZWwgdGhyZWFkcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBzdG9wLlxuIFx0ICovXG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCBwYXJhbXNbMF0udmNwdSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCBwYXJhbXNbMV0udmNwdSk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbitcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSBob3N0IHN1cHBvcnQgSWRsZSBITFQsIGkuZS4gS1ZNICptaWdodCogYmUgdXNpbmcgSWRsZSBITFQsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcbmluZGV4IDUwNzZmNmE3NTQ1NTcuLmEyMjZhMmZkNjFkOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG5AQCAtNDM3LDcgKzQzNyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHB0aHJlYWRfdCB0aHJlYWQ7XG4gXHRib29sIHZlcmJvc2U7XG4tXHRpbnQgcmV0O1xuIFxuIFx0dmVyYm9zZSA9IGFyZ2MgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICghc3RybmNtcChhcmd2WzFdLCBcIi12XCIsIDMpIHx8XG4gXHRcdFx0ICAgICAgICFzdHJuY21wKGFyZ3ZbMV0sIFwiLS12ZXJib3NlXCIsIDEwKSk7XG5AQCAtODk0LDggKzg5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRpZiAodmVyYm9zZSlcbiBcdFx0XHRcdFx0cHJpbnRmKFwiVGVzdGluZyBzaGluZm8gbG9jayBjb3JydXB0aW9uIChLVk1fWEVOX0hWTV9FVlRDSE5fU0VORClcXG5cIik7XG4gXG4tXHRcdFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNmp1Z2dsZV9zaGluZm9fc3RhdGUsICh2b2lkICopdm0pO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XG4gXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xuIFx0XHRcdFx0XHQucG9ydCA9IDEsXG5AQCAtOTQ5LDExICs5NDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFx0VEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsXG4gXHRcdFx0XHRcdCAgICBcIkV4cGVjdGVkIGV2ZW50IGNoYW5uZWwgSVJRIGJ1dCBpdCBkaWRuJ3QgaGFwcGVuXCIpO1xuIFxuLVx0XHRcdFx0cmV0ID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFx0XHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcInB0aHJlYWRfY2FuY2VsKCkgZmFpbGVkOiAlc1wiLCBzdHJlcnJvcihyZXQpKTtcbi1cbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aHJlYWQsIDApO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwicHRocmVhZF9qb2luKCkgZmFpbGVkOiAlc1wiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHRcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRcdFx0Y2FzZSBURVNUX0dVRVNUX1NBV19JUlE6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OS4zODA4NzI5NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2NzM0MTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb246IE5vKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBgcHRocmVhZF9jcmVhdGVgIGFuZCBgcHRocmVhZF9qb2luYCB3aXRoIHRoZWlyIEtWTS1zcGVjaWZpYyBjb3VudGVycGFydHMgKGBrdm1fcHRocmVhZF9jcmVhdGVgLCBga3ZtX3B0aHJlYWRfam9pbmApIGFuZCBhZGRpbmcgc29tZSB3cmFwcGVycyBpbiBga3ZtX3N5c2NhbGxzLmhgLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBpcyAqdXNlcnNwYWNlKiB0ZXN0IGNvZGUhIEl0J3Mgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpdHNlbGYuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IGNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgZG8gbm90IHdhcnJhbnQgZnV6emluZy4gIFRoaXMgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gVGhlIHBhdGNoIG1vZGlmaWVzIHNlbGZ0ZXN0cyBhbmQgdGhhdCdzIGl0OyB0aGF0IGRvZXNuJ3QgbW9kaWZ5IHRoZSBrZXJuZWwgc291cmNlIHRoYXQgKnJ1bnMqIGluIHRoZSBrZXJuZWwgc3BhY2UuIFNvLCBiYXNlZCBvbiB0aGF0LCBJJ20gdGhpbmtpbmcgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBcIm5vXCIuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZmlsZSBsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXM6XG5cbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jYFxuXG5BbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjkzLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjIzOjAxLjY0ODIxODY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowch4sj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 07:20:39 +0000 UTC FinishedAt: 2026-08-01 07:23:03 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byB1c2UgY3VzdG9tIHB0aHJlYWQgd3JhcHBlcnMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZWNjNWFjM2RmYWNmYjVhMzNmZjc1ZjFkZjRhOWY5NTYyZGJkMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggZjhiMDI1OTc4OTdiZC4uMDMxNjBhZDY2NmY1OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbkBAIC0xNDEsMzMgJiM0MzsxNDEsMjcgQEAgc3RhdGljIHZvaWQgdGVzdF9ydW4oc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuIFx0cHRocmVhZF90IHB0X3ZjcHVfbWlncmF0aW9uO1xuIFx0dW5zaWduZWQgaW50IGk7XG4tXHRpbnQgcmV0O1xuIFxuIFx0cHRocmVhZF9tdXRleF9pbml0KFx1MDAyNnZjcHVfZG9uZV9tYXBfbG9jaywgTlVMTCk7XG4gXHR2Y3B1X2RvbmVfbWFwID0gYml0bWFwX3phbGxvYyh0ZXN0X2FyZ3MubnJfdmNwdXMpO1xuIFx0VEVTVF9BU1NFUlQodmNwdV9kb25lX21hcCwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZjcHUgZG9uZSBiaXRtYXBcJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZwdF92Y3B1X3J1bltpXSwgTlVMTCwgdGVzdF92Y3B1X3J1bixcbi1cdFx0XHRcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbi1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB2Q1BVLSVkIHB0aHJlYWRcJiMzNDssIGkpO1xuLVx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjICh1bnNpZ25lZCBsb25nKXRlc3RfYXJncy5ucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sXG4mIzQzO1x0XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbiBcbiBcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcykge1xuIFx0XHRzcmFuZCh0aW1lKE5VTEwpKTtcbiBcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsXG4tXHRcdFx0XHRcdHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuLVx0XHRURVNUX0FTU0VSVCghcmV0LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHRoZSBtaWdyYXRpb24gcHRocmVhZFwmIzM0Oyk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFx0fVxuIFxuLVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFxuIFx0Yml0bWFwX2ZyZWUodmNwdV9kb25lX21hcCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2lycS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcbmluZGV4IDVlMjMxOTk4NjE3ZTcuLjNjYjg1OTMyZWU4NWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcbkBAIC05ODgsNyAmIzQzOzk4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcbiBcdHN0cnVjdCB0ZXN0X2FyZ3MgYXJncyA9IHt9O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRndmFfdCBhcmdzX2d2YTtcbi1cdGludCBnaWNfZmQsIHJldDtcbiYjNDM7XHRpbnQgZ2ljX2ZkO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpO1xuIFxuQEAgLTEwMDQsMTUgJiM0MzsxMDA0LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcbiBcbiBcdGdpY19mZCA9IHZnaWNfdjNfc2V0dXAodm0sIDIsIDY0KTtcbiBcbi1cdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xuLVx0aWYgKHJldClcbi1cdFx0VEVTVF9GQUlMKFwmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcblwmIzM0OywgcmV0KTtcbi1cdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuLVx0aWYgKHJldClcbi1cdFx0VEVTVF9GQUlMKFwmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDEgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzBdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1swXSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuIFxuLVx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4tXHRwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbih0aHJbMV0sIE5VTEwpO1xuIFxuIFx0Y2xvc2UoZ2ljX2ZkKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbmluZGV4IGQ2NGQ0MzRkM2YwNmUuLjlhNjljNDM5YTBmOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xuQEAgLTMxMSwyMyAmIzQzOzMxMSwyMyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuIFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXHUwMDI2dGVzdF9zZXR1cF9iYXJyaWVyLCBOVUxMLCBucl92Y3B1cyAmIzQzOyBucl9kZXZpY2VzICYjNDM7IDEpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyX3RocmVhZCwgdmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9kZXZpY2VzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmxwaV90aHJlYWRzW2ldLCBOVUxMLCBscGlfd29ya2VyX3RocmVhZCwgKHZvaWQgKilpKTtcbiBcbiBcdHB0aHJlYWRfYmFycmllcl93YWl0KFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllcik7XG4gXG4gXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspXG4tXHRcdHB0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9qb2luKGxwaV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGRlbHRhID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG4gXHR3cml0ZV9ndWVzdF9nbG9iYWwodm0sIHRlc3RfZGF0YS5yZXF1ZXN0X3ZjcHVzX3N0b3AsIHRydWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdHJlcG9ydF9zdGF0cyhkZWx0YSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbmluZGV4IGU4NDE5ZDdkYTFlYWIuLmFmNWViMDMzNGE3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbkBAIC02OTEsNyAmIzQzOzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4gXG4gXHRmb3IgKGl0ZXJhdGlvbiA9IDE7IGl0ZXJhdGlvbiBcdTAwM2M9IHAtXHUwMDNlaXRlcmF0aW9uczsgaXRlcmF0aW9uJiM0MzsmIzQzOykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGksIHJlYXBfaTtcbkBAIC04MDUsNyAmIzQzOzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRXUklURV9PTkNFKGhvc3RfcXVpdCwgdHJ1ZSk7XG4gXHRzZW1fcG9zdChcdTAwMjZzZW1fdmNwdV9jb250KTtcbiBcbi1cdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O1RvdGFsIGJpdHMgY2hlY2tlZDogZGlydHkgKCVsdSksIGNsZWFyICglbHUpXFxuXCYjMzQ7LFxuIFx0XHRob3N0X2RpcnR5X2NvdW50LCBob3N0X2NsZWFyX2NvdW50KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcbmluZGV4IDMxNDdmNWM5N2U5NDMuLjRhYmFkNzE1ODk4OTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuQEAgLTUsNyAmIzQzOzUsNiBAQFxuICAqIHJldHVybiBub3RpZmllcnMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NlbWFwaG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuQEAgLTE0LDIwICYjNDM7MTMsMjMgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fc3lzY2FsbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dWNhbGxfY29tbW9uLmhcJiMzNDtcbiBcbi0jZGVmaW5lIFZDUFVfTlVNIDRcbi0jZGVmaW5lIFNMRUVQSU5HX1RIUkVBRF9OVU0gKDEgXHUwMDNjXHUwMDNjIDQpXG4tI2RlZmluZSBGT1JLX05VTSAoMVVMTCBcdTAwM2NcdTAwM2MgOSlcbi0jZGVmaW5lIERFTEFZX1VTX01BWCAyMDAwXG4mIzQzOyNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuJiM0MzsjZGVmaW5lIE5SX1NMRUVQRVJTX1BFUl9WQ1BVXHQxNlxuJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTEyXG4mIzQzOyNkZWZpbmUgREVMQVlfVVNfTUFYXHRcdDIwMDBcbiBcbiBzZW1fdCAqc2VtO1xuJiM0MztzdGF0aWMgY3B1X3NldF90IGNoaWxkX2NwdV9zZXQ7XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbiBcdGZvciAoOzspXG4gXHRcdDsgIC8qIFNvbWUgYnVzeSB3b3JrICovXG4tXHRwcmludGYoXCYjMzQ7U2hvdWxkIG5vdCBiZSByZWFjaGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqcnVuX3ZjcHUodm9pZCAqYXJnKVxuQEAgLTM3LDg0ICYjNDM7MzksNDcgQEAgc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZylcbiBcbiBcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0VEVTVF9BU1NFUlQoZmFsc2UsIFwmIzM0OyVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXCYjMzQ7LFxuLVx0XHQgICAgX19mdW5jX18sIHJ1bi1cdTAwM2VleGl0X3JlYXNvbixcbi1cdFx0ICAgIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbi1cdHB0aHJlYWRfZXhpdChOVUxMKTtcbiYjNDM7XHRURVNUX0ZBSUwoXCYjMzQ7dkNQVSVkIGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXNcJiMzNDssXG4mIzQzO1x0XHQgIHZjcHUtXHUwMDNlaWQsIHJ1bi1cdTAwM2VleGl0X3JlYXNvbiwgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqc2xlZXBpbmdfdGhyZWFkKHZvaWQgKmFyZylcbiB7XG4gXHRpbnQgZmQ7XG4gXG4tXHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdHdoaWxlICgxKSB7XG4gXHRcdGZkID0gb3BlbihcJiMzNDsvZGV2L251bGxcJiMzNDssIE9fUkRXUik7XG4gXHRcdGNsb3NlKGZkKTtcbiBcdH1cbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcJiMzNDslczogZXhpdGVkXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRwdGhyZWFkX2V4aXQoTlVMTCk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0cixcbi1cdFx0XHRcdCAgICAgICB2b2lkICooKmYpKHZvaWQgKiksIHZvaWQgKmFyZylcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQsIGF0dHIsIGYsIGFyZyk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0OyVzOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZFwmIzM0OywgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcJiMzNDslczogZmFpbGVkIHNldCBhZmZpbml0eVwmIzM0OywgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfam9pbihwdGhyZWFkX3QgdGhyZWFkLCB2b2lkICoqcmV0dmFsKVxuLXtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfam9pbih0aHJlYWQsIHJldHZhbCk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0OyVzOiBmYWlsZWQgdG8gam9pbiB0aHJlYWRcJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRURVNUX0ZBSUwoXCYjMzQ7JXM6IGV4aXRlZFwmIzM0OywgX19mdW5jX18pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydW5fdGVzdCh1MzIgcnVuKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVx0Y3B1X3NldF90IGNwdV9zZXQ7XG4tXHRwdGhyZWFkX3QgdGhyZWFkc1tWQ1BVX05VTV07XG4tXHRwdGhyZWFkX3QgdGhyb3dfYXdheTtcbi1cdHZvaWQgKmI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiBcdHUzMiBpLCBqO1xuIFxuLVx0Q1BVX1pFUk8oXHUwMDI2Y3B1X3NldCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBWQ1BVX05VTTsgaSYjNDM7JiM0MzspXG4tXHRcdENQVV9TRVQoaSwgXHUwMDI2Y3B1X3NldCk7XG4tXG4tXHR2bSA9IHZtX2NyZWF0ZShWQ1BVX05VTSk7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGUoTlJfVkNQVVMpO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7JXM6IFslZF0gc3RhcnQgdmNwdXNcXG5cJiMzNDssIF9fZnVuY19fLCBydW4pO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcnVuX3ZjcHUsIHZjcHUpO1xuLVx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyZWFkc1tpXSwgXHUwMDI2Y3B1X3NldCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBTTEVFUElOR19USFJFQURfTlVNOyAmIzQzOyYjNDM7aikge1xuLVx0XHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyb3dfYXdheSwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLFxuLVx0XHRcdFx0XHQgICAgKHZvaWQgKilOVUxMKTtcbi1cdFx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyb3dfYXdheSwgXHUwMDI2Y3B1X3NldCk7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOUl9TTEVFUEVSU19QRVJfVkNQVTsgJiM0MzsmIzQzO2opIHtcbiYjNDM7XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLCAodm9pZCAqKU5VTEwpO1xuJiM0MztcdFx0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRwcl9kZWJ1ZyhcJiMzNDslczogWyVkXSBhbGwgdGhyZWFkcyBsYXVuY2hlZFxcblwmIzM0OywgX19mdW5jX18sIHJ1bik7XG4gXHRzZW1fcG9zdChzZW0pO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07ICYjNDM7JiM0MztpKVxuLVx0XHRjaGVja19qb2luKHRocmVhZHNbaV0sIFx1MDAyNmIpO1xuLVx0LyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovXG4tXHRURVNUX0FTU0VSVChmYWxzZSwgXCYjMzQ7JXM6IFslZF0gY2hpbGQgZXNjYXBlZCB0aGUgbmluamFcJiMzNDssIF9fZnVuY19fLCBydW4pO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciB0aGUgcGFyZW50IHRvIFNJR0tJTEwgdGhpcyBjaGlsZC4gKi9cbiYjNDM7XHR3aGlsZSAoMSk7XG4gfVxuIFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuQEAgLTE0NywxNiAmIzQzOzExMiwzNCBAQCB2b2lkIHdhaXRfZm9yX2NoaWxkX3NldHVwKHBpZF90IHBpZClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2NoaWxkX2NwdV9zZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoQ1BVX0NPVU5UKFx1MDAyNmNoaWxkX2NwdV9zZXQpIFx1MDAzYyAyKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjcHUgPSBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfc2VsZigpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiYjNDM7XHRDUFVfQ0xSKGNwdSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChDUFVfQ09VTlQoXHUwMDI2Y2hpbGRfY3B1X3NldCkgXHUwMDNlIE5SX1ZDUFVTKVxuJiM0MztcdFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFx1MDAyNmNoaWxkX2NwdV9zZXQpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuIFx0dTMyIGk7XG4gXHRpbnQgcywgcjtcbiBcdHBpZF90IHBpZDtcbiBcbiYjNDM7XHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XG4mIzQzO1xuIFx0c2VtID0gc2VtX29wZW4oXCYjMzQ7dm1fc2VtXCYjMzQ7LCBPX0NSRUFUIHwgT19FWENMLCAwNjQ0LCAwKTtcbiBcdHNlbV91bmxpbmsoXCYjMzQ7dm1fc2VtXCYjMzQ7KTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEZPUktfTlVNOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHBpZCA9IGZvcmsoKTtcbiBcdFx0VEVTVF9BU1NFUlQocGlkIFx1MDAzZT0gMCwgXCYjMzQ7JXM6IHVuYWJsZSB0byBmb3JrXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGlmIChwaWQgPT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiBcbkBAIC05Niw2ICYjNDM7OTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtYWR2aXNlLCAzLCB2b2lkICosIGFkZHIsIHNpemVfdCwgbGVuZ3RoLCBpbnQsIGFkdmljZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2dldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcbiYjNDM7XHRcdCAgICAgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgY3B1c2V0KTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsXG4mIzQzO1x0XHQgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY29uc3QgY3B1X3NldF90ICosIGNwdXNldCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCwgY3B1X3NldF90ICpjcHVzZXQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVfc2V0X3QpLCBjcHVzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IGNwdV9zZXRfdCAqY3B1c2V0KVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dHlwZWRlZiB2b2lkICooKnB0aHJlYWRfZm5fdCkodm9pZCAqKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGF0dHIsIHB0aHJlYWRfZm5fdCwgZm4sIHZvaWQgKiwgYXJnKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9qb2luLCAyLCBwdGhyZWFkX3QsIHRocmVhZCwgdm9pZCAqKiwgdGhyZWFkX3JldHVybik7XG4mIzQzO19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfY2FuY2VsLCAxLCBwdGhyZWFkX3QsIHRocmVhZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZChwdGhyZWFkX3QgdGhyZWFkLCB2b2lkICoqcilcbiYjNDM7e1xuJiM0MztcdGt2bV9wdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpXG4mIzQzO3tcbiYjNDM7XHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbmNlbCYjNDM7Sm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xuJiM0MzsgKiBhbmQgaXMgZXhwZWN0ZWQgdG8gZXhpdCBvbmx5IGluIHJlc3BvbnNlIHRvIGNhbmNlbGxhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqcjtcbiYjNDM7XG4mIzQzO1x0X19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQsIFx1MDAyNnIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHIgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbiYjNDM7XHRcdCAgICBcJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwgcik7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBrdm1fZnJlZV9mZChmZClcdFx0XFxcbiBkbyB7XHRcdFx0XHRcXFxuIFx0a3ZtX2Nsb3NlKGZkKTtcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggYjM5ZTcxM2MzMGE0Ni4uNWE3YTQ1NWI1Mzg3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0xMDg0LDYgJiM0MzsxMDg0LDggQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdm0gKnZtKTtcbiBcbiB2b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cyk7XG4gXG4mIzQzO2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XG4mIzQzO1xuIGludCBfX3Bpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcbkBAIC0xMDk0LDcgJiM0MzsxMDk2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpXG4gXHRURVNUX0FTU0VSVCghciwgXCYjMzQ7RmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAmIzM5OyV1JiMzOTtcJiMzNDssIGNwdSk7XG4gfVxuIFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Y3B1ID0ga3ZtX3BpY2tfcmFuZG9tX2NwdShwb3NzaWJsZV9jcHVzKTtcbiYjNDM7XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbiYjNDM7XHRyZXR1cm4gY3B1O1xuJiM0Mzt9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fYW55X2NwdShwdGhyZWFkX3QgdGFzaylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuaW5kZXggMjQwZjZmMGZkYmU0My4uMTY4YzUyNzM0ZmVmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTI5Niw3ICYjNDM7Mjk2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcbkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcbmluZGV4IDVkNzU5MGQwMTg2ODEuLmViYjI0Nzg4NzhkZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG5AQCAtMTI4LDcgJiM0MzsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0Y2xvc2UoX19ldmVudGZkKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnJhY2luZ190aHJlYWQsIE5VTEwsIHNlY29uZGFyeV9pcnFmZF9qdWdnbGVyLCB2bTIpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwOyBpJiM0MzsmIzQzOykge1xuIFx0XHRXUklURV9PTkNFKF9fZXZlbnRmZCwga3ZtX25ld19ldmVudGZkKCkpO1xuQEAgLTEzOSw1ICYjNDM7MTM5LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UoZG9uZSwgdHJ1ZSk7XG4tXHRwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihyYWNpbmdfdGhyZWFkLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcbmluZGV4IGE5MTBlM2FiYjhjNzEuLjk3NDgxM2VhODk1MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG5AQCAtMzY0LDggJiM0MzszNjQsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0KmN1cnJlbnRfc3RhZ2UgPSBLVk1fQkVGT1JFX01BUFBJTkdTO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLFxuLVx0XHRcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXG4mIzQzO1x0XHRcdFx0ICAgdGVzdF9hcmdzLnZjcHVzW2ldKTtcbiBcbiBcdHZjcHVzX2NvbXBsZXRlX25ld19zdGFnZSgqY3VycmVudF9zdGFnZSk7XG4gXHRwcl9pbmZvKFwmIzM0O1N0YXJ0ZWQgYWxsIHZDUFVzIHN1Y2Nlc3NmdWxseVxcblwmIzM0Oyk7XG5AQCAtNDEzLDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdHJldCA9IHNlbV9kZXN0cm95KFx1MDAyNnRlc3Rfc3RhZ2VfdXBkYXRlZCk7XG4gXHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXCYjMzQ7RXJyb3IgaW4gc2VtX2Rlc3Ryb3lcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMzc5NDU3NWQyY2EwYy4uOWRkYzA0N2Q1YzI3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5AQCAtNjY4LDcgJiM0Mzs2NjgsNyBAQCB2b2lkIGt2bV9wcmludF92Y3B1X3Bpbm5pbmdfaGVscCh2b2lkKVxuIFx0ICAgICAgIFwmIzM0OyAgICAgKGRlZmF1bHQ6IG5vIHBpbm5pbmcpXFxuXCYjMzQ7LCBuYW1lLCBuYW1lKTtcbiB9XG4gXG4tdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4mIzQzO2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiB7XG4gXHRpbnQgdGFyZ2V0X2lkeDtcbiBcdGludCBucl9jcHVzO1xuQEAgLTY4MCwxMyAmIzQzOzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiBcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4gXG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuLVx0XHRcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIGNwdTtcbiBcdH1cbi1cbiBcdFRFU1RfRkFJTChcJiMzNDtGYWlsZWQgdG8gZmluZCByYW5kb20gQ1BVIGluIHBvc3NpYmxlX2NwdXNcJiMzNDspO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCAzNTk5Yjc1ZDk3YzkxLi4yODY0NTYyZjU3YjQwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgdm9pZCBtZW1zdHJlc3Nfc3RhcnRfdmNwdV90aHJlYWRzKGludCBucl92Y3B1cyxcbiBcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IGk7XG4gXHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VydW5uaW5nLCBmYWxzZSk7XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHUtXHUwMDNldGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1KTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMTIsNyAmIzQzOzMxMiw3IEBAIHZvaWQgbWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKGludCBucl92Y3B1cylcbiBcdFdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRvZ2dsZV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgc2xvdHMsIGJvb2wgZW5hYmxlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbmluZGV4IGVmOGQ3NmY3MWY4MzcuLmY3Y2U1YTZkZGNjMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbkBAIC0xNjcsOCAmIzQzOzE2Nyw4IEBAIHN0cnVjdCB1ZmZkX2Rlc2MgKnVmZmRfc2V0dXBfZGVtYW5kX3BhZ2luZyhpbnQgdWZmZF9tb2RlLCB1c2Vjb25kc190IGRlbGF5LFxuIFx0XHR1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyX2FyZ3NbaV0uaGFuZGxlciA9IGhhbmRsZXI7XG4gXHRcdHVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXS5waXBlID0gcGlwZXNbMF07XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxuLVx0XHRcdCAgICAgICBcdTAwMjZ1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyX2FyZ3NbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4gXG4gXHRcdFBFUl9WQ1BVX0RFQlVHKFwmIzM0O0NyZWF0ZWQgdWZmZCB0aHJlYWQgJWkgZm9yIEhWQSByYW5nZSBbJXAsICVwKVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICAgaSwgaHZhLCBodmEgJiM0MzsgbGVuKTtcbkBAIC0xODcsOCAmIzQzOzE4Nyw3IEBAIHZvaWQgdWZmZF9zdG9wX2RlbWFuZF9wYWdpbmcoc3RydWN0IHVmZmRfZGVzYyAqdWZmZClcbiBcdFx0XHQgICAgXCYjMzQ7VW5hYmxlIHRvIHdyaXRlIHRvIHBpcGVmZCAlaSBmb3IgdWZmZF9kZXNjICVwXCYjMzQ7LCBpLCB1ZmZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVmZmQtXHUwMDNlbnVtX3JlYWRlcnM7ICYjNDM7JiM0MztpKVxuLVx0XHRURVNUX0FTU0VSVCghcHRocmVhZF9qb2luKHVmZmQtXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCksXG4tXHRcdFx0ICAgIFwmIzM0O1B0aHJlYWRfam9pbiBmYWlsZWQgb24gcmVhZGVyICVpIGZvciB1ZmZkX2Rlc2MgJXBcJiMzNDssIGksIHVmZmQpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih1ZmZkLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpO1xuIFxuIFx0Y2xvc2UodWZmZC1cdTAwM2V1ZmZkKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCA0ZDlhZDYxMDRhNmVkLi5lMTI5OTYxMWJlMzIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzY2LDcgJiM0MzszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4ge1xuIFx0cHJfaW5mb192KFwmIzM0O0xhdW5jaGluZyB0aGUgdGVzdCBWTVxcblwmIzM0Oyk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgZGF0YSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmRhdGEtXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMzgxLDcgJiM0MzszODEsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhKVxuIFxuIHN0YXRpYyB2b2lkIHdhaXRfZ3Vlc3RfZXhpdChzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSlcbiB7XG4tXHRwdGhyZWFkX2pvaW4oZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbGV0X2d1ZXN0X3J1bihzdHJ1Y3Qgc3luY19hcmVhICpzeW5jKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuaW5kZXggM2Q1ZjMzYTYzYjJiNC4uNzQxZTM0Mzk2MmVkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgcHRocmVhZF90ICpzcGF3bl93b3JrZXJzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyxcbiBcdFx0aW5mb1tpXS52Y3B1ID0gdmNwdXNbaV07XG4gXHRcdGluZm9baV0uc3RhcnRfZ3BhID0gZ3BhO1xuIFx0XHRpbmZvW2ldLmVuZF9ncGEgPSBncGEgJiM0MzsgbnJfYnl0ZXM7XG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLCBcdTAwMjZpbmZvW2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgXHUwMDI2aW5mb1tpXSk7XG4gXHR9XG4gXHRyZXR1cm4gdGhyZWFkcztcbiB9XG5AQCAtNDA5LDcgJiM0Mzs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdC8qXG4gXHQgKiBEZWxpYmVyYXRlbHkgZXhpdCB3aXRob3V0IGRlbGV0aW5nIHRoZSByZW1haW5pbmcgbWVtc2xvdHMgb3IgY2xvc2luZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuaW5kZXggYTBmY2FlM2NiN2E4Yi4uYzU3NjMxYWFiM2QzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5AQCAtODQsNyAmIzQzOzg0LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcbiBcdCAqIENvbmN1cnJlbnRseSBkZWxldGUgKGFuZCByZWNyZWF0ZSkgdGhlIHNsb3QgdG8gdGVzdCBLVk0mIzM5O3MgaGFuZGxpbmdcbiBcdCAqIG9mIGEgcmFjaW5nIG1lbXNsb3QgZGVsZXRpb24gd2l0aCBwcmVmYXVsdGluZy5cbiBcdCAqL1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2c2xvdF93b3JrZXIsIE5VTEwsIGRlbGV0ZV9zbG90X3dvcmtlciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuIFxuIFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0xMTYsNyAmIzQzOzExNiw3IEBAIHN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXG4gXHRcdCAqL1xuIFx0XHRpZiAoIXNsb3RfcmVjcmVhdGVkKSB7XG4gXHRcdFx0V1JJVEVfT05DRShkYXRhLnJlY3JlYXRlX3Nsb3QsIHRydWUpO1xuLVx0XHRcdHB0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7XG4mIzQzO1x0XHRcdGt2bV9wdGhyZWFkX2pvaW4oc2xvdF93b3JrZXIsIE5VTEwpO1xuIFx0XHRcdHNsb3RfcmVjcmVhdGVkID0gdHJ1ZTtcbiBcbiBcdFx0XHQvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuaW5kZXggNTU3ZTM5M2MyMjNiOS4uZGYzZTVhZDFjMzkzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG5AQCAtMjQxLDggJiM0MzsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0ICovXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylrdm1fZ2V0dGlkKCkpO1xuIFxuIFx0aWYgKGxhdGVuY3kgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG5AQCAtMzE0LDcgJiM0MzszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgICAgXCYjMzQ7ICBlLmcuIHZpYSBjcHVpZGxlLm9mZj0xIG9yIHZpYSAtbCBcdTAwM2NsYXRlbmN5XHUwMDNlLCBvciBydW4gd2l0aCAtdSB0b1xcblwmIzM0O1xuIFx0XHQgICAgXCYjMzQ7ICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLlwmIzM0OywgaSk7XG4gXG4tXHRwdGhyZWFkX2pvaW4obWlncmF0aW9uX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY1xuaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKVxuIFx0SE9TVF9TWU5DKHQudmNwdSwgU1RBR0VfU0tFWVNfU0VUKTtcbiBcdHByZXBhcmVfbWVtMTIoKTtcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcnVuX2d1ZXN0LCBcdTAwMjZ0LnZjcHUpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNtcHhjaGdfaXRlcl9vdXRlcjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZG8ge1xuQEAgLTcwMSw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jbXB4Y2hnX2tleV9jb25jdXJyZW50KHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFJFQUQsIG1lbTIsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7XG4gXHRURVNUX0FTU0VSVChwb3Bjb3VudF9lcSgqKF9fdWludDEyOF90ICopbWVtMSwgKihfX3VpbnQxMjhfdCAqKW1lbTIpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBhMTUyYWI2NWM2NTc3Li5kZmZlOTY1NGY0NWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiBcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZSh2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsICp2Y3B1KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMjE2LDcgJiM0MzsyMTYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21vdmVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHQvKiBEZWZlcmVkIHN5bmMgZnJvbSB3aGVuIHRoZSBtZW1zbG90IHdhcyBtaXNhbGlnbmVkIChhYm92ZSkuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG4gXG4tXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIH1cbkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0ICovXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgMCk7XG4gXG4tXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0cnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcbmluZGV4IDBiODhjNzQzZWU3ZDUuLmJjM2M2MmI3MmM1OGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5AQCAtNTQ4LDE1ICYjNDM7NTQ4LDE1IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuLVx0XHRwdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4mIzQzO1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHRocmVhZCwgXHUwMDI2Y3B1c2V0KTtcbiBcdFx0VEVTVF9BU1NFUlQoQ1BVX0NPVU5UKFx1MDAyNmNwdXNldCkgPT0gMSBcdTAwMjZcdTAwMjYgQ1BVX0lTU0VUKGNwdSwgXHUwMDI2Y3B1c2V0KSxcbiBcdFx0XHQgICAgXCYjMzQ7V29ya2VyIGZhaWxlZCB0byBpbmhlcml0IHBhcmVudCYjMzk7cyBDUFUgYWZmaW5pdHlcJiMzNDspO1xuIFxuIFx0XHRkb1xuIFx0XHRcdHNjaGVkX3lpZWxkKCk7XG4gXHRcdHdoaWxlIChnZXRfcnVuX2RlbGF5KCkgLSBydW5fZGVsYXkgXHUwMDNjIE1JTl9SVU5fREVMQVlfTlMpO1xuLVx0XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuIFx0XHRURVNUX0FTU0VSVChydW5fZGVsYXkgXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxuIFx0XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBydW5fZGVsYXkgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuaW5kZXggNzcxNTM1ZjlhYWQzYy4uZmUzOGNjNGNiYTA1MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuQEAgLTIyMiwzMCAmIzQzOzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY2FuY2VsIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcJiMzNDssXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cbi1cdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIFwmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdVszXTtcbiBcdGd2YV90IGhjYWxsX3BhZ2U7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbi1cdGludCBzdGFnZSA9IDEsIHI7XG4mIzQzO1x0aW50IHN0YWdlID0gMTtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbiBcbiBcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0hZUEVSVl9TRU5EX0lQSSkpO1xuQEAgLTI3MiwxMSAmIzQzOzI1NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdVswXSk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwmIzM0Oywgcik7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwmIzM0OywgZXJybm8pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHZjcHVfcnVuKHZjcHVbMF0pO1xuQEAgLTMwMiw5ICYjNDM7MjgyLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBkb25lOlxuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1swXSwgdmNwdVsxXSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5pbmRleCBiNGJlOWExNzUzNzlmLi44NGYyMmYzOWM4ZjIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5AQCAtNTQ4LDIzICYjNDM7NTQ4LDYgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0dm9pZCAqcmV0dmFsO1xuLVx0aW50IHI7XG4tXG4tXHRyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwmIzM0Oyxcbi1cdFx0ICAgIHZjcHUtXHUwMDNlaWQsIHIpO1xuLVx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICBcJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIHJldHZhbCk7XG4tfVxuLVxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtNTc1LDcgJiM0Mzs1NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dTY0ICpwdGU7XG4gXHRzdHJ1Y3QgdGVzdF9kYXRhICpkYXRhO1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuLVx0aW50IHN0YWdlID0gMSwgciwgaTtcbiYjNDM7XHRpbnQgc3RhZ2UgPSAxLCBpO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1RMQkZMVVNIKSk7XG4gXG5AQCAtNjMyLDExICYjNDM7NjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHZjcHVfc2V0X21zcih2Y3B1WzJdLCBIVl9YNjRfTVNSX1ZQX0lOREVYLCBXT1JLRVJfVkNQVV9JRF8yKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMl0pO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZFwmIzM0Oyk7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR2Y3B1X3J1bih2Y3B1WzBdKTtcbkBAIC02NjEsOCAmIzQzOzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR9XG4gXG4gZG9uZTpcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1sxXSwgdmNwdVsyXSk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jXG5pbmRleCAxZDJmNWQ0ZmQ0NWQ3Li4zYWEwNjczZjc5ZjMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jXG5AQCAtNDEyLDEzICYjNDM7NDEyLDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92XG4gXHRcdCAqL1xuIFx0XHR2aXJ0X21hcCh2bSwgZ3BhLCBncGEsIFBFUl9DUFVfREFUQV9TSVpFIC8gdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgX190ZXN0X21lbV9jb252ZXJzaW9ucywgdmNwdXNbaV0pO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbmluZGV4IDEwZGI5ZmU2ZDkwNjMuLmU2ZDE2ZTlkNjEyMDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xuQEAgLTY1LDEzICYjNDM7NjUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wcml2YXRlX2FjY2Vzc19tZW1zbG90X2RlbGV0ZWQodm9pZClcbiBcdC8qIFJlcXVlc3QgdG8gYWNjZXNzIHBhZ2UgcHJpdmF0ZWx5ICovXG4gXHR2bV9tZW1fc2V0X3ByaXZhdGUodm0sIEVYSVRTX1RFU1RfR1BBLCBFWElUU19URVNUX1NJWkUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dm1fdGhyZWFkLCBOVUxMLFxuLVx0XHQgICAgICAgKHZvaWQgKigqKSh2b2lkICopKXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbixcbi1cdFx0ICAgICAgICh2b2lkICopdmNwdSk7XG4mIzQzO1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnZtX3RocmVhZCwgTlVMTCxcbiYjNDM7XHRcdFx0ICAgKHB0aHJlYWRfZm5fdClydW5fdmNwdV9nZXRfZXhpdF9yZWFzb24sICh2b2lkICopdmNwdSk7XG4gXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgRVhJVFNfVEVTVF9TTE9UKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuJiM0MztcdGt2bV9wdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcdTAwMjZ0aHJlYWRfcmV0dXJuKTtcbiBcdGV4aXRfcmVhc29uID0gKHUzMikodTY0KXRocmVhZF9yZXR1cm47XG4gXG4gXHRURVNUX0FTU0VSVF9FUShleGl0X3JlYXNvbiwgS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcbmluZGV4IGNiYzkyYTg2MmVhOWMuLjdhMGJkOWY3YmE2YzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTUFYX1ZDUFVTOyBpJiM0MzsmIzQzOylcbiBcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9BUElDQkFTRSwgTEFQSUNfWDJBUElDKTtcbiBcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pLCAwKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlLCB2Y3B1c1swXSk7XG4gXG4gXHR2Y3B1TiA9IHZjcHVzW0tWTV9NQVhfVkNQVVMgLSAxXTtcbiBcdGZvciAodCA9IHRpbWUoTlVMTCkgJiM0MzsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbkBAIC02NSw4ICYjNDM7NjUsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHR2Y3B1X3NldF9tc3IodmNwdU4sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19ESVNBQkxFRCk7XG4gXHR9XG4gXG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpLCAwKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuaW5kZXggZDU5YWJiMTk4ZDg2Zi4uZGUwMDZlMWM4NjFjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jXG5AQCAtMTI4LDEwICYjNDM7MTI4LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2V2X21pZ3JhdGVfbG9ja2luZyh2b2lkKVxuIFx0XHQgICAgICAgc2l6ZW9mKGlucHV0W2ldLnNvdXJjZV92bXMpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSlcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2cHRbaV0sIE5VTEwsIGxvY2tpbmdfdGVzdF90aHJlYWQsIFx1MDAyNmlucHV0W2ldKTtcbiYjNDM7XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXHUwMDI2aW5wdXRbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICYjNDM7JiM0MztpKVxuLVx0XHRwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgJiM0MzsmIzQzO2kpXG4gXHRcdGt2bV92bV9mcmVlKGlucHV0W2ldLnZtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG5pbmRleCA1YjBjMjM1OWJiYjQzLi45ZDc2YzJlZDc4NGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNcbkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpXG4gXHRcdCAgICAhIShydW4tXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpLFxuIFx0XHQgICAgISEocnVuLVx1MDAzZXMucmVncy5zcmVncy5lZmVyIFx1MDAyNiBFRkVSX0xNRSkpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pLCAwKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pO1xuIFxuIFx0Zm9yICh0ID0gdGltZShOVUxMKSAmIzQzOyBUSU1FT1VUOyB0aW1lKE5VTEwpIFx1MDAzYyB0Oykge1xuIFx0XHQvKlxuQEAgLTE5OSw4ICYjNDM7MTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jYW5jZWwodGhyZWFkKSwgMCk7XG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7XG4mIzQzO1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTtcbiBcbiBcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNcbmluZGV4IDU5ZGE4ZDRkYTYwNzkuLjJhM2E5YmQ4YjMzOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNcbkBAIC05NCwxMiAmIzQzOzk0LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRwdGhyZWFkX3QgY3B1X3RocmVhZHNbTlJfVEVTVF9WQ1BVU107XG4gXHR1bnNpZ25lZCBsb25nIGNwdTtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBOUl9URVNUX1ZDUFVTOyBjcHUmIzQzOyYjNDM7KVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmNwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7XG4gXG4gXHR1bnNpZ25lZCBsb25nIGZhaWx1cmVzID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBOUl9URVNUX1ZDUFVTOyBjcHUmIzQzOyYjNDM7KSB7XG4gXHRcdHZvaWQgKnRoaXNfY3B1X2ZhaWx1cmVzO1xuLVx0XHRwdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xuJiM0MztcdFx0a3ZtX3B0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XG4gXHRcdGZhaWx1cmVzICYjNDM7PSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDNhMzI2YzVlNzRjYWIuLjc4ZTdhYWU4ZmFiOGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIyOCwyNSAmIzQzOzIyOCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2FuY2VsX2pvaW5fdmNwdV90aHJlYWQocHRocmVhZF90IHRocmVhZCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHZvaWQgKnJldHZhbDtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsXG4tXHRcdCAgICBcJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCYjMzQ7LFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcbi1cdFx0ICAgIFwmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAgIHU2NCAqcGlwaXNfcmN2ZClcbiB7XG5AQCAtMzg3LDcgJiM0MzszNjgsNiBAQCB2b2lkIGdldF9jbWRsaW5lX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50ICpydW5fc2VjcyxcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdGludCByO1xuIFx0aW50IHdhaXRfc2VjcztcbiBcdGNvbnN0IGludCBtYXhfaGFsdGVyX3dhaXQgPSAxMDtcbiBcdGludCBydW5fc2VjcyA9IDA7XG5AQCAtNDI4LDkgJiM0Mzs0MDgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xuIFxuIFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXHUwMDI2cGFyYW1zWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGhhbHRlciBmYWlsZWQgZXJybm89JWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1swXSk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWRcXG5cJiMzNDspO1xuIFxuIFx0d2FpdF9zZWNzID0gMDtcbkBAIC00NDcsOCAmIzQzOzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFwmIzM0O0hhbHRlciB2Q1BVIHRocmVhZCByZXBvcnRlZCBpdHMgQVBJQyBJRDogJXUgYWZ0ZXIgJWQgc2Vjb25kcy5cXG5cJiMzNDssXG4gXHRcdGRhdGEtXHUwMDNlaGFsdGVyX2FwaWNfaWQsIHdhaXRfc2Vjcyk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1sxXSk7XG4tXHRURVNUX0FTU0VSVChyID09IDAsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1sxXSk7XG4gXG4gXHRmcHJpbnRmKHN0ZGVycixcbiBcdFx0XCYjMzQ7SVBJIHNlbmRlciB2Q1BVIHRocmVhZCBzdGFydGVkLiBMZXR0aW5nIHZDUFVzIHJ1biBmb3IgJWQgc2Vjb25kcy5cXG5cJiMzNDssXG5AQCAtNDYyLDggJiM0Mzs0MzksOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0LypcbiBcdCAqIENhbmNlbCB0aHJlYWRzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHN0b3AuXG4gXHQgKi9cbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHBhcmFtc1swXS52Y3B1KTtcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHBhcmFtc1sxXS52Y3B1KTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbiYjNDM7XHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaG9zdCBzdXBwb3J0IElkbGUgSExULCBpLmUuIEtWTSAqbWlnaHQqIGJlIHVzaW5nIElkbGUgSExULFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG5pbmRleCA1MDc2ZjZhNzU0NTU3Li5hMjI2YTJmZDYxZDk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuY1xuQEAgLTQzNyw3ICYjNDM7NDM3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0cHRocmVhZF90IHRocmVhZDtcbiBcdGJvb2wgdmVyYm9zZTtcbi1cdGludCByZXQ7XG4gXG4gXHR2ZXJib3NlID0gYXJnYyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKCFzdHJuY21wKGFyZ3ZbMV0sIFwmIzM0Oy12XCYjMzQ7LCAzKSB8fFxuIFx0XHRcdCAgICAgICAhc3RybmNtcChhcmd2WzFdLCBcJiMzNDstLXZlcmJvc2VcJiMzNDssIDEwKSk7XG5AQCAtODk0LDggJiM0Mzs4OTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFx0aWYgKHZlcmJvc2UpXG4gXHRcdFx0XHRcdHByaW50ZihcJiMzNDtUZXN0aW5nIHNoaW5mbyBsb2NrIGNvcnJ1cHRpb24gKEtWTV9YRU5fSFZNX0VWVENITl9TRU5EKVxcblwmIzM0Oyk7XG4gXG4tXHRcdFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNmp1Z2dsZV9zaGluZm9fc3RhdGUsICh2b2lkICopdm0pO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlc1wmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XG4gXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xuIFx0XHRcdFx0XHQucG9ydCA9IDEsXG5AQCAtOTQ5LDExICYjNDM7OTQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRcdFRFU1RfQVNTRVJUKCFldnRjaG5faXJxX2V4cGVjdGVkLFxuIFx0XHRcdFx0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZXZlbnQgY2hhbm5lbCBJUlEgYnV0IGl0IGRpZG4mIzM5O3QgaGFwcGVuXCYjMzQ7KTtcbiBcbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4tXHRcdFx0XHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXCYjMzQ7cHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbi1cbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aHJlYWQsIDApO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwmIzM0O3B0aHJlYWRfam9pbigpIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHRcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRcdFx0Y2FzZSBURVNUX0dVRVNUX1NBV19JUlE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byB1c2UgY3VzdG9tIHB0aHJlYWQgd3JhcHBlcnMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWNjNWFjM2RmYWNmYjVhMzNmZjc1ZjFkZjRhOWY5NTYyZGJkMjYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jCmluZGV4IGY4YjAyNTk3ODk3YmQuLjAzMTYwYWQ2NjZmNTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwpAQCAtMTQxLDMzICYjNDM7MTQxLDI3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcnVuKHN0cnVjdCBrdm1fdm0gKnZtKQogewogCXB0aHJlYWRfdCBwdF92Y3B1X21pZ3JhdGlvbjsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0OwogCiAJcHRocmVhZF9tdXRleF9pbml0KCZhbXA7dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTsKIAl2Y3B1X2RvbmVfbWFwID0gYml0bWFwX3phbGxvYyh0ZXN0X2FyZ3MubnJfdmNwdXMpOwogCVRFU1RfQVNTRVJUKHZjcHVfZG9uZV9tYXAsICYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHZjcHUgZG9uZSBiaXRtYXAmIzM0Oyk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3B0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLAotCQkJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTsKLQkJVEVTVF9BU1NFUlQoIXJldCwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHZDUFUtJWQgcHRocmVhZCYjMzQ7LCBpKTsKLQl9CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sCiYjNDM7CQkJCSAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7CiAKIAkvKiBTcGF3biBhIHRocmVhZCB0byBjb250cm9sIHRoZSB2Q1BVIG1pZ3JhdGlvbnMgKi8KIAlpZiAodGVzdF9hcmdzLm1pZ3JhdGlvbl9mcmVxX21zKSB7CiAJCXNyYW5kKHRpbWUoTlVMTCkpOwogCi0JCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsCi0JCQkJCXRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpOwotCQlURVNUX0FTU0VSVCghcmV0LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkJiMzNDspOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpOwogCX0KIAotCiAJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3RfYXJncy5ucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfam9pbihwdF92Y3B1X3J1bltpXSwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTsKIAogCWlmICh0ZXN0X2FyZ3MubWlncmF0aW9uX2ZyZXFfbXMpCi0JCXB0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTsKIAogCWJpdG1hcF9mcmVlKHZjcHVfZG9uZV9tYXApOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwppbmRleCA1ZTIzMTk5ODYxN2U3Li4zY2I4NTkzMmVlODVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuYwpAQCAtOTg4LDcgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpCiAJc3RydWN0IHRlc3RfYXJncyBhcmdzID0ge307CiAJc3RydWN0IGt2bV92bSAqdm07CiAJZ3ZhX3QgYXJnc19ndmE7Ci0JaW50IGdpY19mZCwgcmV0OwomIzQzOwlpbnQgZ2ljX2ZkOwogCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpOwogCkBAIC0xMDA0LDE1ICYjNDM7MTAwNCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpCiAKIAlnaWNfZmQgPSB2Z2ljX3YzX3NldHVwKHZtLCAyLCA2NCk7CiAKLQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pOwotCWlmIChyZXQpCi0JCVRFU1RfRkFJTCgmIzM0O0NhbiYjMzk7dCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxuJiMzNDssIHJldCk7Ci0JcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJbMV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzFdKTsKLQlpZiAocmV0KQotCQlURVNUX0ZBSUwoJiMzNDtDYW4mIzM5O3QgY3JlYXRlIHRocmVhZCBmb3IgdmNwdSAxICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJbMF0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzBdKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyWzFdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1sxXSk7CiAKLQlwdGhyZWFkX2pvaW4odGhyWzBdLCBOVUxMKTsKLQlwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih0aHJbMF0sIE5VTEwpOwomIzQzOwlrdm1fcHRocmVhZF9qb2luKHRoclsxXSwgTlVMTCk7CiAKIAljbG9zZShnaWNfZmQpOwogCWt2bV92bV9mcmVlKHZtKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwppbmRleCBkNjRkNDM0ZDNmMDZlLi45YTY5YzQzOWEwZjhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCkBAIC0zMTEsMjMgJiM0MzszMTEsMjMgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZCkKIAlwdGhyZWFkX2JhcnJpZXJfaW5pdCgmYW1wO3Rlc3Rfc2V0dXBfYmFycmllciwgTlVMTCwgbnJfdmNwdXMgJiM0MzsgbnJfZGV2aWNlcyAmIzQzOyAxKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcl90aHJlYWQsIHZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpOwogCiAJcHRocmVhZF9iYXJyaWVyX3dhaXQoJmFtcDt0ZXN0X3NldHVwX2JhcnJpZXIpOwogCiAJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2RldmljZXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4obHBpX3RocmVhZHNbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7CiAKIAlkZWx0YSA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwogCXdyaXRlX2d1ZXN0X2dsb2JhbCh2bSwgdGVzdF9kYXRhLnJlcXVlc3RfdmNwdXNfc3RvcCwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJlcG9ydF9zdGF0cyhkZWx0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IGU4NDE5ZDdkYTFlYWIuLmFmNWViMDMzNGE3NGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCkBAIC02OTEsNyAmIzQzOzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAKIAlURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTsKIAogCWZvciAoaXRlcmF0aW9uID0gMTsgaXRlcmF0aW9uICZsdDs9IHAtJmd0O2l0ZXJhdGlvbnM7IGl0ZXJhdGlvbiYjNDM7JiM0MzspIHsKIAkJdW5zaWduZWQgbG9uZyBpLCByZWFwX2k7CkBAIC04MDUsNyAmIzQzOzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJV1JJVEVfT05DRShob3N0X3F1aXQsIHRydWUpOwogCXNlbV9wb3N0KCZhbXA7c2VtX3ZjcHVfY29udCk7CiAKLQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpOwomIzQzOwlrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTsKIAogCXByX2luZm8oJiMzNDtUb3RhbCBiaXRzIGNoZWNrZWQ6IGRpcnR5ICglbHUpLCBjbGVhciAoJWx1KVxuJiMzNDssCiAJCWhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jCmluZGV4IDMxNDdmNWM5N2U5NDMuLjRhYmFkNzE1ODk4OTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICogcmV0dXJuIG5vdGlmaWVycy4KICAqLwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O3NlbWFwaG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwpAQCAtMTQsMjAgJiM0MzsxMywyMyBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF91dGlsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgVkNQVV9OVU0gNAotI2RlZmluZSBTTEVFUElOR19USFJFQURfTlVNICgxICZsdDsmbHQ7IDQpCi0jZGVmaW5lIEZPUktfTlVNICgxVUxMICZsdDsmbHQ7IDkpCi0jZGVmaW5lIERFTEFZX1VTX01BWCAyMDAwCiYjNDM7I2RlZmluZSBOUl9WQ1BVUwkJNAomIzQzOyNkZWZpbmUgTlJfU0xFRVBFUlNfUEVSX1ZDUFUJMTYKJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlMJCTUxMgomIzQzOyNkZWZpbmUgREVMQVlfVVNfTUFYCQkyMDAwCiAKIHNlbV90ICpzZW07CiYjNDM7c3RhdGljIGNwdV9zZXRfdCBjaGlsZF9jcHVfc2V0OwogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiB7CiAJZm9yICg7OykKIAkJOyAgLyogU29tZSBidXN5IHdvcmsgKi8KLQlwcmludGYoJiMzNDtTaG91bGQgbm90IGJlIHJlYWNoZWQuXG4mIzM0Oyk7CiYjNDM7CUdVRVNUX0FTU0VSVCgwKTsKIH0KIAogc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZykKQEAgLTM3LDg0ICYjNDM7MzksNDcgQEAgc3RhdGljIHZvaWQgKnJ1bl92Y3B1KHZvaWQgKmFyZykKIAogCXZjcHVfcnVuKHZjcHUpOwogCi0JVEVTVF9BU1NFUlQoZmFsc2UsICYjMzQ7JXM6IGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXMmIzM0OywKLQkJICAgIF9fZnVuY19fLCBydW4tJmd0O2V4aXRfcmVhc29uLAotCQkgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi0mZ3Q7ZXhpdF9yZWFzb24pKTsKLQlwdGhyZWFkX2V4aXQoTlVMTCk7CiYjNDM7CVRFU1RfRkFJTCgmIzM0O3ZDUFUlZCBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzJiMzNDssCiYjNDM7CQkgIHZjcHUtJmd0O2lkLCBydW4tJmd0O2V4aXRfcmVhc29uLCBleGl0X3JlYXNvbl9zdHIocnVuLSZndDtleGl0X3JlYXNvbikpOwogfQogCiBzdGF0aWMgdm9pZCAqc2xlZXBpbmdfdGhyZWFkKHZvaWQgKmFyZykKIHsKIAlpbnQgZmQ7CiAKLQl3aGlsZSAodHJ1ZSkgewomIzQzOwl3aGlsZSAoMSkgewogCQlmZCA9IG9wZW4oJiMzNDsvZGV2L251bGwmIzM0OywgT19SRFdSKTsKIAkJY2xvc2UoZmQpOwogCX0KLQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDslczogZXhpdGVkJiMzNDssIF9fZnVuY19fKTsKLQlwdGhyZWFkX2V4aXQoTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKLQkJCQkgICAgICAgdm9pZCAqKCpmKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBmLCBhcmcpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwgJiMzNDslczogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQmIzM0OywgX19mdW5jX18pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldCkKLXsKLQlpbnQgcjsKLQotCXIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwgJiMzNDslczogZmFpbGVkIHNldCBhZmZpbml0eSYjMzQ7LCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19qb2luKHB0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKipyZXR2YWwpCi17Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgcmV0dmFsKTsKLQlURVNUX0FTU0VSVChyID09IDAsICYjMzQ7JXM6IGZhaWxlZCB0byBqb2luIHRocmVhZCYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CVRFU1RfRkFJTCgmIzM0OyVzOiBleGl0ZWQmIzM0OywgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCBydW5fdGVzdCh1MzIgcnVuKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQljcHVfc2V0X3QgY3B1X3NldDsKLQlwdGhyZWFkX3QgdGhyZWFkc1tWQ1BVX05VTV07Ci0JcHRocmVhZF90IHRocm93X2F3YXk7Ci0Jdm9pZCAqYjsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKIAl1MzIgaSwgajsKIAotCUNQVV9aRVJPKCZhbXA7Y3B1X3NldCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IFZDUFVfTlVNOyBpJiM0MzsmIzQzOykKLQkJQ1BVX1NFVChpLCAmYW1wO2NwdV9zZXQpOwotCi0Jdm0gPSB2bV9jcmVhdGUoVkNQVV9OVU0pOwomIzQzOwl2bSA9IHZtX2NyZWF0ZShOUl9WQ1BVUyk7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzOiBbJWRdIHN0YXJ0IHZjcHVzXG4mIzM0OywgX19mdW5jX18sIHJ1bik7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IFZDUFVfTlVNOyAmIzQzOyYjNDM7aSkgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfVkNQVVM7ICYjNDM7JiM0MztpKSB7CiAJCXZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7CiAKLQkJY2hlY2tfY3JlYXRlX3RocmVhZCgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTsKLQkJY2hlY2tfc2V0X2FmZmluaXR5KHRocmVhZHNbaV0sICZhbXA7Y3B1X3NldCk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTsKJiM0MzsJCWt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHRocmVhZCwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgU0xFRVBJTkdfVEhSRUFEX05VTTsgJiM0MzsmIzQzO2opIHsKLQkJCWNoZWNrX2NyZWF0ZV90aHJlYWQoJmFtcDt0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsCi0JCQkJCSAgICAodm9pZCAqKU5VTEwpOwotCQkJY2hlY2tfc2V0X2FmZmluaXR5KHRocm93X2F3YXksICZhbXA7Y3B1X3NldCk7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICYjNDM7JiM0MztqKSB7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBzbGVlcGluZ190aHJlYWQsICh2b2lkICopTlVMTCk7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkodGhyZWFkLCAmYW1wO2NoaWxkX2NwdV9zZXQpOwogCQl9CiAJfQogCXByX2RlYnVnKCYjMzQ7JXM6IFslZF0gYWxsIHRocmVhZHMgbGF1bmNoZWRcbiYjMzQ7LCBfX2Z1bmNfXywgcnVuKTsKIAlzZW1fcG9zdChzZW0pOwotCWZvciAoaSA9IDA7IGkgJmx0OyBWQ1BVX05VTTsgJiM0MzsmIzQzO2kpCi0JCWNoZWNrX2pvaW4odGhyZWFkc1tpXSwgJmFtcDtiKTsKLQkvKiBTaG91bGQgbm90IGJlIHJlYWNoZWQgKi8KLQlURVNUX0FTU0VSVChmYWxzZSwgJiMzNDslczogWyVkXSBjaGlsZCBlc2NhcGVkIHRoZSBuaW5qYSYjMzQ7LCBfX2Z1bmNfXywgcnVuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgdGhlIHBhcmVudCB0byBTSUdLSUxMIHRoaXMgY2hpbGQuICovCiYjNDM7CXdoaWxlICgxKTsKIH0KIAogdm9pZCB3YWl0X2Zvcl9jaGlsZF9zZXR1cChwaWRfdCBwaWQpCkBAIC0xNDcsMTYgJiM0MzsxMTIsMzQgQEAgdm9pZCB3YWl0X2Zvcl9jaGlsZF9zZXR1cChwaWRfdCBwaWQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfY2hpbGRfY3B1X3NldCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjaGlsZF9jcHVfc2V0KSwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKJiM0MzsKJiM0MzsJaWYgKENQVV9DT1VOVCgmYW1wO2NoaWxkX2NwdV9zZXQpICZsdDsgMikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgJmFtcDtjaGlsZF9jcHVfc2V0KTsKJiM0MzsJQ1BVX0NMUihjcHUsICZhbXA7Y2hpbGRfY3B1X3NldCk7CiYjNDM7CiYjNDM7CXdoaWxlIChDUFVfQ09VTlQoJmFtcDtjaGlsZF9jcHVfc2V0KSAmZ3Q7IE5SX1ZDUFVTKQomIzQzOwkJQ1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KCZhbXA7Y2hpbGRfY3B1X3NldCksICZhbXA7Y2hpbGRfY3B1X3NldCk7CiYjNDM7fQomIzQzOwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXUzMiBpOwogCWludCBzLCByOwogCXBpZF90IHBpZDsKIAomIzQzOwlzZXR1cF9jaGlsZF9jcHVfc2V0KCk7CiYjNDM7CiAJc2VtID0gc2VtX29wZW4oJiMzNDt2bV9zZW0mIzM0OywgT19DUkVBVCB8IE9fRVhDTCwgMDY0NCwgMCk7CiAJc2VtX3VubGluaygmIzM0O3ZtX3NlbSYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBGT1JLX05VTTsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7CiAJCXBpZCA9IGZvcmsoKTsKIAkJVEVTVF9BU1NFUlQocGlkICZndDs9IDAsICYjMzQ7JXM6IHVuYWJsZSB0byBmb3JrJiMzNDssIF9fZnVuY19fKTsKIAkJaWYgKHBpZCA9PSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAppbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF91dGlsLmgmZ3Q7CiAKQEAgLTk2LDYgJiM0Mzs5Nyw1MiBAQCBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spOwogCiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9nZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsCiYjNDM7CQkgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIGNwdXNldCk7CiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsCiYjNDM7CQkgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY29uc3QgY3B1X3NldF90ICosIGNwdXNldCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1c2V0KQomIzQzO3sKJiM0MzsJa3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsCiYjNDM7CQkJCQkgICBjb25zdCBjcHVfc2V0X3QgKmNwdXNldCkKJiM0Mzt7CiYjNDM7CWt2bV9wdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7CiYjNDM7fQomIzQzOwomIzQzO3R5cGVkZWYgdm9pZCAqKCpwdGhyZWFkX2ZuX3QpKHZvaWQgKik7CiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsCiYjNDM7CQkgICAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGF0dHIsIHB0aHJlYWRfZm5fdCwgZm4sIHZvaWQgKiwgYXJnKTsKJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2pvaW4sIDIsIHB0aHJlYWRfdCwgdGhyZWFkLCB2b2lkICoqLCB0aHJlYWRfcmV0dXJuKTsKJiM0MztfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NhbmNlbCwgMSwgcHRocmVhZF90LCB0aHJlYWQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKipyKQomIzQzO3sKJiM0MzsJa3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpCiYjNDM7ewomIzQzOwlfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsJiM0MztKb2luIGEgcHRocmVhZCB0aGF0IHdhcyBjb25maWd1cmVkIHdpdGggUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCiYjNDM7ICogYW5kIGlzIGV4cGVjdGVkIHRvIGV4aXQgb25seSBpbiByZXNwb25zZSB0byBjYW5jZWxsYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHB0aHJlYWRfdCB0aHJlYWQpCiYjNDM7ewomIzQzOwl2b2lkICpyOwomIzQzOwomIzQzOwlfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgJmFtcDtyKTsKJiM0MzsJVEVTVF9BU1NFUlQociA9PSBQVEhSRUFEX0NBTkNFTEVELAomIzQzOwkJICAgICYjMzQ7ZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXAmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwgcik7CiYjNDM7fQomIzQzOwogI2RlZmluZSBrdm1fZnJlZV9mZChmZCkJCVwKIGRvIHsJCQkJXAogCWt2bV9jbG9zZShmZCk7CQlcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCBiMzllNzEzYzMwYTQ2Li41YTdhNDU1YjUzODc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTEwODQsNiAmIzQzOzEwODQsOCBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92bSAqdm0pOwogCiB2b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cyk7CiAKJiM0MztpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpOwomIzQzOwogaW50IF9fcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSkKQEAgLTEwOTQsNyAmIzQzOzEwOTYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSkKIAlURVNUX0FTU0VSVCghciwgJiMzNDtGYWlsZWQgdG8gc2V0IHRocmVhZCBhZmZpbml0eSB0byBwQ1BVICYjMzk7JXUmIzM5OyYjMzQ7LCBjcHUpOwogfQogCi12b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJY3B1ID0ga3ZtX3BpY2tfcmFuZG9tX2NwdShwb3NzaWJsZV9jcHVzKTsKJiM0MzsJcGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7CiYjNDM7CXJldHVybiBjcHU7CiYjNDM7fQogCiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwppbmRleCAyNDBmNmYwZmRiZTQzLi4xNjhjNTI3MzRmZWY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYwpAQCAtMjk2LDcgJiM0MzsyOTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYXZhaWxhYmxlX2NwdXMpLCAmYW1wO2F2YWlsYWJsZV9jcHVzKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07CkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZG9uZSwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmMKaW5kZXggNWQ3NTkwZDAxODY4MS4uZWJiMjQ3ODg3OGRlOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jCkBAIC0xMjgsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAljbG9zZShfX2V2ZW50ZmQpOwogCi0JcHRocmVhZF9jcmVhdGUoJmFtcDtyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDA7IGkmIzQzOyYjNDM7KSB7CiAJCVdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7CkBAIC0xMzksNSAmIzQzOzEzOSw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJV1JJVEVfT05DRShkb25lLCB0cnVlKTsKLQlwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYwppbmRleCBhOTEwZTNhYmI4YzcxLi45NzQ4MTNlYTg5NTMzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmMKQEAgLTM2NCw4ICYjNDM7MzY0LDggQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAkqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsCi0JCQkgICAgICAgdGVzdF9hcmdzLnZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsCiYjNDM7CQkJCSAgIHRlc3RfYXJncy52Y3B1c1tpXSk7CiAKIAl2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpOwogCXByX2luZm8oJiMzNDtTdGFydGVkIGFsbCB2Q1BVcyBzdWNjZXNzZnVsbHlcbiYjMzQ7KTsKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTsKIAogCXJldCA9IHNlbV9kZXN0cm95KCZhbXA7dGVzdF9zdGFnZV91cGRhdGVkKTsKIAlURVNUX0FTU0VSVChyZXQgPT0gMCwgJiMzNDtFcnJvciBpbiBzZW1fZGVzdHJveSYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwppbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpCiAJICAgICAgICYjMzQ7ICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcbiYjMzQ7LCBuYW1lLCBuYW1lKTsKIH0KIAotdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpCiYjNDM7aW50IGt2bV9waWNrX3JhbmRvbV9jcHUoY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQogewogCWludCB0YXJnZXRfaWR4OwogCWludCBucl9jcHVzOwpAQCAtNjgwLDEzICYjNDM7NjgwLDExIEBAIHZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQogCXRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NCgmYW1wO2t2bV9ybmcpICUgbnJfY3B1czsKIAogCWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHsKLQkJaWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpICZhbXA7JmFtcDsgdGFyZ2V0X2lkeC0tID09IDApIHsKLQkJCXBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgJmFtcDsmYW1wOyB0YXJnZXRfaWR4LS0gPT0gMCkKJiM0MzsJCQlyZXR1cm4gY3B1OwogCX0KLQogCVRFU1RfRkFJTCgmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1cyYjMzQ7KTsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYwppbmRleCAzNTk5Yjc1ZDk3YzkxLi4yODY0NTYyZjU3YjQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKQEAgLTI5NCw3ICYjNDM7Mjk0LDcgQEAgdm9pZCBtZW1zdHJlc3Nfc3RhcnRfdmNwdV90aHJlYWRzKGludCBucl92Y3B1cywKIAkJdmNwdS0mZ3Q7dmNwdV9pZHggPSBpOwogCQlXUklURV9PTkNFKHZjcHUtJmd0O3J1bm5pbmcsIGZhbHNlKTsKIAotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3ZjcHUtJmd0O3RocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1LSZndDt0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHUpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKQEAgLTMxMiw3ICYjNDM7MzEyLDcgQEAgdm9pZCBtZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMoaW50IG5yX3ZjcHVzKQogCVdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXS50aHJlYWQsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCB0b2dnbGVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHNsb3RzLCBib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKaW5kZXggZWY4ZDc2ZjcxZjgzNy4uZjdjZTVhNmRkY2MyMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmMKQEAgLTE2Nyw4ICYjNDM7MTY3LDggQEAgc3RydWN0IHVmZmRfZGVzYyAqdWZmZF9zZXR1cF9kZW1hbmRfcGFnaW5nKGludCB1ZmZkX21vZGUsIHVzZWNvbmRzX3QgZGVsYXksCiAJCXVmZmRfZGVzYy0mZ3Q7cmVhZGVyX2FyZ3NbaV0uaGFuZGxlciA9IGhhbmRsZXI7CiAJCXVmZmRfZGVzYy0mZ3Q7cmVhZGVyX2FyZ3NbaV0ucGlwZSA9IHBpcGVzWzBdOwogCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLAotCQkJICAgICAgICZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJfYXJnc1tpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt1ZmZkX2Rlc2MtJmd0O3JlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sCiYjNDM7CQkJCSAgICZhbXA7dWZmZF9kZXNjLSZndDtyZWFkZXJfYXJnc1tpXSk7CiAKIAkJUEVSX1ZDUFVfREVCVUcoJiMzNDtDcmVhdGVkIHVmZmQgdGhyZWFkICVpIGZvciBIVkEgcmFuZ2UgWyVwLCAlcClcbiYjMzQ7LAogCQkJICAgICAgIGksIGh2YSwgaHZhICYjNDM7IGxlbik7CkBAIC0xODcsOCAmIzQzOzE4Nyw3IEBAIHZvaWQgdWZmZF9zdG9wX2RlbWFuZF9wYWdpbmcoc3RydWN0IHVmZmRfZGVzYyAqdWZmZCkKIAkJCSAgICAmIzM0O1VuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcCYjMzQ7LCBpLCB1ZmZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB1ZmZkLSZndDtudW1fcmVhZGVyczsgJiM0MzsmIzQzO2kpCi0JCVRFU1RfQVNTRVJUKCFwdGhyZWFkX2pvaW4odWZmZC0mZ3Q7cmVhZGVyc1tpXSwgTlVMTCksCi0JCQkgICAgJiMzNDtQdGhyZWFkX2pvaW4gZmFpbGVkIG9uIHJlYWRlciAlaSBmb3IgdWZmZF9kZXNjICVwJiMzNDssIGksIHVmZmQpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbih1ZmZkLSZndDtyZWFkZXJzW2ldLCBOVUxMKTsKIAogCWNsb3NlKHVmZmQtJmd0O3VmZmQpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCmluZGV4IDRkOWFkNjEwNGE2ZWQuLmUxMjk5NjExYmUzMjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyB2b2lkIGxhdW5jaF92bShzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSkKIHsKIAlwcl9pbmZvX3YoJiMzNDtMYXVuY2hpbmcgdGhlIHRlc3QgVk1cbiYjMzQ7KTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7ZGF0YS0mZ3Q7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7ZGF0YS0mZ3Q7dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTsKIAogCS8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovCiAJd2FpdF9mb3JfdmNwdSgpOwpAQCAtMzgxLDcgJiM0MzszODEsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhKQogCiBzdGF0aWMgdm9pZCB3YWl0X2d1ZXN0X2V4aXQoc3RydWN0IHZtX2RhdGEgKmRhdGEpCiB7Ci0JcHRocmVhZF9qb2luKGRhdGEtJmd0O3ZjcHVfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbihkYXRhLSZndDt2Y3B1X3RocmVhZCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwppbmRleCAzZDVmMzNhNjNiMmI0Li43NDFlMzQzOTYyZWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jCkBAIC0yMjIsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBwdGhyZWFkX3QgKnNwYXduX3dvcmtlcnMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzLAogCQlpbmZvW2ldLnZjcHUgPSB2Y3B1c1tpXTsKIAkJaW5mb1tpXS5zdGFydF9ncGEgPSBncGE7CiAJCWluZm9baV0uZW5kX2dwYSA9IGdwYSAmIzQzOyBucl9ieXRlczsKLQkJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgJmFtcDtpbmZvW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLCAmYW1wO2luZm9baV0pOwogCX0KIAlyZXR1cm4gdGhyZWFkczsKIH0KQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSB2Q1BVcyBhY3R1YWxseSByYW4uICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKIAogCS8qCiAJICogRGVsaWJlcmF0ZWx5IGV4aXQgd2l0aG91dCBkZWxldGluZyB0aGUgcmVtYWluaW5nIG1lbXNsb3RzIG9yIGNsb3NpbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwppbmRleCBhMGZjYWUzY2I3YThiLi5jNTc2MzFhYWIzZDM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCkBAIC04NCw3ICYjNDM7ODQsNyBAQCBzdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LAogCSAqIENvbmN1cnJlbnRseSBkZWxldGUgKGFuZCByZWNyZWF0ZSkgdGhlIHNsb3QgdG8gdGVzdCBLVk0mIzM5O3MgaGFuZGxpbmcKIAkgKiBvZiBhIHJhY2luZyBtZW1zbG90IGRlbGV0aW9uIHdpdGggcHJlZmF1bHRpbmcuCiAJICovCi0JcHRocmVhZF9jcmVhdGUoJmFtcDtzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCAmYW1wO2RhdGEpOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDtzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCAmYW1wO2RhdGEpOwogCiAJd2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKQogCQljcHVfcmVsYXgoKTsKQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCwKIAkJICovCiAJCWlmICghc2xvdF9yZWNyZWF0ZWQpIHsKIAkJCVdSSVRFX09OQ0UoZGF0YS5yZWNyZWF0ZV9zbG90LCB0cnVlKTsKLQkJCXB0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7CiYjNDM7CQkJa3ZtX3B0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7CiAJCQlzbG90X3JlY3JlYXRlZCA9IHRydWU7CiAKIAkJCS8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMKaW5kZXggNTU3ZTM5M2MyMjNiOS4uZGYzZTVhZDFjMzkzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwpAQCAtMjQxLDggJiM0MzsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqLwogCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlciwKLQkJICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlciwKJiM0MzsJCQkgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7CiAKIAlpZiAobGF0ZW5jeSAmZ3Q7PSAwKSB7CiAJCS8qCkBAIC0zMTQsNyAmIzQzOzMxNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAgICAmIzM0OyAgZS5nLiB2aWEgY3B1aWRsZS5vZmY9MSBvciB2aWEgLWwgJmx0O2xhdGVuY3kmZ3Q7LCBvciBydW4gd2l0aCAtdSB0b1xuJiMzNDsKIAkJICAgICYjMzQ7ICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLiYjMzQ7LCBpKTsKIAotCXB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTsKIAogCWt2bV92bV9mcmVlKHZtKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmMKaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jCkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKQogCUhPU1RfU1lOQyh0LnZjcHUsIFNUQUdFX1NLRVlTX1NFVCk7CiAJcHJlcGFyZV9tZW0xMigpOwogCU1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpOwotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsICZhbXA7dC52Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsICZhbXA7dC52Y3B1KTsKIAogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgY21weGNoZ19pdGVyX291dGVyOyBpJiM0MzsmIzQzOykgewogCQlkbyB7CkBAIC03MDEsNyAmIzQzOzcwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKQogCQl9CiAJfQogCi0JcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKIAogCU1PUCh0LnZjcHUsIExPR0lDQUwsIFJFQUQsIG1lbTIsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7CiAJVEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCmluZGV4IGExNTJhYjY1YzY1NzcuLmRmZmU5NjU0ZjQ1YmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwpAQCAtMTMzLDcgJiM0MzsxMzMsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCwKIAlodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTsKIAltZW1zZXQoaHZhLCAwLCAyICogNDA5Nik7CiAKLQlwdGhyZWFkX2NyZWF0ZSh2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsICp2Y3B1KTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpOwogCiAJLyogRW5zdXJlIHRoZSBndWVzdCB0aHJlYWQgaXMgc3B1biB1cC4gKi8KIAl3YWl0X2Zvcl92Y3B1KCk7CkBAIC0yMTYsNyAmIzQzOzIxNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbW92ZV9tZW1vcnlfcmVnaW9uKGJvb2wgZGlzYWJsZV9zbG90X3phcF9xdWlyaykKIAkvKiBEZWZlcmVkIHN5bmMgZnJvbSB3aGVuIHRoZSBtZW1zbG90IHdhcyBtaXNhbGlnbmVkIChhYm92ZSkuICovCiAJd2FpdF9mb3JfdmNwdSgpOwogCi0JcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7CiAKIAlrdm1fdm1fZnJlZSh2bSk7CiB9CkBAIC0zMDIsNyAmIzQzOzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKQogCSAqLwogCXZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCAwKTsKIAotCXB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7CiYjNDM7CWt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpOwogCiAJcnVuID0gdmNwdS0mZ3Q7cnVuOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwppbmRleCAwYjg4Yzc0M2VlN2Q1Li5iYzNjNjJiNzJjNThjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMKQEAgLTU0OCwxNSAmIzQzOzU0OCwxNSBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKIAogCQkvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi8KIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgZG9fc3RlYWxfdGltZSwgTlVMTCk7Ci0JCXB0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1c2V0KSwgJmFtcDtjcHVzZXQpOwomIzQzOwkJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHRocmVhZCwgJmFtcDtjcHVzZXQpOwogCQlURVNUX0FTU0VSVChDUFVfQ09VTlQoJmFtcDtjcHVzZXQpID09IDEgJmFtcDsmYW1wOyBDUFVfSVNTRVQoY3B1LCAmYW1wO2NwdXNldCksCiAJCQkgICAgJiMzNDtXb3JrZXIgZmFpbGVkIHRvIGluaGVyaXQgcGFyZW50JiMzOTtzIENQVSBhZmZpbml0eSYjMzQ7KTsKIAogCQlkbwogCQkJc2NoZWRfeWllbGQoKTsKIAkJd2hpbGUgKGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheSAmbHQ7IE1JTl9SVU5fREVMQVlfTlMpOwotCQlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5OwogCQlURVNUX0FTU0VSVChydW5fZGVsYXkgJmd0Oz0gTUlOX1JVTl9ERUxBWV9OUywKIAkJCSAgICAmIzM0O0V4cGVjdGVkIHJ1bl9kZWxheSAmZ3Q7PSAlbGQsIGdvdCAlbGQmIzM0OywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKaW5kZXggNzcxNTM1ZjlhYWQzYy4uZmUzOGNjNGNiYTA1MSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmMKQEAgLTIyMiwzMCAmIzQzOzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm9pZCAqcmV0dmFsOwotCWludCByOwotCi0JciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZCYjMzQ7LAotCQkgICAgdmNwdS0mZ3Q7aWQsIHIpOwotCi0JciA9IHB0aHJlYWRfam9pbih0aHJlYWQsICZhbXA7cmV0dmFsKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZCYjMzQ7LAotCQkgICAgdmNwdS0mZ3Q7aWQsIHIpOwotCVRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELAotCQkgICAgJiMzNDtleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcCYjMzQ7LCBQVEhSRUFEX0NBTkNFTEVELAotCQkgICAgcmV0dmFsKTsKLX0KLQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVbM107CiAJZ3ZhX3QgaGNhbGxfcGFnZTsKIAlwdGhyZWFkX3QgdGhyZWFkc1syXTsKLQlpbnQgc3RhZ2UgPSAxLCByOwomIzQzOwlpbnQgc3RhZ2UgPSAxOwogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCVRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0hZUEVSVl9TRU5EX0lQSSkpOwpAQCAtMjcyLDExICYjNDM7MjU1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpOwogCXZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMF0pOwogCi0JciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pOwotCVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCByKTsKLQotCXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQgZXJybm89JWQmIzM0OywgZXJybm8pOwomIzQzOwlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTsKIAogCXdoaWxlICh0cnVlKSB7CiAJCXZjcHVfcnVuKHZjcHVbMF0pOwpAQCAtMzAyLDkgJiM0MzsyODIsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogZG9uZToKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCB2Y3B1WzFdKTsKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTsKJiM0MzsJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pOwogCWt2bV92bV9mcmVlKHZtKTsKIAotCXJldHVybiByOwomIzQzOwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKaW5kZXggYjRiZTlhMTc1Mzc5Zi4uODRmMjJmMzljOGYyMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMKQEAgLTU0OCwyMyAmIzQzOzU0OCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2b2lkICpyZXR2YWw7Ci0JaW50IHI7Ci0KLQlyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwotCVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0JVEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsCi0JCSAgICAmIzM0O2V4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwJiMzNDssIFBUSFJFQURfQ0FOQ0VMRUQsCi0JCSAgICByZXR2YWwpOwotfQotCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXN0cnVjdCBrdm1fdm0gKnZtOwpAQCAtNTc1LDcgJiM0Mzs1NTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXU2NCAqcHRlOwogCXN0cnVjdCB0ZXN0X2RhdGEgKmRhdGE7CiAJc3RydWN0IHVjYWxsIHVjOwotCWludCBzdGFnZSA9IDEsIHIsIGk7CiYjNDM7CWludCBzdGFnZSA9IDEsIGk7CiAKIAlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfVExCRkxVU0gpKTsKIApAQCAtNjMyLDExICYjNDM7NjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl2Y3B1X3NldF9tc3IodmNwdVsyXSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgV09SS0VSX1ZDUFVfSURfMik7CiAJdmNwdV9zZXRfaHZfY3B1aWQodmNwdVsyXSk7CiAKLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsxXSk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQmIzM0Oyk7Ci0KLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQmIzM0Oyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTsKJiM0MzsJa3ZtX3B0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pOwogCiAJd2hpbGUgKHRydWUpIHsKIAkJdmNwdV9ydW4odmNwdVswXSk7CkBAIC02NjEsOCAmIzQzOzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiBkb25lOgotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pOwotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHZjcHVbMl0pOwomIzQzOwlrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTsKJiM0MzsJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7CiAJa3ZtX3ZtX2ZyZWUodm0pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jCkBAIC00MTIsMTMgJiM0Mzs0MTIsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3YKIAkJICovCiAJCXZpcnRfbWFwKHZtLCBncGEsIGdwYSwgUEVSX0NQVV9EQVRBX1NJWkUgLyB2bS0mZ3Q7cGFnZV9zaXplKTsKIAotCQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTsKIAl9CiAKIAlXUklURV9PTkNFKHJ1bl92Y3B1cywgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7CiYjNDM7CQlrdm1fcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwogCiAJa3ZtX3ZtX2ZyZWUodm0pOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMKaW5kZXggMTBkYjlmZTZkOTA2My4uZTZkMTZlOWQ2MTIwMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYwpAQCAtNjUsMTMgJiM0Mzs2NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKQogCS8qIFJlcXVlc3QgdG8gYWNjZXNzIHBhZ2UgcHJpdmF0ZWx5ICovCiAJdm1fbWVtX3NldF9wcml2YXRlKHZtLCBFWElUU19URVNUX0dQQSwgRVhJVFNfVEVTVF9TSVpFKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dm1fdGhyZWFkLCBOVUxMLAotCQkgICAgICAgKHZvaWQgKigqKSh2b2lkICopKXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbiwKLQkJICAgICAgICh2b2lkICopdmNwdSk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3ZtX3RocmVhZCwgTlVMTCwKJiM0MzsJCQkgICAocHRocmVhZF9mbl90KXJ1bl92Y3B1X2dldF9leGl0X3JlYXNvbiwgKHZvaWQgKil2Y3B1KTsKIAogCXZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCBFWElUU19URVNUX1NMT1QpOwogCi0JcHRocmVhZF9qb2luKHZtX3RocmVhZCwgJmFtcDt0aHJlYWRfcmV0dXJuKTsKJiM0MzsJa3ZtX3B0aHJlYWRfam9pbih2bV90aHJlYWQsICZhbXA7dGhyZWFkX3JldHVybik7CiAJZXhpdF9yZWFzb24gPSAodTMyKSh1NjQpdGhyZWFkX3JldHVybjsKIAogCVRFU1RfQVNTRVJUX0VRKGV4aXRfcmVhc29uLCBLVk1fRVhJVF9NRU1PUllfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jCmluZGV4IGNiYzkyYTg2MmVhOWMuLjdhMGJkOWY3YmE2YzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmMKQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9NQVhfVkNQVVM7IGkmIzQzOyYjNDM7KQogCQl2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpOwogCi0JVEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2UsIHZjcHVzWzBdKSwgMCk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pOwogCiAJdmNwdU4gPSB2Y3B1c1tLVk1fTUFYX1ZDUFVTIC0gMV07CiAJZm9yICh0ID0gdGltZShOVUxMKSAmIzQzOyBUSU1FT1VUOyB0aW1lKE5VTEwpICZsdDsgdDspIHsKQEAgLTY1LDggJiM0Mzs2NSw3IEBAIGludCBtYWluKHZvaWQpCiAJCXZjcHVfc2V0X21zcih2Y3B1TiwgTVNSX0lBMzJfQVBJQ0JBU0UsIExBUElDX0RJU0FCTEVEKTsKIAl9CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTsKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7CiAKIAlrdm1fdm1fZnJlZSh2bSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYwppbmRleCBkNTlhYmIxOThkODZmLi5kZTAwNmUxYzg2MWMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jCkBAIC0xMjgsMTAgJiM0MzsxMjgsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zZXZfbWlncmF0ZV9sb2NraW5nKHZvaWQpCiAJCSAgICAgICBzaXplb2YoaW5wdXRbaV0uc291cmNlX3ZtcykpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSkKLQkJcHRocmVhZF9jcmVhdGUoJmFtcDtwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgJmFtcDtpbnB1dFtpXSk7CiYjNDM7CQlrdm1fcHRocmVhZF9jcmVhdGUoJmFtcDtwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgJmFtcDtpbnB1dFtpXSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICYjNDM7JiM0MztpKQotCQlwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpOwomIzQzOwkJa3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyAmIzQzOyYjNDM7aSkKIAkJa3ZtX3ZtX2ZyZWUoaW5wdXRbaV0udm0pOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jCmluZGV4IDViMGMyMzU5YmJiNDMuLjlkNzZjMmVkNzg0YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmMKQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcikKIAkJICAgICEhKHJ1bi0mZ3Q7cy5yZWdzLnNyZWdzLmNyNCAmYW1wOyBYODZfQ1I0X1BBRSksCiAJCSAgICAhIShydW4tJmd0O3MucmVncy5zcmVncy5lZmVyICZhbXA7IEVGRVJfTE1FKSk7CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKSwgMCk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKTsKIAogCWZvciAodCA9IHRpbWUoTlVMTCkgJiM0MzsgVElNRU9VVDsgdGltZShOVUxMKSAmbHQ7IHQ7KSB7CiAJCS8qCkBAIC0xOTksOCAmIzQzOzE5OSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpCiAJCX0KIAl9CiAKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTsKLQlURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7CiAKIAlrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwppbmRleCA1OWRhOGQ0ZGE2MDc5Li4yYTNhOWJkOGIzMzhhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYwpAQCAtOTQsMTIgJiM0Mzs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXB0aHJlYWRfdCBjcHVfdGhyZWFkc1tOUl9URVNUX1ZDUFVTXTsKIAl1bnNpZ25lZCBsb25nIGNwdTsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IE5SX1RFU1RfVkNQVVM7IGNwdSYjNDM7JiM0MzspCi0JCXB0aHJlYWRfY3JlYXRlKCZhbXA7Y3B1X3RocmVhZHNbY3B1XSwgTlVMTCwgcnVuX3ZjcHUsICh2b2lkICopY3B1KTsKJiM0MzsJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO2NwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7CiAKIAl1bnNpZ25lZCBsb25nIGZhaWx1cmVzID0gMDsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IE5SX1RFU1RfVkNQVVM7IGNwdSYjNDM7JiM0MzspIHsKIAkJdm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7Ci0JCXB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCAmYW1wO3RoaXNfY3B1X2ZhaWx1cmVzKTsKJiM0MzsJCWt2bV9wdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgJmFtcDt0aGlzX2NwdV9mYWlsdXJlcyk7CiAJCWZhaWx1cmVzICYjNDM7PSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlczsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwppbmRleCAzYTMyNmM1ZTc0Y2FiLi43OGU3YWFlOGZhYjhkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCkBAIC0yMjgsMjUgJiM0MzsyMjgsNiBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm9pZCAqcmV0dmFsOwotCWludCByOwotCi0JciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JVEVTVF9BU1NFUlQociA9PSAwLAotCQkgICAgJiMzNDtwdGhyZWFkX2NhbmNlbCBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkJiMzNDssCi0JCSAgICB2Y3B1LSZndDtpZCwgcik7Ci0KLQlyID0gcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwKLQkJICAgICYjMzQ7cHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWQmIzM0OywKLQkJICAgIHZjcHUtJmd0O2lkLCByKTsKLQlURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCwKLQkJICAgICYjMzQ7ZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXAmIzM0OywgUFRIUkVBRF9DQU5DRUxFRCwKLQkJICAgIHJldHZhbCk7Ci19Ci0KIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgICB1NjQgKnBpcGlzX3JjdmQpCiB7CkBAIC0zODcsNyAmIzQzOzM2OCw2IEBAIHZvaWQgZ2V0X2NtZGxpbmVfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgKnJ1bl9zZWNzLAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWludCByOwogCWludCB3YWl0X3NlY3M7CiAJY29uc3QgaW50IG1heF9oYWx0ZXJfd2FpdCA9IDEwOwogCWludCBydW5fc2VjcyA9IDA7CkBAIC00MjgsOSAmIzQzOzQwOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkOwogCiAJLyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi8KLQlyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgJmFtcDtwYXJhbXNbMF0pOwotCVRFU1RfQVNTRVJUKHIgPT0gMCwKLQkJICAgICYjMzQ7cHRocmVhZF9jcmVhdGUgaGFsdGVyIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCBlcnJubyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCAmYW1wO3BhcmFtc1swXSk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWRcbiYjMzQ7KTsKIAogCXdhaXRfc2VjcyA9IDA7CkBAIC00NDcsOCAmIzQzOzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSYjMzQ7SGFsdGVyIHZDUFUgdGhyZWFkIHJlcG9ydGVkIGl0cyBBUElDIElEOiAldSBhZnRlciAlZCBzZWNvbmRzLlxuJiMzNDssCiAJCWRhdGEtJmd0O2hhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpOwogCi0JciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsICZhbXA7cGFyYW1zWzFdKTsKLQlURVNUX0FTU0VSVChyID09IDAsICYjMzQ7cHRocmVhZF9jcmVhdGUgc2VuZGVyIGZhaWxlZCBlcnJubz0lZCYjMzQ7LCBlcnJubyk7CiYjNDM7CWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCAmYW1wO3BhcmFtc1sxXSk7CiAKIAlmcHJpbnRmKHN0ZGVyciwKIAkJJiMzNDtJUEkgc2VuZGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWQuIExldHRpbmcgdkNQVXMgcnVuIGZvciAlZCBzZWNvbmRzLlxuJiMzNDssCkBAIC00NjIsOCAmIzQzOzQzOSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJLyoKIAkgKiBDYW5jZWwgdGhyZWFkcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBzdG9wLgogCSAqLwotCWNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHBhcmFtc1swXS52Y3B1KTsKLQljYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCBwYXJhbXNbMV0udmNwdSk7CiYjNDM7CWt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMF0pOwomIzQzOwlrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTsKIAogCS8qCiAJICogSWYgdGhlIGhvc3Qgc3VwcG9ydCBJZGxlIEhMVCwgaS5lLiBLVk0gKm1pZ2h0KiBiZSB1c2luZyBJZGxlIEhMVCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jCmluZGV4IDUwNzZmNmE3NTQ1NTcuLmEyMjZhMmZkNjFkOTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYwpAQCAtNDM3LDcgJiM0Mzs0MzcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXN0cnVjdCBrdm1fdm0gKnZtOwogCXB0aHJlYWRfdCB0aHJlYWQ7CiAJYm9vbCB2ZXJib3NlOwotCWludCByZXQ7CiAKIAl2ZXJib3NlID0gYXJnYyAmZ3Q7IDEgJmFtcDsmYW1wOyAoIXN0cm5jbXAoYXJndlsxXSwgJiMzNDstdiYjMzQ7LCAzKSB8fAogCQkJICAgICAgICFzdHJuY21wKGFyZ3ZbMV0sICYjMzQ7LS12ZXJib3NlJiMzNDssIDEwKSk7CkBAIC04OTQsOCAmIzQzOzg5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJaWYgKHZlcmJvc2UpCiAJCQkJCXByaW50ZigmIzM0O1Rlc3Rpbmcgc2hpbmZvIGxvY2sgY29ycnVwdGlvbiAoS1ZNX1hFTl9IVk1fRVZUQ0hOX1NFTkQpXG4mIzM0Oyk7CiAKLQkJCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgJmFtcDtqdWdnbGVfc2hpbmZvX3N0YXRlLCAodm9pZCAqKXZtKTsKLQkJCQlURVNUX0FTU0VSVChyZXQgPT0gMCwgJiMzNDtwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJCWt2bV9wdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgJmFtcDtqdWdnbGVfc2hpbmZvX3N0YXRlLCAodm9pZCAqKXZtKTsKIAogCQkJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiB1eGUgPSB7CiAJCQkJCS5wb3J0ID0gMSwKQEAgLTk0OSwxMSAmIzQzOzk0Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJVEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsCiAJCQkJCSAgICAmIzM0O0V4cGVjdGVkIGV2ZW50IGNoYW5uZWwgSVJRIGJ1dCBpdCBkaWRuJiMzOTt0IGhhcHBlbiYjMzQ7KTsKIAotCQkJCXJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7Ci0JCQkJVEVTVF9BU1NFUlQocmV0ID09IDAsICYjMzQ7cHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzJiMzNDssIHN0cmVycm9yKHJldCkpOwotCi0JCQkJcmV0ID0gcHRocmVhZF9qb2luKHRocmVhZCwgMCk7Ci0JCQkJVEVTVF9BU1NFUlQocmV0ID09IDAsICYjMzQ7cHRocmVhZF9qb2luKCkgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihyZXQpKTsKJiM0MzsJCQkJa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTsKIAkJCQlnb3RvIGRvbmU7CiAKIAkJCWNhc2UgVEVTVF9HVUVTVF9TQVdfSVJROgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY5MwoJCQkJCQkJb3V0cHV0OiA3MwoJCQkJCQkJdGhvdWdodHM6IDEwMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBObyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBgcHRocmVhZF9jcmVhdGVgIGFuZCBgcHRocmVhZF9qb2luYCB3aXRoIHRoZWlyIEtWTS1zcGVjaWZpYyBjb3VudGVycGFydHMgKGBrdm1fcHRocmVhZF9jcmVhdGVgLCBga3ZtX3B0aHJlYWRfam9pbmApIGFuZCBhZGRpbmcgc29tZSB3cmFwcGVycyBpbiBga3ZtX3N5c2NhbGxzLmhgLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgaXMgKnVzZXJzcGFjZSogdGVzdCBjb2RlISBJdCYjMzk7cyBub3QgcGFydCBvZiB0aGUga2VybmVsIGl0c2VsZi4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRoYXQgY2hhbmdlcyB0byBEb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBkbyBub3Qgd2FycmFudCBmdXp6aW5nLiAgVGhpcyBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgc2VsZnRlc3RzIGFuZCB0aGF0JiMzOTtzIGl0OyB0aGF0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUga2VybmVsIHNvdXJjZSB0aGF0ICpydW5zKiBpbiB0aGUga2VybmVsIHNwYWNlLiBTbywgYmFzZWQgb24gdGhhdCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7bm8mIzM0Oy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZmlsZSBsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXM6CgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaGAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNgCgpBbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjIyOjQ4LjY4MDcyOTU2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY3NTQ3ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gdXNlIGN1c3RvbSBwdGhyZWFkIHdyYXBwZXJzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OC42ODA3Mzg3NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTA5NTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlY2M1YWMzZGZhY2ZiNWEzM2ZmNzVmMWRmNGE5Zjk1NjJkYmQyNjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoyMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IGY4YjAyNTk3ODk3YmQuLjAzMTYwYWQ2NjZmNTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcXG5AQCAtMTQxLDMzICsxNDEsMjcgQEAgc3RhdGljIHZvaWQgdGVzdF9ydW4oc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4gXFx0cHRocmVhZF90IHB0X3ZjcHVfbWlncmF0aW9uO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdHB0aHJlYWRfbXV0ZXhfaW5pdChcXHUwMDI2dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTtcXG4gXFx0dmNwdV9kb25lX21hcCA9IGJpdG1hcF96YWxsb2ModGVzdF9hcmdzLm5yX3ZjcHVzKTtcXG4gXFx0VEVTVF9BU1NFUlQodmNwdV9kb25lX21hcCwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1IGRvbmUgYml0bWFwXFxcIik7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnB0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLFxcbi1cXHRcXHRcXHRcXHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7XFxuLVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHZDUFUtJWQgcHRocmVhZFxcXCIsIGkpO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkrKylcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdF92Y3B1X3J1bltpXSwgTlVMTCwgdGVzdF92Y3B1X3J1bixcXG4rXFx0XFx0XFx0XFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcXG4gXFxuIFxcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xcbiBcXHRpZiAodGVzdF9hcmdzLm1pZ3JhdGlvbl9mcmVxX21zKSB7XFxuIFxcdFxcdHNyYW5kKHRpbWUoTlVMTCkpO1xcbiBcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcXG4tXFx0XFx0VEVTVF9BU1NFUlQoIXJldCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkXFxcIik7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xcbiBcXHR9XFxuIFxcbi1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3RfYXJncy5ucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHB0X3ZjcHVfcnVuW2ldLCBOVUxMKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2FyZ3MubWlncmF0aW9uX2ZyZXFfbXMpXFxuLVxcdFxcdHB0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xcbiBcXG4gXFx0Yml0bWFwX2ZyZWUodmNwdV9kb25lX21hcCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xcbmluZGV4IDVlMjMxOTk4NjE3ZTcuLjNjYjg1OTMyZWU4NWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xcbkBAIC05ODgsNyArOTg4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3R3b19jcHVzKHZvaWQgKmdjb2RlKVxcbiBcXHRzdHJ1Y3QgdGVzdF9hcmdzIGFyZ3MgPSB7fTtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdGd2YV90IGFyZ3NfZ3ZhO1xcbi1cXHRpbnQgZ2ljX2ZkLCByZXQ7XFxuK1xcdGludCBnaWNfZmQ7XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKDIsIGdjb2RlLCB2Y3B1cyk7XFxuIFxcbkBAIC0xMDA0LDE1ICsxMDA0LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190d29fY3B1cyh2b2lkICpnY29kZSlcXG4gXFxuIFxcdGdpY19mZCA9IHZnaWNfdjNfc2V0dXAodm0sIDIsIDY0KTtcXG4gXFxuLVxcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJbMF0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sIHZjcHVzWzBdKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0VEVTVF9GQUlMKFxcXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4tXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRURVNUX0ZBSUwoXFxcIkNhbid0IGNyZWF0ZSB0aHJlYWQgZm9yIHZjcHUgMSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XFxuLVxcdHB0aHJlYWRfam9pbih0aHJbMV0sIE5VTEwpO1xcbitcXHRrdm1fcHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcXG4gXFxuIFxcdGNsb3NlKGdpY19mZCk7XFxuIFxcdGt2bV92bV9mcmVlKHZtKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXFxuaW5kZXggZDY0ZDQzNGQzZjA2ZS4uOWE2OWM0MzlhMGY4ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5AQCAtMzExLDIzICszMTEsMjMgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gXFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllciwgTlVMTCwgbnJfdmNwdXMgKyBucl9kZXZpY2VzICsgMSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcl90aHJlYWQsIHZjcHVzW2ldKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXZpY2VzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2bHBpX3RocmVhZHNbaV0sIE5VTEwsIGxwaV93b3JrZXJfdGhyZWFkLCAodm9pZCAqKWkpO1xcbiBcXG4gXFx0cHRocmVhZF9iYXJyaWVyX3dhaXQoXFx1MDAyNnRlc3Rfc2V0dXBfYmFycmllcik7XFxuIFxcbiBcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXZpY2VzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4obHBpX3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0ZGVsdGEgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcXG4gXFx0d3JpdGVfZ3Vlc3RfZ2xvYmFsKHZtLCB0ZXN0X2RhdGEucmVxdWVzdF92Y3B1c19zdG9wLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0cmVwb3J0X3N0YXRzKGRlbHRhKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuaW5kZXggZTg0MTlkN2RhMWVhYi4uYWY1ZWIwMzM0YTc0ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0VEVTVF9BU1NFUlRfRVEodmNwdV9zdG9wLCBmYWxzZSk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsIHZjcHUpO1xcbiBcXG4gXFx0Zm9yIChpdGVyYXRpb24gPSAxOyBpdGVyYXRpb24gXFx1MDAzYz0gcC1cXHUwMDNlaXRlcmF0aW9uczsgaXRlcmF0aW9uKyspIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBpLCByZWFwX2k7XFxuQEAgLTgwNSw3ICs4MDUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRXUklURV9PTkNFKGhvc3RfcXVpdCwgdHJ1ZSk7XFxuIFxcdHNlbV9wb3N0KFxcdTAwMjZzZW1fdmNwdV9jb250KTtcXG4gXFxuLVxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwiVG90YWwgYml0cyBjaGVja2VkOiBkaXJ0eSAoJWx1KSwgY2xlYXIgKCVsdSlcXFxcblxcXCIsXFxuIFxcdFxcdGhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaGFyZHdhcmVfZGlzYWJsZV90ZXN0LmNcXG5pbmRleCAzMTQ3ZjVjOTdlOTQzLi40YWJhZDcxNTg5ODk5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xcbkBAIC01LDcgKzUsNiBAQFxcbiAgKiByZXR1cm4gbm90aWZpZXJzLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZW1hcGhvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuQEAgLTE0LDIwICsxMywyMyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfdXRpbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcImt2bV9zeXNjYWxscy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInVjYWxsX2NvbW1vbi5oXFxcIlxcbiBcXG4tI2RlZmluZSBWQ1BVX05VTSA0XFxuLSNkZWZpbmUgU0xFRVBJTkdfVEhSRUFEX05VTSAoMSBcXHUwMDNjXFx1MDAzYyA0KVxcbi0jZGVmaW5lIEZPUktfTlVNICgxVUxMIFxcdTAwM2NcXHUwMDNjIDkpXFxuLSNkZWZpbmUgREVMQVlfVVNfTUFYIDIwMDBcXG4rI2RlZmluZSBOUl9WQ1BVU1xcdFxcdDRcXG4rI2RlZmluZSBOUl9TTEVFUEVSU19QRVJfVkNQVVxcdDE2XFxuKyNkZWZpbmUgTlJfSVRFUkFUSU9OU1xcdFxcdDUxMlxcbisjZGVmaW5lIERFTEFZX1VTX01BWFxcdFxcdDIwMDBcXG4gXFxuIHNlbV90ICpzZW07XFxuK3N0YXRpYyBjcHVfc2V0X3QgY2hpbGRfY3B1X3NldDtcXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcXG4ge1xcbiBcXHRmb3IgKDs7KVxcbiBcXHRcXHQ7ICAvKiBTb21lIGJ1c3kgd29yayAqL1xcbi1cXHRwcmludGYoXFxcIlNob3VsZCBub3QgYmUgcmVhY2hlZC5cXFxcblxcXCIpO1xcbitcXHRHVUVTVF9BU1NFUlQoMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXFxuQEAgLTM3LDg0ICszOSw0NyBAQCBzdGF0aWMgdm9pZCAqcnVuX3ZjcHUodm9pZCAqYXJnKVxcbiBcXG4gXFx0dmNwdV9ydW4odmNwdSk7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChmYWxzZSwgXFxcIiVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXFxcIixcXG4tXFx0XFx0ICAgIF9fZnVuY19fLCBydW4tXFx1MDAzZWV4aXRfcmVhc29uLFxcbi1cXHRcXHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4tXFx0cHRocmVhZF9leGl0KE5VTEwpO1xcbitcXHRURVNUX0ZBSUwoXFxcInZDUFUlZCBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXFxcIixcXG4rXFx0XFx0ICB2Y3B1LVxcdTAwM2VpZCwgcnVuLVxcdTAwM2VleGl0X3JlYXNvbiwgZXhpdF9yZWFzb25fc3RyKHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24pKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKnNsZWVwaW5nX3RocmVhZCh2b2lkICphcmcpXFxuIHtcXG4gXFx0aW50IGZkO1xcbiBcXG4tXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0ZmQgPSBvcGVuKFxcXCIvZGV2L251bGxcXFwiLCBPX1JEV1IpO1xcbiBcXHRcXHRjbG9zZShmZCk7XFxuIFxcdH1cXG4tXFx0VEVTVF9BU1NFUlQoZmFsc2UsIFxcXCIlczogZXhpdGVkXFxcIiwgX19mdW5jX18pO1xcbi1cXHRwdGhyZWFkX2V4aXQoTlVMTCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfdGhyZWFkKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCAqYXR0cixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKigqZikodm9pZCAqKSwgdm9pZCAqYXJnKVxcbi17XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgZiwgYXJnKTtcXG4tXFx0VEVTVF9BU1NFUlQociA9PSAwLCBcXFwiJXM6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkXFxcIiwgX19mdW5jX18pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcXG4te1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsIFxcXCIlczogZmFpbGVkIHNldCBhZmZpbml0eVxcXCIsIF9fZnVuY19fKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2pvaW4ocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnJldHZhbClcXG4te1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCByZXR2YWwpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsIFxcXCIlczogZmFpbGVkIHRvIGpvaW4gdGhyZWFkXFxcIiwgX19mdW5jX18pO1xcbitcXHRURVNUX0ZBSUwoXFxcIiVzOiBleGl0ZWRcXFwiLCBfX2Z1bmNfXyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KHUzMiBydW4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFx0Y3B1X3NldF90IGNwdV9zZXQ7XFxuLVxcdHB0aHJlYWRfdCB0aHJlYWRzW1ZDUFVfTlVNXTtcXG4tXFx0cHRocmVhZF90IHRocm93X2F3YXk7XFxuLVxcdHZvaWQgKmI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuIFxcdHUzMiBpLCBqO1xcbiBcXG4tXFx0Q1BVX1pFUk8oXFx1MDAyNmNwdV9zZXQpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkNQVV9OVU07IGkrKylcXG4tXFx0XFx0Q1BVX1NFVChpLCBcXHUwMDI2Y3B1X3NldCk7XFxuLVxcbi1cXHR2bSA9IHZtX2NyZWF0ZShWQ1BVX05VTSk7XFxuK1xcdHZtID0gdm1fY3JlYXRlKE5SX1ZDUFVTKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlczogWyVkXSBzdGFydCB2Y3B1c1xcXFxuXFxcIiwgX19mdW5jX18sIHJ1bik7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBWQ1BVX05VTTsgKytpKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9WQ1BVUzsgKytpKSB7XFxuIFxcdFxcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHRcXHRjaGVja19jcmVhdGVfdGhyZWFkKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XFxuLVxcdFxcdGNoZWNrX3NldF9hZmZpbml0eSh0aHJlYWRzW2ldLCBcXHUwMDI2Y3B1X3NldCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fdmNwdSwgdmNwdSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHRocmVhZCwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFNMRUVQSU5HX1RIUkVBRF9OVU07ICsraikge1xcbi1cXHRcXHRcXHRjaGVja19jcmVhdGVfdGhyZWFkKFxcdTAwMjZ0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAodm9pZCAqKU5VTEwpO1xcbi1cXHRcXHRcXHRjaGVja19zZXRfYWZmaW5pdHkodGhyb3dfYXdheSwgXFx1MDAyNmNwdV9zZXQpO1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICsraikge1xcbitcXHRcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgc2xlZXBpbmdfdGhyZWFkLCAodm9pZCAqKU5VTEwpO1xcbitcXHRcXHRcXHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFxcdTAwMjZjaGlsZF9jcHVfc2V0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCIlczogWyVkXSBhbGwgdGhyZWFkcyBsYXVuY2hlZFxcXFxuXFxcIiwgX19mdW5jX18sIHJ1bik7XFxuIFxcdHNlbV9wb3N0KHNlbSk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBWQ1BVX05VTTsgKytpKVxcbi1cXHRcXHRjaGVja19qb2luKHRocmVhZHNbaV0sIFxcdTAwMjZiKTtcXG4tXFx0LyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovXFxuLVxcdFRFU1RfQVNTRVJUKGZhbHNlLCBcXFwiJXM6IFslZF0gY2hpbGQgZXNjYXBlZCB0aGUgbmluamFcXFwiLCBfX2Z1bmNfXywgcnVuKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gU0lHS0lMTCB0aGlzIGNoaWxkLiAqL1xcbitcXHR3aGlsZSAoMSk7XFxuIH1cXG4gXFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxcbkBAIC0xNDcsMTYgKzExMiwzNCBAQCB2b2lkIHdhaXRfZm9yX2NoaWxkX3NldHVwKHBpZF90IHBpZClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZXR1cF9jaGlsZF9jcHVfc2V0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFxcdTAwMjZjaGlsZF9jcHVfc2V0KTtcXG4rXFxuK1xcdGlmIChDUFVfQ09VTlQoXFx1MDAyNmNoaWxkX2NwdV9zZXQpIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbitcXHRDUFVfQ0xSKGNwdSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbitcXG4rXFx0d2hpbGUgKENQVV9DT1VOVChcXHUwMDI2Y2hpbGRfY3B1X3NldCkgXFx1MDAzZSBOUl9WQ1BVUylcXG4rXFx0XFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFxcdTAwMjZjaGlsZF9jcHVfc2V0KSwgXFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xcbit9XFxuK1xcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0dTMyIGk7XFxuIFxcdGludCBzLCByO1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbitcXHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XFxuK1xcbiBcXHRzZW0gPSBzZW1fb3BlbihcXFwidm1fc2VtXFxcIiwgT19DUkVBVCB8IE9fRVhDTCwgMDY0NCwgMCk7XFxuIFxcdHNlbV91bmxpbmsoXFxcInZtX3NlbVxcXCIpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZPUktfTlVNOyArK2kpIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lURVJBVElPTlM7ICsraSkge1xcbiBcXHRcXHRwaWQgPSBmb3JrKCk7XFxuIFxcdFxcdFRFU1RfQVNTRVJUKHBpZCBcXHUwMDNlPSAwLCBcXFwiJXM6IHVuYWJsZSB0byBmb3JrXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRpZiAocGlkID09IDApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfdXRpbC5oXFx1MDAzZVxcbiBcXG5AQCAtOTYsNiArOTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xcbiBfX0tWTV9TWVNDQUxMX0RFRklORShzY2hlZF9nZXRhZmZpbml0eSwgMywgcGlkX3QsIHBpZCwgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgbWFzayk7XFxuIFxcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2dldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcXG4rXFx0XFx0ICAgICBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBjcHVzZXQpO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX3NldGFmZmluaXR5X25wLCAzLCBwdGhyZWFkX3QsIHRocmVhZCxcXG4rXFx0XFx0ICAgICBzaXplX3QsIGNwdXNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCAqLCBjcHVzZXQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX2dldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1c2V0KVxcbit7XFxuK1xcdGt2bV9wdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcHRocmVhZF9zZXRhZmZpbml0eShwdGhyZWFkX3QgdGhyZWFkLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjcHVfc2V0X3QgKmNwdXNldClcXG4re1xcbitcXHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVfc2V0X3QpLCBjcHVzZXQpO1xcbit9XFxuK1xcbit0eXBlZGVmIHZvaWQgKigqcHRocmVhZF9mbl90KSh2b2lkICopO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NyZWF0ZSwgNCwgcHRocmVhZF90ICosIHRocmVhZCxcXG4rXFx0XFx0ICAgICBjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBhdHRyLCBwdGhyZWFkX2ZuX3QsIGZuLCB2b2lkICosIGFyZyk7XFxuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfam9pbiwgMiwgcHRocmVhZF90LCB0aHJlYWQsIHZvaWQgKiosIHRocmVhZF9yZXR1cm4pO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShwdGhyZWFkX2NhbmNlbCwgMSwgcHRocmVhZF90LCB0aHJlYWQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnIpXFxuK3tcXG4rXFx0a3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCByKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQpXFxuK3tcXG4rXFx0X19rdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQsIE5VTEwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDYW5jZWwrSm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xcbisgKiBhbmQgaXMgZXhwZWN0ZWQgdG8gZXhpdCBvbmx5IGluIHJlc3BvbnNlIHRvIGNhbmNlbGxhdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxcbit7XFxuK1xcdHZvaWQgKnI7XFxuK1xcbitcXHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgXFx1MDAyNnIpO1xcbitcXHRURVNUX0FTU0VSVChyID09IFBUSFJFQURfQ0FOQ0VMRUQsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXBcXFwiLCBQVEhSRUFEX0NBTkNFTEVELCByKTtcXG4rfVxcbitcXG4gI2RlZmluZSBrdm1fZnJlZV9mZChmZClcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGt2bV9jbG9zZShmZCk7XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbmluZGV4IGIzOWU3MTNjMzBhNDYuLjVhN2E0NTViNTM4NzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMTA4NCw2ICsxMDg0LDggQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4gXFxuIHZvaWQga3ZtX3NldF9maWxlc19ybGltaXQodTMyIG5yX3ZjcHVzKTtcXG4gXFxuK2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XFxuK1xcbiBpbnQgX19waW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcXG5AQCAtMTA5NCw3ICsxMDk2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaW5fdGFza190b19jcHUocHRocmVhZF90IHRhc2ssIGludCBjcHUpXFxuIFxcdFRFU1RfQVNTRVJUKCFyLCBcXFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXFxcIiwgY3B1KTtcXG4gfVxcbiBcXG4tdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpO1xcbitzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGNwdSA9IGt2bV9waWNrX3JhbmRvbV9jcHUocG9zc2libGVfY3B1cyk7XFxuK1xcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xcbitcXHRyZXR1cm4gY3B1O1xcbit9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5pbmRleCAyNDBmNmYwZmRiZTQzLi4xNjhjNTI3MzRmZWY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5AQCAtMjk2LDcgKzI5Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksIFxcdTAwMjZhdmFpbGFibGVfY3B1cyk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xcbitcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07XFxuQEAgLTM1Niw3ICszNTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcXG5pbmRleCA1ZDc1OTBkMDE4NjgxLi5lYmIyNDc4ODc4ZGU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXFxuQEAgLTEyOCw3ICsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0Y2xvc2UoX19ldmVudGZkKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZyYWNpbmdfdGhyZWFkLCBOVUxMLCBzZWNvbmRhcnlfaXJxZmRfanVnZ2xlciwgdm0yKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDsgaSsrKSB7XFxuIFxcdFxcdFdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7XFxuQEAgLTEzOSw1ICsxMzksNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR9XFxuIFxcbiBcXHRXUklURV9PTkNFKGRvbmUsIHRydWUpO1xcbi1cXHRwdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4ocmFjaW5nX3RocmVhZCwgTlVMTCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcXG5pbmRleCBhOTEwZTNhYmI4YzcxLi45NzQ4MTNlYTg5NTMzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXFxuQEAgLTM2NCw4ICszNjQsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHQqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKylcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXFxuLVxcdFxcdFxcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xcbitcXHRcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsXFxuK1xcdFxcdFxcdFxcdCAgIHRlc3RfYXJncy52Y3B1c1tpXSk7XFxuIFxcbiBcXHR2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpO1xcbiBcXHRwcl9pbmZvKFxcXCJTdGFydGVkIGFsbCB2Q1BVcyBzdWNjZXNzZnVsbHlcXFxcblxcXCIpO1xcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XFxuIFxcbiBcXHRyZXQgPSBzZW1fZGVzdHJveShcXHUwMDI2dGVzdF9zdGFnZV91cGRhdGVkKTtcXG4gXFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFxcXCJFcnJvciBpbiBzZW1fZGVzdHJveVxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5pbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcXG4gXFx0ICAgICAgIFxcXCIgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcXFxuXFxcIiwgbmFtZSwgbmFtZSk7XFxuIH1cXG4gXFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKVxcbitpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXFxuIHtcXG4gXFx0aW50IHRhcmdldF9pZHg7XFxuIFxcdGludCBucl9jcHVzO1xcbkBAIC02ODAsMTMgKzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcXG4gXFx0dGFyZ2V0X2lkeCA9IGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XFxuIFxcbiBcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIENQVV9TRVRTSVpFOyBjcHUrKykge1xcbi1cXHRcXHRpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApIHtcXG4tXFx0XFx0XFx0cGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoQ1BVX0lTU0VUKGNwdSwgcG9zc2libGVfY3B1cykgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApXFxuK1xcdFxcdFxcdHJldHVybiBjcHU7XFxuIFxcdH1cXG4tXFxuIFxcdFRFU1RfRkFJTChcXFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXFxcIik7XFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbmluZGV4IDM1OTliNzVkOTdjOTEuLjI4NjQ1NjJmNTdiNDAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgbWVtc3RyZXNzX3N0YXJ0X3ZjcHVfdGhyZWFkcyhpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gaTtcXG4gXFx0XFx0V1JJVEVfT05DRSh2Y3B1LVxcdTAwM2VydW5uaW5nLCBmYWxzZSk7XFxuIFxcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdS1cXHUwMDNldGhyZWFkLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2V0aHJlYWQsIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHUpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBtZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMoaW50IG5yX3ZjcHVzKVxcbiBcXHRXUklURV9PTkNFKG1lbXN0cmVzc19hcmdzLnN0b3BfdmNwdXMsIHRydWUpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0udGhyZWFkLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdG9nZ2xlX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBzbG90cywgYm9vbCBlbmFibGUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcXG5pbmRleCBlZjhkNzZmNzFmODM3Li5mN2NlNWE2ZGRjYzIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcXG5AQCAtMTY3LDggKzE2Nyw4IEBAIHN0cnVjdCB1ZmZkX2Rlc2MgKnVmZmRfc2V0dXBfZGVtYW5kX3BhZ2luZyhpbnQgdWZmZF9tb2RlLCB1c2Vjb25kc190IGRlbGF5LFxcbiBcXHRcXHR1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcl9hcmdzW2ldLmhhbmRsZXIgPSBoYW5kbGVyO1xcbiBcXHRcXHR1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcl9hcmdzW2ldLnBpcGUgPSBwaXBlc1swXTtcXG4gXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ1ZmZkX2Rlc2MtXFx1MDAzZXJlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sXFxuLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJfYXJnc1tpXSk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJzW2ldLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkX2ZuLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2dWZmZF9kZXNjLVxcdTAwM2VyZWFkZXJfYXJnc1tpXSk7XFxuIFxcbiBcXHRcXHRQRVJfVkNQVV9ERUJVRyhcXFwiQ3JlYXRlZCB1ZmZkIHRocmVhZCAlaSBmb3IgSFZBIHJhbmdlIFslcCwgJXApXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgaSwgaHZhLCBodmEgKyBsZW4pO1xcbkBAIC0xODcsOCArMTg3LDcgQEAgdm9pZCB1ZmZkX3N0b3BfZGVtYW5kX3BhZ2luZyhzdHJ1Y3QgdWZmZF9kZXNjICp1ZmZkKVxcbiBcXHRcXHRcXHQgICAgXFxcIlVuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcFxcXCIsIGksIHVmZmQpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVmZmQtXFx1MDAzZW51bV9yZWFkZXJzOyArK2kpXFxuLVxcdFxcdFRFU1RfQVNTRVJUKCFwdGhyZWFkX2pvaW4odWZmZC1cXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCksXFxuLVxcdFxcdFxcdCAgICBcXFwiUHRocmVhZF9qb2luIGZhaWxlZCBvbiByZWFkZXIgJWkgZm9yIHVmZmRfZGVzYyAlcFxcXCIsIGksIHVmZmQpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHVmZmQtXFx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpO1xcbiBcXG4gXFx0Y2xvc2UodWZmZC1cXHUwMDNldWZmZCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuaW5kZXggNGQ5YWQ2MTA0YTZlZC4uZTEyOTk2MTFiZTMyMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIHtcXG4gXFx0cHJfaW5mb192KFxcXCJMYXVuY2hpbmcgdGhlIHRlc3QgVk1cXFxcblxcXCIpO1xcbiBcXG4tXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNmRhdGEtXFx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgZGF0YSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2ZGF0YS1cXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXFxuIFxcdHdhaXRfZm9yX3ZjcHUoKTtcXG5AQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIFxcbiBzdGF0aWMgdm9pZCB3YWl0X2d1ZXN0X2V4aXQoc3RydWN0IHZtX2RhdGEgKmRhdGEpXFxuIHtcXG4tXFx0cHRocmVhZF9qb2luKGRhdGEtXFx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbihkYXRhLVxcdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXFxuaW5kZXggM2Q1ZjMzYTYzYjJiNC4uNzQxZTM0Mzk2MmVkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyBwdGhyZWFkX3QgKnNwYXduX3dvcmtlcnMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzLFxcbiBcXHRcXHRpbmZvW2ldLnZjcHUgPSB2Y3B1c1tpXTtcXG4gXFx0XFx0aW5mb1tpXS5zdGFydF9ncGEgPSBncGE7XFxuIFxcdFxcdGluZm9baV0uZW5kX2dwYSA9IGdwYSArIG5yX2J5dGVzO1xcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFxcdTAwMjZpbmZvW2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlciwgXFx1MDAyNmluZm9baV0pO1xcbiBcXHR9XFxuIFxcdHJldHVybiB0aHJlYWRzO1xcbiB9XFxuQEAgLTQwOSw3ICs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuLVxcdFxcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIERlbGliZXJhdGVseSBleGl0IHdpdGhvdXQgZGVsZXRpbmcgdGhlIHJlbWFpbmluZyBtZW1zbG90cyBvciBjbG9zaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xcbmluZGV4IGEwZmNhZTNjYjdhOGIuLmM1NzYzMWFhYjNkMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4gXFx0ICogQ29uY3VycmVudGx5IGRlbGV0ZSAoYW5kIHJlY3JlYXRlKSB0aGUgc2xvdCB0byB0ZXN0IEtWTSdzIGhhbmRsaW5nXFxuIFxcdCAqIG9mIGEgcmFjaW5nIG1lbXNsb3QgZGVsZXRpb24gd2l0aCBwcmVmYXVsdGluZy5cXG4gXFx0ICovXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzbG90X3dvcmtlciwgTlVMTCwgZGVsZXRlX3Nsb3Rfd29ya2VyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2xvdF93b3JrZXIsIE5VTEwsIGRlbGV0ZV9zbG90X3dvcmtlciwgXFx1MDAyNmRhdGEpO1xcbiBcXG4gXFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxcbiBcXHRcXHRjcHVfcmVsYXgoKTtcXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIXNsb3RfcmVjcmVhdGVkKSB7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UoZGF0YS5yZWNyZWF0ZV9zbG90LCB0cnVlKTtcXG4tXFx0XFx0XFx0cHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcXG4rXFx0XFx0XFx0a3ZtX3B0aHJlYWRfam9pbihzbG90X3dvcmtlciwgTlVMTCk7XFxuIFxcdFxcdFxcdHNsb3RfcmVjcmVhdGVkID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbmluZGV4IDU1N2UzOTNjMjIzYjkuLmRmM2U1YWQxYzM5MzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuQEAgLTI0MSw4ICsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHQgKi9cXG4gXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcXG4tXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxcbitcXHRcXHRcXHQgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7XFxuIFxcbiBcXHRpZiAobGF0ZW5jeSBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTMxNCw3ICszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHQgICAgXFxcIiAgZS5nLiB2aWEgY3B1aWRsZS5vZmY9MSBvciB2aWEgLWwgXFx1MDAzY2xhdGVuY3lcXHUwMDNlLCBvciBydW4gd2l0aCAtdSB0b1xcXFxuXFxcIlxcbiBcXHRcXHQgICAgXFxcIiAgZGlzYWJsZSB0aGlzIHNhbml0eSBjaGVjay5cXFwiLCBpKTtcXG4gXFxuLVxcdHB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcXG4gXFxuIFxcdGt2bV92bV9mcmVlKHZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXFxuaW5kZXggMDI0NDg0ODYyMWIzNC4uY2U4ZGI5NmNjZjdlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY1xcbkBAIC02NzgsNyArNjc4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jbXB4Y2hnX2tleV9jb25jdXJyZW50KHZvaWQpXFxuIFxcdEhPU1RfU1lOQyh0LnZjcHUsIFNUQUdFX1NLRVlTX1NFVCk7XFxuIFxcdHByZXBhcmVfbWVtMTIoKTtcXG4gXFx0TU9QKHQudmNwdSwgTE9HSUNBTCwgV1JJVEUsIG1lbTEsIG1heF9ibG9jaywgR0FERFJfVihtZW0yKSk7XFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHJ1bl9ndWVzdCwgXFx1MDAyNnQudmNwdSk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFxcdTAwMjZ0LnZjcHUpO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBjbXB4Y2hnX2l0ZXJfb3V0ZXI7IGkrKykge1xcbiBcXHRcXHRkbyB7XFxuQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NtcHhjaGdfa2V5X2NvbmN1cnJlbnQodm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xcbiBcXG4gXFx0TU9QKHQudmNwdSwgTE9HSUNBTCwgUkVBRCwgbWVtMiwgbWF4X2Jsb2NrLCBHQUREUl9WKG1lbTIpKTtcXG4gXFx0VEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG5pbmRleCBhMTUyYWI2NWM2NTc3Li5kZmZlOTY1NGY0NWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcXG4gXFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XFxuIFxcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUodmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCAqdmNwdSk7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGd1ZXN0IHRocmVhZCBpcyBzcHVuIHVwLiAqL1xcbiBcXHR3YWl0X2Zvcl92Y3B1KCk7XFxuQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21vdmVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXFxuIFxcdC8qIERlZmVyZWQgc3luYyBmcm9tIHdoZW4gdGhlIG1lbXNsb3Qgd2FzIG1pc2FsaWduZWQgKGFib3ZlKS4gKi9cXG4gXFx0d2FpdF9mb3JfdmNwdSgpO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIFxcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIH1cXG5AQCAtMzAyLDcgKzMwMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGVsZXRlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxcbiBcXHQgKi9cXG4gXFx0dm1fbWVtX3JlZ2lvbl9kZWxldGUodm0sIDApO1xcbiBcXG4tXFx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcXG4rXFx0a3ZtX3B0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XFxuIFxcbiBcXHRydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbmluZGV4IDBiODhjNzQzZWU3ZDUuLmJjM2M2MmI3MmM1OGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5AQCAtNTQ4LDE1ICs1NDgsMTUgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXFxuIFxcbiBcXHRcXHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cXG4gXFx0XFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBkb19zdGVhbF90aW1lLCBOVUxMKTtcXG4tXFx0XFx0cHRocmVhZF9nZXRhZmZpbml0eV9ucCh0aHJlYWQsIHNpemVvZihjcHVzZXQpLCBcXHUwMDI2Y3B1c2V0KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eSh0aHJlYWQsIFxcdTAwMjZjcHVzZXQpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChDUFVfQ09VTlQoXFx1MDAyNmNwdXNldCkgPT0gMSBcXHUwMDI2XFx1MDAyNiBDUFVfSVNTRVQoY3B1LCBcXHUwMDI2Y3B1c2V0KSxcXG4gXFx0XFx0XFx0ICAgIFxcXCJXb3JrZXIgZmFpbGVkIHRvIGluaGVyaXQgcGFyZW50J3MgQ1BVIGFmZmluaXR5XFxcIik7XFxuIFxcbiBcXHRcXHRkb1xcbiBcXHRcXHRcXHRzY2hlZF95aWVsZCgpO1xcbiBcXHRcXHR3aGlsZSAoZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5IFxcdTAwM2MgTUlOX1JVTl9ERUxBWV9OUyk7XFxuLVxcdFxcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuIFxcdFxcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKSAtIHJ1bl9kZWxheTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQocnVuX2RlbGF5IFxcdTAwM2U9IE1JTl9SVU5fREVMQVlfTlMsXFxuIFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgcnVuX2RlbGF5IFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcXG5pbmRleCA3NzE1MzVmOWFhZDNjLi5mZTM4Y2M0Y2JhMDUxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcXG5AQCAtMjIyLDMwICsyMjIsMTMgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHR2b2lkICpyZXR2YWw7XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcXFwiLFxcbi1cXHRcXHQgICAgdmNwdS1cXHUwMDNlaWQsIHIpO1xcbi1cXHRURVNUX0FTU0VSVChyZXR2YWwgPT0gUFRIUkVBRF9DQU5DRUxFRCxcXG4tXFx0XFx0ICAgIFxcXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFxcXCIsIFBUSFJFQURfQ0FOQ0VMRUQsXFxuLVxcdFxcdCAgICByZXR2YWwpO1xcbi19XFxuLVxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVbM107XFxuIFxcdGd2YV90IGhjYWxsX3BhZ2U7XFxuIFxcdHB0aHJlYWRfdCB0aHJlYWRzWzJdO1xcbi1cXHRpbnQgc3RhZ2UgPSAxLCByO1xcbitcXHRpbnQgc3RhZ2UgPSAxO1xcbiBcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuIFxcbiBcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfU0VORF9JUEkpKTtcXG5AQCAtMjcyLDExICsyNTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHVbMF0sIDIsIGhjYWxsX3BhZ2UsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xcbiBcXHR2Y3B1X3NldF9odl9jcHVpZCh2Y3B1WzBdKTtcXG4gXFxuLVxcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFxcXCIsIHIpO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkIGVycm5vPSVkXFxcIiwgZXJybm8pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuIFxcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHR2Y3B1X3J1bih2Y3B1WzBdKTtcXG5AQCAtMzAyLDkgKzI4Miw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdH1cXG4gXFxuIGRvbmU6XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY1xcbmluZGV4IGI0YmU5YTE3NTM3OWYuLjg0ZjIyZjM5YzhmMjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guY1xcbkBAIC01NDgsMjMgKzU0OCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0dm9pZCAqcmV0dmFsO1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY2FuY2VsIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcXFwiLFxcbi1cXHRcXHQgICAgdmNwdS1cXHUwMDNlaWQsIHIpO1xcbi1cXG4tXFx0ciA9IHB0aHJlYWRfam9pbih0aHJlYWQsIFxcdTAwMjZyZXR2YWwpO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXFxcIixcXG4tXFx0XFx0ICAgIHZjcHUtXFx1MDAzZWlkLCByKTtcXG4tXFx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXFxuLVxcdFxcdCAgICBcXFwiZXhwZWN0ZWQgcmV0dmFsPSVwLCBnb3QgJXBcXFwiLCBQVEhSRUFEX0NBTkNFTEVELFxcbi1cXHRcXHQgICAgcmV0dmFsKTtcXG4tfVxcbi1cXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG5AQCAtNTc1LDcgKzU1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdHU2NCAqcHRlO1xcbiBcXHRzdHJ1Y3QgdGVzdF9kYXRhICpkYXRhO1xcbiBcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuLVxcdGludCBzdGFnZSA9IDEsIHIsIGk7XFxuK1xcdGludCBzdGFnZSA9IDEsIGk7XFxuIFxcbiBcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9IWVBFUlZfVExCRkxVU0gpKTtcXG4gXFxuQEAgLTYzMiwxMSArNjE1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0dmNwdV9zZXRfbXNyKHZjcHVbMl0sIEhWX1g2NF9NU1JfVlBfSU5ERVgsIFdPUktFUl9WQ1BVX0lEXzIpO1xcbiBcXHR2Y3B1X3NldF9odl9jcHVpZCh2Y3B1WzJdKTtcXG4gXFxuLVxcdHIgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlKCkgZmFpbGVkXFxcIik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZFxcXCIpO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XFxuIFxcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHR2Y3B1X3J1bih2Y3B1WzBdKTtcXG5AQCAtNjYxLDggKzY0MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdH1cXG4gXFxuIGRvbmU6XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMF0sIHZjcHVbMV0pO1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xcbmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xcbkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0dmlydF9tYXAodm0sIGdwYSwgZ3BhLCBQRVJfQ1BVX0RBVEFfU0laRSAvIHZtLVxcdTAwM2VwYWdlX3NpemUpO1xcbiBcXG4tXFx0XFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBfX3Rlc3RfbWVtX2NvbnZlcnNpb25zLCB2Y3B1c1tpXSk7XFxuIFxcdH1cXG4gXFxuIFxcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7XFxuK1xcdFxcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7XFxuIFxcbiBcXHRrdm1fdm1fZnJlZSh2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcXG5pbmRleCAxMGRiOWZlNmQ5MDYzLi5lNmQxNmU5ZDYxMjAwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xcbkBAIC02NSwxMyArNjUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wcml2YXRlX2FjY2Vzc19tZW1zbG90X2RlbGV0ZWQodm9pZClcXG4gXFx0LyogUmVxdWVzdCB0byBhY2Nlc3MgcGFnZSBwcml2YXRlbHkgKi9cXG4gXFx0dm1fbWVtX3NldF9wcml2YXRlKHZtLCBFWElUU19URVNUX0dQQSwgRVhJVFNfVEVTVF9TSVpFKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXFxuLVxcdFxcdCAgICAgICAodm9pZCAqKCopKHZvaWQgKikpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLFxcbi1cXHRcXHQgICAgICAgKHZvaWQgKil2Y3B1KTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXFxuK1xcdFxcdFxcdCAgIChwdGhyZWFkX2ZuX3QpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLCAodm9pZCAqKXZjcHUpO1xcbiBcXG4gXFx0dm1fbWVtX3JlZ2lvbl9kZWxldGUodm0sIEVYSVRTX1RFU1RfU0xPVCk7XFxuIFxcbi1cXHRwdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcXHUwMDI2dGhyZWFkX3JldHVybik7XFxuK1xcdGt2bV9wdGhyZWFkX2pvaW4odm1fdGhyZWFkLCBcXHUwMDI2dGhyZWFkX3JldHVybik7XFxuIFxcdGV4aXRfcmVhc29uID0gKHUzMikodTY0KXRocmVhZF9yZXR1cm47XFxuIFxcbiBcXHRURVNUX0FTU0VSVF9FUShleGl0X3JlYXNvbiwgS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jXFxuaW5kZXggY2JjOTJhODYyZWE5Yy4uN2EwYmQ5ZjdiYTZjOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNcXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgS1ZNX01BWF9WQ1BVUzsgaSsrKVxcbiBcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpO1xcbiBcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pLCAwKTtcXG4rXFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2UsIHZjcHVzWzBdKTtcXG4gXFxuIFxcdHZjcHVOID0gdmNwdXNbS1ZNX01BWF9WQ1BVUyAtIDFdO1xcbiBcXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcXHUwMDNjIHQ7KSB7XFxuQEAgLTY1LDggKzY1LDcgQEAgaW50IG1haW4odm9pZClcXG4gXFx0XFx0dmNwdV9zZXRfbXNyKHZjcHVOLCBNU1JfSUEzMl9BUElDQkFTRSwgTEFQSUNfRElTQUJMRUQpO1xcbiBcXHR9XFxuIFxcbi1cXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xcbitcXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xcbiBcXG4gXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jXFxuaW5kZXggZDU5YWJiMTk4ZDg2Zi4uZGUwMDZlMWM4NjFjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcXG5AQCAtMTI4LDEwICsxMjgsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zZXZfbWlncmF0ZV9sb2NraW5nKHZvaWQpXFxuIFxcdFxcdCAgICAgICBzaXplb2YoaW5wdXRbaV0uc291cmNlX3ZtcykpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXFxuLVxcdFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXFx1MDAyNmlucHV0W2ldKTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXFx1MDAyNmlucHV0W2ldKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgKytpKVxcbi1cXHRcXHRwdGhyZWFkX2pvaW4ocHRbaV0sIE5VTEwpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKHB0W2ldLCBOVUxMKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXFxuIFxcdFxcdGt2bV92bV9mcmVlKGlucHV0W2ldLnZtKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N5bmNfcmVnc190ZXN0LmNcXG5pbmRleCA1YjBjMjM1OWJiYjQzLi45ZDc2YzJlZDc4NGI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcXG4gXFx0XFx0ICAgICEhKHJ1bi1cXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcXHUwMDI2IFg4Nl9DUjRfUEFFKSxcXG4gXFx0XFx0ICAgICEhKHJ1bi1cXHUwMDNlcy5yZWdzLnNyZWdzLmVmZXIgXFx1MDAyNiBFRkVSX0xNRSkpO1xcbiBcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZXIsICh2b2lkICopcnVuKSwgMCk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pO1xcbiBcXG4gXFx0Zm9yICh0ID0gdGltZShOVUxMKSArIFRJTUVPVVQ7IHRpbWUoTlVMTCkgXFx1MDAzYyB0Oykge1xcbiBcXHRcXHQvKlxcbkBAIC0xOTksOCArMTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2NhbmNlbCh0aHJlYWQpLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xcbitcXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xcbiBcXG4gXFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXFxuaW5kZXggNTlkYThkNGRhNjA3OS4uMmEzYTliZDhiMzM4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXFxuQEAgLTk0LDEyICs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRwdGhyZWFkX3QgY3B1X3RocmVhZHNbTlJfVEVTVF9WQ1BVU107XFxuIFxcdHVuc2lnbmVkIGxvbmcgY3B1O1xcbiBcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIE5SX1RFU1RfVkNQVVM7IGNwdSsrKVxcbi1cXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2Y3B1X3RocmVhZHNbY3B1XSwgTlVMTCwgcnVuX3ZjcHUsICh2b2lkICopY3B1KTtcXG4rXFx0XFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFxcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xcbiBcXG4gXFx0dW5zaWduZWQgbG9uZyBmYWlsdXJlcyA9IDA7XFxuIFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspIHtcXG4gXFx0XFx0dm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7XFxuLVxcdFxcdHB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xcbitcXHRcXHRrdm1fcHRocmVhZF9qb2luKGNwdV90aHJlYWRzW2NwdV0sIFxcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XFxuIFxcdFxcdGZhaWx1cmVzICs9ICh1bnNpZ25lZCBsb25nKXRoaXNfY3B1X2ZhaWx1cmVzO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5pbmRleCAzYTMyNmM1ZTc0Y2FiLi43OGU3YWFlOGZhYjhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xcbkBAIC0yMjgsMjUgKzIyOCw2IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3RocmVhZCh2b2lkICphcmcpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0dm9pZCAqcmV0dmFsO1xcbi1cXHRpbnQgcjtcXG4tXFxuLVxcdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xcbi1cXHRURVNUX0FTU0VSVChyID09IDAsXFxuLVxcdFxcdCAgICBcXFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcbi1cXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCxcXG4tXFx0XFx0ICAgIFxcXCJwdGhyZWFkX2pvaW4gb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFxcXCIsXFxuLVxcdFxcdCAgICB2Y3B1LVxcdTAwM2VpZCwgcik7XFxuLVxcdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxcbi1cXHRcXHQgICAgXFxcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXFxcIiwgUFRIUkVBRF9DQU5DRUxFRCxcXG4tXFx0XFx0ICAgIHJldHZhbCk7XFxuLX1cXG4tXFxuIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG5AQCAtMzg3LDcgKzM2OCw2IEBAIHZvaWQgZ2V0X2NtZGxpbmVfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgKnJ1bl9zZWNzLFxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbi1cXHRpbnQgcjtcXG4gXFx0aW50IHdhaXRfc2VjcztcXG4gXFx0Y29uc3QgaW50IG1heF9oYWx0ZXJfd2FpdCA9IDEwO1xcbiBcXHRpbnQgcnVuX3NlY3MgPSAwO1xcbkBAIC00MjgsOSArNDA4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xcbiBcXG4gXFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXFx1MDAyNnBhcmFtc1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCxcXG4tXFx0XFx0ICAgIFxcXCJwdGhyZWFkX2NyZWF0ZSBoYWx0ZXIgZmFpbGVkIGVycm5vPSVkXFxcIiwgZXJybm8pO1xcbitcXHRrdm1fcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcXHUwMDI2cGFyYW1zWzBdKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJIYWx0ZXIgdkNQVSB0aHJlYWQgc3RhcnRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHR3YWl0X3NlY3MgPSAwO1xcbkBAIC00NDcsOCArNDI1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFxcIkhhbHRlciB2Q1BVIHRocmVhZCByZXBvcnRlZCBpdHMgQVBJQyBJRDogJXUgYWZ0ZXIgJWQgc2Vjb25kcy5cXFxcblxcXCIsXFxuIFxcdFxcdGRhdGEtXFx1MDAzZWhhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpO1xcbiBcXG4tXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXFx1MDAyNnBhcmFtc1sxXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHIgPT0gMCwgXFxcInB0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcXFwiLCBlcnJubyk7XFxuK1xcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIFxcdTAwMjZwYXJhbXNbMV0pO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFxuIFxcdFxcdFxcXCJJUEkgc2VuZGVyIHZDUFUgdGhyZWFkIHN0YXJ0ZWQuIExldHRpbmcgdkNQVXMgcnVuIGZvciAlZCBzZWNvbmRzLlxcXFxuXFxcIixcXG5AQCAtNDYyLDggKzQzOSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdC8qXFxuIFxcdCAqIENhbmNlbCB0aHJlYWRzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHN0b3AuXFxuIFxcdCAqL1xcbi1cXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCBwYXJhbXNbMF0udmNwdSk7XFxuLVxcdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHBhcmFtc1sxXS52Y3B1KTtcXG4rXFx0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XFxuK1xcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGhvc3Qgc3VwcG9ydCBJZGxlIEhMVCwgaS5lLiBLVk0gKm1pZ2h0KiBiZSB1c2luZyBJZGxlIEhMVCxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcXG5pbmRleCA1MDc2ZjZhNzU0NTU3Li5hMjI2YTJmZDYxZDk0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXFxuQEAgLTQzNyw3ICs0MzcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4gXFx0cHRocmVhZF90IHRocmVhZDtcXG4gXFx0Ym9vbCB2ZXJib3NlO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0dmVyYm9zZSA9IGFyZ2MgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2ICghc3RybmNtcChhcmd2WzFdLCBcXFwiLXZcXFwiLCAzKSB8fFxcbiBcXHRcXHRcXHQgICAgICAgIXN0cm5jbXAoYXJndlsxXSwgXFxcIi0tdmVyYm9zZVxcXCIsIDEwKSk7XFxuQEAgLTg5NCw4ICs4OTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRcXHRpZiAodmVyYm9zZSlcXG4gXFx0XFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJUZXN0aW5nIHNoaW5mbyBsb2NrIGNvcnJ1cHRpb24gKEtWTV9YRU5fSFZNX0VWVENITl9TRU5EKVxcXFxuXFxcIik7XFxuIFxcbi1cXHRcXHRcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBcXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XFxuLVxcdFxcdFxcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcXFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9wdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCBcXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XFxuIFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xcbiBcXHRcXHRcXHRcXHRcXHQucG9ydCA9IDEsXFxuQEAgLTk0OSwxMSArOTQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFx0XFx0VEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgZXZlbnQgY2hhbm5lbCBJUlEgYnV0IGl0IGRpZG4ndCBoYXBwZW5cXFwiKTtcXG4gXFxuLVxcdFxcdFxcdFxcdHJldCA9IHB0aHJlYWRfY2FuY2VsKHRocmVhZCk7XFxuLVxcdFxcdFxcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcXFwicHRocmVhZF9jYW5jZWwoKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuLVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCAwKTtcXG4tXFx0XFx0XFx0XFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFxcXCJwdGhyZWFkX2pvaW4oKSBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuIFxcdFxcdFxcdGNhc2UgVEVTVF9HVUVTVF9TQVdfSVJROlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OS4zODA4NzAyMzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjI2NzM5NzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWVjYzVhYzNkZmFjZmI1YTMzZmY3NWYxZGY0YTlmOTU2MmRiZDI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDc6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggZjhiMDI1OTc4OTdiZC4uMDMxNjBhZDY2NmY1OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmNcbkBAIC0xNDEsMzMgKzE0MSwyNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3J1bihzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4gXHRwdGhyZWFkX3QgcHRfdmNwdV9taWdyYXRpb247XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdGludCByZXQ7XG4gXG4gXHRwdGhyZWFkX211dGV4X2luaXQoXHUwMDI2dmNwdV9kb25lX21hcF9sb2NrLCBOVUxMKTtcbiBcdHZjcHVfZG9uZV9tYXAgPSBiaXRtYXBfemFsbG9jKHRlc3RfYXJncy5ucl92Y3B1cyk7XG4gXHRURVNUX0FTU0VSVCh2Y3B1X2RvbmVfbWFwLCBcIkZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1IGRvbmUgYml0bWFwXCIpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9ydW5baV0sIE5VTEwsIHRlc3RfdmNwdV9ydW4sXG4tXHRcdFx0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaSk7XG4tXHRcdFRFU1RfQVNTRVJUKCFyZXQsIFwiRmFpbGVkIHRvIGNyZWF0ZSB2Q1BVLSVkIHB0aHJlYWRcIiwgaSk7XG4tXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAodW5zaWduZWQgbG9uZyl0ZXN0X2FyZ3MubnJfdmNwdXM7IGkrKylcbitcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnB0X3ZjcHVfcnVuW2ldLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLFxuK1x0XHRcdFx0ICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpKTtcbiBcbiBcdC8qIFNwYXduIGEgdGhyZWFkIHRvIGNvbnRyb2wgdGhlIHZDUFUgbWlncmF0aW9ucyAqL1xuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcykge1xuIFx0XHRzcmFuZCh0aW1lKE5VTEwpKTtcbiBcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsXG4tXHRcdFx0XHRcdHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuLVx0XHRURVNUX0FTU0VSVCghcmV0LCBcIkZhaWxlZCB0byBjcmVhdGUgdGhlIG1pZ3JhdGlvbiBwdGhyZWFkXCIpO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cHRfdmNwdV9taWdyYXRpb24sIE5VTEwsIHRlc3RfdmNwdV9taWdyYXRpb24sIE5VTEwpO1xuIFx0fVxuIFxuLVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdF9hcmdzLm5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbihwdF92Y3B1X3J1bltpXSwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4ocHRfdmNwdV9ydW5baV0sIE5VTEwpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy5taWdyYXRpb25fZnJlcV9tcylcbi1cdFx0cHRocmVhZF9qb2luKHB0X3ZjcHVfbWlncmF0aW9uLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihwdF92Y3B1X21pZ3JhdGlvbiwgTlVMTCk7XG4gXG4gXHRiaXRtYXBfZnJlZSh2Y3B1X2RvbmVfbWFwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuaW5kZXggNWUyMzE5OTg2MTdlNy4uM2NiODU5MzJlZTg1YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2lycS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pcnEuY1xuQEAgLTk4OCw3ICs5ODgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZnaWNfdHdvX2NwdXModm9pZCAqZ2NvZGUpXG4gXHRzdHJ1Y3QgdGVzdF9hcmdzIGFyZ3MgPSB7fTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0Z3ZhX3QgYXJnc19ndmE7XG4tXHRpbnQgZ2ljX2ZkLCByZXQ7XG4rXHRpbnQgZ2ljX2ZkO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cygyLCBnY29kZSwgdmNwdXMpO1xuIFxuQEAgLTEwMDQsMTUgKzEwMDQsMTEgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3R3b19jcHVzKHZvaWQgKmdjb2RlKVxuIFxuIFx0Z2ljX2ZkID0gdmdpY192M19zZXR1cCh2bSwgMiwgNjQpO1xuIFxuLVx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzBdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1swXSk7XG4tXHRpZiAocmV0KVxuLVx0XHRURVNUX0ZBSUwoXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDAgKCVkKVxcblwiLCByZXQpO1xuLVx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyWzFdLCBOVUxMLCB0ZXN0X3ZjcHVfcnVuLCB2Y3B1c1sxXSk7XG4tXHRpZiAocmV0KVxuLVx0XHRURVNUX0ZBSUwoXCJDYW4ndCBjcmVhdGUgdGhyZWFkIGZvciB2Y3B1IDEgKCVkKVxcblwiLCByZXQpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclswXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMF0pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRoclsxXSwgTlVMTCwgdGVzdF92Y3B1X3J1biwgdmNwdXNbMV0pO1xuIFxuLVx0cHRocmVhZF9qb2luKHRoclswXSwgTlVMTCk7XG4tXHRwdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzBdLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odGhyWzFdLCBOVUxMKTtcbiBcbiBcdGNsb3NlKGdpY19mZCk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCBkNjRkNDM0ZDNmMDZlLi45YTY5YzQzOWEwZjhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0zMTEsMjMgKzMxMSwyMyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuIFx0cHRocmVhZF9iYXJyaWVyX2luaXQoXHUwMDI2dGVzdF9zZXR1cF9iYXJyaWVyLCBOVUxMLCBucl92Y3B1cyArIG5yX2RldmljZXMgKyAxKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXJfdGhyZWFkLCB2Y3B1c1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyX3RocmVhZCwgdmNwdXNbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSsrKVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZscGlfdGhyZWFkc1tpXSwgTlVMTCwgbHBpX3dvcmtlcl90aHJlYWQsICh2b2lkICopaSk7XG4gXG4gXHRwdGhyZWFkX2JhcnJpZXJfd2FpdChcdTAwMjZ0ZXN0X3NldHVwX2JhcnJpZXIpO1xuIFxuIFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2RldmljZXM7IGkrKylcbi1cdFx0cHRocmVhZF9qb2luKGxwaV90aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihscGlfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRkZWx0YSA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpO1xuIFx0d3JpdGVfZ3Vlc3RfZ2xvYmFsKHZtLCB0ZXN0X2RhdGEucmVxdWVzdF92Y3B1c19zdG9wLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXBvcnRfc3RhdHMoZGVsdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCBlODQxOWQ3ZGExZWFiLi5hZjVlYjAzMzRhNzRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5AQCAtNjkxLDcgKzY5MSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRURVNUX0FTU0VSVF9FUSh2Y3B1X3N0b3AsIGZhbHNlKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgdmNwdSk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCB2Y3B1KTtcbiBcbiBcdGZvciAoaXRlcmF0aW9uID0gMTsgaXRlcmF0aW9uIFx1MDAzYz0gcC1cdTAwM2VpdGVyYXRpb25zOyBpdGVyYXRpb24rKykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGksIHJlYXBfaTtcbkBAIC04MDUsNyArODA1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdFdSSVRFX09OQ0UoaG9zdF9xdWl0LCB0cnVlKTtcbiBcdHNlbV9wb3N0KFx1MDAyNnNlbV92Y3B1X2NvbnQpO1xuIFxuLVx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0cHJfaW5mbyhcIlRvdGFsIGJpdHMgY2hlY2tlZDogZGlydHkgKCVsdSksIGNsZWFyICglbHUpXFxuXCIsXG4gXHRcdGhvc3RfZGlydHlfY291bnQsIGhvc3RfY2xlYXJfY291bnQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuaW5kZXggMzE0N2Y1Yzk3ZTk0My4uNGFiYWQ3MTU4OTg5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2hhcmR3YXJlX2Rpc2FibGVfdGVzdC5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKiByZXR1cm4gbm90aWZpZXJzLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzZW1hcGhvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbkBAIC0xNCwyMCArMTMsMjMgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwia3ZtX3N5c2NhbGxzLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ1Y2FsbF9jb21tb24uaFwiXG4gXG4tI2RlZmluZSBWQ1BVX05VTSA0XG4tI2RlZmluZSBTTEVFUElOR19USFJFQURfTlVNICgxIFx1MDAzY1x1MDAzYyA0KVxuLSNkZWZpbmUgRk9SS19OVU0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpXG4tI2RlZmluZSBERUxBWV9VU19NQVggMjAwMFxuKyNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuKyNkZWZpbmUgTlJfU0xFRVBFUlNfUEVSX1ZDUFVcdDE2XG4rI2RlZmluZSBOUl9JVEVSQVRJT05TXHRcdDUxMlxuKyNkZWZpbmUgREVMQVlfVVNfTUFYXHRcdDIwMDBcbiBcbiBzZW1fdCAqc2VtO1xuK3N0YXRpYyBjcHVfc2V0X3QgY2hpbGRfY3B1X3NldDtcbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4ge1xuIFx0Zm9yICg7OylcbiBcdFx0OyAgLyogU29tZSBidXN5IHdvcmsgKi9cbi1cdHByaW50ZihcIlNob3VsZCBub3QgYmUgcmVhY2hlZC5cXG5cIik7XG4rXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXG5AQCAtMzcsODQgKzM5LDQ3IEBAIHN0YXRpYyB2b2lkICpydW5fdmNwdSh2b2lkICphcmcpXG4gXG4gXHR2Y3B1X3J1bih2Y3B1KTtcbiBcbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcIiVzOiBleGl0ZWQgd2l0aCByZWFzb24gJWQ6ICVzXCIsXG4tXHRcdCAgICBfX2Z1bmNfXywgcnVuLVx1MDAzZWV4aXRfcmVhc29uLFxuLVx0XHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuLVx0cHRocmVhZF9leGl0KE5VTEwpO1xuK1x0VEVTVF9GQUlMKFwidkNQVSVkIGV4aXRlZCB3aXRoIHJlYXNvbiAlZDogJXNcIixcbitcdFx0ICB2Y3B1LVx1MDAzZWlkLCBydW4tXHUwMDNlZXhpdF9yZWFzb24sIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKnNsZWVwaW5nX3RocmVhZCh2b2lkICphcmcpXG4ge1xuIFx0aW50IGZkO1xuIFxuLVx0d2hpbGUgKHRydWUpIHtcbitcdHdoaWxlICgxKSB7XG4gXHRcdGZkID0gb3BlbihcIi9kZXYvbnVsbFwiLCBPX1JEV1IpO1xuIFx0XHRjbG9zZShmZCk7XG4gXHR9XG4tXHRURVNUX0FTU0VSVChmYWxzZSwgXCIlczogZXhpdGVkXCIsIF9fZnVuY19fKTtcbi1cdHB0aHJlYWRfZXhpdChOVUxMKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NyZWF0ZV90aHJlYWQocHRocmVhZF90ICp0aHJlYWQsIHB0aHJlYWRfYXR0cl90ICphdHRyLFxuLVx0XHRcdFx0ICAgICAgIHZvaWQgKigqZikodm9pZCAqKSwgdm9pZCAqYXJnKVxuLXtcbi1cdGludCByO1xuLVxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgZiwgYXJnKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCwgXCIlczogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWRcIiwgX19mdW5jX18pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfc2V0X2FmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsIGNwdV9zZXRfdCAqY3B1X3NldClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdV9zZXQpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcIiVzOiBmYWlsZWQgc2V0IGFmZmluaXR5XCIsIF9fZnVuY19fKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2pvaW4ocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnJldHZhbClcbi17XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCByZXR2YWwpO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcIiVzOiBmYWlsZWQgdG8gam9pbiB0aHJlYWRcIiwgX19mdW5jX18pO1xuK1x0VEVTVF9GQUlMKFwiJXM6IGV4aXRlZFwiLCBfX2Z1bmNfXyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KHUzMiBydW4pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRjcHVfc2V0X3QgY3B1X3NldDtcbi1cdHB0aHJlYWRfdCB0aHJlYWRzW1ZDUFVfTlVNXTtcbi1cdHB0aHJlYWRfdCB0aHJvd19hd2F5O1xuLVx0dm9pZCAqYjtcbitcdHB0aHJlYWRfdCB0aHJlYWQ7XG4gXHR1MzIgaSwgajtcbiBcbi1cdENQVV9aRVJPKFx1MDAyNmNwdV9zZXQpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVkNQVV9OVU07IGkrKylcbi1cdFx0Q1BVX1NFVChpLCBcdTAwMjZjcHVfc2V0KTtcbi1cbi1cdHZtID0gdm1fY3JlYXRlKFZDUFVfTlVNKTtcbitcdHZtID0gdm1fY3JlYXRlKE5SX1ZDUFVTKTtcbiBcbiBcdHByX2RlYnVnKFwiJXM6IFslZF0gc3RhcnQgdmNwdXNcXG5cIiwgX19mdW5jX18sIHJ1bik7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBWQ1BVX05VTTsgKytpKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgKytpKSB7XG4gXHRcdHZjcHUgPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHRcdGNoZWNrX2NyZWF0ZV90aHJlYWQoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgcnVuX3ZjcHUsIHZjcHUpO1xuLVx0XHRjaGVja19zZXRfYWZmaW5pdHkodGhyZWFkc1tpXSwgXHUwMDI2Y3B1X3NldCk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJ1bl92Y3B1LCB2Y3B1KTtcbitcdFx0a3ZtX3B0aHJlYWRfc2V0YWZmaW5pdHkodGhyZWFkLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgU0xFRVBJTkdfVEhSRUFEX05VTTsgKytqKSB7XG4tXHRcdFx0Y2hlY2tfY3JlYXRlX3RocmVhZChcdTAwMjZ0aHJvd19hd2F5LCBOVUxMLCBzbGVlcGluZ190aHJlYWQsXG4tXHRcdFx0XHRcdCAgICAodm9pZCAqKU5VTEwpO1xuLVx0XHRcdGNoZWNrX3NldF9hZmZpbml0eSh0aHJvd19hd2F5LCBcdTAwMjZjcHVfc2V0KTtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlJfU0xFRVBFUlNfUEVSX1ZDUFU7ICsraikge1xuK1x0XHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHNsZWVwaW5nX3RocmVhZCwgKHZvaWQgKilOVUxMKTtcbitcdFx0XHRrdm1fcHRocmVhZF9zZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRwcl9kZWJ1ZyhcIiVzOiBbJWRdIGFsbCB0aHJlYWRzIGxhdW5jaGVkXFxuXCIsIF9fZnVuY19fLCBydW4pO1xuIFx0c2VtX3Bvc3Qoc2VtKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZDUFVfTlVNOyArK2kpXG4tXHRcdGNoZWNrX2pvaW4odGhyZWFkc1tpXSwgXHUwMDI2Yik7XG4tXHQvKiBTaG91bGQgbm90IGJlIHJlYWNoZWQgKi9cbi1cdFRFU1RfQVNTRVJUKGZhbHNlLCBcIiVzOiBbJWRdIGNoaWxkIGVzY2FwZWQgdGhlIG5pbmphXCIsIF9fZnVuY19fLCBydW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIHBhcmVudCB0byBTSUdLSUxMIHRoaXMgY2hpbGQuICovXG4rXHR3aGlsZSAoMSk7XG4gfVxuIFxuIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuQEAgLTE0NywxNiArMTEyLDM0IEBAIHZvaWQgd2FpdF9mb3JfY2hpbGRfc2V0dXAocGlkX3QgcGlkKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBzZXR1cF9jaGlsZF9jcHVfc2V0KHZvaWQpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY2hpbGRfY3B1X3NldCksIFx1MDAyNmNoaWxkX2NwdV9zZXQpO1xuK1xuK1x0aWYgKENQVV9DT1VOVChcdTAwMjZjaGlsZF9jcHVfc2V0KSBcdTAwM2MgMilcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3B1ID0gcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3NlbGYoKSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4rXHRDUFVfQ0xSKGNwdSwgXHUwMDI2Y2hpbGRfY3B1X3NldCk7XG4rXG4rXHR3aGlsZSAoQ1BVX0NPVU5UKFx1MDAyNmNoaWxkX2NwdV9zZXQpIFx1MDAzZSBOUl9WQ1BVUylcbitcdFx0Q1BVX0NMUihrdm1fcGlja19yYW5kb21fY3B1KFx1MDAyNmNoaWxkX2NwdV9zZXQpLCBcdTAwMjZjaGlsZF9jcHVfc2V0KTtcbit9XG4rXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHUzMiBpO1xuIFx0aW50IHMsIHI7XG4gXHRwaWRfdCBwaWQ7XG4gXG4rXHRzZXR1cF9jaGlsZF9jcHVfc2V0KCk7XG4rXG4gXHRzZW0gPSBzZW1fb3BlbihcInZtX3NlbVwiLCBPX0NSRUFUIHwgT19FWENMLCAwNjQ0LCAwKTtcbiBcdHNlbV91bmxpbmsoXCJ2bV9zZW1cIik7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGT1JLX05VTTsgKytpKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9JVEVSQVRJT05TOyArK2kpIHtcbiBcdFx0cGlkID0gZm9yaygpO1xuIFx0XHRURVNUX0FTU0VSVChwaWQgXHUwMDNlPSAwLCBcIiVzOiB1bmFibGUgdG8gZm9ya1wiLCBfX2Z1bmNfXyk7XG4gXHRcdGlmIChwaWQgPT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA1ZGFlNjE0M2RkYjA0Li4zZDgyMzUxYmVmOTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfdXRpbC5oXHUwMDNlXG4gXG5AQCAtOTYsNiArOTcsNTIgQEAgX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtYWR2aXNlLCAzLCB2b2lkICosIGFkZHIsIHNpemVfdCwgbGVuZ3RoLCBpbnQsIGFkdmljZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfZ2V0YWZmaW5pdHlfbnAsIDMsIHB0aHJlYWRfdCwgdGhyZWFkLFxuK1x0XHQgICAgIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIGNwdXNldCk7XG4rX19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9zZXRhZmZpbml0eV9ucCwgMywgcHRocmVhZF90LCB0aHJlYWQsXG4rXHRcdCAgICAgc2l6ZV90LCBjcHVzZXRzaXplLCBjb25zdCBjcHVfc2V0X3QgKiwgY3B1c2V0KTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHkocHRocmVhZF90IHRocmVhZCwgY3B1X3NldF90ICpjcHVzZXQpXG4re1xuK1x0a3ZtX3B0aHJlYWRfZ2V0YWZmaW5pdHlfbnAodGhyZWFkLCBzaXplb2YoY3B1X3NldF90KSwgY3B1c2V0KTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wdGhyZWFkX3NldGFmZmluaXR5KHB0aHJlYWRfdCB0aHJlYWQsXG4rXHRcdFx0XHRcdCAgIGNvbnN0IGNwdV9zZXRfdCAqY3B1c2V0KVxuK3tcbitcdGt2bV9wdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdV9zZXRfdCksIGNwdXNldCk7XG4rfVxuK1xuK3R5cGVkZWYgdm9pZCAqKCpwdGhyZWFkX2ZuX3QpKHZvaWQgKik7XG4rX19LVk1fU1lTQ0FMTF9ERUZJTkUocHRocmVhZF9jcmVhdGUsIDQsIHB0aHJlYWRfdCAqLCB0aHJlYWQsXG4rXHRcdCAgICAgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgYXR0ciwgcHRocmVhZF9mbl90LCBmbiwgdm9pZCAqLCBhcmcpO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfam9pbiwgMiwgcHRocmVhZF90LCB0aHJlYWQsIHZvaWQgKiosIHRocmVhZF9yZXR1cm4pO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHB0aHJlYWRfY2FuY2VsLCAxLCBwdGhyZWFkX3QsIHRocmVhZCk7XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQocHRocmVhZF90IHRocmVhZCwgdm9pZCAqKnIpXG4re1xuK1x0a3ZtX3B0aHJlYWRfY2FuY2VsKHRocmVhZCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgcik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZChwdGhyZWFkX3QgdGhyZWFkKVxuK3tcbitcdF9fa3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkLCBOVUxMKTtcbit9XG4rXG4rLypcbisgKiBDYW5jZWwrSm9pbiBhIHB0aHJlYWQgdGhhdCB3YXMgY29uZmlndXJlZCB3aXRoIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VU1xuKyAqIGFuZCBpcyBleHBlY3RlZCB0byBleGl0IG9ubHkgaW4gcmVzcG9uc2UgdG8gY2FuY2VsbGF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyhwdGhyZWFkX3QgdGhyZWFkKVxuK3tcbitcdHZvaWQgKnI7XG4rXG4rXHRfX2t2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCwgXHUwMDI2cik7XG4rXHRURVNUX0FTU0VSVChyID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4rXHRcdCAgICBcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCIsIFBUSFJFQURfQ0FOQ0VMRUQsIHIpO1xuK31cbitcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFxcXG4gXHRrdm1fY2xvc2UoZmQpO1x0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5pbmRleCBiMzllNzEzYzMwYTQ2Li41YTdhNDU1YjUzODc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuQEAgLTEwODQsNiArMTA4NCw4IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4gXG4gdm9pZCBrdm1fc2V0X2ZpbGVzX3JsaW1pdCh1MzIgbnJfdmNwdXMpO1xuIFxuK2ludCBrdm1fcGlja19yYW5kb21fY3B1KGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XG4rXG4gaW50IF9fcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuQEAgLTEwOTQsNyArMTA5NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXCIsIGNwdSk7XG4gfVxuIFxuLXZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbitzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGNwdSA9IGt2bV9waWNrX3JhbmRvbV9jcHUocG9zc2libGVfY3B1cyk7XG4rXHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbitcdHJldHVybiBjcHU7XG4rfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHBpbl90YXNrX3RvX2FueV9jcHUocHRocmVhZF90IHRhc2spXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcbmluZGV4IDI0MGY2ZjBmZGJlNDMuLjE2OGM1MjczNGZlZjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcbkBAIC0yOTYsNyArMjk2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKylcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcbiBcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07XG5AQCAtMzU2LDcgKzM1Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFmZF90ZXN0LmNcbmluZGV4IDVkNzU5MGQwMTg2ODEuLmViYjI0Nzg4NzhkZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jXG5AQCAtMTI4LDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRjbG9zZShfX2V2ZW50ZmQpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2cmFjaW5nX3RocmVhZCwgTlVMTCwgc2Vjb25kYXJ5X2lycWZkX2p1Z2dsZXIsIHZtMik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSsrKSB7XG4gXHRcdFdSSVRFX09OQ0UoX19ldmVudGZkLCBrdm1fbmV3X2V2ZW50ZmQoKSk7XG5AQCAtMTM5LDUgKzEzOSw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR9XG4gXG4gXHRXUklURV9PTkNFKGRvbmUsIHRydWUpO1xuLVx0cHRocmVhZF9qb2luKHJhY2luZ190aHJlYWQsIE5VTEwpO1xuK1x0a3ZtX3B0aHJlYWRfam9pbihyYWNpbmdfdGhyZWFkLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2t2bV9wYWdlX3RhYmxlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9rdm1fcGFnZV90YWJsZV90ZXN0LmNcbmluZGV4IGE5MTBlM2FiYjhjNzEuLjk3NDgxM2VhODk1MzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jXG5AQCAtMzY0LDggKzM2NCw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHQqY3VycmVudF9zdGFnZSA9IEtWTV9CRUZPUkVfTUFQUElOR1M7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfd29ya2VyLFxuLVx0XHRcdCAgICAgICB0ZXN0X2FyZ3MudmNwdXNbaV0pO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3dvcmtlcixcbitcdFx0XHRcdCAgIHRlc3RfYXJncy52Y3B1c1tpXSk7XG4gXG4gXHR2Y3B1c19jb21wbGV0ZV9uZXdfc3RhZ2UoKmN1cnJlbnRfc3RhZ2UpO1xuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgYWxsIHZDUFVzIHN1Y2Nlc3NmdWxseVxcblwiKTtcbkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkc1tpXSwgTlVMTCk7XG4gXG4gXHRyZXQgPSBzZW1fZGVzdHJveShcdTAwMjZ0ZXN0X3N0YWdlX3VwZGF0ZWQpO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwiRXJyb3IgaW4gc2VtX2Rlc3Ryb3lcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCAzNzk0NTc1ZDJjYTBjLi45ZGRjMDQ3ZDVjMjc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcbiBcdCAgICAgICBcIiAgICAgKGRlZmF1bHQ6IG5vIHBpbm5pbmcpXFxuXCIsIG5hbWUsIG5hbWUpO1xuIH1cbiBcbi12b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbitpbnQga3ZtX3BpY2tfcmFuZG9tX2NwdShjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4ge1xuIFx0aW50IHRhcmdldF9pZHg7XG4gXHRpbnQgbnJfY3B1cztcbkBAIC02ODAsMTMgKzY4MCwxMSBAQCB2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiBcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4gXG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgQ1BVX1NFVFNJWkU7IGNwdSsrKSB7XG4tXHRcdGlmIChDUFVfSVNTRVQoY3B1LCBwb3NzaWJsZV9jcHVzKSBcdTAwMjZcdTAwMjYgdGFyZ2V0X2lkeC0tID09IDApIHtcbi1cdFx0XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMClcbitcdFx0XHRyZXR1cm4gY3B1O1xuIFx0fVxuLVxuIFx0VEVTVF9GQUlMKFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbmluZGV4IDM1OTliNzVkOTdjOTEuLjI4NjQ1NjJmNTdiNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5AQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgbWVtc3RyZXNzX3N0YXJ0X3ZjcHVfdGhyZWFkcyhpbnQgbnJfdmNwdXMsXG4gXHRcdHZjcHUtXHUwMDNldmNwdV9pZHggPSBpO1xuIFx0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlcnVubmluZywgZmFsc2UpO1xuIFxuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2Y3B1LVx1MDAzZXRocmVhZCwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG5AQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgbWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKGludCBucl92Y3B1cylcbiBcdFdSSVRFX09OQ0UobWVtc3RyZXNzX2FyZ3Muc3RvcF92Y3B1cywgdHJ1ZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuLVx0XHRwdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWRzW2ldLnRocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRvZ2dsZV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgc2xvdHMsIGJvb2wgZW5hYmxlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbmluZGV4IGVmOGQ3NmY3MWY4MzcuLmY3Y2U1YTZkZGNjMjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3VzZXJmYXVsdGZkX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi91c2VyZmF1bHRmZF91dGlsLmNcbkBAIC0xNjcsOCArMTY3LDggQEAgc3RydWN0IHVmZmRfZGVzYyAqdWZmZF9zZXR1cF9kZW1hbmRfcGFnaW5nKGludCB1ZmZkX21vZGUsIHVzZWNvbmRzX3QgZGVsYXksXG4gXHRcdHVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXS5oYW5kbGVyID0gaGFuZGxlcjtcbiBcdFx0dWZmZF9kZXNjLVx1MDAzZXJlYWRlcl9hcmdzW2ldLnBpcGUgPSBwaXBlc1swXTtcbiBcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dWZmZF9kZXNjLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwsIHVmZmRfaGFuZGxlcl90aHJlYWRfZm4sXG4tXHRcdFx0ICAgICAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX2Rlc2MtXHUwMDNlcmVhZGVyc1tpXSwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZF9mbixcbitcdFx0XHRcdCAgIFx1MDAyNnVmZmRfZGVzYy1cdTAwM2VyZWFkZXJfYXJnc1tpXSk7XG4gXG4gXHRcdFBFUl9WQ1BVX0RFQlVHKFwiQ3JlYXRlZCB1ZmZkIHRocmVhZCAlaSBmb3IgSFZBIHJhbmdlIFslcCwgJXApXFxuXCIsXG4gXHRcdFx0ICAgICAgIGksIGh2YSwgaHZhICsgbGVuKTtcbkBAIC0xODcsOCArMTg3LDcgQEAgdm9pZCB1ZmZkX3N0b3BfZGVtYW5kX3BhZ2luZyhzdHJ1Y3QgdWZmZF9kZXNjICp1ZmZkKVxuIFx0XHRcdCAgICBcIlVuYWJsZSB0byB3cml0ZSB0byBwaXBlZmQgJWkgZm9yIHVmZmRfZGVzYyAlcFwiLCBpLCB1ZmZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVmZmQtXHUwMDNlbnVtX3JlYWRlcnM7ICsraSlcbi1cdFx0VEVTVF9BU1NFUlQoIXB0aHJlYWRfam9pbih1ZmZkLVx1MDAzZXJlYWRlcnNbaV0sIE5VTEwpLFxuLVx0XHRcdCAgICBcIlB0aHJlYWRfam9pbiBmYWlsZWQgb24gcmVhZGVyICVpIGZvciB1ZmZkX2Rlc2MgJXBcIiwgaSwgdWZmZCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odWZmZC1cdTAwM2VyZWFkZXJzW2ldLCBOVUxMKTtcbiBcbiBcdGNsb3NlKHVmZmQtXHUwMDNldWZmZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuaW5kZXggNGQ5YWQ2MTA0YTZlZC4uZTEyOTk2MTFiZTMyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgdm9pZCBsYXVuY2hfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4ge1xuIFx0cHJfaW5mb192KFwiTGF1bmNoaW5nIHRoZSB0ZXN0IFZNXFxuXCIpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2ZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCwgdmNwdV93b3JrZXIsIGRhdGEpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNmRhdGEtXHUwMDNldmNwdV90aHJlYWQsIE5VTEwsIHZjcHVfd29ya2VyLCBkYXRhKTtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgZ3Vlc3QgdGhyZWFkIGlzIHNwdW4gdXAuICovXG4gXHR3YWl0X2Zvcl92Y3B1KCk7XG5AQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEpXG4gXG4gc3RhdGljIHZvaWQgd2FpdF9ndWVzdF9leGl0KHN0cnVjdCB2bV9kYXRhICpkYXRhKVxuIHtcbi1cdHB0aHJlYWRfam9pbihkYXRhLVx1MDAzZXZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4oZGF0YS1cdTAwM2V2Y3B1X3RocmVhZCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxldF9ndWVzdF9ydW4oc3RydWN0IHN5bmNfYXJlYSAqc3luYylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDNkNWYzM2E2M2IyYjQuLjc0MWUzNDM5NjJlZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuQEAgLTIyMiw3ICsyMjIsNyBAQCBzdGF0aWMgcHRocmVhZF90ICpzcGF3bl93b3JrZXJzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyxcbiBcdFx0aW5mb1tpXS52Y3B1ID0gdmNwdXNbaV07XG4gXHRcdGluZm9baV0uc3RhcnRfZ3BhID0gZ3BhO1xuIFx0XHRpbmZvW2ldLmVuZF9ncGEgPSBncGEgKyBucl9ieXRlcztcbi1cdFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFx1MDAyNmluZm9baV0pO1xuK1x0XHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1tpXSwgTlVMTCwgdmNwdV93b3JrZXIsIFx1MDAyNmluZm9baV0pO1xuIFx0fVxuIFx0cmV0dXJuIHRocmVhZHM7XG4gfVxuQEAgLTQwOSw3ICs0MDksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHZDUFVzIGFjdHVhbGx5IHJhbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdC8qXG4gXHQgKiBEZWxpYmVyYXRlbHkgZXhpdCB3aXRob3V0IGRlbGV0aW5nIHRoZSByZW1haW5pbmcgbWVtc2xvdHMgb3IgY2xvc2luZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuaW5kZXggYTBmY2FlM2NiN2E4Yi4uYzU3NjMxYWFiM2QzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5AQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LFxuIFx0ICogQ29uY3VycmVudGx5IGRlbGV0ZSAoYW5kIHJlY3JlYXRlKSB0aGUgc2xvdCB0byB0ZXN0IEtWTSdzIGhhbmRsaW5nXG4gXHQgKiBvZiBhIHJhY2luZyBtZW1zbG90IGRlbGV0aW9uIHdpdGggcHJlZmF1bHRpbmcuXG4gXHQgKi9cbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnNsb3Rfd29ya2VyLCBOVUxMLCBkZWxldGVfc2xvdF93b3JrZXIsIFx1MDAyNmRhdGEpO1xuIFxuIFx0d2hpbGUgKCFSRUFEX09OQ0UoZGF0YS53b3JrZXJfcmVhZHkpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcbiBcdFx0ICovXG4gXHRcdGlmICghc2xvdF9yZWNyZWF0ZWQpIHtcbiBcdFx0XHRXUklURV9PTkNFKGRhdGEucmVjcmVhdGVfc2xvdCwgdHJ1ZSk7XG4tXHRcdFx0cHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcbitcdFx0XHRrdm1fcHRocmVhZF9qb2luKHNsb3Rfd29ya2VyLCBOVUxMKTtcbiBcdFx0XHRzbG90X3JlY3JlYXRlZCA9IHRydWU7XG4gXG4gXHRcdFx0LypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbmluZGV4IDU1N2UzOTNjMjIzYjkuLmRmM2U1YWQxYzM5MzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuQEAgLTI0MSw4ICsyNDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0ICovXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxuK1x0XHRcdCAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiBcbiBcdGlmIChsYXRlbmN5IFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuQEAgLTMxNCw3ICszMTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgICAgXCIgIGUuZy4gdmlhIGNwdWlkbGUub2ZmPTEgb3IgdmlhIC1sIFx1MDAzY2xhdGVuY3lcdTAwM2UsIG9yIHJ1biB3aXRoIC11IHRvXFxuXCJcbiBcdFx0ICAgIFwiICBkaXNhYmxlIHRoaXMgc2FuaXR5IGNoZWNrLlwiLCBpKTtcbiBcbi1cdHB0aHJlYWRfam9pbihtaWdyYXRpb25fdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4obWlncmF0aW9uX3RocmVhZCwgTlVMTCk7XG4gXG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL21lbW9wLmNcbmluZGV4IDAyNDQ4NDg2MjFiMzQuLmNlOGRiOTZjY2Y3ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9tZW1vcC5jXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY21weGNoZ19rZXlfY29uY3VycmVudCh2b2lkKVxuIFx0SE9TVF9TWU5DKHQudmNwdSwgU1RBR0VfU0tFWVNfU0VUKTtcbiBcdHByZXBhcmVfbWVtMTIoKTtcbiBcdE1PUCh0LnZjcHUsIExPR0lDQUwsIFdSSVRFLCBtZW0xLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBydW5fZ3Vlc3QsIFx1MDAyNnQudmNwdSk7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY21weGNoZ19pdGVyX291dGVyOyBpKyspIHtcbiBcdFx0ZG8ge1xuQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NtcHhjaGdfa2V5X2NvbmN1cnJlbnQodm9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4gXG4gXHRNT1AodC52Y3B1LCBMT0dJQ0FMLCBSRUFELCBtZW0yLCBtYXhfYmxvY2ssIEdBRERSX1YobWVtMikpO1xuIFx0VEVTVF9BU1NFUlQocG9wY291bnRfZXEoKihfX3VpbnQxMjhfdCAqKW1lbTEsICooX191aW50MTI4X3QgKiltZW0yKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuaW5kZXggYTE1MmFiNjVjNjU3Ny4uZGZmZTk2NTRmNDViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiBcdG1lbXNldChodmEsIDAsIDIgKiA0MDk2KTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKHZjcHVfdGhyZWFkLCBOVUxMLCB2Y3B1X3dvcmtlciwgKnZjcHUpO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBndWVzdCB0aHJlYWQgaXMgc3B1biB1cC4gKi9cbiBcdHdhaXRfZm9yX3ZjcHUoKTtcbkBAIC0yMTYsNyArMjE2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9tb3ZlX21lbW9yeV9yZWdpb24oYm9vbCBkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0LyogRGVmZXJlZCBzeW5jIGZyb20gd2hlbiB0aGUgbWVtc2xvdCB3YXMgbWlzYWxpZ25lZCAoYWJvdmUpLiAqL1xuIFx0d2FpdF9mb3JfdmNwdSgpO1xuIFxuLVx0cHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV9wdGhyZWFkX2pvaW4odmNwdV90aHJlYWQsIE5VTEwpO1xuIFxuIFx0a3ZtX3ZtX2ZyZWUodm0pO1xuIH1cbkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9kZWxldGVfbWVtb3J5X3JlZ2lvbihib29sIGRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHQgKi9cbiBcdHZtX21lbV9yZWdpb25fZGVsZXRlKHZtLCAwKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZCwgTlVMTCk7XG4rXHRrdm1fcHRocmVhZF9qb2luKHZjcHVfdGhyZWFkLCBOVUxMKTtcbiBcbiBcdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5pbmRleCAwYjg4Yzc0M2VlN2Q1Li5iYzNjNjJiNzJjNThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuQEAgLTU0OCwxNSArNTQ4LDE1IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTdGVhbCB0aW1lIGZyb20gdGhlIFZDUFUuIFRoZSBzdGVhbCB0aW1lIHRocmVhZCBoYXMgdGhlIHNhbWUgQ1BVIGFmZmluaXR5IGFzIHRoZSBWQ1BVcy4gKi9cbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xuLVx0XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuLVx0XHRwdGhyZWFkX2dldGFmZmluaXR5X25wKHRocmVhZCwgc2l6ZW9mKGNwdXNldCksIFx1MDAyNmNwdXNldCk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIGRvX3N0ZWFsX3RpbWUsIE5VTEwpO1xuK1x0XHRrdm1fcHRocmVhZF9nZXRhZmZpbml0eSh0aHJlYWQsIFx1MDAyNmNwdXNldCk7XG4gXHRcdFRFU1RfQVNTRVJUKENQVV9DT1VOVChcdTAwMjZjcHVzZXQpID09IDEgXHUwMDI2XHUwMDI2IENQVV9JU1NFVChjcHUsIFx1MDAyNmNwdXNldCksXG4gXHRcdFx0ICAgIFwiV29ya2VyIGZhaWxlZCB0byBpbmhlcml0IHBhcmVudCdzIENQVSBhZmZpbml0eVwiKTtcbiBcbiBcdFx0ZG9cbiBcdFx0XHRzY2hlZF95aWVsZCgpO1xuIFx0XHR3aGlsZSAoZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5IFx1MDAzYyBNSU5fUlVOX0RFTEFZX05TKTtcbi1cdFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiBcdFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpIC0gcnVuX2RlbGF5O1xuIFx0XHRURVNUX0FTU0VSVChydW5fZGVsYXkgXHUwMDNlPSBNSU5fUlVOX0RFTEFZX05TLFxuIFx0XHRcdCAgICBcIkV4cGVjdGVkIHJ1bl9kZWxheSBcdTAwM2U9ICVsZCwgZ290ICVsZFwiLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2lwaS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcbmluZGV4IDc3MTUzNWY5YWFkM2MuLmZlMzhjYzRjYmEwNTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9pcGkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNcbkBAIC0yMjIsMzAgKzIyMiwxMyBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCIsXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwiLCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdVszXTtcbiBcdGd2YV90IGhjYWxsX3BhZ2U7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syXTtcbi1cdGludCBzdGFnZSA9IDEsIHI7XG4rXHRpbnQgc3RhZ2UgPSAxO1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1NFTkRfSVBJKSk7XG5AQCAtMjcyLDExICsyNTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1WzBdLCAyLCBoY2FsbF9wYWdlLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHVbMF0pO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfY3JlYXRlIGZhaWxlZCBlcnJubz0lZFwiLCByKTtcbi1cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4tXHRURVNUX0FTU0VSVCghciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQgZXJybm89JWRcIiwgZXJybm8pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzFdKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB2Y3B1X3RocmVhZCwgdmNwdVsyXSk7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR2Y3B1X3J1bih2Y3B1WzBdKTtcbkBAIC0zMDIsOSArMjgyLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdH1cbiBcbiBkb25lOlxuLVx0Y2FuY2VsX2pvaW5fdmNwdV90aHJlYWQodGhyZWFkc1swXSwgdmNwdVsxXSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCB2Y3B1WzJdKTtcbitcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMF0pO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1sxXSk7XG4gXHRrdm1fdm1fZnJlZSh2bSk7XG4gXG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl90bGJfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5pbmRleCBiNGJlOWExNzUzNzlmLi44NGYyMmYzOWM4ZjIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfdGxiX2ZsdXNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jXG5AQCAtNTQ4LDIzICs1NDgsNiBAQCBzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWQodm9pZCAqYXJnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHB0aHJlYWRfdCB0aHJlYWQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHR2b2lkICpyZXR2YWw7XG4tXHRpbnQgcjtcbi1cbi1cdHIgPSBwdGhyZWFkX2NhbmNlbCh0aHJlYWQpO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInB0aHJlYWRfam9pbiBvbiB2Y3B1X2lkPSVkIGZhaWxlZCB3aXRoIGVycm5vPSVkXCIsXG4tXHRcdCAgICB2Y3B1LVx1MDAzZWlkLCByKTtcbi1cdFRFU1RfQVNTRVJUKHJldHZhbCA9PSBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgXCJleHBlY3RlZCByZXR2YWw9JXAsIGdvdCAlcFwiLCBQVEhSRUFEX0NBTkNFTEVELFxuLVx0XHQgICAgcmV0dmFsKTtcbi19XG4tXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbkBAIC01NzUsNyArNTU4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdHU2NCAqcHRlO1xuIFx0c3RydWN0IHRlc3RfZGF0YSAqZGF0YTtcbiBcdHN0cnVjdCB1Y2FsbCB1Yztcbi1cdGludCBzdGFnZSA9IDEsIHIsIGk7XG4rXHRpbnQgc3RhZ2UgPSAxLCBpO1xuIFxuIFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfSFlQRVJWX1RMQkZMVVNIKSk7XG4gXG5AQCAtNjMyLDExICs2MTUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9zZXRfbXNyKHZjcHVbMl0sIEhWX1g2NF9NU1JfVlBfSU5ERVgsIFdPUktFUl9WQ1BVX0lEXzIpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdVsyXSk7XG4gXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWRcIik7XG4tXG4tXHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMl0pO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWRcIik7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIHZjcHVbMV0pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCB2Y3B1WzJdKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHZjcHVfcnVuKHZjcHVbMF0pO1xuQEAgLTY2MSw4ICs2NDEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0fVxuIFxuIGRvbmU6XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCB2Y3B1WzFdKTtcbi1cdGNhbmNlbF9qb2luX3ZjcHVfdGhyZWFkKHRocmVhZHNbMV0sIHZjcHVbMl0pO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWRfYXN5bmModGhyZWFkc1swXSk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzFdKTtcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbmluZGV4IDFkMmY1ZDRmZDQ1ZDcuLjNhYTA2NzNmNzlmMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmNcbkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdlxuIFx0XHQgKi9cbiBcdFx0dmlydF9tYXAodm0sIGdwYSwgZ3BhLCBQRVJfQ1BVX0RBVEFfU0laRSAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbitcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIF9fdGVzdF9tZW1fY29udmVyc2lvbnMsIHZjcHVzW2ldKTtcbiBcdH1cbiBcbiBcdFdSSVRFX09OQ0UocnVuX3ZjcHVzLCB0cnVlKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4tXHRcdHB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbmluZGV4IDEwZGI5ZmU2ZDkwNjMuLmU2ZDE2ZTlkNjEyMDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuY1xuQEAgLTY1LDEzICs2NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKVxuIFx0LyogUmVxdWVzdCB0byBhY2Nlc3MgcGFnZSBwcml2YXRlbHkgKi9cbiBcdHZtX21lbV9zZXRfcHJpdmF0ZSh2bSwgRVhJVFNfVEVTVF9HUEEsIEVYSVRTX1RFU1RfU0laRSk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXG4tXHRcdCAgICAgICAodm9pZCAqKCopKHZvaWQgKikpcnVuX3ZjcHVfZ2V0X2V4aXRfcmVhc29uLFxuLVx0XHQgICAgICAgKHZvaWQgKil2Y3B1KTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ2bV90aHJlYWQsIE5VTEwsXG4rXHRcdFx0ICAgKHB0aHJlYWRfZm5fdClydW5fdmNwdV9nZXRfZXhpdF9yZWFzb24sICh2b2lkICopdmNwdSk7XG4gXG4gXHR2bV9tZW1fcmVnaW9uX2RlbGV0ZSh2bSwgRVhJVFNfVEVTVF9TTE9UKTtcbiBcbi1cdHB0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuK1x0a3ZtX3B0aHJlYWRfam9pbih2bV90aHJlYWQsIFx1MDAyNnRocmVhZF9yZXR1cm4pO1xuIFx0ZXhpdF9yZWFzb24gPSAodTMyKSh1NjQpdGhyZWFkX3JldHVybjtcbiBcbiBcdFRFU1RfQVNTRVJUX0VRKGV4aXRfcmVhc29uLCBLVk1fRVhJVF9NRU1PUllfRkFVTFQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuaW5kZXggY2JjOTJhODYyZWE5Yy4uN2EwYmQ5ZjdiYTZjOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcmVjYWxjX2FwaWNfbWFwX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9yZWNhbGNfYXBpY19tYXBfdGVzdC5jXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX01BWF9WQ1BVUzsgaSsrKVxuIFx0XHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX0FQSUNCQVNFLCBMQVBJQ19YMkFQSUMpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlLCB2Y3B1c1swXSksIDApO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZSwgdmNwdXNbMF0pO1xuIFxuIFx0dmNwdU4gPSB2Y3B1c1tLVk1fTUFYX1ZDUFVTIC0gMV07XG4gXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbkBAIC02NSw4ICs2NSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRcdHZjcHVfc2V0X21zcih2Y3B1TiwgTVNSX0lBMzJfQVBJQ0JBU0UsIExBUElDX0RJU0FCTEVEKTtcbiBcdH1cbiBcbi1cdFRFU1RfQVNTRVJUX0VRKHB0aHJlYWRfY2FuY2VsKHRocmVhZCksIDApO1xuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCksIDApO1xuK1x0a3ZtX2NhbmNlbF9qb2luX3B0aHJlYWQodGhyZWFkKTtcbiBcbiBcdGt2bV92bV9mcmVlKHZtKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcbmluZGV4IGQ1OWFiYjE5OGQ4NmYuLmRlMDA2ZTFjODYxYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY1xuQEAgLTEyOCwxMCArMTI4LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2V2X21pZ3JhdGVfbG9ja2luZyh2b2lkKVxuIFx0XHQgICAgICAgc2l6ZW9mKGlucHV0W2ldLnNvdXJjZV92bXMpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tfVEVTVElOR19USFJFQURTOyArK2kpXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnB0W2ldLCBOVUxMLCBsb2NraW5nX3Rlc3RfdGhyZWFkLCBcdTAwMjZpbnB1dFtpXSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZwdFtpXSwgTlVMTCwgbG9ja2luZ190ZXN0X3RocmVhZCwgXHUwMDI2aW5wdXRbaV0pO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS19URVNUSU5HX1RIUkVBRFM7ICsraSlcbi1cdFx0cHRocmVhZF9qb2luKHB0W2ldLCBOVUxMKTtcbitcdFx0a3ZtX3B0aHJlYWRfam9pbihwdFtpXSwgTlVMTCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLX1RFU1RJTkdfVEhSRUFEUzsgKytpKVxuIFx0XHRrdm1fdm1fZnJlZShpbnB1dFtpXS52bSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xuaW5kZXggNWIwYzIzNTliYmI0My4uOWQ3NmMyZWQ3ODRiNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3luY19yZWdzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jXG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIHJhY2Vfc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcmFjZXIpXG4gXHRcdCAgICAhIShydW4tXHUwMDNlcy5yZWdzLnNyZWdzLmNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpLFxuIFx0XHQgICAgISEocnVuLVx1MDAzZXMucmVncy5zcmVncy5lZmVyIFx1MDAyNiBFRkVSX0xNRSkpO1xuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgKHZvaWQgKilydW4pLCAwKTtcbitcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2VyLCAodm9pZCAqKXJ1bik7XG4gXG4gXHRmb3IgKHQgPSB0aW1lKE5VTEwpICsgVElNRU9VVDsgdGltZShOVUxMKSBcdTAwM2MgdDspIHtcbiBcdFx0LypcbkBAIC0xOTksOCArMTk5LDcgQEAgc3RhdGljIHZvaWQgcmFjZV9zeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpyYWNlcilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0VEVTVF9BU1NFUlRfRVEocHRocmVhZF9jYW5jZWwodGhyZWFkKSwgMCk7XG4tXHRURVNUX0FTU0VSVF9FUShwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSwgMCk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZCh0aHJlYWQpO1xuIFxuIFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90c2Nfc2NhbGluZ19zeW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuaW5kZXggNTlkYThkNGRhNjA3OS4uMmEzYTliZDhiMzM4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHNjX3NjYWxpbmdfc3luYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY1xuQEAgLTk0LDEyICs5NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cHRocmVhZF90IGNwdV90aHJlYWRzW05SX1RFU1RfVkNQVVNdO1xuIFx0dW5zaWduZWQgbG9uZyBjcHU7XG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspXG4tXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNmNwdV90aHJlYWRzW2NwdV0sIE5VTEwsIHJ1bl92Y3B1LCAodm9pZCAqKWNwdSk7XG4rXHRcdGt2bV9wdGhyZWFkX2NyZWF0ZShcdTAwMjZjcHVfdGhyZWFkc1tjcHVdLCBOVUxMLCBydW5fdmNwdSwgKHZvaWQgKiljcHUpO1xuIFxuIFx0dW5zaWduZWQgbG9uZyBmYWlsdXJlcyA9IDA7XG4gXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgTlJfVEVTVF9WQ1BVUzsgY3B1KyspIHtcbiBcdFx0dm9pZCAqdGhpc19jcHVfZmFpbHVyZXM7XG4tXHRcdHB0aHJlYWRfam9pbihjcHVfdGhyZWFkc1tjcHVdLCBcdTAwMjZ0aGlzX2NwdV9mYWlsdXJlcyk7XG4rXHRcdGt2bV9wdGhyZWFkX2pvaW4oY3B1X3RocmVhZHNbY3B1XSwgXHUwMDI2dGhpc19jcHVfZmFpbHVyZXMpO1xuIFx0XHRmYWlsdXJlcyArPSAodW5zaWduZWQgbG9uZyl0aGlzX2NwdV9mYWlsdXJlcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDNhMzI2YzVlNzRjYWIuLjc4ZTdhYWU4ZmFiOGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIyOCwyNSArMjI4LDYgQEAgc3RhdGljIHZvaWQgKnZjcHVfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjYW5jZWxfam9pbl92Y3B1X3RocmVhZChwdGhyZWFkX3QgdGhyZWFkLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0dm9pZCAqcmV0dmFsO1xuLVx0aW50IHI7XG4tXG4tXHRyID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9jYW5jZWwgb24gdmNwdV9pZD0lZCBmYWlsZWQgd2l0aCBlcnJubz0lZFwiLFxuLVx0XHQgICAgdmNwdS1cdTAwM2VpZCwgcik7XG4tXG4tXHRyID0gcHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9qb2luIG9uIHZjcHVfaWQ9JWQgZmFpbGVkIHdpdGggZXJybm89JWRcIixcbi1cdFx0ICAgIHZjcHUtXHUwMDNlaWQsIHIpO1xuLVx0VEVTVF9BU1NFUlQocmV0dmFsID09IFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICBcImV4cGVjdGVkIHJldHZhbD0lcCwgZ290ICVwXCIsIFBUSFJFQURfQ0FOQ0VMRUQsXG4tXHRcdCAgICByZXR2YWwpO1xuLX1cbi1cbiB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICAgdTY0ICpwaXBpc19yY3ZkKVxuIHtcbkBAIC0zODcsNyArMzY4LDYgQEAgdm9pZCBnZXRfY21kbGluZV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCAqcnVuX3NlY3MsXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgcjtcbiBcdGludCB3YWl0X3NlY3M7XG4gXHRjb25zdCBpbnQgbWF4X2hhbHRlcl93YWl0ID0gMTA7XG4gXHRpbnQgcnVuX3NlY3MgPSAwO1xuQEAgLTQyOCw5ICs0MDgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cGFyYW1zWzFdLnBpcGlzX3JjdmQgPSBwaXBpc19yY3ZkO1xuIFxuIFx0LyogU3RhcnQgaGFsdGVyIHZDUFUgdGhyZWFkIGFuZCB3YWl0IGZvciBpdCB0byBleGVjdXRlIGZpcnN0IEhMVC4gKi9cbi1cdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB2Y3B1X3RocmVhZCwgXHUwMDI2cGFyYW1zWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHIgPT0gMCxcbi1cdFx0ICAgIFwicHRocmVhZF9jcmVhdGUgaGFsdGVyIGZhaWxlZCBlcnJubz0lZFwiLCBlcnJubyk7XG4rXHRrdm1fcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdmNwdV90aHJlYWQsIFx1MDAyNnBhcmFtc1swXSk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJIYWx0ZXIgdkNQVSB0aHJlYWQgc3RhcnRlZFxcblwiKTtcbiBcbiBcdHdhaXRfc2VjcyA9IDA7XG5AQCAtNDQ3LDggKzQyNSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFwiSGFsdGVyIHZDUFUgdGhyZWFkIHJlcG9ydGVkIGl0cyBBUElDIElEOiAldSBhZnRlciAlZCBzZWNvbmRzLlxcblwiLFxuIFx0XHRkYXRhLVx1MDAzZWhhbHRlcl9hcGljX2lkLCB3YWl0X3NlY3MpO1xuIFxuLVx0ciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcdTAwMjZwYXJhbXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQociA9PSAwLCBcInB0aHJlYWRfY3JlYXRlIHNlbmRlciBmYWlsZWQgZXJybm89JWRcIiwgZXJybm8pO1xuK1x0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHZjcHVfdGhyZWFkLCBcdTAwMjZwYXJhbXNbMV0pO1xuIFxuIFx0ZnByaW50ZihzdGRlcnIsXG4gXHRcdFwiSVBJIHNlbmRlciB2Q1BVIHRocmVhZCBzdGFydGVkLiBMZXR0aW5nIHZDUFVzIHJ1biBmb3IgJWQgc2Vjb25kcy5cXG5cIixcbkBAIC00NjIsOCArNDM5LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdC8qXG4gXHQgKiBDYW5jZWwgdGhyZWFkcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBzdG9wLlxuIFx0ICovXG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzBdLCBwYXJhbXNbMF0udmNwdSk7XG4tXHRjYW5jZWxfam9pbl92Y3B1X3RocmVhZCh0aHJlYWRzWzFdLCBwYXJhbXNbMV0udmNwdSk7XG4rXHRrdm1fY2FuY2VsX2pvaW5fcHRocmVhZF9hc3luYyh0aHJlYWRzWzBdKTtcbitcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkX2FzeW5jKHRocmVhZHNbMV0pO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSBob3N0IHN1cHBvcnQgSWRsZSBITFQsIGkuZS4gS1ZNICptaWdodCogYmUgdXNpbmcgSWRsZSBITFQsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fc2hpbmZvX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3NoaW5mb190ZXN0LmNcbmluZGV4IDUwNzZmNmE3NTQ1NTcuLmEyMjZhMmZkNjFkOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jXG5AQCAtNDM3LDcgKzQzNyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHB0aHJlYWRfdCB0aHJlYWQ7XG4gXHRib29sIHZlcmJvc2U7XG4tXHRpbnQgcmV0O1xuIFxuIFx0dmVyYm9zZSA9IGFyZ2MgXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICghc3RybmNtcChhcmd2WzFdLCBcIi12XCIsIDMpIHx8XG4gXHRcdFx0ICAgICAgICFzdHJuY21wKGFyZ3ZbMV0sIFwiLS12ZXJib3NlXCIsIDEwKSk7XG5AQCAtODk0LDggKzg5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRpZiAodmVyYm9zZSlcbiBcdFx0XHRcdFx0cHJpbnRmKFwiVGVzdGluZyBzaGluZm8gbG9jayBjb3JydXB0aW9uIChLVk1fWEVOX0hWTV9FVlRDSE5fU0VORClcXG5cIik7XG4gXG4tXHRcdFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNmp1Z2dsZV9zaGluZm9fc3RhdGUsICh2b2lkICopdm0pO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdFx0a3ZtX3B0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2anVnZ2xlX3NoaW5mb19zdGF0ZSwgKHZvaWQgKil2bSk7XG4gXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gdXhlID0ge1xuIFx0XHRcdFx0XHQucG9ydCA9IDEsXG5AQCAtOTQ5LDExICs5NDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFx0VEVTVF9BU1NFUlQoIWV2dGNobl9pcnFfZXhwZWN0ZWQsXG4gXHRcdFx0XHRcdCAgICBcIkV4cGVjdGVkIGV2ZW50IGNoYW5uZWwgSVJRIGJ1dCBpdCBkaWRuJ3QgaGFwcGVuXCIpO1xuIFxuLVx0XHRcdFx0cmV0ID0gcHRocmVhZF9jYW5jZWwodGhyZWFkKTtcbi1cdFx0XHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcInB0aHJlYWRfY2FuY2VsKCkgZmFpbGVkOiAlc1wiLCBzdHJlcnJvcihyZXQpKTtcbi1cbi1cdFx0XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aHJlYWQsIDApO1xuLVx0XHRcdFx0VEVTVF9BU1NFUlQocmV0ID09IDAsIFwicHRocmVhZF9qb2luKCkgZmFpbGVkOiAlc1wiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHRcdGt2bV9jYW5jZWxfam9pbl9wdGhyZWFkKHRocmVhZCk7XG4gXHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4gXHRcdFx0Y2FzZSBURVNUX0dVRVNUX1NBV19JUlE6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoyMjo0OS4zODA4NzI5NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2NzM0MTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb246IE5vKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBgcHRocmVhZF9jcmVhdGVgIGFuZCBgcHRocmVhZF9qb2luYCB3aXRoIHRoZWlyIEtWTS1zcGVjaWZpYyBjb3VudGVycGFydHMgKGBrdm1fcHRocmVhZF9jcmVhdGVgLCBga3ZtX3B0aHJlYWRfam9pbmApIGFuZCBhZGRpbmcgc29tZSB3cmFwcGVycyBpbiBga3ZtX3N5c2NhbGxzLmhgLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBpcyAqdXNlcnNwYWNlKiB0ZXN0IGNvZGUhIEl0J3Mgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpdHNlbGYuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IGNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgZG8gbm90IHdhcnJhbnQgZnV6emluZy4gIFRoaXMgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gVGhlIHBhdGNoIG1vZGlmaWVzIHNlbGZ0ZXN0cyBhbmQgdGhhdCdzIGl0OyB0aGF0IGRvZXNuJ3QgbW9kaWZ5IHRoZSBrZXJuZWwgc291cmNlIHRoYXQgKnJ1bnMqIGluIHRoZSBrZXJuZWwgc3BhY2UuIFNvLCBiYXNlZCBvbiB0aGF0LCBJJ20gdGhpbmtpbmcgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBcIm5vXCIuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZmlsZSBsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXM6XG5cbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaXJxLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9oYXJkd2FyZV9kaXNhYmxlX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxZmRfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0va3ZtX3BhZ2VfdGFibGVfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdXNlcmZhdWx0ZmRfdXRpbC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvbWVtb3AuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfaXBpLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X3RsYl9mbHVzaC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3JlY2FsY19hcGljX21hcF90ZXN0LmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zeW5jX3JlZ3NfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RzY19zY2FsaW5nX3N5bmMuY2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl9zaGluZm9fdGVzdC5jYFxuXG5BbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjkzLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjIzOjAxLjY0ODIxODY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyopIHRvIHVzZSBjdXN0b20gcHRocmVhZCB3cmFwcGVycy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowch4sj[1] Phase: Running StartedAt: 2026-08-01 07:23:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch4sj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 07:23:14 +0000 UTC FinishedAt: 2026-08-01 07:23:24 +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,}