Name: series-workflowbckpt Phase: Failed StartedAt: 2026-06-23 09:49:25 +0000 UTC FinishedAt: 2026-06-23 09:58:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbckpt[0] Phase: Succeeded StartedAt: 2026-06-23 09:49:25 +0000 UTC FinishedAt: 2026-06-23 09:57:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbckpt[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 09:49:25 +0000 UTC FinishedAt: 2026-06-23 09:57:53 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTI3MTBlMDQ1ODY0YWI0YjhhMzdkZWY4ZTVjYzA3ZmY5NWZkMmVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6NTc6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBjMGE3ZjFjZjZmZWY1Yy4uMWE0Mjg2MGU4NmU5ZTcgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTc5NywyOCAmIzQzOzc5Nyw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXG4tc3RhdGljIGJvb2wgX19tZW1pbml0XG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcbi17XG4tXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xuLVxuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4tXHRcdGlmICghciB8fCAqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XG4tXHRcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0XHRpZiAoKnBmbiBcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0aWYgKCpwZm4gXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7XG4tXHRcdFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTkwNSw4ICYjNDM7ODgzLDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcbi1cdFx0XHRpZiAob3ZlcmxhcF9tZW1tYXBfaW5pdCh6b25lLCBcdTAwMjZwZm4pKVxuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcbiBcdFx0XHRcdGRlZmVycmVkX3N0cnVjdF9wYWdlcyA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMTcwLDggJiM0MzsxMTQ2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbiBcdFx0XHRcdGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTtcbiBcbiBcdFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cbi1cdFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbkBAIC0xMjIwLDQwICYjNDM7MTE5NSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcbi1cbiBcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbiYjMzk7dCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBucl9hYnNlbnQ7XG4mIzQzO1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290IChgX19pbml0YCBmdW5jdGlvbnMgYW5kIGBNRU1JTklUX0VBUkxZYCBjb250ZXh0KS4gVGhpcyBjb2RlIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGJ5IGEgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTEyNzEwZTA0NTg2NGFiNGI4YTM3ZGVmOGU1Y2MwN2ZmOTVmZDJlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA5OjU3OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IGMwYTdmMWNmNmZlZjVjLi4xYTQyODYwZTg2ZTllNyAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtNzk3LDI4ICYjNDM7Nzk3LDYgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogCV9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTsKIH0KIAotLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovCi1zdGF0aWMgYm9vbCBfX21lbWluaXQKLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pCi17Ci0Jc3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTsKLQotCWlmIChtaXJyb3JlZF9rZXJuZWxjb3JlICZhbXA7JmFtcDsgem9uZSA9PSBaT05FX01PVkFCTEUpIHsKLQkJaWYgKCFyIHx8ICpwZm4gJmd0Oz0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7Ci0JCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCQlpZiAoKnBmbiAmbHQ7IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCpwZm4gJmd0Oz0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSAmYW1wOyZhbXA7Ci0JCSAgICBtZW1ibG9ja19pc19taXJyb3IocikpIHsKLQkJCSpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qCiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5CiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZwpAQCAtOTA1LDggJiM0Mzs4ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZQogCQkgKiBmdW5jdGlvbi4gIFRoZXkgZG8gbm90IGV4aXN0IG9uIGhvdHBsdWdnZWQgbWVtb3J5LgogCQkgKi8KIAkJaWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkgewotCQkJaWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgJmFtcDtwZm4pKQotCQkJCWNvbnRpbnVlOwogCQkJaWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHsKIAkJCQlkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMTE3MCw4ICYjNDM7MTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsCiAJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pOwogCiAJCS8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovCi0JCX0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgJmFtcDsmYW1wOwotCQkJKnpvbmVfc3RhcnRfcGZuICZsdDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdICZhbXA7JmFtcDsKJiM0MzsJCX0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuICZsdDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdICZhbXA7JmFtcDsKIAkJCSp6b25lX2VuZF9wZm4gJmd0OyB6b25lX21vdmFibGVfcGZuW25pZF0pIHsKIAkJCSp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07CiAKQEAgLTEyMjAsNDAgJiM0MzsxMTk1LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbnJfYWJzZW50OwotCiAJLyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJiMzOTt0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqLwogCWlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pCiAJCXJldHVybiAwOwogCi0JbnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCS8qCi0JICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLgotCSAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXMKLQkgKiBhbmQgdmljZSB2ZXJzYS4KLQkgKi8KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjsKLQotCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCXN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksCi0JCQkJCSAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Ci0JCQllbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLAotCQkJCQl6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCQkJaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOwotCQkJICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkKLQkJCQlucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47Ci0KLQkJCWlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgJmFtcDsmYW1wOwotCQkJICAgICFtZW1ibG9ja19pc19taXJyb3IocikpCi0JCQkJbnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl9Ci0JfQotCi0JcmV0dXJuIG5yX2Fic2VudDsKJiM0MzsJcmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDEKCQkJCQkJCW91dHB1dDogNzcKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEluaXRpYWxpemF0aW9uIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIGZldyBmdW5jdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBpbml0aWFsaXphdGlvbjogYG92ZXJsYXBfbWVtbWFwX2luaXRgLCB0aGUgYCFtaXJyb3JlZF9rZXJuZWxjb3JlYCBjaGVjaywgYW5kIHNvbWUgYWJzZW50IHBhZ2UgY2FsY3VsYXRpb25zLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24sIGdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIGlzIHRoYXQgdGhlc2UgYXJlICplYXJseSBib290KiBvcGVyYXRpb25zLCBsaWtlbHkgbWFya2VkIHdpdGggYF9fbWVtaW5pdGAgb3IgYF9faW5pdGAgYXR0cmlidXRlcy4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBmdXp6aW5nIHRoZXNlIHBhdGhzIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB3b3VsZCBiZSBpbXBvc3NpYmxlLCBhcyB0aGV5IGFyZSBub3QgZXhwb3NlZCB2aWEgc3lzY2FsbHMgb3IgcnVudGltZSBpbnRlcmZhY2VzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbml0aWFsaXphdGlvbiBjb2RlLgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgbWVtbWFwX2luaXRfcmFuZ2VgIOKAkyBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCDigJMgKmlzKiBtYXJrZWQgYXMgYF9fbWVtaW5pdGAsIHdoaWNoIG1lYW5zIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGR1cmluZyBob3RwbHVnLgoKQWxyaWdodCwgYSBxdWljayByZXZpZXcgc2hvd3MgdGhhdCBgbWVtbWFwX2luaXRfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZWAgYW5kIGBtZW1tYXBfaW5pdGAsIGFuZCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogIGBpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKWAgd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAgd2hlcmUgdGhlIHJlbW92ZWQgY29kZSByZXNpZGVzLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgY29uZmlybWluZyB0aGUgcmVtb3ZlZCBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QuICBUaGUgY2hhbmdlcyBpbiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYWxzbyBtYXJrZWQgYXMgYF9faW5pdGAsIG1lYW5pbmcgZWFybHkgYm9vdCBvbmx5LgoKVGhlcmVmb3JlLCBzaW5jZSBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBvciBndWFyZGVkIGJ5IGBNRU1JTklUX0VBUkxZYCBjb25kaXRpb25zLCB0aGlzIGNvbmNsdXNpdmVseSBtZWFucyB0aGV5IGFyZSAqbm90KiBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCBibG9jayBzcGVjaWZpY2FsbHk6CgpgYGBjCgkJaWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkgewotCQkJaWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgJmFtcDtwZm4pKQotCQkJCWNvbnRpbnVlOwpgYGAKWXVwLCBpdCYjMzk7cyBkZWZpbml0aXZlbHkgd2l0aGluIHRoZSBlYXJseSBib290IGNvbmRpdGlvbmFsLgoKU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdGhhdCBoYXBwZW5zIGJlZm9yZSB0aGUga2VybmVsIGlzIGZ1bGx5IHVwIGFuZCBydW5uaW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgZm9yIHRoaXMgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZWFybHkgYm9vdCByb3V0aW5lcyBpbmFjY2Vzc2libGUgdG8gYSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzEuNTgwNTgxNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3NzAyOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290IChgX19pbml0YCBmdW5jdGlvbnMgYW5kIGBNRU1JTklUX0VBUkxZYCBjb250ZXh0KS4gVGhpcyBjb2RlIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGJ5IGEgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzEuNTgwNTg4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NDc4MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTEyNzEwZTA0NTg2NGFiNGI4YTM3ZGVmOGU1Y2MwN2ZmOTVmZDJlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo1NzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCBjMGE3ZjFjZjZmZWY1Yy4uMWE0Mjg2MGU4NmU5ZTcgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTc5NywyOCArNzk3LDYgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiBcXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XFxuIH1cXG4gXFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xcbi1zdGF0aWMgYm9vbCBfX21lbWluaXRcXG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcXG4te1xcbi1cXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xcbi1cXG4tXFx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjYgem9uZSA9PSBaT05FX01PVkFCTEUpIHtcXG4tXFx0XFx0aWYgKCFyIHx8ICpwZm4gXFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XFxuLVxcdFxcdFxcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xcbi1cXHRcXHRcXHRcXHRpZiAoKnBmbiBcXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAoKnBmbiBcXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBtZW1ibG9ja19pc19taXJyb3IocikpIHtcXG4tXFx0XFx0XFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcXG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5AQCAtOTA1LDggKzg4Myw2IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXFxuIFxcdFxcdCAqIGZ1bmN0aW9uLiAgVGhleSBkbyBub3QgZXhpc3Qgb24gaG90cGx1Z2dlZCBtZW1vcnkuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XFxuLVxcdFxcdFxcdGlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsIFxcdTAwMjZwZm4pKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcXG4gXFx0XFx0XFx0XFx0ZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTExNzAsOCArMTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTtcXG4gXFxuIFxcdFxcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXFxuLVxcdFxcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCp6b25lX2VuZF9wZm4gXFx1MDAzZSB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcXG4gXFx0XFx0XFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcXG4gXFxuQEAgLTEyMjAsNDAgKzExOTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9hYnNlbnQ7XFxuLVxcbiBcXHQvKiB6b25lIGlzIGVtcHR5LCB3ZSBkb24ndCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cXG4gXFx0aWYgKHpvbmVfc3RhcnRfcGZuID09IHpvbmVfZW5kX3BmbilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRucl9hYnNlbnQgPSBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLlxcbi1cXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXFxuLVxcdCAqIGFuZCB2aWNlIHZlcnNhLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjYgem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuO1xcbi1cXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyO1xcbi1cXG4tXFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuLVxcdFxcdFxcdHN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksXFxuLVxcdFxcdFxcdFxcdFxcdCAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcdFxcdFxcdGVuZF9wZm4gPSBjbGFtcChtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ociksXFxuLVxcdFxcdFxcdFxcdFxcdHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSlcXG4tXFx0XFx0XFx0XFx0bnJfYWJzZW50ICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XFxuLVxcbi1cXHRcXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTk9STUFMIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAhbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxcbi1cXHRcXHRcXHRcXHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gbnJfYWJzZW50O1xcbitcXHRyZXR1cm4gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzIuMjE5MzQzMjk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTM4MjU2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExMjcxMGUwNDU4NjRhYjRiOGEzN2RlZjhlNWNjMDdmZjk1ZmQyZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo1NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggYzBhN2YxY2Y2ZmVmNWMuLjFhNDI4NjBlODZlOWU3IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC03OTcsMjggKzc5Nyw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXG4tc3RhdGljIGJvb2wgX19tZW1pbml0XG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcbi17XG4tXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xuLVxuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4tXHRcdGlmICghciB8fCAqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XG4tXHRcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0XHRpZiAoKnBmbiBcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0aWYgKCpwZm4gXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7XG4tXHRcdFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTkwNSw4ICs4ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZVxuIFx0XHQgKiBmdW5jdGlvbi4gIFRoZXkgZG8gbm90IGV4aXN0IG9uIGhvdHBsdWdnZWQgbWVtb3J5LlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkge1xuLVx0XHRcdGlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsIFx1MDAyNnBmbikpXG4tXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoZGVmZXJfaW5pdChuaWQsIHBmbiwgem9uZV9lbmRfcGZuKSkge1xuIFx0XHRcdFx0ZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTExNzAsOCArMTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXG4gXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4gXG4gXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4rXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbkBAIC0xMjIwLDQwICsxMTk1LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfYWJzZW50O1xuLVxuIFx0Lyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJ3QgaGF2ZSBhbnkgYWJzZW50IHBhZ2VzICovXG4gXHRpZiAoem9uZV9zdGFydF9wZm4gPT0gem9uZV9lbmRfcGZuKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdG5yX2Fic2VudCA9IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXG4tXHQvKlxuLVx0ICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLlxuLVx0ICogVHJlYXQgcGFnZXMgdG8gYmUgWk9ORV9NT1ZBQkxFIGluIFpPTkVfTk9STUFMIGFzIGFic2VudCBwYWdlc1xuLVx0ICogYW5kIHZpY2UgdmVyc2EuXG4tXHQgKi9cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47XG4tXHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XG4tXG4tXHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdHN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksXG4tXHRcdFx0XHRcdCAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXHRcdFx0ZW5kX3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSxcbi1cdFx0XHRcdFx0em9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXG4tXHRcdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSlcbi1cdFx0XHRcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3Bmbjtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIG5yX2Fic2VudDtcbitcdHJldHVybiBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzIuMjE5MzQ1MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzODIxODQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIGZldyBmdW5jdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBpbml0aWFsaXphdGlvbjogYG92ZXJsYXBfbWVtbWFwX2luaXRgLCB0aGUgYCFtaXJyb3JlZF9rZXJuZWxjb3JlYCBjaGVjaywgYW5kIHNvbWUgYWJzZW50IHBhZ2UgY2FsY3VsYXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgaXMgdGhhdCB0aGVzZSBhcmUgKmVhcmx5IGJvb3QqIG9wZXJhdGlvbnMsIGxpa2VseSBtYXJrZWQgd2l0aCBgX19tZW1pbml0YCBvciBgX19pbml0YCBhdHRyaWJ1dGVzLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gZnV6emluZyB0aGVzZSBwYXRocyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgaW1wb3NzaWJsZSwgYXMgdGhleSBhcmUgbm90IGV4cG9zZWQgdmlhIHN5c2NhbGxzIG9yIHJ1bnRpbWUgaW50ZXJmYWNlcy4gSXQncyBlc3NlbnRpYWxseSBpbml0aWFsaXphdGlvbiBjb2RlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIHByZWNpc2UuICBJJ20gcmVjYWxsaW5nIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCDigJMgb25lIG9mIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQg4oCTICppcyogbWFya2VkIGFzIGBfX21lbWluaXRgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLiBUaGF0J3MgYSBrZXkgZGV0YWlsISBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGR1cmluZyBob3RwbHVnLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBzaG93cyB0aGF0IGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1tYXBfaW5pdF96b25lYCBhbmQgYG1lbW1hcF9pbml0YCwgYW5kIEkgY2FuIHNlZSB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50OiAgYGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpYCB3aXRoaW4gYG1lbW1hcF9pbml0X3JhbmdlYCB3aGVyZSB0aGUgcmVtb3ZlZCBjb2RlIHJlc2lkZXMuIFRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLCBjb25maXJtaW5nIHRoZSByZW1vdmVkIGNvZGUgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdC4gIFRoZSBjaGFuZ2VzIGluIGBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlYCBhbmQgYHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVgIGFyZSBhbHNvIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBlYXJseSBib290IG9ubHkuXG5cblRoZXJlZm9yZSwgc2luY2UgYWxsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHdpdGhpbiBgX19pbml0YCBmdW5jdGlvbnMgb3IgZ3VhcmRlZCBieSBgTUVNSU5JVF9FQVJMWWAgY29uZGl0aW9ucywgdGhpcyBjb25jbHVzaXZlbHkgbWVhbnMgdGhleSBhcmUgKm5vdCogYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCBibG9jayBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcblx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XG4tXHRcdFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXHUwMDI2cGZuKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuYGBgXG5ZdXAsIGl0J3MgZGVmaW5pdGl2ZWx5IHdpdGhpbiB0aGUgZWFybHkgYm9vdCBjb25kaXRpb25hbC5cblxuU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdGhhdCBoYXBwZW5zIGJlZm9yZSB0aGUga2VybmVsIGlzIGZ1bGx5IHVwIGFuZCBydW5uaW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgZm9yIHRoaXMgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZWFybHkgYm9vdCByb3V0aW5lcyBpbmFjY2Vzc2libGUgdG8gYSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEsIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo1Nzo0MS43NTc1NjYzMDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbckpt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 09:49:25 +0000 UTC FinishedAt: 2026-06-23 09:57:42 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMTI3MTBlMDQ1ODY0YWI0YjhhMzdkZWY4ZTVjYzA3ZmY5NWZkMmVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6NTc6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBjMGE3ZjFjZjZmZWY1Yy4uMWE0Mjg2MGU4NmU5ZTcgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTc5NywyOCAmIzQzOzc5Nyw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXG4tc3RhdGljIGJvb2wgX19tZW1pbml0XG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcbi17XG4tXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xuLVxuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4tXHRcdGlmICghciB8fCAqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XG4tXHRcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0XHRpZiAoKnBmbiBcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0aWYgKCpwZm4gXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7XG4tXHRcdFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTkwNSw4ICYjNDM7ODgzLDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcbi1cdFx0XHRpZiAob3ZlcmxhcF9tZW1tYXBfaW5pdCh6b25lLCBcdTAwMjZwZm4pKVxuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcbiBcdFx0XHRcdGRlZmVycmVkX3N0cnVjdF9wYWdlcyA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMTcwLDggJiM0MzsxMTQ2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbiBcdFx0XHRcdGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTtcbiBcbiBcdFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cbi1cdFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbkBAIC0xMjIwLDQwICYjNDM7MTE5NSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcbi1cbiBcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbiYjMzk7dCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBucl9hYnNlbnQ7XG4mIzQzO1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290IChgX19pbml0YCBmdW5jdGlvbnMgYW5kIGBNRU1JTklUX0VBUkxZYCBjb250ZXh0KS4gVGhpcyBjb2RlIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGJ5IGEgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTEyNzEwZTA0NTg2NGFiNGI4YTM3ZGVmOGU1Y2MwN2ZmOTVmZDJlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA5OjU3OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IGMwYTdmMWNmNmZlZjVjLi4xYTQyODYwZTg2ZTllNyAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtNzk3LDI4ICYjNDM7Nzk3LDYgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogCV9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTsKIH0KIAotLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovCi1zdGF0aWMgYm9vbCBfX21lbWluaXQKLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pCi17Ci0Jc3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTsKLQotCWlmIChtaXJyb3JlZF9rZXJuZWxjb3JlICZhbXA7JmFtcDsgem9uZSA9PSBaT05FX01PVkFCTEUpIHsKLQkJaWYgKCFyIHx8ICpwZm4gJmd0Oz0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7Ci0JCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCQlpZiAoKnBmbiAmbHQ7IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCpwZm4gJmd0Oz0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSAmYW1wOyZhbXA7Ci0JCSAgICBtZW1ibG9ja19pc19taXJyb3IocikpIHsKLQkJCSpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qCiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5CiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZwpAQCAtOTA1LDggJiM0Mzs4ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZQogCQkgKiBmdW5jdGlvbi4gIFRoZXkgZG8gbm90IGV4aXN0IG9uIGhvdHBsdWdnZWQgbWVtb3J5LgogCQkgKi8KIAkJaWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkgewotCQkJaWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgJmFtcDtwZm4pKQotCQkJCWNvbnRpbnVlOwogCQkJaWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHsKIAkJCQlkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMTE3MCw4ICYjNDM7MTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsCiAJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pOwogCiAJCS8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovCi0JCX0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgJmFtcDsmYW1wOwotCQkJKnpvbmVfc3RhcnRfcGZuICZsdDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdICZhbXA7JmFtcDsKJiM0MzsJCX0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuICZsdDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdICZhbXA7JmFtcDsKIAkJCSp6b25lX2VuZF9wZm4gJmd0OyB6b25lX21vdmFibGVfcGZuW25pZF0pIHsKIAkJCSp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07CiAKQEAgLTEyMjAsNDAgJiM0MzsxMTk1LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbnJfYWJzZW50OwotCiAJLyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJiMzOTt0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqLwogCWlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pCiAJCXJldHVybiAwOwogCi0JbnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCS8qCi0JICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLgotCSAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXMKLQkgKiBhbmQgdmljZSB2ZXJzYS4KLQkgKi8KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjsKLQotCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCXN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksCi0JCQkJCSAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Ci0JCQllbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLAotCQkJCQl6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCQkJaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOwotCQkJICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkKLQkJCQlucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47Ci0KLQkJCWlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgJmFtcDsmYW1wOwotCQkJICAgICFtZW1ibG9ja19pc19taXJyb3IocikpCi0JCQkJbnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl9Ci0JfQotCi0JcmV0dXJuIG5yX2Fic2VudDsKJiM0MzsJcmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDEKCQkJCQkJCW91dHB1dDogNzcKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEluaXRpYWxpemF0aW9uIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIGZldyBmdW5jdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBpbml0aWFsaXphdGlvbjogYG92ZXJsYXBfbWVtbWFwX2luaXRgLCB0aGUgYCFtaXJyb3JlZF9rZXJuZWxjb3JlYCBjaGVjaywgYW5kIHNvbWUgYWJzZW50IHBhZ2UgY2FsY3VsYXRpb25zLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24sIGdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIGlzIHRoYXQgdGhlc2UgYXJlICplYXJseSBib290KiBvcGVyYXRpb25zLCBsaWtlbHkgbWFya2VkIHdpdGggYF9fbWVtaW5pdGAgb3IgYF9faW5pdGAgYXR0cmlidXRlcy4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBmdXp6aW5nIHRoZXNlIHBhdGhzIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB3b3VsZCBiZSBpbXBvc3NpYmxlLCBhcyB0aGV5IGFyZSBub3QgZXhwb3NlZCB2aWEgc3lzY2FsbHMgb3IgcnVudGltZSBpbnRlcmZhY2VzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbml0aWFsaXphdGlvbiBjb2RlLgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgbWVtbWFwX2luaXRfcmFuZ2VgIOKAkyBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCDigJMgKmlzKiBtYXJrZWQgYXMgYF9fbWVtaW5pdGAsIHdoaWNoIG1lYW5zIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGR1cmluZyBob3RwbHVnLgoKQWxyaWdodCwgYSBxdWljayByZXZpZXcgc2hvd3MgdGhhdCBgbWVtbWFwX2luaXRfcmFuZ2VgIGlzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfem9uZWAgYW5kIGBtZW1tYXBfaW5pdGAsIGFuZCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudDogIGBpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKWAgd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAgd2hlcmUgdGhlIHJlbW92ZWQgY29kZSByZXNpZGVzLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgY29uZmlybWluZyB0aGUgcmVtb3ZlZCBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QuICBUaGUgY2hhbmdlcyBpbiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYWxzbyBtYXJrZWQgYXMgYF9faW5pdGAsIG1lYW5pbmcgZWFybHkgYm9vdCBvbmx5LgoKVGhlcmVmb3JlLCBzaW5jZSBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBvciBndWFyZGVkIGJ5IGBNRU1JTklUX0VBUkxZYCBjb25kaXRpb25zLCB0aGlzIGNvbmNsdXNpdmVseSBtZWFucyB0aGV5IGFyZSAqbm90KiBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCBibG9jayBzcGVjaWZpY2FsbHk6CgpgYGBjCgkJaWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkgewotCQkJaWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgJmFtcDtwZm4pKQotCQkJCWNvbnRpbnVlOwpgYGAKWXVwLCBpdCYjMzk7cyBkZWZpbml0aXZlbHkgd2l0aGluIHRoZSBlYXJseSBib290IGNvbmRpdGlvbmFsLgoKU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdGhhdCBoYXBwZW5zIGJlZm9yZSB0aGUga2VybmVsIGlzIGZ1bGx5IHVwIGFuZCBydW5uaW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgZm9yIHRoaXMgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZWFybHkgYm9vdCByb3V0aW5lcyBpbmFjY2Vzc2libGUgdG8gYSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzEuNTgwNTgxNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3NzAyOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290IChgX19pbml0YCBmdW5jdGlvbnMgYW5kIGBNRU1JTklUX0VBUkxZYCBjb250ZXh0KS4gVGhpcyBjb2RlIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGJ5IGEgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzEuNTgwNTg4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NDc4MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTEyNzEwZTA0NTg2NGFiNGI4YTM3ZGVmOGU1Y2MwN2ZmOTVmZDJlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo1NzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCBjMGE3ZjFjZjZmZWY1Yy4uMWE0Mjg2MGU4NmU5ZTcgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTc5NywyOCArNzk3LDYgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiBcXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XFxuIH1cXG4gXFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xcbi1zdGF0aWMgYm9vbCBfX21lbWluaXRcXG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcXG4te1xcbi1cXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xcbi1cXG4tXFx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjYgem9uZSA9PSBaT05FX01PVkFCTEUpIHtcXG4tXFx0XFx0aWYgKCFyIHx8ICpwZm4gXFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XFxuLVxcdFxcdFxcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xcbi1cXHRcXHRcXHRcXHRpZiAoKnBmbiBcXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAoKnBmbiBcXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBtZW1ibG9ja19pc19taXJyb3IocikpIHtcXG4tXFx0XFx0XFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcXG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5AQCAtOTA1LDggKzg4Myw2IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXFxuIFxcdFxcdCAqIGZ1bmN0aW9uLiAgVGhleSBkbyBub3QgZXhpc3Qgb24gaG90cGx1Z2dlZCBtZW1vcnkuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XFxuLVxcdFxcdFxcdGlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsIFxcdTAwMjZwZm4pKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcXG4gXFx0XFx0XFx0XFx0ZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTExNzAsOCArMTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTtcXG4gXFxuIFxcdFxcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXFxuLVxcdFxcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCp6b25lX2VuZF9wZm4gXFx1MDAzZSB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcXG4gXFx0XFx0XFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcXG4gXFxuQEAgLTEyMjAsNDAgKzExOTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9hYnNlbnQ7XFxuLVxcbiBcXHQvKiB6b25lIGlzIGVtcHR5LCB3ZSBkb24ndCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cXG4gXFx0aWYgKHpvbmVfc3RhcnRfcGZuID09IHpvbmVfZW5kX3BmbilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRucl9hYnNlbnQgPSBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLlxcbi1cXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXFxuLVxcdCAqIGFuZCB2aWNlIHZlcnNhLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXFx1MDAyNlxcdTAwMjYgem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuO1xcbi1cXHRcXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyO1xcbi1cXG4tXFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuLVxcdFxcdFxcdHN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksXFxuLVxcdFxcdFxcdFxcdFxcdCAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcdFxcdFxcdGVuZF9wZm4gPSBjbGFtcChtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ociksXFxuLVxcdFxcdFxcdFxcdFxcdHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSlcXG4tXFx0XFx0XFx0XFx0bnJfYWJzZW50ICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XFxuLVxcbi1cXHRcXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTk9STUFMIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAhbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxcbi1cXHRcXHRcXHRcXHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gbnJfYWJzZW50O1xcbitcXHRyZXR1cm4gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzIuMjE5MzQzMjk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTM4MjU2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYE1FTUlOSVRfRUFSTFlgIGNvbnRleHQpLiBUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYnkgYSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGExMjcxMGUwNDU4NjRhYjRiOGEzN2RlZjhlNWNjMDdmZjk1ZmQyZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTo1NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggYzBhN2YxY2Y2ZmVmNWMuLjFhNDI4NjBlODZlOWU3IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC03OTcsMjggKzc5Nyw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXG4tc3RhdGljIGJvb2wgX19tZW1pbml0XG4tb3ZlcmxhcF9tZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHpvbmUsIHVuc2lnbmVkIGxvbmcgKnBmbilcbi17XG4tXHRzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqciBfX21lbWluaXRkYXRhO1xuLVxuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4tXHRcdGlmICghciB8fCAqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKSB7XG4tXHRcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0XHRpZiAoKnBmbiBcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0aWYgKCpwZm4gXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2Jhc2VfcGZuKHIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7XG4tXHRcdFx0KnBmbiA9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKTtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTkwNSw4ICs4ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZVxuIFx0XHQgKiBmdW5jdGlvbi4gIFRoZXkgZG8gbm90IGV4aXN0IG9uIGhvdHBsdWdnZWQgbWVtb3J5LlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbnRleHQgPT0gTUVNSU5JVF9FQVJMWSkge1xuLVx0XHRcdGlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsIFx1MDAyNnBmbikpXG4tXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoZGVmZXJfaW5pdChuaWQsIHBmbiwgem9uZV9lbmRfcGZuKSkge1xuIFx0XHRcdFx0ZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTExNzAsOCArMTE0Niw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXG4gXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4gXG4gXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4rXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4gXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbkBAIC0xMjIwLDQwICsxMTk1LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfYWJzZW50O1xuLVxuIFx0Lyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJ3QgaGF2ZSBhbnkgYWJzZW50IHBhZ2VzICovXG4gXHRpZiAoem9uZV9zdGFydF9wZm4gPT0gem9uZV9lbmRfcGZuKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdG5yX2Fic2VudCA9IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXG4tXHQvKlxuLVx0ICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLlxuLVx0ICogVHJlYXQgcGFnZXMgdG8gYmUgWk9ORV9NT1ZBQkxFIGluIFpPTkVfTk9STUFMIGFzIGFic2VudCBwYWdlc1xuLVx0ICogYW5kIHZpY2UgdmVyc2EuXG4tXHQgKi9cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47XG4tXHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XG4tXG4tXHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdHN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksXG4tXHRcdFx0XHRcdCAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXHRcdFx0ZW5kX3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSxcbi1cdFx0XHRcdFx0em9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4tXG4tXHRcdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSlcbi1cdFx0XHRcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3Bmbjtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIG5yX2Fic2VudDtcbitcdHJldHVybiBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6NTc6MzIuMjE5MzQ1MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzODIxODQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIGZldyBmdW5jdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBpbml0aWFsaXphdGlvbjogYG92ZXJsYXBfbWVtbWFwX2luaXRgLCB0aGUgYCFtaXJyb3JlZF9rZXJuZWxjb3JlYCBjaGVjaywgYW5kIHNvbWUgYWJzZW50IHBhZ2UgY2FsY3VsYXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgaXMgdGhhdCB0aGVzZSBhcmUgKmVhcmx5IGJvb3QqIG9wZXJhdGlvbnMsIGxpa2VseSBtYXJrZWQgd2l0aCBgX19tZW1pbml0YCBvciBgX19pbml0YCBhdHRyaWJ1dGVzLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gZnV6emluZyB0aGVzZSBwYXRocyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgaW1wb3NzaWJsZSwgYXMgdGhleSBhcmUgbm90IGV4cG9zZWQgdmlhIHN5c2NhbGxzIG9yIHJ1bnRpbWUgaW50ZXJmYWNlcy4gSXQncyBlc3NlbnRpYWxseSBpbml0aWFsaXphdGlvbiBjb2RlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIHByZWNpc2UuICBJJ20gcmVjYWxsaW5nIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCDigJMgb25lIG9mIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQg4oCTICppcyogbWFya2VkIGFzIGBfX21lbWluaXRgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLiBUaGF0J3MgYSBrZXkgZGV0YWlsISBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGR1cmluZyBob3RwbHVnLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBzaG93cyB0aGF0IGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgY2FsbGVkIGJ5IGBtZW1tYXBfaW5pdF96b25lYCBhbmQgYG1lbW1hcF9pbml0YCwgYW5kIEkgY2FuIHNlZSB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50OiAgYGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpYCB3aXRoaW4gYG1lbW1hcF9pbml0X3JhbmdlYCB3aGVyZSB0aGUgcmVtb3ZlZCBjb2RlIHJlc2lkZXMuIFRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLCBjb25maXJtaW5nIHRoZSByZW1vdmVkIGNvZGUgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdC4gIFRoZSBjaGFuZ2VzIGluIGBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlYCBhbmQgYHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVgIGFyZSBhbHNvIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBlYXJseSBib290IG9ubHkuXG5cblRoZXJlZm9yZSwgc2luY2UgYWxsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHdpdGhpbiBgX19pbml0YCBmdW5jdGlvbnMgb3IgZ3VhcmRlZCBieSBgTUVNSU5JVF9FQVJMWWAgY29uZGl0aW9ucywgdGhpcyBjb25jbHVzaXZlbHkgbWVhbnMgdGhleSBhcmUgKm5vdCogYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbW1hcF9pbml0X3JhbmdlYCBibG9jayBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcblx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XG4tXHRcdFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXHUwMDI2cGZuKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuYGBgXG5ZdXAsIGl0J3MgZGVmaW5pdGl2ZWx5IHdpdGhpbiB0aGUgZWFybHkgYm9vdCBjb25kaXRpb25hbC5cblxuU28sIGJvdHRvbSBsaW5lOiB0aGlzIHBhdGNoIG9ubHkgYWZmZWN0cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gdGhhdCBoYXBwZW5zIGJlZm9yZSB0aGUga2VybmVsIGlzIGZ1bGx5IHVwIGFuZCBydW5uaW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgZm9yIHRoaXMgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZWFybHkgYm9vdCByb3V0aW5lcyBpbmFjY2Vzc2libGUgdG8gYSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEsIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTo1Nzo0MS43NTc1NjYzMDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgTUVNSU5JVF9FQVJMWWAgY29udGV4dCkuIFRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgY2Fubm90IGJlIHRyaWdnZXJlZCBieSBhIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbckpt[1] Phase: Running StartedAt: 2026-06-23 09:57:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbckpt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 09:57:53 +0000 UTC FinishedAt: 2026-06-23 09:58:19 +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,}