Name: series-workflow2bpzc Phase: Failed StartedAt: 2026-08-04 21:06:34 +0000 UTC FinishedAt: 2026-08-04 21:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bpzc[0] Phase: Succeeded StartedAt: 2026-08-04 21:06:34 +0000 UTC FinishedAt: 2026-08-04 21:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bpzc[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 21:06:34 +0000 UTC FinishedAt: 2026-08-04 21:08:11 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHRvIG9wdGltaXplIHRlc3QgZXhlY3V0aW9uIGJ5IHVzaW5nIG11bHRpcGxlIHZDUFVzIGluc3RlYWQgb2YgcmVjcmVhdGluZyBWTXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlYTNlNTk0YWI1YTg5Y2E2ZGQzYzQ4ODFmOGRmMTcyYTVlNmQwODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIxOjA3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLjA4YmZhODJkN2FiODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2YoKnZjcHVzKSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0XHRydW5fdmNwdSh2Y3B1c1tqXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG5AQCAtNTYxLDU5ICYjNDM7NjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdFx0dTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV92bSAqdm07XG4tXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbi1cbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSyxcbiBcdFx0XHRcdHN1cHBvcnRlZF9iaXRtYXNrKTtcbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXG4gXHRcdFx0XHRucl9maXhlZF9jb3VudGVycyk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcdHUzMiBrO1xuJiM0MztcdHU4IGo7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7VGVzdGluZyAldSBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0OyxcbiYjNDM7XHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICYjNDM7IDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcbiYjNDM7XHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpJiM0MzsmIzQzO10sIGosIGspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIHtcbi1cdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbi1cdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbiBcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xuIFx0dW5zaWduZWQgaW50IGk7XG4tXHR1OCB2LCBqO1xuLVx0dTMyIGs7XG4mIzQzO1x0dTggdjtcbiBcbiBcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcbiBcdFx0MCxcbiBcdFx0UE1VX0NBUF9GV19XUklURVMsXG4gXHR9O1xuIFxuLVx0Lypcbi1cdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4tXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4tXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4tXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuLVx0ICogd3JvbmcgYml0KHMpLlxuLVx0ICovXG4tXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbi1cdFx0MHgwLFxuLVx0XHQweGZmZmZmZmZmdSxcbi1cdFx0MHhhYWFhYWFhYXUsXG4tXHRcdDB4NTU1NTU1NTV1LFxuLVx0XHQweGYwZjBmMGYwdSxcbi1cdFx0MHgwZjBmMGYwZnUsXG4tXHRcdDB4YTBhMGEwYTB1LFxuLVx0XHQweDBhMGEwYTBhdSxcbi1cdFx0MHg1MDUwNTA1MHUsXG4tXHRcdDB4MDUwNTA1MDV1LFxuLVx0fTtcbi1cbiBcdC8qXG4gXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcbiBcdCAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkc1xuQEAgLTY0OSwzMiAmIzQzOzcwMSw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXG4tXHRcdFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgJiM0MzsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJiMzOTt0IGRvXG4tXHRcdFx0ICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZVxuLVx0XHRcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4tXHRcdFx0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xuJiM0MztcdFx0XHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmVhM2U1OTRhYjVhODljYTZkZDNjNDg4MWY4ZGYxNzJhNWU2ZDA4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMjE6MDc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpICZsdDsmbHQ7IDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTsKIH0KIAotdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwKLQkJCSAgICB1NjQgbWF4KTsKJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KTsKJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTsKIAogZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7CiAJVk1fTUVNX1NSQ19BTk9OWU1PVVMsCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwppbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gc3RhdGUtJmd0O3NlZWQ7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHUzMiBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi8KJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlLCByYW5nZTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXgmIzM0OywgbWluLCBtYXgpOwomIzQzOwomIzQzOwl2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtYXggLSBtaW47CiYjNDM7CWlmIChyYW5nZSA9PSBVSU5UX01BWCkKJiM0MzsJCXJldHVybiB2YWx1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbiAmIzQzOyAodmFsdWUgJSAocmFuZ2UgJiM0MzsgMSkpOwomIzQzO30KJiM0MzsKIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwotdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwKLQkJCSAgICB1NjQgbWF4KQomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpCiB7Ci0JdTY0IHZhbHVlOwotCXU2NCByYW5nZTsKJiM0MzsJdTY0IHZhbHVlLCByYW5nZTsKIAogCVRFU1RfQVNTRVJUKG1pbiAmbHQ7PSBtYXgsICYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHgmIzM0OywgbWluLCBtYXgpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKaW5kZXggZGM2YWZhYzNhYTkxOS4uMDhiZmE4MmQ3YWI4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwpAQCAtODcsMTQgJiM0Mzs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpCiAJcmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdOwogfQogCi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsCi0JCQkJCQkgIHZvaWQgKmd1ZXN0X2NvZGUsCi0JCQkJCQkgIHU4IHBtdV92ZXJzaW9uLAotCQkJCQkJICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpCiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsCiYjNDM7CQkJCQkgICAgICAgdTggcG11X3ZlcnNpb24sCiYjNDM7CQkJCQkgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMgPSBjYWxsb2MobnJfdmNwdXMsIHNpemVvZigqdmNwdXMpKTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGk7CiAKLQl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwkqX192Y3B1cyA9IHZjcHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7CiAKQEAgLTEwMiwxMyAmIzQzOzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsCiAJICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nCiAJICogZmVhdHVyZXMgdmlhIFBFUkZfQ0FQQUJJTElUSUVTIGlmIHRoZSBndWVzdCBkb2VzbiYjMzk7dCBoYXZlIGEgdlBNVS4KIAkgKi8KLQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCi0JCXZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGt2bV9oYXNfcGVyZl9jYXBzKQomIzQzOwkJCXZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTsKJiM0MzsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTsKJiM0MzsJfQogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwogCXJldHVybiB2bTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cykKJiM0Mzt7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0MzsJZnJlZSh2Y3B1cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB1Y2FsbCB1YzsKQEAgLTI3Myw2ICYjNDM7Mjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeCkKIAlzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7CiAJdTMyIGJhc2VfcG1jX21zcjsKIAl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdTY0IGV2ZW50c2VsOwogCiAJLyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovCiAJR1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTsKQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCUdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTsKIAogCUdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7CiYjNDM7CWkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZSgmYW1wO2t2bV9ybmcsIDAsIG5yX2dwX2NvdW50ZXJzIC0gMSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZ3BfY291bnRlcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCXU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8Ci0JCQkJICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAotCQkJCSAgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTsKJiM0MzsJZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHwKJiM0MzsJCSAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwogCi0JCXdybXNyKE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCAwKTsKLQkJaWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQotCQkJd3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7CiYjNDM7CXdybXNyKE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCAwKTsKJiM0MzsJaWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQomIzQzOwkJd3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7CiAKLQkJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwKLQkJCQkJTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKLQl9CiYjNDM7CV9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7CiAKIAlpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQogCQlyZXR1cm47CkBAIC0zMjgsMzAgJiM0MzszMzksNzIgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKQogCUdVRVNUX0RPTkUoKTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAotCQkJICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKJiM0MzsJCQkgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV92bSAqdm07Ci0KLQkvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi8KLQlpZiAoIXBtdV92ZXJzaW9uKQotCQlyZXR1cm47Ci0KIAl1bmF2YWlsYWJsZV9tYXNrICZhbXA7PSBHRU5NQVNLKFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0suaGlfYml0LAogCQkJCSAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7CiAKLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwotCiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FQlhfQklUX1ZFQ1RPUl9MRU5HVEgsCiAJCQkJbGVuZ3RoKTsKIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLAogCQkJCXVuYXZhaWxhYmxlX21hc2spOwogCiAJcnVuX3ZjcHUodmNwdSk7CiYjNDM7fQogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwl1MzIgazsKJiM0MzsJdTggajsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCwKJiM0MzsJICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdAomIzQzOwkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCiYjNDM7CSAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlCiYjNDM7CSAqIHdyb25nIGJpdChzKS4KJiM0MzsJICovCiYjNDM7CWNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0gewomIzQzOwkJMHgwLAomIzQzOwkJMHhmZmZmZmZmZnUsCiYjNDM7CQkweGFhYWFhYWFhdSwKJiM0MzsJCTB4NTU1NTU1NTV1LAomIzQzOwkJMHhmMGYwZjBmMHUsCiYjNDM7CQkweDBmMGYwZjBmdSwKJiM0MzsJCTB4YTBhMGEwYTB1LAomIzQzOwkJMHgwYTBhMGEwYXUsCiYjNDM7CQkweDUwNTA1MDUwdSwKJiM0MzsJCTB4MDUwNTA1MDV1LAomIzQzOwl9OwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCiYjNDM7CQlwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi8KJiM0MzsJaWYgKCFwbXVfdmVyc2lvbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksCiYjNDM7CQkJCSAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLAomIzQzOwkJCQkgICAgICBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGgKJiM0MzsJICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICYjMzk7MCYjMzk7IGFuZAomIzQzOwkgKiBhbGwgb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCiYjNDM7CQkJX190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2kmIzQzOyYjNDM7XSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosCiYjNDM7CQkJCQkgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG11X3ZtX2ZyZWUodm0sIHZjcHVzKTsKIH0KIAogLyoKQEAgLTQ5NSwyMSAmIzQzOzU0OCwyNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IG5yX2dwX2NvdW50ZXJzKQomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiAJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXU4IGo7CiAKLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlwcl9pbmZvKCYjMzQ7VGVzdGluZyAldSBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCiYjNDM7CQlucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKIAotCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsCi0JCQkJbnJfZ3BfY291bnRlcnMpOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyAmIzQzOyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwogCi0JcnVuX3ZjcHUodmNwdSk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CQlydW5fdmNwdSh2Y3B1c1tqXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG11X3ZtX2ZyZWUodm0sIHZjcHVzKTsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKQpAQCAtNTYxLDU5ICYjNDM7NjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCQl1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV92bSAqdm07Ci0KLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwotCiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLAogCQkJCXN1cHBvcnRlZF9iaXRtYXNrKTsKIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLAogCQkJCW5yX2ZpeGVkX2NvdW50ZXJzKTsKIAogCXJ1bl92Y3B1KHZjcHUpOwomIzQzO30KIAotCWt2bV92bV9mcmVlKHZtKTsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpCiYjNDM7ewomIzQzOwl1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwl1MzIgazsKJiM0MzsJdTggajsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1Rlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAomIzQzOwkJbnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyAmIzQzOyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksCiYjNDM7CQkJCSAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiYjNDM7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGsgPSAwOyBrICZsdDs9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KQomIzQzOwkJCV9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpJiM0MzsmIzQzO10sIGosIGspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIHsKLQl1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7Ci0JdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwogCXU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pOwogCXVuc2lnbmVkIGludCBpOwotCXU4IHYsIGo7Ci0JdTMyIGs7CiYjNDM7CXU4IHY7CiAKIAljb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7CiAJCTAsCiAJCVBNVV9DQVBfRldfV1JJVEVTLAogCX07CiAKLQkvKgotCSAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsCi0JICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdAotCSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKLQkgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZQotCSAqIHdyb25nIGJpdChzKS4KLQkgKi8KLQljb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHsKLQkJMHgwLAotCQkweGZmZmZmZmZmdSwKLQkJMHhhYWFhYWFhYXUsCi0JCTB4NTU1NTU1NTV1LAotCQkweGYwZjBmMGYwdSwKLQkJMHgwZjBmMGYwZnUsCi0JCTB4YTBhMGEwYTB1LAotCQkweDBhMGEwYTBhdSwKLQkJMHg1MDUwNTA1MHUsCi0JCTB4MDUwNTA1MDV1LAotCX07Ci0KIAkvKgogCSAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieQogCSAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkcwpAQCAtNjQ5LDMyICYjNDM7NzAxLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKQogCQkJaWYgKCFrdm1faGFzX3BlcmZfY2FwcyAmYW1wOyZhbXA7IHBlcmZfY2Fwc1tpXSkKIAkJCQljb250aW51ZTsKIAotCQkJcHJfaW5mbygmIzM0O1Rlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAotCQkJCXYsIHBlcmZfY2Fwc1tpXSk7Ci0KLQkJCS8qCi0JCQkgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAKLQkJCSAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbwotCQkJICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZQotCQkJICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsCi0JCQkgKiBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgotCQkJICovCi0JCQlmb3IgKGogPSAwOyBqICZsdDs9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKLQkJCX0KLQotCQkJcHJfaW5mbygmIzM0O1Rlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAotCQkJCXYsIHBlcmZfY2Fwc1tpXSk7Ci0JCQlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2dwX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykKLQkJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaik7Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKLQkJCQlmb3IgKGsgPSAwOyBrICZsdDs9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KQotCQkJCQl0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7Ci0JCQl9CiYjNDM7CQkJdGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pOwomIzQzOwkJCXRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiAJCX0KIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBLVk0gc2VsZnRlc3RzLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHBtdV9jb3VudGVyc190ZXN0LmNgLCBgdGVzdF91dGlsLmNgLCBhbmQgYSBoZWFkZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIHRlc3QgbG9naWMuIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCBmdW5jdGlvbiwgYW5kIHNpZ25pZmljYW50bHksIHRoZXkmIzM5O3JlIGNoYW5naW5nIGBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHVgIHRvIGEgbXVsdGktdkNQVSB2YXJpYW50LiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlIHRvIHJlZHVjZSBvdmVyaGVhZCBieSByZXVzaW5nIFZNcyBhY3Jvc3MgaXRlcmF0aW9ucy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBjaGFuZ2VzIHRoYXQgKndvdWxkKiBiZSByZWxldmFudCB0byBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciwgb3IgYW55IG90aGVyIGZ1enplciwgd291bGQgYmUgaW50ZXJlc3RlZCBpbi4KCkxldCBtZSBqdXN0IGRvdWJsZSBjaGVjazsgSSYjMzk7bSBwcmV0dHkgc3VyZSBzZWxmdGVzdHMgYXJlIGluIHRoZSBjbGVhci4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmLCBhbmQgeWVwLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIGNvZGUuIEkmIzM5O20gc2VlaW5nOgotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGAKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2AKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYAoKVGhlIGNvZGUgaXMgcHVyZWx5IGluIHRoZSBzZWxmdGVzdHMgd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCYjMzk7cyBub3QgYSBrZXJuZWwgbW9kaWZpY2F0aW9uLCBzbyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0IGRvZXMgbm90IGxvb2sgbGlrZSB0aGVyZSYjMzk7cyBhbnkga2VybmVsIGNvZGUgdGhhdCBjb3VsZCBiZSBmdXp6ZWQgYXMgYSByZXN1bHQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCYjMzk7cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb2RlIGNvbW1lbnRzLiBUaGVyZSYjMzk7cyBub3RoaW5nIGV4cGxpY2l0bHkgYWJvdXQgJiMzNDtzZWxmdGVzdHMmIzM0OywgYnV0IEkga25vdyB0aGF0IHNlbGZ0ZXN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSB0aGF0IHdvdWxkIGJlIGZ1enplZC4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYW5hbHlzaXMuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEtWTSBzZWxmdGVzdHMgdG8gZW5oYW5jZSB0aGVpciBwZXJmb3JtYW5jZS4gTm8ga2VybmVsIGNoYW5nZXMsIG5vIGZ1enppbmcgaW1wbGljYXRpb25zLiBJJiMzOTttIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTowNzo1MC4xNDgyNTg5NzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY3NDk4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjUwLjE0ODI2NTMyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTQ4NTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlYTNlNTk0YWI1YTg5Y2E2ZGQzYzQ4ODFmOGRmMTcyYTVlNmQwODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTowNzo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcXG4gXFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xcbiBcXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiBcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZXNlZWQ7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxcbit7XFxuK1xcdHUzMiB2YWx1ZSwgcmFuZ2U7XFxuK1xcbitcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gdmFsdWU7XFxuK1xcbitcXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xcbit9XFxuK1xcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcXG4tXFx0XFx0XFx0ICAgIHU2NCBtYXgpXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXFxuIHtcXG4tXFx0dTY0IHZhbHVlO1xcbi1cXHR1NjQgcmFuZ2U7XFxuK1xcdHU2NCB2YWx1ZSwgcmFuZ2U7XFxuIFxcbiBcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcXFwiLCBtaW4sIG1heCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5pbmRleCBkYzZhZmFjM2FhOTE5Li4wOGJmYTgyZDdhYjg0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxcbiBcXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpndWVzdF9jb2RlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IHBtdV92ZXJzaW9uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKCp2Y3B1cykpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuIFxcbi1cXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHQqX192Y3B1cyA9IHZjcHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcXG4gXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XFxuIFxcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXFxuIFxcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xcbiBcXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuLVxcdFxcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxcbitcXHRcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XFxuK1xcdH1cXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4gXFx0cmV0dXJuIHZtO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXFxuK3tcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRmcmVlKHZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcXG4gXFx0dTMyIGJhc2VfcG1jX21zcjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHU2NCBldmVudHNlbDtcXG4gXFxuIFxcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXFxuIFxcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XFxuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XFxuK1xcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XFxuLVxcdFxcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XFxuLVxcdFxcdFxcdFxcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbitcXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbitcXHRcXHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcXG4gXFxuLVxcdFxcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbi1cXHRcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuLVxcdFxcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbitcXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcXG4rXFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbitcXHRcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcXG4gXFxuLVxcdFxcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcXG4tXFx0XFx0XFx0XFx0XFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbi1cXHR9XFxuK1xcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbiBcXG4gXFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xcbi1cXHRpZiAoIXBtdV92ZXJzaW9uKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHR1bmF2YWlsYWJsZV9tYXNrIFxcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXFxuIFxcdFxcdFxcdFxcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuLVxcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcXG4gXFx0XFx0XFx0XFx0bGVuZ3RoKTtcXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcXG4gXFx0XFx0XFx0XFx0dW5hdmFpbGFibGVfbWFzayk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdHUzMiBrO1xcbitcXHR1OCBqO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4rXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbitcXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuK1xcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuK1xcdCAqIHdyb25nIGJpdChzKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbitcXHRcXHQweDAsXFxuK1xcdFxcdDB4ZmZmZmZmZmZ1LFxcbitcXHRcXHQweGFhYWFhYWFhdSxcXG4rXFx0XFx0MHg1NTU1NTU1NXUsXFxuK1xcdFxcdDB4ZjBmMGYwZjB1LFxcbitcXHRcXHQweDBmMGYwZjBmdSxcXG4rXFx0XFx0MHhhMGEwYTBhMHUsXFxuK1xcdFxcdDB4MGEwYTBhMGF1LFxcbitcXHRcXHQweDUwNTA1MDUwdSxcXG4rXFx0XFx0MHgwNTA1MDUwNXUsXFxuK1xcdH07XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuK1xcdGlmICghcG11X3ZlcnNpb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXFxuK1xcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXFxuK1xcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXFxuK1xcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAxOyBrIFxcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ5NSwyMSArNTQ4LDI2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1OCBqO1xcbiBcXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuLVxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFxcdTAwMjZ2Y3B1cyk7XFxuIFxcbi1cXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLCBqKTtcXG4gXFxuLVxcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0XFx0cnVuX3ZjcHUodmNwdXNbal0pO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuQEAgLTU2MSw1OSArNjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbi1cXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxcbiBcXHRcXHRcXHRcXHRzdXBwb3J0ZWRfYml0bWFzayk7XFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXFxuIFxcdFxcdFxcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgaztcXG4rXFx0dTggajtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyArIDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4ge1xcbi1cXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuLVxcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4gXFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbi1cXHR1OCB2LCBqO1xcbi1cXHR1MzIgaztcXG4rXFx0dTggdjtcXG4gXFxuIFxcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcXG4gXFx0XFx0MCxcXG4gXFx0XFx0UE1VX0NBUF9GV19XUklURVMsXFxuIFxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbi1cXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuLVxcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4tXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4tXFx0ICogd3JvbmcgYml0KHMpLlxcbi1cXHQgKi9cXG4tXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuLVxcdFxcdDB4MCxcXG4tXFx0XFx0MHhmZmZmZmZmZnUsXFxuLVxcdFxcdDB4YWFhYWFhYWF1LFxcbi1cXHRcXHQweDU1NTU1NTU1dSxcXG4tXFx0XFx0MHhmMGYwZjBmMHUsXFxuLVxcdFxcdDB4MGYwZjBmMGZ1LFxcbi1cXHRcXHQweGEwYTBhMGEwdSxcXG4tXFx0XFx0MHgwYTBhMGEwYXUsXFxuLVxcdFxcdDB4NTA1MDUwNTB1LFxcbi1cXHRcXHQweDA1MDUwNTA1dSxcXG4tXFx0fTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxcbiBcXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcXG5AQCAtNjQ5LDMyICs3MDEsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcXG4tXFx0XFx0XFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xcbi1cXHRcXHRcXHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXFxuLVxcdFxcdFxcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZCBhbGxcXG4tXFx0XFx0XFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcXG4tXFx0XFx0XFx0XFx0Zm9yIChrID0gMTsgayBcXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXFxuLVxcdFxcdFxcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcXG4tXFx0XFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xcbi1cXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0diwgcGVyZl9jYXBzW2ldKTtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuK1xcdFxcdFxcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6MDc6NTEuNDc4NzQyNjI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODIzNzAxMDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWEzZTU5NGFiNWE4OWNhNmRkM2M0ODgxZjhkZjE3MmE1ZTZkMDg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTowNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIFx0cmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSBcdTAwM2NcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xuIH1cbiBcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuLVx0XHRcdCAgICB1NjQgbWF4KTtcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KTtcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIFx0cmV0dXJuIHN0YXRlLVx1MDAzZXNlZWQ7XG4gfVxuIFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4re1xuK1x0dTMyIHZhbHVlLCByYW5nZTtcbitcbitcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCJQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXhcIiwgbWluLCBtYXgpO1xuK1xuK1x0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4rXG4rXHRyYW5nZSA9IG1heCAtIG1pbjtcbitcdGlmIChyYW5nZSA9PSBVSU5UX01BWClcbitcdFx0cmV0dXJuIHZhbHVlO1xuK1xuK1x0cmV0dXJuIG1pbiArICh2YWx1ZSAlIChyYW5nZSArIDEpKTtcbit9XG4rXG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KVxuIHtcbi1cdHU2NCB2YWx1ZTtcbi1cdHU2NCByYW5nZTtcbitcdHU2NCB2YWx1ZSwgcmFuZ2U7XG4gXG4gXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcIiwgbWluLCBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuaW5kZXggZGM2YWZhYzNhYTkxOS4uMDhiZmE4MmQ3YWI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5AQCAtODcsMTQgKzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeClcbiBcdHJldHVybiBfX2ludGVsX2V2ZW50X3RvX2ZlYXR1cmVbaWR4XTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuLVx0XHRcdFx0XHRcdCAgdm9pZCAqZ3Vlc3RfY29kZSxcbi1cdFx0XHRcdFx0XHQgIHU4IHBtdV92ZXJzaW9uLFxuLVx0XHRcdFx0XHRcdCAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuK1x0XHRcdFx0XHQgICAgICAgdTggcG11X3ZlcnNpb24sXG4rXHRcdFx0XHRcdCAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXMgPSBjYWxsb2MobnJfdmNwdXMsIHNpemVvZigqdmNwdXMpKTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGk7XG4gXG4tXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0Kl9fdmNwdXMgPSB2Y3B1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBrdm1fcG11X3ZlcnNpb24pO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XG4gXG5AQCAtMTAyLDEzICsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXG4gXHQgKi9cbi1cdGlmIChrdm1faGFzX3BlcmZfY2Fwcylcbi1cdFx0dmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuK1x0XHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4rXHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4rXHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cylcbit7XG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRmcmVlKHZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiArMjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcbiBcdHUzMiBiYXNlX3BtY19tc3I7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbitcdHU2NCBldmVudHNlbDtcbiBcbiBcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRHVUVTVF9BU1NFUlRfRVEoaWR4LCBncF9ldmVudC5mLmJpdCk7XG4gXG4gXHRHVUVTVF9BU1NFUlQobnJfZ3BfY291bnRlcnMpO1xuK1x0aSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDAsIG5yX2dwX2NvdW50ZXJzIC0gMSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XG4tXHRcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XG4tXHRcdFx0XHQgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4tXHRcdFx0XHQgICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XG4rXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuK1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XG4tXHRcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbi1cdFx0XHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcbitcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xuK1x0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuK1x0XHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcbiBcbi1cdFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XG4tXHR9XG4rXHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciArIGksIE1TUl9QNl9FVk5UU0VMMCArIGksIGV2ZW50c2VsKTtcbiBcbiBcdGlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4gXHRcdHJldHVybjtcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuK1x0XHRcdCAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVxuLVx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4tXHRpZiAoIXBtdV92ZXJzaW9uKVxuLVx0XHRyZXR1cm47XG4tXG4gXHR1bmF2YWlsYWJsZV9tYXNrIFx1MDAyNj0gR0VOTUFTSyhYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmhpX2JpdCxcbiBcdFx0XHRcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XG4gXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbi1cbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRUJYX0JJVF9WRUNUT1JfTEVOR1RILFxuIFx0XHRcdFx0bGVuZ3RoKTtcbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssXG4gXHRcdFx0XHR1bmF2YWlsYWJsZV9tYXNrKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdC8qXG4rXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuK1x0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuK1x0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuK1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbitcdCAqIHdyb25nIGJpdChzKS5cbitcdCAqL1xuK1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4rXHRcdDB4MCxcbitcdFx0MHhmZmZmZmZmZnUsXG4rXHRcdDB4YWFhYWFhYWF1LFxuK1x0XHQweDU1NTU1NTU1dSxcbitcdFx0MHhmMGYwZjBmMHUsXG4rXHRcdDB4MGYwZjBmMGZ1LFxuK1x0XHQweGEwYTBhMGEwdSxcbitcdFx0MHgwYTBhMGEwYXUsXG4rXHRcdDB4NTA1MDUwNTB1LFxuK1x0XHQweDA1MDUwNTA1dSxcbitcdH07XG4rXG4rXHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuK1x0XHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4rXHRpZiAoIXBtdV92ZXJzaW9uKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAyKSAqIChBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSAtIDEpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4rXHRcdFx0XHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXG4rXHQgKiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aFxuK1x0ICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmRcbitcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxuK1x0ICovXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMTsgayBcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcbitcdFx0XHRfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSsrXSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosXG4rXHRcdFx0XHRcdCAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIC8qXG5AQCAtNDk1LDIxICs1NDgsMjYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbitzdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHU4IGo7XG4gXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuIFxuLVx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbi1cdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbitcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICsgMSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuIFxuLVx0cnVuX3ZjcHUodmNwdSk7XG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKykge1xuK1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgKzYxOSw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHRcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4rXHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbitcdFx0XHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbitcdHU4IHY7XG4gXG4gXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XG4gXHRcdDAsXG4gXHRcdFBNVV9DQVBfRldfV1JJVEVTLFxuIFx0fTtcbiBcbi1cdC8qXG4tXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuLVx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuLVx0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuLVx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbi1cdCAqIHdyb25nIGJpdChzKS5cbi1cdCAqL1xuLVx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4tXHRcdDB4MCxcbi1cdFx0MHhmZmZmZmZmZnUsXG4tXHRcdDB4YWFhYWFhYWF1LFxuLVx0XHQweDU1NTU1NTU1dSxcbi1cdFx0MHhmMGYwZjBmMHUsXG4tXHRcdDB4MGYwZjBmMGZ1LFxuLVx0XHQweGEwYTBhMGEwdSxcbi1cdFx0MHgwYTBhMGEwYXUsXG4tXHRcdDB4NTA1MDUwNTB1LFxuLVx0XHQweDA1MDUwNTA1dSxcbi1cdH07XG4tXG4gXHQvKlxuIFx0ICogVGVzdCB1cCB0byBQTVUgdjUsIHdoaWNoIGlzIHRoZSBjdXJyZW50IG1heGltdW0gdmVyc2lvbiBkZWZpbmVkIGJ5XG4gXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcbkBAIC02NDksMzIgKzcwMSw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cFxuLVx0XHRcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbitcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuK1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjUxLjQ3ODc0NDU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzY5ODUxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgS1ZNIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBwbXVfY291bnRlcnNfdGVzdC5jYCwgYHRlc3RfdXRpbC5jYCwgYW5kIGEgaGVhZGVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSB0ZXN0IGxvZ2ljLiBUaGV5J3JlIGludHJvZHVjaW5nIGEgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCBmdW5jdGlvbiwgYW5kIHNpZ25pZmljYW50bHksIHRoZXkncmUgY2hhbmdpbmcgYHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdWAgdG8gYSBtdWx0aS12Q1BVIHZhcmlhbnQuIFRoZSBnb2FsIGFwcGVhcnMgdG8gYmUgdG8gcmVkdWNlIG92ZXJoZWFkIGJ5IHJldXNpbmcgVk1zIGFjcm9zcyBpdGVyYXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgY2hhbmdlcyB0aGF0ICp3b3VsZCogYmUgcmVsZXZhbnQgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IHRvdWNoaW5nIGFueSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciwgb3IgYW55IG90aGVyIGZ1enplciwgd291bGQgYmUgaW50ZXJlc3RlZCBpbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrOyBJJ20gcHJldHR5IHN1cmUgc2VsZnRlc3RzIGFyZSBpbiB0aGUgY2xlYXIuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmLCBhbmQgeWVwLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgY29kZS4gSSdtIHNlZWluZzpcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2Bcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY2BcblxuVGhlIGNvZGUgaXMgcHVyZWx5IGluIHRoZSBzZWxmdGVzdHMgd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCdzIG5vdCBhIGtlcm5lbCBtb2RpZmljYXRpb24sIHNvIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQgZG9lcyBub3QgbG9vayBsaWtlIHRoZXJlJ3MgYW55IGtlcm5lbCBjb2RlIHRoYXQgY291bGQgYmUgZnV6emVkIGFzIGEgcmVzdWx0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCdzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuIFRoZXJlJ3Mgbm90aGluZyBleHBsaWNpdGx5IGFib3V0IFwic2VsZnRlc3RzXCIsIGJ1dCBJIGtub3cgdGhhdCBzZWxmdGVzdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgaW1hZ2UgdGhhdCB3b3VsZCBiZSBmdXp6ZWQuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBhbmFseXNpcy4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBvZiB0aGUgS1ZNIHNlbGZ0ZXN0cyB0byBlbmhhbmNlIHRoZWlyIHBlcmZvcm1hbmNlLiBObyBrZXJuZWwgY2hhbmdlcywgbm8gZnV6emluZyBpbXBsaWNhdGlvbnMuIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzMywiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjU5LjcxNTczMjE4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bpzc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 21:06:34 +0000 UTC FinishedAt: 2026-08-04 21:08:01 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHRvIG9wdGltaXplIHRlc3QgZXhlY3V0aW9uIGJ5IHVzaW5nIG11bHRpcGxlIHZDUFVzIGluc3RlYWQgb2YgcmVjcmVhdGluZyBWTXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlYTNlNTk0YWI1YTg5Y2E2ZGQzYzQ4ODFmOGRmMTcyYTVlNmQwODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIxOjA3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLjA4YmZhODJkN2FiODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2YoKnZjcHVzKSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0XHRydW5fdmNwdSh2Y3B1c1tqXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG5AQCAtNTYxLDU5ICYjNDM7NjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdFx0dTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV92bSAqdm07XG4tXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbi1cbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSyxcbiBcdFx0XHRcdHN1cHBvcnRlZF9iaXRtYXNrKTtcbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXG4gXHRcdFx0XHRucl9maXhlZF9jb3VudGVycyk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcdHUzMiBrO1xuJiM0MztcdHU4IGo7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7VGVzdGluZyAldSBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0OyxcbiYjNDM7XHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICYjNDM7IDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcbiYjNDM7XHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpJiM0MzsmIzQzO10sIGosIGspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIHtcbi1cdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbi1cdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbiBcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xuIFx0dW5zaWduZWQgaW50IGk7XG4tXHR1OCB2LCBqO1xuLVx0dTMyIGs7XG4mIzQzO1x0dTggdjtcbiBcbiBcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcbiBcdFx0MCxcbiBcdFx0UE1VX0NBUF9GV19XUklURVMsXG4gXHR9O1xuIFxuLVx0Lypcbi1cdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4tXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4tXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4tXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuLVx0ICogd3JvbmcgYml0KHMpLlxuLVx0ICovXG4tXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbi1cdFx0MHgwLFxuLVx0XHQweGZmZmZmZmZmdSxcbi1cdFx0MHhhYWFhYWFhYXUsXG4tXHRcdDB4NTU1NTU1NTV1LFxuLVx0XHQweGYwZjBmMGYwdSxcbi1cdFx0MHgwZjBmMGYwZnUsXG4tXHRcdDB4YTBhMGEwYTB1LFxuLVx0XHQweDBhMGEwYTBhdSxcbi1cdFx0MHg1MDUwNTA1MHUsXG4tXHRcdDB4MDUwNTA1MDV1LFxuLVx0fTtcbi1cbiBcdC8qXG4gXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcbiBcdCAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkc1xuQEAgLTY0OSwzMiAmIzQzOzcwMSw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXG4tXHRcdFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgJiM0MzsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJiMzOTt0IGRvXG4tXHRcdFx0ICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZVxuLVx0XHRcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4tXHRcdFx0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cJiMzNDssXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xuJiM0MztcdFx0XHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmVhM2U1OTRhYjVhODljYTZkZDNjNDg4MWY4ZGYxNzJhNWU2ZDA4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMjE6MDc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpICZsdDsmbHQ7IDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTsKIH0KIAotdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwKLQkJCSAgICB1NjQgbWF4KTsKJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KTsKJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTsKIAogZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7CiAJVk1fTUVNX1NSQ19BTk9OWU1PVVMsCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwppbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gc3RhdGUtJmd0O3NlZWQ7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHUzMiBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi8KJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlLCByYW5nZTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXgmIzM0OywgbWluLCBtYXgpOwomIzQzOwomIzQzOwl2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtYXggLSBtaW47CiYjNDM7CWlmIChyYW5nZSA9PSBVSU5UX01BWCkKJiM0MzsJCXJldHVybiB2YWx1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbiAmIzQzOyAodmFsdWUgJSAocmFuZ2UgJiM0MzsgMSkpOwomIzQzO30KJiM0MzsKIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwotdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwKLQkJCSAgICB1NjQgbWF4KQomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpCiB7Ci0JdTY0IHZhbHVlOwotCXU2NCByYW5nZTsKJiM0MzsJdTY0IHZhbHVlLCByYW5nZTsKIAogCVRFU1RfQVNTRVJUKG1pbiAmbHQ7PSBtYXgsICYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHgmIzM0OywgbWluLCBtYXgpOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKaW5kZXggZGM2YWZhYzNhYTkxOS4uMDhiZmE4MmQ3YWI4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwpAQCAtODcsMTQgJiM0Mzs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpCiAJcmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdOwogfQogCi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsCi0JCQkJCQkgIHZvaWQgKmd1ZXN0X2NvZGUsCi0JCQkJCQkgIHU4IHBtdV92ZXJzaW9uLAotCQkJCQkJICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpCiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsCiYjNDM7CQkJCQkgICAgICAgdTggcG11X3ZlcnNpb24sCiYjNDM7CQkJCQkgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMgPSBjYWxsb2MobnJfdmNwdXMsIHNpemVvZigqdmNwdXMpKTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGk7CiAKLQl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwkqX192Y3B1cyA9IHZjcHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7CiAKQEAgLTEwMiwxMyAmIzQzOzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsCiAJICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nCiAJICogZmVhdHVyZXMgdmlhIFBFUkZfQ0FQQUJJTElUSUVTIGlmIHRoZSBndWVzdCBkb2VzbiYjMzk7dCBoYXZlIGEgdlBNVS4KIAkgKi8KLQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCi0JCXZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGt2bV9oYXNfcGVyZl9jYXBzKQomIzQzOwkJCXZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTsKJiM0MzsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTsKJiM0MzsJfQogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwogCXJldHVybiB2bTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cykKJiM0Mzt7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0MzsJZnJlZSh2Y3B1cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB1Y2FsbCB1YzsKQEAgLTI3Myw2ICYjNDM7Mjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeCkKIAlzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7CiAJdTMyIGJhc2VfcG1jX21zcjsKIAl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdTY0IGV2ZW50c2VsOwogCiAJLyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovCiAJR1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTsKQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCUdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTsKIAogCUdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7CiYjNDM7CWkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZSgmYW1wO2t2bV9ybmcsIDAsIG5yX2dwX2NvdW50ZXJzIC0gMSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZ3BfY291bnRlcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCXU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8Ci0JCQkJICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAotCQkJCSAgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTsKJiM0MzsJZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHwKJiM0MzsJCSAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwogCi0JCXdybXNyKE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCAwKTsKLQkJaWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQotCQkJd3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7CiYjNDM7CXdybXNyKE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCAwKTsKJiM0MzsJaWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQomIzQzOwkJd3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7CiAKLQkJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwKLQkJCQkJTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKLQl9CiYjNDM7CV9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7CiAKIAlpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKQogCQlyZXR1cm47CkBAIC0zMjgsMzAgJiM0MzszMzksNzIgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKQogCUdVRVNUX0RPTkUoKTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAotCQkJICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKJiM0MzsJCQkgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV92bSAqdm07Ci0KLQkvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi8KLQlpZiAoIXBtdV92ZXJzaW9uKQotCQlyZXR1cm47Ci0KIAl1bmF2YWlsYWJsZV9tYXNrICZhbXA7PSBHRU5NQVNLKFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0suaGlfYml0LAogCQkJCSAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7CiAKLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwotCiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FQlhfQklUX1ZFQ1RPUl9MRU5HVEgsCiAJCQkJbGVuZ3RoKTsKIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLAogCQkJCXVuYXZhaWxhYmxlX21hc2spOwogCiAJcnVuX3ZjcHUodmNwdSk7CiYjNDM7fQogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwl1MzIgazsKJiM0MzsJdTggajsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCwKJiM0MzsJICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdAomIzQzOwkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCiYjNDM7CSAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlCiYjNDM7CSAqIHdyb25nIGJpdChzKS4KJiM0MzsJICovCiYjNDM7CWNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0gewomIzQzOwkJMHgwLAomIzQzOwkJMHhmZmZmZmZmZnUsCiYjNDM7CQkweGFhYWFhYWFhdSwKJiM0MzsJCTB4NTU1NTU1NTV1LAomIzQzOwkJMHhmMGYwZjBmMHUsCiYjNDM7CQkweDBmMGYwZjBmdSwKJiM0MzsJCTB4YTBhMGEwYTB1LAomIzQzOwkJMHgwYTBhMGEwYXUsCiYjNDM7CQkweDUwNTA1MDUwdSwKJiM0MzsJCTB4MDUwNTA1MDV1LAomIzQzOwl9OwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCiYjNDM7CQlwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi8KJiM0MzsJaWYgKCFwbXVfdmVyc2lvbikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksCiYjNDM7CQkJCSAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLAomIzQzOwkJCQkgICAgICBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGgKJiM0MzsJICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICYjMzk7MCYjMzk7IGFuZAomIzQzOwkgKiBhbGwgb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCiYjNDM7CQkJX190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2kmIzQzOyYjNDM7XSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosCiYjNDM7CQkJCQkgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG11X3ZtX2ZyZWUodm0sIHZjcHVzKTsKIH0KIAogLyoKQEAgLTQ5NSwyMSAmIzQzOzU0OCwyNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IG5yX2dwX2NvdW50ZXJzKQomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiAJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXU4IGo7CiAKLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlwcl9pbmZvKCYjMzQ7VGVzdGluZyAldSBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCiYjNDM7CQlucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKIAotCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsCi0JCQkJbnJfZ3BfY291bnRlcnMpOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyAmIzQzOyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwogCi0JcnVuX3ZjcHUodmNwdSk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CQlydW5fdmNwdSh2Y3B1c1tqXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG11X3ZtX2ZyZWUodm0sIHZjcHVzKTsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKQpAQCAtNTYxLDU5ICYjNDM7NjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCQl1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV92bSAqdm07Ci0KLQl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsCi0JCQkJCSBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwotCiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLAogCQkJCXN1cHBvcnRlZF9iaXRtYXNrKTsKIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLAogCQkJCW5yX2ZpeGVkX2NvdW50ZXJzKTsKIAogCXJ1bl92Y3B1KHZjcHUpOwomIzQzO30KIAotCWt2bV92bV9mcmVlKHZtKTsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpCiYjNDM7ewomIzQzOwl1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwl1MzIgazsKJiM0MzsJdTggajsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1Rlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAomIzQzOwkJbnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyAmIzQzOyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksCiYjNDM7CQkJCSAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiYjNDM7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGsgPSAwOyBrICZsdDs9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KQomIzQzOwkJCV9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpJiM0MzsmIzQzO10sIGosIGspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIHsKLQl1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7Ci0JdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwogCXU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pOwogCXVuc2lnbmVkIGludCBpOwotCXU4IHYsIGo7Ci0JdTMyIGs7CiYjNDM7CXU4IHY7CiAKIAljb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7CiAJCTAsCiAJCVBNVV9DQVBfRldfV1JJVEVTLAogCX07CiAKLQkvKgotCSAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsCi0JICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdAotCSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKLQkgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZQotCSAqIHdyb25nIGJpdChzKS4KLQkgKi8KLQljb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHsKLQkJMHgwLAotCQkweGZmZmZmZmZmdSwKLQkJMHhhYWFhYWFhYXUsCi0JCTB4NTU1NTU1NTV1LAotCQkweGYwZjBmMGYwdSwKLQkJMHgwZjBmMGYwZnUsCi0JCTB4YTBhMGEwYTB1LAotCQkweDBhMGEwYTBhdSwKLQkJMHg1MDUwNTA1MHUsCi0JCTB4MDUwNTA1MDV1LAotCX07Ci0KIAkvKgogCSAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieQogCSAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkcwpAQCAtNjQ5LDMyICYjNDM7NzAxLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKQogCQkJaWYgKCFrdm1faGFzX3BlcmZfY2FwcyAmYW1wOyZhbXA7IHBlcmZfY2Fwc1tpXSkKIAkJCQljb250aW51ZTsKIAotCQkJcHJfaW5mbygmIzM0O1Rlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAotCQkJCXYsIHBlcmZfY2Fwc1tpXSk7Ci0KLQkJCS8qCi0JCQkgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAKLQkJCSAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbwotCQkJICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZQotCQkJICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsCi0JCQkgKiBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgotCQkJICovCi0JCQlmb3IgKGogPSAwOyBqICZsdDs9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKLQkJCX0KLQotCQkJcHJfaW5mbygmIzM0O1Rlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcbiYjMzQ7LAotCQkJCXYsIHBlcmZfY2Fwc1tpXSk7Ci0JCQlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2dwX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykKLQkJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaik7Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKLQkJCQlmb3IgKGsgPSAwOyBrICZsdDs9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KQotCQkJCQl0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7Ci0JCQl9CiYjNDM7CQkJdGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pOwomIzQzOwkJCXRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiAJCX0KIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBLVk0gc2VsZnRlc3RzLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHBtdV9jb3VudGVyc190ZXN0LmNgLCBgdGVzdF91dGlsLmNgLCBhbmQgYSBoZWFkZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIHRlc3QgbG9naWMuIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCBmdW5jdGlvbiwgYW5kIHNpZ25pZmljYW50bHksIHRoZXkmIzM5O3JlIGNoYW5naW5nIGBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHVgIHRvIGEgbXVsdGktdkNQVSB2YXJpYW50LiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlIHRvIHJlZHVjZSBvdmVyaGVhZCBieSByZXVzaW5nIFZNcyBhY3Jvc3MgaXRlcmF0aW9ucy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBjaGFuZ2VzIHRoYXQgKndvdWxkKiBiZSByZWxldmFudCB0byBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciwgb3IgYW55IG90aGVyIGZ1enplciwgd291bGQgYmUgaW50ZXJlc3RlZCBpbi4KCkxldCBtZSBqdXN0IGRvdWJsZSBjaGVjazsgSSYjMzk7bSBwcmV0dHkgc3VyZSBzZWxmdGVzdHMgYXJlIGluIHRoZSBjbGVhci4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmLCBhbmQgeWVwLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIGNvZGUuIEkmIzM5O20gc2VlaW5nOgotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGAKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2AKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYAoKVGhlIGNvZGUgaXMgcHVyZWx5IGluIHRoZSBzZWxmdGVzdHMgd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCYjMzk7cyBub3QgYSBrZXJuZWwgbW9kaWZpY2F0aW9uLCBzbyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0IGRvZXMgbm90IGxvb2sgbGlrZSB0aGVyZSYjMzk7cyBhbnkga2VybmVsIGNvZGUgdGhhdCBjb3VsZCBiZSBmdXp6ZWQgYXMgYSByZXN1bHQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCYjMzk7cyBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb2RlIGNvbW1lbnRzLiBUaGVyZSYjMzk7cyBub3RoaW5nIGV4cGxpY2l0bHkgYWJvdXQgJiMzNDtzZWxmdGVzdHMmIzM0OywgYnV0IEkga25vdyB0aGF0IHNlbGZ0ZXN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSB0aGF0IHdvdWxkIGJlIGZ1enplZC4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYW5hbHlzaXMuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEtWTSBzZWxmdGVzdHMgdG8gZW5oYW5jZSB0aGVpciBwZXJmb3JtYW5jZS4gTm8ga2VybmVsIGNoYW5nZXMsIG5vIGZ1enppbmcgaW1wbGljYXRpb25zLiBJJiMzOTttIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTowNzo1MC4xNDgyNTg5NzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY3NDk4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjUwLjE0ODI2NTMyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTQ4NTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlYTNlNTk0YWI1YTg5Y2E2ZGQzYzQ4ODFmOGRmMTcyYTVlNmQwODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTowNzo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcXG4gXFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xcbiBcXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiBcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZXNlZWQ7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxcbit7XFxuK1xcdHUzMiB2YWx1ZSwgcmFuZ2U7XFxuK1xcbitcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gdmFsdWU7XFxuK1xcbitcXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xcbit9XFxuK1xcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcXG4tXFx0XFx0XFx0ICAgIHU2NCBtYXgpXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXFxuIHtcXG4tXFx0dTY0IHZhbHVlO1xcbi1cXHR1NjQgcmFuZ2U7XFxuK1xcdHU2NCB2YWx1ZSwgcmFuZ2U7XFxuIFxcbiBcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcXFwiLCBtaW4sIG1heCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5pbmRleCBkYzZhZmFjM2FhOTE5Li4wOGJmYTgyZDdhYjg0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxcbiBcXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpndWVzdF9jb2RlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IHBtdV92ZXJzaW9uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKCp2Y3B1cykpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuIFxcbi1cXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHQqX192Y3B1cyA9IHZjcHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcXG4gXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XFxuIFxcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXFxuIFxcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xcbiBcXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuLVxcdFxcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxcbitcXHRcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XFxuK1xcdH1cXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4gXFx0cmV0dXJuIHZtO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXFxuK3tcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRmcmVlKHZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcXG4gXFx0dTMyIGJhc2VfcG1jX21zcjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHU2NCBldmVudHNlbDtcXG4gXFxuIFxcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXFxuIFxcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XFxuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XFxuK1xcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XFxuLVxcdFxcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XFxuLVxcdFxcdFxcdFxcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbitcXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbitcXHRcXHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcXG4gXFxuLVxcdFxcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbi1cXHRcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuLVxcdFxcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbitcXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcXG4rXFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbitcXHRcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcXG4gXFxuLVxcdFxcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcXG4tXFx0XFx0XFx0XFx0XFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbi1cXHR9XFxuK1xcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbiBcXG4gXFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xcbi1cXHRpZiAoIXBtdV92ZXJzaW9uKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHR1bmF2YWlsYWJsZV9tYXNrIFxcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXFxuIFxcdFxcdFxcdFxcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuLVxcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcXG4gXFx0XFx0XFx0XFx0bGVuZ3RoKTtcXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcXG4gXFx0XFx0XFx0XFx0dW5hdmFpbGFibGVfbWFzayk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdHUzMiBrO1xcbitcXHR1OCBqO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4rXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbitcXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuK1xcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuK1xcdCAqIHdyb25nIGJpdChzKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbitcXHRcXHQweDAsXFxuK1xcdFxcdDB4ZmZmZmZmZmZ1LFxcbitcXHRcXHQweGFhYWFhYWFhdSxcXG4rXFx0XFx0MHg1NTU1NTU1NXUsXFxuK1xcdFxcdDB4ZjBmMGYwZjB1LFxcbitcXHRcXHQweDBmMGYwZjBmdSxcXG4rXFx0XFx0MHhhMGEwYTBhMHUsXFxuK1xcdFxcdDB4MGEwYTBhMGF1LFxcbitcXHRcXHQweDUwNTA1MDUwdSxcXG4rXFx0XFx0MHgwNTA1MDUwNXUsXFxuK1xcdH07XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuK1xcdGlmICghcG11X3ZlcnNpb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogKEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpIC0gMSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXFxuK1xcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXFxuK1xcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXFxuK1xcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAxOyBrIFxcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ5NSwyMSArNTQ4LDI2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1OCBqO1xcbiBcXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuLVxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFxcdTAwMjZ2Y3B1cyk7XFxuIFxcbi1cXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLCBqKTtcXG4gXFxuLVxcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0XFx0cnVuX3ZjcHUodmNwdXNbal0pO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuQEAgLTU2MSw1OSArNjE5LDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbi1cXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxcbiBcXHRcXHRcXHRcXHRzdXBwb3J0ZWRfYml0bWFzayk7XFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXFxuIFxcdFxcdFxcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgaztcXG4rXFx0dTggajtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyArIDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4ge1xcbi1cXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuLVxcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4gXFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbi1cXHR1OCB2LCBqO1xcbi1cXHR1MzIgaztcXG4rXFx0dTggdjtcXG4gXFxuIFxcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcXG4gXFx0XFx0MCxcXG4gXFx0XFx0UE1VX0NBUF9GV19XUklURVMsXFxuIFxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbi1cXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuLVxcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4tXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4tXFx0ICogd3JvbmcgYml0KHMpLlxcbi1cXHQgKi9cXG4tXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuLVxcdFxcdDB4MCxcXG4tXFx0XFx0MHhmZmZmZmZmZnUsXFxuLVxcdFxcdDB4YWFhYWFhYWF1LFxcbi1cXHRcXHQweDU1NTU1NTU1dSxcXG4tXFx0XFx0MHhmMGYwZjBmMHUsXFxuLVxcdFxcdDB4MGYwZjBmMGZ1LFxcbi1cXHRcXHQweGEwYTBhMGEwdSxcXG4tXFx0XFx0MHgwYTBhMGEwYXUsXFxuLVxcdFxcdDB4NTA1MDUwNTB1LFxcbi1cXHRcXHQweDA1MDUwNTA1dSxcXG4tXFx0fTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxcbiBcXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcXG5AQCAtNjQ5LDMyICs3MDEsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcXG4tXFx0XFx0XFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xcbi1cXHRcXHRcXHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXFxuLVxcdFxcdFxcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZCBhbGxcXG4tXFx0XFx0XFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcXG4tXFx0XFx0XFx0XFx0Zm9yIChrID0gMTsgayBcXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXFxuLVxcdFxcdFxcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcXG4tXFx0XFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xcbi1cXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0diwgcGVyZl9jYXBzW2ldKTtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuK1xcdFxcdFxcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6MDc6NTEuNDc4NzQyNjI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODIzNzAxMDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWEzZTU5NGFiNWE4OWNhNmRkM2M0ODgxZjhkZjE3MmE1ZTZkMDg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTowNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIFx0cmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSBcdTAwM2NcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xuIH1cbiBcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuLVx0XHRcdCAgICB1NjQgbWF4KTtcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KTtcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIFx0cmV0dXJuIHN0YXRlLVx1MDAzZXNlZWQ7XG4gfVxuIFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4re1xuK1x0dTMyIHZhbHVlLCByYW5nZTtcbitcbitcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCJQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXhcIiwgbWluLCBtYXgpO1xuK1xuK1x0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4rXG4rXHRyYW5nZSA9IG1heCAtIG1pbjtcbitcdGlmIChyYW5nZSA9PSBVSU5UX01BWClcbitcdFx0cmV0dXJuIHZhbHVlO1xuK1xuK1x0cmV0dXJuIG1pbiArICh2YWx1ZSAlIChyYW5nZSArIDEpKTtcbit9XG4rXG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KVxuIHtcbi1cdHU2NCB2YWx1ZTtcbi1cdHU2NCByYW5nZTtcbitcdHU2NCB2YWx1ZSwgcmFuZ2U7XG4gXG4gXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcIiwgbWluLCBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuaW5kZXggZGM2YWZhYzNhYTkxOS4uMDhiZmE4MmQ3YWI4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5AQCAtODcsMTQgKzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeClcbiBcdHJldHVybiBfX2ludGVsX2V2ZW50X3RvX2ZlYXR1cmVbaWR4XTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuLVx0XHRcdFx0XHRcdCAgdm9pZCAqZ3Vlc3RfY29kZSxcbi1cdFx0XHRcdFx0XHQgIHU4IHBtdV92ZXJzaW9uLFxuLVx0XHRcdFx0XHRcdCAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuK1x0XHRcdFx0XHQgICAgICAgdTggcG11X3ZlcnNpb24sXG4rXHRcdFx0XHRcdCAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXMgPSBjYWxsb2MobnJfdmNwdXMsIHNpemVvZigqdmNwdXMpKTtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGk7XG4gXG4tXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0Kl9fdmNwdXMgPSB2Y3B1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBrdm1fcG11X3ZlcnNpb24pO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XG4gXG5AQCAtMTAyLDEzICsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXG4gXHQgKi9cbi1cdGlmIChrdm1faGFzX3BlcmZfY2Fwcylcbi1cdFx0dmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuK1x0XHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4rXHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4rXHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cylcbit7XG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRmcmVlKHZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiArMjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcbiBcdHUzMiBiYXNlX3BtY19tc3I7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbitcdHU2NCBldmVudHNlbDtcbiBcbiBcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRHVUVTVF9BU1NFUlRfRVEoaWR4LCBncF9ldmVudC5mLmJpdCk7XG4gXG4gXHRHVUVTVF9BU1NFUlQobnJfZ3BfY291bnRlcnMpO1xuK1x0aSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDAsIG5yX2dwX2NvdW50ZXJzIC0gMSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XG4tXHRcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XG4tXHRcdFx0XHQgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4tXHRcdFx0XHQgICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XG4rXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuK1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XG4tXHRcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbi1cdFx0XHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcbitcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xuK1x0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuK1x0XHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcbiBcbi1cdFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XG4tXHR9XG4rXHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciArIGksIE1TUl9QNl9FVk5UU0VMMCArIGksIGV2ZW50c2VsKTtcbiBcbiBcdGlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4gXHRcdHJldHVybjtcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuK1x0XHRcdCAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVxuLVx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4tXHRpZiAoIXBtdV92ZXJzaW9uKVxuLVx0XHRyZXR1cm47XG4tXG4gXHR1bmF2YWlsYWJsZV9tYXNrIFx1MDAyNj0gR0VOTUFTSyhYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmhpX2JpdCxcbiBcdFx0XHRcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XG4gXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbi1cbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRUJYX0JJVF9WRUNUT1JfTEVOR1RILFxuIFx0XHRcdFx0bGVuZ3RoKTtcbiBcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssXG4gXHRcdFx0XHR1bmF2YWlsYWJsZV9tYXNrKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdC8qXG4rXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuK1x0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuK1x0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuK1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbitcdCAqIHdyb25nIGJpdChzKS5cbitcdCAqL1xuK1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4rXHRcdDB4MCxcbitcdFx0MHhmZmZmZmZmZnUsXG4rXHRcdDB4YWFhYWFhYWF1LFxuK1x0XHQweDU1NTU1NTU1dSxcbitcdFx0MHhmMGYwZjBmMHUsXG4rXHRcdDB4MGYwZjBmMGZ1LFxuK1x0XHQweGEwYTBhMGEwdSxcbitcdFx0MHgwYTBhMGEwYXUsXG4rXHRcdDB4NTA1MDUwNTB1LFxuK1x0XHQweDA1MDUwNTA1dSxcbitcdH07XG4rXG4rXHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuK1x0XHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4rXHRpZiAoIXBtdV92ZXJzaW9uKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAyKSAqIChBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSAtIDEpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4rXHRcdFx0XHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXG4rXHQgKiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aFxuK1x0ICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmRcbitcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxuK1x0ICovXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMTsgayBcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcbitcdFx0XHRfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSsrXSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosXG4rXHRcdFx0XHRcdCAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIC8qXG5AQCAtNDk1LDIxICs1NDgsMjYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbitzdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHU4IGo7XG4gXG4tXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxuLVx0XHRcdFx0XHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuIFxuLVx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbi1cdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbitcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICsgMSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuIFxuLVx0cnVuX3ZjcHUodmNwdSk7XG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKykge1xuK1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywgaik7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgKzYxOSw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHRcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4rXHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbitcdFx0XHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbitcdHU4IHY7XG4gXG4gXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XG4gXHRcdDAsXG4gXHRcdFBNVV9DQVBfRldfV1JJVEVTLFxuIFx0fTtcbiBcbi1cdC8qXG4tXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuLVx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuLVx0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuLVx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbi1cdCAqIHdyb25nIGJpdChzKS5cbi1cdCAqL1xuLVx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4tXHRcdDB4MCxcbi1cdFx0MHhmZmZmZmZmZnUsXG4tXHRcdDB4YWFhYWFhYWF1LFxuLVx0XHQweDU1NTU1NTU1dSxcbi1cdFx0MHhmMGYwZjBmMHUsXG4tXHRcdDB4MGYwZjBmMGZ1LFxuLVx0XHQweGEwYTBhMGEwdSxcbi1cdFx0MHgwYTBhMGEwYXUsXG4tXHRcdDB4NTA1MDUwNTB1LFxuLVx0XHQweDA1MDUwNTA1dSxcbi1cdH07XG4tXG4gXHQvKlxuIFx0ICogVGVzdCB1cCB0byBQTVUgdjUsIHdoaWNoIGlzIHRoZSBjdXJyZW50IG1heGltdW0gdmVyc2lvbiBkZWZpbmVkIGJ5XG4gXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcbkBAIC02NDksMzIgKzcwMSw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cFxuLVx0XHRcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbitcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuK1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjUxLjQ3ODc0NDU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzY5ODUxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgS1ZNIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBwbXVfY291bnRlcnNfdGVzdC5jYCwgYHRlc3RfdXRpbC5jYCwgYW5kIGEgaGVhZGVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSB0ZXN0IGxvZ2ljLiBUaGV5J3JlIGludHJvZHVjaW5nIGEgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCBmdW5jdGlvbiwgYW5kIHNpZ25pZmljYW50bHksIHRoZXkncmUgY2hhbmdpbmcgYHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdWAgdG8gYSBtdWx0aS12Q1BVIHZhcmlhbnQuIFRoZSBnb2FsIGFwcGVhcnMgdG8gYmUgdG8gcmVkdWNlIG92ZXJoZWFkIGJ5IHJldXNpbmcgVk1zIGFjcm9zcyBpdGVyYXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgY2hhbmdlcyB0aGF0ICp3b3VsZCogYmUgcmVsZXZhbnQgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IHRvdWNoaW5nIGFueSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciwgb3IgYW55IG90aGVyIGZ1enplciwgd291bGQgYmUgaW50ZXJlc3RlZCBpbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrOyBJJ20gcHJldHR5IHN1cmUgc2VsZnRlc3RzIGFyZSBpbiB0aGUgY2xlYXIuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBkaWZmLCBhbmQgeWVwLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgY29kZS4gSSdtIHNlZWluZzpcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2Bcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY2BcblxuVGhlIGNvZGUgaXMgcHVyZWx5IGluIHRoZSBzZWxmdGVzdHMgd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCdzIG5vdCBhIGtlcm5lbCBtb2RpZmljYXRpb24sIHNvIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQgZG9lcyBub3QgbG9vayBsaWtlIHRoZXJlJ3MgYW55IGtlcm5lbCBjb2RlIHRoYXQgY291bGQgYmUgZnV6emVkIGFzIGEgcmVzdWx0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCdzIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvZGUgY29tbWVudHMuIFRoZXJlJ3Mgbm90aGluZyBleHBsaWNpdGx5IGFib3V0IFwic2VsZnRlc3RzXCIsIGJ1dCBJIGtub3cgdGhhdCBzZWxmdGVzdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgaW1hZ2UgdGhhdCB3b3VsZCBiZSBmdXp6ZWQuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBhbmFseXNpcy4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBvZiB0aGUgS1ZNIHNlbGZ0ZXN0cyB0byBlbmhhbmNlIHRoZWlyIHBlcmZvcm1hbmNlLiBObyBrZXJuZWwgY2hhbmdlcywgbm8gZnV6emluZyBpbXBsaWNhdGlvbnMuIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzMywiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjA3OjU5LjcxNTczMjE4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gdG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24gYnkgdXNpbmcgbXVsdGlwbGUgdkNQVXMgaW5zdGVhZCBvZiByZWNyZWF0aW5nIFZNcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB0byBvcHRpbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBieSB1c2luZyBtdWx0aXBsZSB2Q1BVcyBpbnN0ZWFkIG9mIHJlY3JlYXRpbmcgVk1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bpzc[1] Phase: Running StartedAt: 2026-08-04 21:08:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bpzc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 21:08:11 +0000 UTC FinishedAt: 2026-08-04 21:08:16 +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,}