Name: series-workflow5ghgf Phase: Failed StartedAt: 2026-07-03 04:16:12 +0000 UTC FinishedAt: 2026-07-03 04:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ghgf[0] Phase: Succeeded StartedAt: 2026-07-03 04:16:12 +0000 UTC FinishedAt: 2026-07-03 04:33:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ghgf[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 04:16:12 +0000 UTC FinishedAt: 2026-07-03 04:33:09 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmNlODc5MGQyMTdjNjI4NjgzZjI3MjlkMWI1OWUwN2YxOGQzZWY0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDQ6MzI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbmluZGV4IDhiODk4OThlMjBkZjEwLi5jOTZjNTM2MjM3MTUxYiAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbkBAIC0yMTYsNyAmIzQzOzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXG4gXHRwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTtcbiBcdHBoeXNfYWRkcl90IGVuZCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0cHJfaW5mbyhcJiMzNDtGYWtpbmcgYSBub2RlIGF0IFttZW0gJXBhcC0lcGFwXVxcblwmIzM0OywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG4gXG4gXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgJiM0MzsgMSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbmluZGV4IGY5ODBiMGViMDEwNTQxLi4xY2I1ODFiYmYyYjZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbkBAIC0xNTAsNyAmIzQzOzE1MCw2IEBAIGludCBfX2luaXQgYW1kX251bWFfaW5pdCh2b2lkKVxuIFxuIFx0XHRwcmV2YmFzZSA9IGJhc2U7XG4gXHRcdG51bWFfYWRkX21lbWJsayhub2RlaWQsIGJhc2UsIGxpbWl0KTtcbi1cdFx0bm9kZV9zZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXHR9XG4gXG4gXHRpZiAobm9kZXNfZW1wdHkobnVtYV9ub2Rlc19wYXJzZWQpKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuY1xuaW5kZXggOTlkMGE5MzMyYzE0NTkuLmNlZDY2ZTY4YTY4ZTY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbnVtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9udW1hLmNcbkBAIC0yMTYsNyAmIzQzOzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtGYWtpbmcgYSBub2RlIGF0IFttZW0gJSMwMThMeC0lIzAxOEx4XVxcblwmIzM0OyxcbiBcdCAgICAgICAwTExVLCBQRk5fUEhZUyhtYXhfcGZuKSAtIDEpO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0bm9kZV9zZXQoMCwgbnVtYV9waHlzX25vZGVzX3BhcnNlZCk7XG4gXHRudW1hX2FkZF9tZW1ibGsoMCwgMCwgUEZOX1BIWVMobWF4X3BmbikpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xuaW5kZXggNjJkNGE4ZGYwYjhjMTMuLjVjNDA3ZGM2NDAxZThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcbkBAIC0zOTksOCAmIzQzOzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxuIFx0XHRnb3RvIG91dF9lcnJfYmFkX3NyYXQ7XG4gXHR9XG4gXG4tXHRub2RlX3NldChub2RlLCBudW1hX25vZGVzX3BhcnNlZCk7XG4tXG4gXHRwcl9pbmZvKFwmIzM0O1NSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXG5cJiMzNDssXG4gXHRcdG5vZGUsIHB4bSxcbiBcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCAtIDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5pbmRleCA0NDJlYTIzOWJiYTczOS4uNjQ3NjIyN2I3NzJjNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuQEAgLTIyMSw5ICYjNDM7MjIxLDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9ub2Rlcyh2b2lkKVxuIFx0XHRub2RlX3NldF9vbmxpbmUobmlkKTtcbiBcdH1cbiBcbi1cdC8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqL1xuLVx0bm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzksNyAmIzQzOzI3Niw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0XHRwcl9lcnIoXCYjMzQ7TlVNQSBpbml0IGZhaWxlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXG4gXHRudW1hX29mZiA9IHRydWU7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXG5pbmRleCBjZDJkYzhlODI1YzkyYi4uMjMwZDVmNjI4YzFiNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL29mX251bWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9vZi9vZl9udW1hLmNcbkBAIC01OSwxMSAmIzQzOzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcbiBcdFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHRmb3IgKGkgPSAwOyAhciBcdTAwMjZcdTAwMjYgIW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGksIFx1MDAyNnJzcmMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgIXIgXHUwMDI2XHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcdTAwMjZyc3JjKTsgaSYjNDM7JiM0MzspXG4gXHRcdFx0ciA9IG51bWFfYWRkX21lbWJsayhuaWQsIHJzcmMuc3RhcnQsIHJzcmMuZW5kICYjNDM7IDEpO1xuLVx0XHRcdGlmICghcilcbi1cdFx0XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVx0XHR9XG4gXG4gXHRcdGlmICghaSB8fCByKSB7XG4gXHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcbmluZGV4IDNjM2M0ZWFjMzUxNGQxLi40MjZkMTdmZjY4NTkyMCAxMDA2NDRcbi0tLSBhL21tL251bWFfbWVtYmxrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9udW1hX21lbWJsa3MuY1xuQEAgLTE3LDIwICYjNDM7MTcsNiBAQCBub2RlbWFza190IG51bWFfbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7XG4gc3RhdGljIHN0cnVjdCBudW1hX21lbWluZm8gbnVtYV9tZW1pbmZvIF9faW5pdGRhdGFfb3JfbWVtaW5mbztcbiBzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBudW1hX3Jlc2VydmVkX21lbWluZm8gX19pbml0ZGF0YV9vcl9tZW1pbmZvO1xuIFxuLS8qXG4tICogU2V0IG5vZGVzLCB3aGljaCBoYXZlIG1lbW9yeSBpbiBAbWksIGluICpAbm9kZW1hc2suXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbi17XG4tXHRpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWktXHUwMDNlYmxrKTsgaSYjNDM7JiM0MzspXG4tXHRcdGlmIChtaS1cdTAwM2VibGtbaV0uc3RhcnQgIT0gbWktXHUwMDNlYmxrW2ldLmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1pLVx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5vZGVfc2V0KG1pLVx1MDAzZWJsa1tpXS5uaWQsICpub2RlbWFzayk7XG4tfVxuLVxuIC8qKlxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXG4gICpcbkBAIC01Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FsbG9jX2Rpc3RhbmNlKHZvaWQpXG4gXG4gXHQvKiBzaXplIHRoZSBuZXcgdGFibGUgYW5kIGFsbG9jYXRlIGl0ICovXG4gXHRub2Rlc19wYXJzZWQgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cdG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKFx1MDAyNm5vZGVzX3BhcnNlZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbiBcbiBcdGZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpXG4gXHRcdGNudCA9IGk7XG5AQCAtMTM1LDEzICYjNDM7MTIwLDIwIEBAIEVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcbiBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtfdG8oaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbiB7XG4mIzQzO1x0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xuJiM0MztcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRuaWQsIHN0YXJ0LCBlbmQgLSAxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBpZ25vcmUgemVybyBsZW5ndGggYmxrcyAqL1xuIFx0aWYgKHN0YXJ0ID09IGVuZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgYmxrcyAqL1xuLVx0aWYgKHN0YXJ0IFx1MDAzZSBlbmQgfHwgbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUykge1xuLVx0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LFxuJiM0MztcdGlmIChzdGFydCBcdTAwM2UgZW5kKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgc2l6ZSAlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXG5cJiMzNDssXG4gXHRcdFx0bmlkLCBzdGFydCwgZW5kIC0gMSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTE5MywxMyAmIzQzOzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcbiAgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgbmV3IG1lbWJsa1xuICAqXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXG4mIzQzOyAqIE9uIHN1Y2Nlc3MgQG5pZCBpcyBhbHNvIHNldCBpbiBudW1hX25vZGVzX3BhcnNlZC5cbiAgKlxuICAqIFJFVFVSTlM6XG4gICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsayhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4ge1xuLVx0cmV0dXJuIG51bWFfYWRkX21lbWJsa190byhuaWQsIHN0YXJ0LCBlbmQsIFx1MDAyNm51bWFfbWVtaW5mbyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0yNTYsOCAmIzQzOzI1NSw3IEBAIGludCBfX2luaXQgbnVtYV9jbGVhbnVwX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHRcdC8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJiMzOTttYXhfcGZuJiMzOTs6ICovXG4gXHRcdGlmIChiaS1cdTAwM2VlbmQgXHUwMDNlIGhpZ2gpIHtcbi1cdFx0XHRudW1hX2FkZF9tZW1ibGtfdG8oYmktXHUwMDNlbmlkLCBoaWdoLCBiaS1cdTAwM2VlbmQsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNm51bWFfcmVzZXJ2ZWRfbWVtaW5mbyk7XG4mIzQzO1x0XHRcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cdTAwM2VuaWQsIGhpZ2gsIGJpLVx1MDAzZWVuZCk7XG4gXHRcdFx0YmktXHUwMDNlZW5kID0gaGlnaDtcbiBcdFx0fVxuIFxuQEAgLTQwMSw3ICYjNDM7Mzk5LDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxuIFxuIFx0LyogQWNjb3VudCBmb3Igbm9kZXMgd2l0aCBjcHVzIGFuZCBubyBtZW1vcnkgKi9cbiBcdG5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7XG4tXHRudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhcdTAwMjZub2RlX3Bvc3NpYmxlX21hcCwgbWkpO1xuIFx0aWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIE5VTUEgbWVtb3J5IGJsb2NrIGluaXRpYWxpemF0aW9uIHRvIGNlbnRyYWxseSBzZXQgYG51bWFfbm9kZXNfcGFyc2VkYCBpbiBgbnVtYV9hZGRfbWVtYmxrKClgLiBBbGwgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYXMgYF9faW5pdGAgKGUuZy4sIGBudW1hX2FkZF9tZW1ibGtgLCBgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHlgLCBgbnVtYV9yZWdpc3Rlcl9tZW1pbmZvYCkuIFRoZXNlIGZ1bmN0aW9ucyBleGVjdXRlIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QgYW5kIGFyZSBzdWJzZXF1ZW50bHkgZnJlZWQuIFRoZXkgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGFyZ2V0ZWQgYnkgYSBzeXNjYWxsIGZ1enplciBkdXJpbmcgcG9zdC1ib290IG9wZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjZTg3OTBkMjE3YzYyODY4M2YyNzI5ZDFiNTllMDdmMThkM2VmNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDA0OjMyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMKaW5kZXggOGI4OTg5OGUyMGRmMTAuLmM5NmM1MzYyMzcxNTFiIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMKQEAgLTIxNiw3ICYjNDM7MjE2LDYgQEAgc3RhdGljIGludCBfX2luaXQgZmFrZV9udW1hX2luaXQodm9pZCkKIAlwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTsKIAlwaHlzX2FkZHJfdCBlbmQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gMTsKIAotCW5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTsKIAlwcl9pbmZvKCYjMzQ7RmFraW5nIGEgbm9kZSBhdCBbbWVtICVwYXAtJXBhcF1cbiYjMzQ7LCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCk7CiAKIAlyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgJiM0MzsgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jIGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYwppbmRleCBmOTgwYjBlYjAxMDU0MS4uMWNiNTgxYmJmMmI2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYwpAQCAtMTUwLDcgJiM0MzsxNTAsNiBAQCBpbnQgX19pbml0IGFtZF9udW1hX2luaXQodm9pZCkKIAogCQlwcmV2YmFzZSA9IGJhc2U7CiAJCW51bWFfYWRkX21lbWJsayhub2RlaWQsIGJhc2UsIGxpbWl0KTsKLQkJbm9kZV9zZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCk7CiAJfQogCiAJaWYgKG5vZGVzX2VtcHR5KG51bWFfbm9kZXNfcGFyc2VkKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwppbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9udW1hLmMKQEAgLTIxNiw3ICYjNDM7MjE2LDYgQEAgc3RhdGljIGludCBfX2luaXQgZHVtbXlfbnVtYV9pbml0KHZvaWQpCiAJcHJpbnRrKEtFUk5fSU5GTyAmIzM0O0Zha2luZyBhIG5vZGUgYXQgW21lbSAlIzAxOEx4LSUjMDE4THhdXG4mIzM0OywKIAkgICAgICAgMExMVSwgUEZOX1BIWVMobWF4X3BmbikgLSAxKTsKIAotCW5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTsKIAlub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTsKIAludW1hX2FkZF9tZW1ibGsoMCwgMCwgUEZOX1BIWVMobWF4X3BmbikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMKaW5kZXggNjJkNGE4ZGYwYjhjMTMuLjVjNDA3ZGM2NDAxZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jCkBAIC0zOTksOCAmIzQzOzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLAogCQlnb3RvIG91dF9lcnJfYmFkX3NyYXQ7CiAJfQogCi0Jbm9kZV9zZXQobm9kZSwgbnVtYV9ub2Rlc19wYXJzZWQpOwotCiAJcHJfaW5mbygmIzM0O1NSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcbiYjMzQ7LAogCQlub2RlLCBweG0sCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQgLSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuYwpAQCAtMjIxLDkgJiM0MzsyMjEsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX25vZGVzKHZvaWQpCiAJCW5vZGVfc2V0X29ubGluZShuaWQpOwogCX0KIAotCS8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqLwotCW5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc5LDcgJiM0MzsyNzYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZCkKIAkJcHJfZXJyKCYjMzQ7TlVNQSBpbml0IGZhaWxlZFxuJiMzNDspOwogCQlyZXR1cm4gcmV0OwogCX0KLQlub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7CiAKIAludW1hX29mZiA9IHRydWU7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jCmluZGV4IGNkMmRjOGU4MjVjOTJiLi4yMzBkNWY2MjhjMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9udW1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9vZi9vZl9udW1hLmMKQEAgLTU5LDExICYjNDM7NTksOCBAQCBzdGF0aWMgaW50IF9faW5pdCBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlcyh2b2lkKQogCQkJciA9IC1FSU5WQUw7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyAhciAmYW1wOyZhbXA7ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCAmYW1wO3JzcmMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgIXIgJmFtcDsmYW1wOyAhb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaSwgJmFtcDtyc3JjKTsgaSYjNDM7JiM0MzspCiAJCQlyID0gbnVtYV9hZGRfbWVtYmxrKG5pZCwgcnNyYy5zdGFydCwgcnNyYy5lbmQgJiM0MzsgMSk7Ci0JCQlpZiAoIXIpCi0JCQkJbm9kZV9zZXQobmlkLCBudW1hX25vZGVzX3BhcnNlZCk7Ci0JCX0KIAogCQlpZiAoIWkgfHwgcikgewogCQkJb2Zfbm9kZV9wdXQobnApOwpkaWZmIC0tZ2l0IGEvbW0vbnVtYV9tZW1ibGtzLmMgYi9tbS9udW1hX21lbWJsa3MuYwppbmRleCAzYzNjNGVhYzM1MTRkMS4uNDI2ZDE3ZmY2ODU5MjAgMTAwNjQ0Ci0tLSBhL21tL251bWFfbWVtYmxrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL251bWFfbWVtYmxrcy5jCkBAIC0xNywyMCAmIzQzOzE3LDYgQEAgbm9kZW1hc2tfdCBudW1hX25vZGVzX3BhcnNlZCBfX2luaXRkYXRhOwogc3RhdGljIHN0cnVjdCBudW1hX21lbWluZm8gbnVtYV9tZW1pbmZvIF9faW5pdGRhdGFfb3JfbWVtaW5mbzsKIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87CiAKLS8qCi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKG5vZGVtYXNrX3QgKm5vZGVtYXNrLAotCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG1pLSZndDtibGspOyBpJiM0MzsmIzQzOykKLQkJaWYgKG1pLSZndDtibGtbaV0uc3RhcnQgIT0gbWktJmd0O2Jsa1tpXS5lbmQgJmFtcDsmYW1wOwotCQkgICAgbWktJmd0O2Jsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKQotCQkJbm9kZV9zZXQobWktJmd0O2Jsa1tpXS5uaWQsICpub2RlbWFzayk7Ci19Ci0KIC8qKgogICogbnVtYV9yZXNldF9kaXN0YW5jZSAtIFJlc2V0IE5VTUEgZGlzdGFuY2UgdGFibGUKICAqCkBAIC01Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FsbG9jX2Rpc3RhbmNlKHZvaWQpCiAKIAkvKiBzaXplIHRoZSBuZXcgdGFibGUgYW5kIGFsbG9jYXRlIGl0ICovCiAJbm9kZXNfcGFyc2VkID0gbnVtYV9ub2Rlc19wYXJzZWQ7Ci0JbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oJmFtcDtub2Rlc19wYXJzZWQsICZhbXA7bnVtYV9tZW1pbmZvKTsKIAogCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpCiAJCWNudCA9IGk7CkBAIC0xMzUsMTMgJiM0MzsxMjAsMjAgQEAgRVhQT1JUX1NZTUJPTChfX25vZGVfZGlzdGFuY2UpOwogc3RhdGljIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrX3RvKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCQkgICAgIHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQogewomIzQzOwkvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgbmlkICovCiYjNDM7CWlmIChuaWQgJmx0OyAwIHx8IG5pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtXYXJuaW5nOiBpbnZhbGlkIG1lbWJsayBub2RlIGlkICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxuJiMzNDssCiYjNDM7CQkJbmlkLCBzdGFydCwgZW5kIC0gMSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCS8qIGlnbm9yZSB6ZXJvIGxlbmd0aCBibGtzICovCiAJaWYgKHN0YXJ0ID09IGVuZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgYmxrcyAqLwotCWlmIChzdGFydCAmZ3Q7IGVuZCB8fCBuaWQgJmx0OyAwIHx8IG5pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMpIHsKLQkJcHJfd2FybigmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXG4mIzM0OywKJiM0MzsJaWYgKHN0YXJ0ICZndDsgZW5kKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7V2FybmluZzogaW52YWxpZCBtZW1ibGsgbm9kZSBzaXplICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxuJiMzNDssCiAJCQluaWQsIHN0YXJ0LCBlbmQgLSAxKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTkzLDEzICYjNDM7MTg1LDIwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBudW1hX21vdmVfdGFpbF9tZW1ibGsoc3RydWN0IG51bWFfbWVtaW5mbyAqZHN0LCBpbnQgaWR4LAogICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIG5ldyBtZW1ibGsKICAqCiAgKiBBZGQgYSBuZXcgbWVtYmxrIHRvIHRoZSBkZWZhdWx0IG51bWFfbWVtaW5mby4KJiM0MzsgKiBPbiBzdWNjZXNzIEBuaWQgaXMgYWxzbyBzZXQgaW4gbnVtYV9ub2Rlc19wYXJzZWQuCiAgKgogICogUkVUVVJOUzoKICAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCkKIHsKLQlyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgJmFtcDtudW1hX21lbWluZm8pOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCAmYW1wO251bWFfbWVtaW5mbyk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJbm9kZV9zZXQobmlkLCBudW1hX25vZGVzX3BhcnNlZCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMjU2LDggJiM0MzsyNTUsNyBAQCBpbnQgX19pbml0IG51bWFfY2xlYW51cF9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQogCiAJCS8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJiMzOTttYXhfcGZuJiMzOTs6ICovCiAJCWlmIChiaS0mZ3Q7ZW5kICZndDsgaGlnaCkgewotCQkJbnVtYV9hZGRfbWVtYmxrX3RvKGJpLSZndDtuaWQsIGhpZ2gsIGJpLSZndDtlbmQsCi0JCQkJCSAgICZhbXA7bnVtYV9yZXNlcnZlZF9tZW1pbmZvKTsKJiM0MzsJCQludW1hX2FkZF9yZXNlcnZlZF9tZW1ibGsoYmktJmd0O25pZCwgaGlnaCwgYmktJmd0O2VuZCk7CiAJCQliaS0mZ3Q7ZW5kID0gaGlnaDsKIAkJfQogCkBAIC00MDEsNyAmIzQzOzM5OSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbWVtaW5mbyhzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKIAogCS8qIEFjY291bnQgZm9yIG5vZGVzIHdpdGggY3B1cyBhbmQgbm8gbWVtb3J5ICovCiAJbm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDsKLQludW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbygmYW1wO25vZGVfcG9zc2libGVfbWFwLCBtaSk7CiAJaWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgTWVtb3J5IEJsb2NrIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBudW1hX25vZGVzX3BhcnNlZGAgbWFzayBpcyBpbml0aWFsaXplZC4gVGhlIG9yaWdpbmFsIGFwcHJvYWNoIHdhcyB0byBzZXQgdGhpcyBtYXNrIGluIHZhcmlvdXMgYXJjaGl0ZWN0dXJlIGFuZCBkcml2ZXItc3BlY2lmaWMgZmlsZXMuIE5vdywgdGhpcyBwYXRjaCBjZW50cmFsaXplcyB0aGUgc2V0dGluZyBvZiBgbnVtYV9ub2Rlc19wYXJzZWRgIHdpdGhpbiB0aGUgYG51bWFfYWRkX21lbWJsaygpYCBmdW5jdGlvbiBpbiBgbW0vbnVtYV9tZW1ibGtzLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGBudW1hX2FkZF9tZW1ibGsoKWAgaXRzZWxmOiBpdCBub3cgY2FsbHMgYG51bWFfYWRkX21lbWJsa190bygpYCwgYW5kICpvbmx5KiBzZXRzIHRoZSBgbmlkYCBiaXQgaW4gYG51bWFfbm9kZXNfcGFyc2VkYCBpZiB0aGF0IGNhbGwgc3VjY2VlZHMuIEFsc28sIHRoZSBgbnVtYV9hZGRfbWVtYmxrX3RvYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGEgbmV3IGNoZWNrIGZvciBgbmlkYC4KCkkgc2VlIHRoYXQgYG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvYCBhbmQgaXRzIHVzZSBoYXZlIGJlZW4gcmVtb3ZlZCBlbnRpcmVseSwgc28gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIGZvci4KClRoaXMgaXMgYWxsIGhhcHBlbmluZyBhdCBpbml0aWFsaXphdGlvbi10aW1lLCBzcGVjaWZpY2FsbHkgdXNpbmcgYF9faW5pdGAgZnVuY3Rpb25zLiBTbywgZnJvbSBhbiBleGVjdXRpb24gcGVyc3BlY3RpdmUsIGl0JiMzOTtzIG9ubHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoZSBjb2RlIGlzIGNlcnRhaW5seSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYXMgTlVNQSBpbml0aWFsaXphdGlvbiBpcyBwZXJmb3JtZWQgcmVnYXJkbGVzcy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbj8gRnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBhcmUgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIHRhcmdldCBzeXNjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN5c2NhbGxzIG9yIG1vZGlmeSBleGlzdGluZyBvbmVzOyBpdCYjMzk7cyBwdXJlbHkga2VybmVsIGluaXRpYWxpemF0aW9uIGNvZGUuIFdoaWxlIHN5emthbGxlciBkb2VzIGJvb3QgdGhlIGtlcm5lbCBhbmQgdGh1cywgaW5kaXJlY3RseSwgY291bGQgY2F0Y2ggYSBib290IGZhaWx1cmUgY2F1c2VkIGJ5IHRoaXMgY2hhbmdlLCBpdCYjMzk7cyBub3QgdGhlIHRvb2wmIzM5O3MgY29yZSBzdHJlbmd0aCwgYW5kIGZ1enppbmcgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBzZWVtcyBsaWtlIGFuIGluZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMuIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhZnRlciBib290LCBzbyBhbnkgZnV6emluZyBlZmZvcnRzIHBvc3QtYm9vdCB3aWxsIHNpbXBseSBieXBhc3MgaXQuCgpUbyBiZSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoYXQgYG51bWFfYWRkX21lbWJsa2AgYW5kIGFsbCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBgX19pbml0YCBmdW5jdGlvbnMuIFllcywgYG51bWFfYWRkX21lbWJsa2AsIGBudW1hX2NsZWFudXBfbWVtaW5mb2AsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gLCBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgLCBgZHVtbXlfbnVtYV9pbml0YCBhbmQgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGFyZSBhbGwgb25seSB1c2VkIGR1cmluZyBpbml0LiBPa2F5LCBhbmQgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBBQ1BJIHRhYmxlIHBhcnNpbmcgLSB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgQUNQSSBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIG1lbW9yeSBob3RwbHVnLCBzbyBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNgLgoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBzbyBmYXIsIGl0IGFwcGVhcnMgdG8gYmUgYSBjbGVhbnVwIGFuZCByZXN0cnVjdHVyaW5nLCBidXQgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBwcmltYXJpbHkgY29uZmluZWQgdG8gdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcywgc28gZGVkaWNhdGVkIGZ1enppbmcgbWlnaHQgYmUgb3ZlcmtpbGwuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCBjYW4gb2NjdXIgYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz0zNTg9c3RhdGljIGludCBfX2luaXRcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYzozNTk6YWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHkodW5pb24gYWNwaV9zdWJ0YWJsZV9oZWFkZXJzICpoZWFkZXIsXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMtMzYwLVx0XHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgdGFibGVfZW5kKVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz02MDE9aW50IF9faW5pdCBhY3BpX251bWFfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy02MzQtXHRcdGNudCA9IGFjcGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfVFlQRV9NRU1PUllfQUZGSU5JVFksXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6NjM1Olx0XHRcdFx0XHQgICAgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHksIDApO1xuZHJpdmVycy9hY3BpL251bWEvc3JhdC5jLTYzNi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgbW9kaWZpZWQgaXMgdGllZCB0byBgX19pbml0YCBmdW5jdGlvbnMuIEFuZCBhbGwgdGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSByZWxhdGVkIHRvIGBfX2luaXRgIG9yIGBfX2luaXRkYXRhYCDigJMgdGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGZ1enppbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLCBpcyBhbGwgYWJvdXQgcG9zdC1ib290IGV4ZWN1dGlvbiDigJMgc3lzY2FsbHMsIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGBfX2luaXRgIGNvZGUgb25seSBydW5zIG9uY2UsIGR1cmluZyBib290LiBXaGlsZSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCBpdCYjMzk7cyBub3QgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBhIHN5c2NhbGwgZnV6emVyIGNhbiByZWFsbHkgc2luayBpdHMgdGVldGggaW50byBhbmQgaGVhdmlseSBmdXp6LgoKQnV0IHdhaXQsIGxldCBtZSBjaGVjayB0aGUgZ3VpZGVsaW5lcyBhZ2Fpbi4gVGhlIGluc3RydWN0aW9ucyBzYXksIGFuZCBJJiMzOTttIHBhcmFwaHJhc2luZyBoZXJlLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpY2FsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoKU28sIGlzIHRoaXMgYF9faW5pdGAgY29kZSAmIzM0O3VucmVhY2hhYmxlJiMzNDsgaW4gYSBmdXp6aW5nIGNvbnRleHQ/IFdlbGwsIG5vLCBpdCAqaXMqIHJlYWNoZWQsIGJ1dCBvbmx5IGR1cmluZyBib290LiBJcyBpdCAqd29ydGgqIGZ1enppbmc/IElmIGl0JiMzOTtzIGp1c3QgYm9vdCBjb2RlLCBTeXprYWxsZXIgd2lsbCBydW4gaXQuIEl0IGRvZXNuJiMzOTt0IG5lZWQgc3BlY2lmaWMgdGFyZ2V0IHN5bWJvbHMgYmVjYXVzZSB0aGF0IGNvZGUgcnVucyB1bmNvbmRpdGlvbmFsbHksIG9yIGJhc2VkIG9uIGJvb3QgcGFyYW1ldGVycyBvciBBQ1BJIHRhYmxlcy4gSWYgaXQmIzM5O3MgKmZ1bmN0aW9uYWwqLCBzaG91bGQgSSByZXR1cm4gV29ydGhGdXp6aW5nPXRydWU/IEJ1dCBJIGhhdmUgdG8gYmUgYWJsZSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gKmhlYXZpbHkqIGZ1enouIEhvdyBjYW4gSSBoZWF2aWx5IGZ1enogYF9faW5pdGAgZnVuY3Rpb25zPyBTeXprYWxsZXIgY2FuJiMzOTt0IHRhcmdldCB0aGVtLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1pbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLgoKKiAgIGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLgoqICAgYG51bWFfYWRkX21lbWJsa190b2AgaXMgYF9faW5pdGAuCiogICBgbnVtYV9jbGVhbnVwX21lbWluZm9gIGlzIGBfX2luaXRgLgoqICAgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AgaXMgYF9faW5pdGAuCiogICBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgIGlzIGBfX2luaXRgLgoqICAgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGlzIGBfX2luaXRgLgoqICAgYGR1bW15X251bWFfaW5pdGAgaXMgYF9faW5pdGAuCiogICBgYW1kX251bWFfaW5pdGAgaXMgYF9faW5pdGAuCiogICBgZmFrZV9udW1hX2luaXRgIGlzIGBfX2luaXRgLgoKTm9wZS4gSXQmIzM5O3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU28sIHRoZXNlIGNoYW5nZXMgaGFwcGVuIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQuIEEgZnV6emVyIGNhbiYjMzk7dCAmIzM0O2ZvY3VzJiMzNDsgb24gdGhlbSBvciBnZW5lcmF0ZSBzcGVjaWZpYyBpbnB1dHMgd2l0aGluIGl0cyBub3JtYWwgZnV6emluZyBsb29wLiBUaGUgb25seSB3YXkgdG8gZXZlbiB0b3VjaCB0aGlzIGNvZGUgaW4gYSBtZWFuaW5nZnVsIHdheSBpcyBieSBmaWRkbGluZyB3aXRoIEFDUEkgdGFibGVzLCBEVEJzLCBvciBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMuIFRoYXQmIzM5O3Mgbm90IGhvdyBzeXNjYWxsIGZ1enppbmcgd29ya3MuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWxsIGNoYW5nZXMgYXJlIHdpdGhpbiBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBleGVjdXRlIG9ubHkgZHVyaW5nIGJvb3QgYW5kIGNhbiYjMzk7dCBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQgb3IgaGVhdmlseSBmdXp6ZWQgYnkgYSB0eXBpY2FsIHN5c2NhbGwgZnV6emVyLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGxpbWl0YXRpb24uCgpXYWl0LCBpcyB0aGVyZSBhbnkgZXhjZXB0aW9uPyBNZW1vcnkgaG90cGx1Zz8gTWF5YmUgdGhlc2UgaW5pdCBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gc29tZSByYXJlLCBsYXRlciBwYXRoLiBNZW1vcnkgaG90cGx1Zz8KTWVtb3J5IGhvdHBsdWcgdXNlcyBgbnVtYV9hZGRfbWVtYmxrYD8gTm8sIGBudW1hX2FkZF9tZW1ibGtgIGlzIG1hcmtlZCBgX19pbml0YC4gSWYgaXQgd2VyZSB1c2VkIGluIG1lbW9yeSBob3RwbHVnLCBpdCB3b3VsZG4mIzM5O3QgYmUgYF9faW5pdGAuCkxldCYjMzk7cyBqdXN0IHZlcmlmeSBgbnVtYV9hZGRfbWVtYmxrYCBpcyBgX19pbml0YC4uLiBZZXAsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvYXNtLWdlbmVyaWMvbnVtYS5oPTMzPXZvaWQgX19pbml0IGFyY2hfbnVtYV9pbml0KHZvaWQpO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg6MzQ6aW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsoaW50IG5vZGVpZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvbnVtYS5oLTM1LXZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oPTE5PXN0cnVjdCBudW1hX21lbWluZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvbnVtYV9tZW1ibGtzLmgtMjMtXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oOjI0OmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBub2RlaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oLTI1LWludCBfX2luaXQgbnVtYV9hZGRfcmVzZXJ2ZWRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XG4tLVxubW0vbnVtYV9tZW1ibGtzLmM9MTE4PUVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcbm1tL251bWFfbWVtYmxrcy5jLTExOS1cbm1tL251bWFfbWVtYmxrcy5jOjEyMDpzdGF0aWMgaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtfdG8oaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kLFxubW0vbnVtYV9tZW1ibGtzLmMtMTIxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbi0tXG5tbS9udW1hX21lbWJsa3MuYz0xNzQ9c3RhdGljIHZvaWQgX19pbml0IG51bWFfbW92ZV90YWlsX21lbWJsayhzdHJ1Y3QgbnVtYV9tZW1pbmZvICpkc3QsIGludCBpZHgsXG4tLVxubW0vbnVtYV9tZW1ibGtzLmMtMTkyLSAqL1xubW0vbnVtYV9tZW1ibGtzLmM6MTkzOmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcbm1tL251bWFfbWVtYmxrcy5jLTE5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg3MAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogSW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zIE9ubHkqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZSBhbGwgYF9faW5pdGAgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGFuZCBzbyBvbi4gVGhlc2UgYXJlIGFsbCBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgZWFybHkgYm9vdCBzZXF1ZW5jZSwgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGlzIHRoZW4gc3Vic2VxdWVudGx5IGZyZWVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBJIGNhbiBjb25maWRlbnRseSBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlbSBiZWluZyB0YXJnZXRlZCBvciByZWFjaGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIG5vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uLiBUaGV5IGFyZSBzaW1wbHkgbm90IGluIHRoZSBhdHRhY2sgc3VyZmFjZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBmYWtlX251bWFfaW5pdGAsIGBhbWRfbnVtYV9pbml0YCwgYGR1bW15X251bWFfaW5pdGAsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgKGNhbGxlZCBmcm9tIGBhY3BpX251bWFfaW5pdGApLCBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AsIGBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlc2AsIGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AsIGBudW1hX2FsbG9jX2Rpc3RhbmNlYCwgYG51bWFfYWRkX21lbWJsa190b2AsIGBudW1hX2FkZF9tZW1ibGtgLCBgbnVtYV9jbGVhbnVwX21lbWluZm9gLCBhbmQgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AsIGFuZCB0aGV5IGFyZSBhbGwgY29ycmVjdGx5IGZsYWdnZWQgYXMgYF9faW5pdGAuCgpXaXRoIHRoYXQgdmVyaWZpY2F0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIHNhZmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjI0LjI5ODY3MTY2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTUyMjA0ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDQ6MzI6MjQuMjk4Njc3MDMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY3MTQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2U4NzkwZDIxN2M2Mjg2ODNmMjcyOWQxYjU5ZTA3ZjE4ZDNlZjQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDQ6MzI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcXG5pbmRleCA4Yjg5ODk4ZTIwZGYxMC4uYzk2YzUzNjIzNzE1MWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcXG5AQCAtMjE2LDcgKzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXFxuIFxcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpO1xcbiBcXHRwaHlzX2FkZHJfdCBlbmQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gMTtcXG4gXFxuLVxcdG5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTtcXG4gXFx0cHJfaW5mbyhcXFwiRmFraW5nIGEgbm9kZSBhdCBbbWVtICVwYXAtJXBhcF1cXFxcblxcXCIsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxuIFxcbiBcXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgKyAxKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcXG5pbmRleCBmOTgwYjBlYjAxMDU0MS4uMWNiNTgxYmJmMmI2ZjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuY1xcbisrKyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcXG5AQCAtMTUwLDcgKzE1MCw2IEBAIGludCBfX2luaXQgYW1kX251bWFfaW5pdCh2b2lkKVxcbiBcXG4gXFx0XFx0cHJldmJhc2UgPSBiYXNlO1xcbiBcXHRcXHRudW1hX2FkZF9tZW1ibGsobm9kZWlkLCBiYXNlLCBsaW1pdCk7XFxuLVxcdFxcdG5vZGVfc2V0KG5vZGVpZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobm9kZXNfZW1wdHkobnVtYV9ub2Rlc19wYXJzZWQpKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hLmMgYi9hcmNoL3g4Ni9tbS9udW1hLmNcXG5pbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vbnVtYS5jXFxuKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jXFxuQEAgLTIxNiw3ICsyMTYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcXG4gXFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiRmFraW5nIGEgbm9kZSBhdCBbbWVtICUjMDE4THgtJSMwMThMeF1cXFxcblxcXCIsXFxuIFxcdCAgICAgICAwTExVLCBQRk5fUEhZUyhtYXhfcGZuKSAtIDEpO1xcbiBcXG4tXFx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbiBcXHRub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTtcXG4gXFx0bnVtYV9hZGRfbWVtYmxrKDAsIDAsIFBGTl9QSFlTKG1heF9wZm4pKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xcbmluZGV4IDYyZDRhOGRmMGI4YzEzLi41YzQwN2RjNjQwMWU4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcXG4rKysgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcXG5AQCAtMzk5LDggKzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxcbiBcXHRcXHRnb3RvIG91dF9lcnJfYmFkX3NyYXQ7XFxuIFxcdH1cXG4gXFxuLVxcdG5vZGVfc2V0KG5vZGUsIG51bWFfbm9kZXNfcGFyc2VkKTtcXG4tXFxuIFxcdHByX2luZm8oXFxcIlNSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXFxcblxcXCIsXFxuIFxcdFxcdG5vZGUsIHB4bSxcXG4gXFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCAtIDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuYyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcXG5AQCAtMjIxLDkgKzIyMSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcXG4gXFx0XFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqL1xcbi1cXHRub2RlX3Bvc3NpYmxlX21hcCA9IG51bWFfbm9kZXNfcGFyc2VkO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3OSw3ICsyNzYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcXG4gXFx0XFx0cHJfZXJyKFxcXCJOVU1BIGluaXQgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbi1cXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XFxuIFxcbiBcXHRudW1hX29mZiA9IHRydWU7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXFxuaW5kZXggY2QyZGM4ZTgyNWM5MmIuLjIzMGQ1ZjYyOGMxYjQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXFxuKysrIGIvZHJpdmVycy9vZi9vZl9udW1hLmNcXG5AQCAtNTksMTEgKzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcXG4gXFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGZvciAoaSA9IDA7ICFyIFxcdTAwMjZcXHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcXHUwMDI2cnNyYyk7IGkrKykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyAhciBcXHUwMDI2XFx1MDAyNiAhb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaSwgXFx1MDAyNnJzcmMpOyBpKyspXFxuIFxcdFxcdFxcdHIgPSBudW1hX2FkZF9tZW1ibGsobmlkLCByc3JjLnN0YXJ0LCByc3JjLmVuZCArIDEpO1xcbi1cXHRcXHRcXHRpZiAoIXIpXFxuLVxcdFxcdFxcdFxcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoIWkgfHwgcikge1xcbiBcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcXG5pbmRleCAzYzNjNGVhYzM1MTRkMS4uNDI2ZDE3ZmY2ODU5MjAgMTAwNjQ0XFxuLS0tIGEvbW0vbnVtYV9tZW1ibGtzLmNcXG4rKysgYi9tbS9udW1hX21lbWJsa3MuY1xcbkBAIC0xNywyMCArMTcsNiBAQCBub2RlbWFza190IG51bWFfbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7XFxuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XFxuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XFxuIFxcbi0vKlxcbi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9faW5pdCBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhub2RlbWFza190ICpub2RlbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuLXtcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtaS1cXHUwMDNlYmxrKTsgaSsrKVxcbi1cXHRcXHRpZiAobWktXFx1MDAzZWJsa1tpXS5zdGFydCAhPSBtaS1cXHUwMDNlYmxrW2ldLmVuZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWktXFx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxcbi1cXHRcXHRcXHRub2RlX3NldChtaS1cXHUwMDNlYmxrW2ldLm5pZCwgKm5vZGVtYXNrKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXFxuICAqXFxuQEAgLTU2LDcgKzQyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9hbGxvY19kaXN0YW5jZSh2b2lkKVxcbiBcXG4gXFx0Lyogc2l6ZSB0aGUgbmV3IHRhYmxlIGFuZCBhbGxvY2F0ZSBpdCAqL1xcbiBcXHRub2Rlc19wYXJzZWQgPSBudW1hX25vZGVzX3BhcnNlZDtcXG4tXFx0bnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oXFx1MDAyNm5vZGVzX3BhcnNlZCwgXFx1MDAyNm51bWFfbWVtaW5mbyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKVxcbiBcXHRcXHRjbnQgPSBpO1xcbkBAIC0xMzUsMTMgKzEyMCwyMCBAQCBFWFBPUlRfU1lNQk9MKF9fbm9kZV9kaXN0YW5jZSk7XFxuIHN0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsa190byhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuIHtcXG4rXFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xcbitcXHRpZiAobmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRuaWQsIHN0YXJ0LCBlbmQgLSAxKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGlnbm9yZSB6ZXJvIGxlbmd0aCBibGtzICovXFxuIFxcdGlmIChzdGFydCA9PSBlbmQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIGJsa3MgKi9cXG4tXFx0aWYgKHN0YXJ0IFxcdTAwM2UgZW5kIHx8IG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUykge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJXYXJuaW5nOiBpbnZhbGlkIG1lbWJsayBub2RlICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcXFxuXFxcIixcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2UgZW5kKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgc2l6ZSAlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdG5pZCwgc3RhcnQsIGVuZCAtIDEpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0xOTMsMTMgKzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcXG4gICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIG5ldyBtZW1ibGtcXG4gICpcXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXFxuKyAqIE9uIHN1Y2Nlc3MgQG5pZCBpcyBhbHNvIHNldCBpbiBudW1hX25vZGVzX3BhcnNlZC5cXG4gICpcXG4gICogUkVUVVJOUzpcXG4gICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gICovXFxuIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcXG4ge1xcbi1cXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXFx1MDAyNm51bWFfbWVtaW5mbyk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCBcXHUwMDI2bnVtYV9tZW1pbmZvKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI1Niw4ICsyNTUsNyBAQCBpbnQgX19pbml0IG51bWFfY2xlYW51cF9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxcbiBcXG4gXFx0XFx0LyogcHJlc2VydmUgaW5mbyBmb3Igbm9uLVJBTSBhcmVhcyBhYm92ZSAnbWF4X3Bmbic6ICovXFxuIFxcdFxcdGlmIChiaS1cXHUwMDNlZW5kIFxcdTAwM2UgaGlnaCkge1xcbi1cXHRcXHRcXHRudW1hX2FkZF9tZW1ibGtfdG8oYmktXFx1MDAzZW5pZCwgaGlnaCwgYmktXFx1MDAzZWVuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm51bWFfcmVzZXJ2ZWRfbWVtaW5mbyk7XFxuK1xcdFxcdFxcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cXHUwMDNlbmlkLCBoaWdoLCBiaS1cXHUwMDNlZW5kKTtcXG4gXFx0XFx0XFx0YmktXFx1MDAzZWVuZCA9IGhpZ2g7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTQwMSw3ICszOTksNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuIFxcbiBcXHQvKiBBY2NvdW50IGZvciBub2RlcyB3aXRoIGNwdXMgYW5kIG5vIG1lbW9yeSAqL1xcbiBcXHRub2RlX3Bvc3NpYmxlX21hcCA9IG51bWFfbm9kZXNfcGFyc2VkO1xcbi1cXHRudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhcXHUwMDI2bm9kZV9wb3NzaWJsZV9tYXAsIG1pKTtcXG4gXFx0aWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjoyNS4wMzY1NDk3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjE0MzE3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyY2U4NzkwZDIxN2M2Mjg2ODNmMjcyOWQxYjU5ZTA3ZjE4ZDNlZjQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwNDozMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG5pbmRleCA4Yjg5ODk4ZTIwZGYxMC4uYzk2YzUzNjIzNzE1MWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG5AQCAtMjE2LDcgKzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXG4gXHRwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTtcbiBcdHBoeXNfYWRkcl90IGVuZCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0cHJfaW5mbyhcIkZha2luZyBhIG5vZGUgYXQgW21lbSAlcGFwLSVwYXBdXFxuXCIsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpO1xuIFxuIFx0cmV0dXJuIG51bWFfYWRkX21lbWJsaygwLCBzdGFydCwgZW5kICsgMSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbmluZGV4IGY5ODBiMGViMDEwNTQxLi4xY2I1ODFiYmYyYjZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbisrKyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbkBAIC0xNTAsNyArMTUwLDYgQEAgaW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXG4gXG4gXHRcdHByZXZiYXNlID0gYmFzZTtcbiBcdFx0bnVtYV9hZGRfbWVtYmxrKG5vZGVpZCwgYmFzZSwgbGltaXQpO1xuLVx0XHRub2RlX3NldChub2RlaWQsIG51bWFfbm9kZXNfcGFyc2VkKTtcbiBcdH1cbiBcbiBcdGlmIChub2Rlc19lbXB0eShudW1hX25vZGVzX3BhcnNlZCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYS5jIGIvYXJjaC94ODYvbW0vbnVtYS5jXG5pbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9udW1hLmNcbisrKyBiL2FyY2gveDg2L21tL251bWEuY1xuQEAgLTIxNiw3ICsyMTYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcbiBcdHByaW50ayhLRVJOX0lORk8gXCJGYWtpbmcgYSBub2RlIGF0IFttZW0gJSMwMThMeC0lIzAxOEx4XVxcblwiLFxuIFx0ICAgICAgIDBMTFUsIFBGTl9QSFlTKG1heF9wZm4pIC0gMSk7XG4gXG4tXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXHRub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTtcbiBcdG51bWFfYWRkX21lbWJsaygwLCAwLCBQRk5fUEhZUyhtYXhfcGZuKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jIGIvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jXG5pbmRleCA2MmQ0YThkZjBiOGMxMy4uNWM0MDdkYzY0MDFlOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcbisrKyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xuQEAgLTM5OSw4ICszOTksNiBAQCBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eSh1bmlvbiBhY3BpX3N1YnRhYmxlX2hlYWRlcnMgKmhlYWRlcixcbiBcdFx0Z290byBvdXRfZXJyX2JhZF9zcmF0O1xuIFx0fVxuIFxuLVx0bm9kZV9zZXQobm9kZSwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVxuIFx0cHJfaW5mbyhcIlNSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXG5cIixcbiBcdFx0bm9kZSwgcHhtLFxuIFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZW5kIC0gMSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuKysrIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5AQCAtMjIxLDkgKzIyMSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcbiBcdFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XG4gXHR9XG4gXG4tXHQvKiBTZXR1cCBvbmxpbmUgbm9kZXMgdG8gYWN0dWFsIG5vZGVzKi9cbi1cdG5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc5LDcgKzI3Niw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0XHRwcl9lcnIoXCJOVU1BIGluaXQgZmFpbGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFxuIFx0bnVtYV9vZmYgPSB0cnVlO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9udW1hLmMgYi9kcml2ZXJzL29mL29mX251bWEuY1xuaW5kZXggY2QyZGM4ZTgyNWM5MmIuLjIzMGQ1ZjYyOGMxYjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9vZl9udW1hLmNcbisrKyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXG5AQCAtNTksMTEgKzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcbiBcdFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHRmb3IgKGkgPSAwOyAhciBcdTAwMjZcdTAwMjYgIW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGksIFx1MDAyNnJzcmMpOyBpKyspIHtcbitcdFx0Zm9yIChpID0gMDsgIXIgXHUwMDI2XHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcdTAwMjZyc3JjKTsgaSsrKVxuIFx0XHRcdHIgPSBudW1hX2FkZF9tZW1ibGsobmlkLCByc3JjLnN0YXJ0LCByc3JjLmVuZCArIDEpO1xuLVx0XHRcdGlmICghcilcbi1cdFx0XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVx0XHR9XG4gXG4gXHRcdGlmICghaSB8fCByKSB7XG4gXHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcbmluZGV4IDNjM2M0ZWFjMzUxNGQxLi40MjZkMTdmZjY4NTkyMCAxMDA2NDRcbi0tLSBhL21tL251bWFfbWVtYmxrcy5jXG4rKysgYi9tbS9udW1hX21lbWJsa3MuY1xuQEAgLTE3LDIwICsxNyw2IEBAIG5vZGVtYXNrX3QgbnVtYV9ub2Rlc19wYXJzZWQgX19pbml0ZGF0YTtcbiBzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBudW1hX21lbWluZm8gX19pbml0ZGF0YV9vcl9tZW1pbmZvO1xuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XG4gXG4tLypcbi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8obm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxuLXtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtaS1cdTAwM2VibGspOyBpKyspXG4tXHRcdGlmIChtaS1cdTAwM2VibGtbaV0uc3RhcnQgIT0gbWktXHUwMDNlYmxrW2ldLmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1pLVx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5vZGVfc2V0KG1pLVx1MDAzZWJsa1tpXS5uaWQsICpub2RlbWFzayk7XG4tfVxuLVxuIC8qKlxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXG4gICpcbkBAIC01Niw3ICs0Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfYWxsb2NfZGlzdGFuY2Uodm9pZClcbiBcbiBcdC8qIHNpemUgdGhlIG5ldyB0YWJsZSBhbmQgYWxsb2NhdGUgaXQgKi9cbiBcdG5vZGVzX3BhcnNlZCA9IG51bWFfbm9kZXNfcGFyc2VkO1xuLVx0bnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oXHUwMDI2bm9kZXNfcGFyc2VkLCBcdTAwMjZudW1hX21lbWluZm8pO1xuIFxuIFx0Zm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZClcbiBcdFx0Y250ID0gaTtcbkBAIC0xMzUsMTMgKzEyMCwyMCBAQCBFWFBPUlRfU1lNQk9MKF9fbm9kZV9kaXN0YW5jZSk7XG4gc3RhdGljIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrX3RvKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4ge1xuK1x0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xuK1x0aWYgKG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpIHtcbitcdFx0cHJfd2FybihcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCIsXG4rXHRcdFx0bmlkLCBzdGFydCwgZW5kIC0gMSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0LyogaWdub3JlIHplcm8gbGVuZ3RoIGJsa3MgKi9cbiBcdGlmIChzdGFydCA9PSBlbmQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIGJsa3MgKi9cbi1cdGlmIChzdGFydCBcdTAwM2UgZW5kIHx8IG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpIHtcbi1cdFx0cHJfd2FybihcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCIsXG4rXHRpZiAoc3RhcnQgXHUwMDNlIGVuZCkge1xuK1x0XHRwcl93YXJuKFwiV2FybmluZzogaW52YWxpZCBtZW1ibGsgbm9kZSBzaXplICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcblwiLFxuIFx0XHRcdG5pZCwgc3RhcnQsIGVuZCAtIDEpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xOTMsMTMgKzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcbiAgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgbmV3IG1lbWJsa1xuICAqXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXG4rICogT24gc3VjY2VzcyBAbmlkIGlzIGFsc28gc2V0IGluIG51bWFfbm9kZXNfcGFyc2VkLlxuICAqXG4gICogUkVUVVJOUzpcbiAgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcbiB7XG4tXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCBcdTAwMjZudW1hX21lbWluZm8pO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMjU2LDggKzI1NSw3IEBAIGludCBfX2luaXQgbnVtYV9jbGVhbnVwX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHRcdC8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJ21heF9wZm4nOiAqL1xuIFx0XHRpZiAoYmktXHUwMDNlZW5kIFx1MDAzZSBoaWdoKSB7XG4tXHRcdFx0bnVtYV9hZGRfbWVtYmxrX3RvKGJpLVx1MDAzZW5pZCwgaGlnaCwgYmktXHUwMDNlZW5kLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZudW1hX3Jlc2VydmVkX21lbWluZm8pO1xuK1x0XHRcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cdTAwM2VuaWQsIGhpZ2gsIGJpLVx1MDAzZWVuZCk7XG4gXHRcdFx0YmktXHUwMDNlZW5kID0gaGlnaDtcbiBcdFx0fVxuIFxuQEAgLTQwMSw3ICszOTksNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHQvKiBBY2NvdW50IGZvciBub2RlcyB3aXRoIGNwdXMgYW5kIG5vIG1lbW9yeSAqL1xuIFx0bm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cdG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKFx1MDAyNm5vZGVfcG9zc2libGVfbWFwLCBtaSk7XG4gXHRpZiAoV0FSTl9PTihub2Rlc19lbXB0eShub2RlX3Bvc3NpYmxlX21hcCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjI1LjAzNjU1MjIwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzA2MjIyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIE1lbW9yeSBCbG9jayBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYG51bWFfbm9kZXNfcGFyc2VkYCBtYXNrIGlzIGluaXRpYWxpemVkLiBUaGUgb3JpZ2luYWwgYXBwcm9hY2ggd2FzIHRvIHNldCB0aGlzIG1hc2sgaW4gdmFyaW91cyBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlci1zcGVjaWZpYyBmaWxlcy4gTm93LCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIHRoZSBzZXR0aW5nIG9mIGBudW1hX25vZGVzX3BhcnNlZGAgd2l0aGluIHRoZSBgbnVtYV9hZGRfbWVtYmxrKClgIGZ1bmN0aW9uIGluIGBtbS9udW1hX21lbWJsa3MuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2UgaXMgaW4gYG51bWFfYWRkX21lbWJsaygpYCBpdHNlbGY6IGl0IG5vdyBjYWxscyBgbnVtYV9hZGRfbWVtYmxrX3RvKClgLCBhbmQgKm9ubHkqIHNldHMgdGhlIGBuaWRgIGJpdCBpbiBgbnVtYV9ub2Rlc19wYXJzZWRgIGlmIHRoYXQgY2FsbCBzdWNjZWVkcy4gQWxzbywgdGhlIGBudW1hX2FkZF9tZW1ibGtfdG9gIGZ1bmN0aW9uIHNlZW1zIHRvIGhhdmUgYSBuZXcgY2hlY2sgZm9yIGBuaWRgLlxuXG5JIHNlZSB0aGF0IGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AgYW5kIGl0cyB1c2UgaGF2ZSBiZWVuIHJlbW92ZWQgZW50aXJlbHksIHNvIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIGZvci5cblxuVGhpcyBpcyBhbGwgaGFwcGVuaW5nIGF0IGluaXRpYWxpemF0aW9uLXRpbWUsIHNwZWNpZmljYWxseSB1c2luZyBgX19pbml0YCBmdW5jdGlvbnMuIFNvLCBmcm9tIGFuIGV4ZWN1dGlvbiBwZXJzcGVjdGl2ZSwgaXQncyBvbmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGUgY29kZSBpcyBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGFzIE5VTUEgaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIHJlZ2FyZGxlc3MuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbj8gRnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBhcmUgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIHRhcmdldCBzeXNjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3lzY2FsbHMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXM7IGl0J3MgcHVyZWx5IGtlcm5lbCBpbml0aWFsaXphdGlvbiBjb2RlLiBXaGlsZSBzeXprYWxsZXIgZG9lcyBib290IHRoZSBrZXJuZWwgYW5kIHRodXMsIGluZGlyZWN0bHksIGNvdWxkIGNhdGNoIGEgYm9vdCBmYWlsdXJlIGNhdXNlZCBieSB0aGlzIGNoYW5nZSwgaXQncyBub3QgdGhlIHRvb2wncyBjb3JlIHN0cmVuZ3RoLCBhbmQgZnV6emluZyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHNlZW1zIGxpa2UgYW4gaW5lZmZpY2llbnQgdXNlIG9mIHJlc291cmNlcy4gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFmdGVyIGJvb3QsIHNvIGFueSBmdXp6aW5nIGVmZm9ydHMgcG9zdC1ib290IHdpbGwgc2ltcGx5IGJ5cGFzcyBpdC5cblxuVG8gYmUgc3VyZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoYXQgYG51bWFfYWRkX21lbWJsa2AgYW5kIGFsbCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBgX19pbml0YCBmdW5jdGlvbnMuIFllcywgYG51bWFfYWRkX21lbWJsa2AsIGBudW1hX2NsZWFudXBfbWVtaW5mb2AsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gLCBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgLCBgZHVtbXlfbnVtYV9pbml0YCBhbmQgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGFyZSBhbGwgb25seSB1c2VkIGR1cmluZyBpbml0LiBPa2F5LCBhbmQgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBBQ1BJIHRhYmxlIHBhcnNpbmcgLSB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgQUNQSSBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIG1lbW9yeSBob3RwbHVnLCBzbyBsZXQncyBkb3VibGUgY2hlY2sgdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYGRyaXZlcnMvYWNwaS9udW1hL3NyYXQuY2AuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgc28gZmFyLCBpdCBhcHBlYXJzIHRvIGJlIGEgY2xlYW51cCBhbmQgcmVzdHJ1Y3R1cmluZywgYnV0IHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGNvbmZpbmVkIHRvIHRoZSBlYXJseSBib290IHByb2Nlc3MsIHNvIGRlZGljYXRlZCBmdXp6aW5nIG1pZ2h0IGJlIG92ZXJraWxsLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgY2FuIG9jY3VyIGFmdGVyIHRoZSBpbml0aWFsIGJvb3QgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjMzLjk2OTE5ODA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MTU5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz0zNTg9c3RhdGljIGludCBfX2luaXRcXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6MzU5OmFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy0zNjAtXFx0XFx0XFx0ICAgY29uc3QgdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM9NjAxPWludCBfX2luaXQgYWNwaV9udW1hX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy02MzQtXFx0XFx0Y250ID0gYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX01FTU9SWV9BRkZJTklUWSxcXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6NjM1OlxcdFxcdFxcdFxcdFxcdCAgICBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eSwgMCk7XFxuZHJpdmVycy9hY3BpL251bWEvc3JhdC5jLTYzNi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjM2LjYyNDM2NTc3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk2MzUwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgaXQgc2VlbXMgbGlrZSBldmVyeXRoaW5nIG1vZGlmaWVkIGlzIHRpZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zLiBBbmQgYWxsIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZCB0byBgX19pbml0YCBvciBgX19pbml0ZGF0YWAg4oCTIHRoYXQncyBhIGh1Z2UgcmVkIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGZ1enppbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLCBpcyBhbGwgYWJvdXQgcG9zdC1ib290IGV4ZWN1dGlvbiDigJMgc3lzY2FsbHMsIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGBfX2luaXRgIGNvZGUgb25seSBydW5zIG9uY2UsIGR1cmluZyBib290LiBXaGlsZSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCBpdCdzIG5vdCB0aGUga2luZCBvZiB0aGluZyB0aGF0IGEgc3lzY2FsbCBmdXp6ZXIgY2FuIHJlYWxseSBzaW5rIGl0cyB0ZWV0aCBpbnRvIGFuZCBoZWF2aWx5IGZ1enouXG5cbkJ1dCB3YWl0LCBsZXQgbWUgY2hlY2sgdGhlIGd1aWRlbGluZXMgYWdhaW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5LCBhbmQgSSdtIHBhcmFwaHJhc2luZyBoZXJlLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpY2FsIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGZsb3csIG9yIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG5cblNvLCBpcyB0aGlzIGBfX2luaXRgIGNvZGUgXCJ1bnJlYWNoYWJsZVwiIGluIGEgZnV6emluZyBjb250ZXh0PyBXZWxsLCBubywgaXQgKmlzKiByZWFjaGVkLCBidXQgb25seSBkdXJpbmcgYm9vdC4gSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBJZiBpdCdzIGp1c3QgYm9vdCBjb2RlLCBTeXprYWxsZXIgd2lsbCBydW4gaXQuIEl0IGRvZXNuJ3QgbmVlZCBzcGVjaWZpYyB0YXJnZXQgc3ltYm9scyBiZWNhdXNlIHRoYXQgY29kZSBydW5zIHVuY29uZGl0aW9uYWxseSwgb3IgYmFzZWQgb24gYm9vdCBwYXJhbWV0ZXJzIG9yIEFDUEkgdGFibGVzLiBJZiBpdCdzICpmdW5jdGlvbmFsKiwgc2hvdWxkIEkgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlPyBCdXQgSSBoYXZlIHRvIGJlIGFibGUgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvICpoZWF2aWx5KiBmdXp6LiBIb3cgY2FuIEkgaGVhdmlseSBmdXp6IGBfX2luaXRgIGZ1bmN0aW9ucz8gU3l6a2FsbGVyIGNhbid0IHRhcmdldCB0aGVtLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24taW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZC5cblxuKiAgIGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLlxuKiAgIGBudW1hX2FkZF9tZW1ibGtfdG9gIGlzIGBfX2luaXRgLlxuKiAgIGBudW1hX2NsZWFudXBfbWVtaW5mb2AgaXMgYF9faW5pdGAuXG4qICAgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AgaXMgYF9faW5pdGAuXG4qICAgYG9mX251bWFfcGFyc2VfbWVtb3J5X25vZGVzYCBpcyBgX19pbml0YC5cbiogICBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AgaXMgYF9faW5pdGAuXG4qICAgYGR1bW15X251bWFfaW5pdGAgaXMgYF9faW5pdGAuXG4qICAgYGFtZF9udW1hX2luaXRgIGlzIGBfX2luaXRgLlxuKiAgIGBmYWtlX251bWFfaW5pdGAgaXMgYF9faW5pdGAuXG5cbk5vcGUuIEl0J3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU28sIHRoZXNlIGNoYW5nZXMgaGFwcGVuIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQuIEEgZnV6emVyIGNhbid0IFwiZm9jdXNcIiBvbiB0aGVtIG9yIGdlbmVyYXRlIHNwZWNpZmljIGlucHV0cyB3aXRoaW4gaXRzIG5vcm1hbCBmdXp6aW5nIGxvb3AuIFRoZSBvbmx5IHdheSB0byBldmVuIHRvdWNoIHRoaXMgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5IGlzIGJ5IGZpZGRsaW5nIHdpdGggQUNQSSB0YWJsZXMsIERUQnMsIG9yIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gVGhhdCdzIG5vdCBob3cgc3lzY2FsbCBmdXp6aW5nIHdvcmtzLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbGwgY2hhbmdlcyBhcmUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgb25seSBkdXJpbmcgYm9vdCBhbmQgY2FuJ3QgYmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkIG9yIGhlYXZpbHkgZnV6emVkIGJ5IGEgdHlwaWNhbCBzeXNjYWxsIGZ1enplci4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbWl0YXRpb24uXG5cbldhaXQsIGlzIHRoZXJlIGFueSBleGNlcHRpb24/IE1lbW9yeSBob3RwbHVnPyBNYXliZSB0aGVzZSBpbml0IGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBzb21lIHJhcmUsIGxhdGVyIHBhdGguIE1lbW9yeSBob3RwbHVnP1xuTWVtb3J5IGhvdHBsdWcgdXNlcyBgbnVtYV9hZGRfbWVtYmxrYD8gTm8sIGBudW1hX2FkZF9tZW1ibGtgIGlzIG1hcmtlZCBgX19pbml0YC4gSWYgaXQgd2VyZSB1c2VkIGluIG1lbW9yeSBob3RwbHVnLCBpdCB3b3VsZG4ndCBiZSBgX19pbml0YC5cbkxldCdzIGp1c3QgdmVyaWZ5IGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLi4uIFllcCwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDQ6MzI6NDcuMzIwNzIxMDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODMzMjcyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg9MzM9dm9pZCBfX2luaXQgYXJjaF9udW1hX2luaXQodm9pZCk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg6MzQ6aW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsoaW50IG5vZGVpZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL251bWEuaC0zNS12b2lkIF9faW5pdCBlYXJseV9tYXBfY3B1X3RvX25vZGUodW5zaWduZWQgaW50IGNwdSwgaW50IG5pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oPTE5PXN0cnVjdCBudW1hX21lbWluZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9udW1hX21lbWJsa3MuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oOjI0OmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBub2RlaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XFxuaW5jbHVkZS9saW51eC9udW1hX21lbWJsa3MuaC0yNS1pbnQgX19pbml0IG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpO1xcbi0tXFxubW0vbnVtYV9tZW1ibGtzLmM9MTE4PUVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcXG5tbS9udW1hX21lbWJsa3MuYy0xMTktXFxubW0vbnVtYV9tZW1ibGtzLmM6MTIwOnN0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsa190byhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQsXFxubW0vbnVtYV9tZW1ibGtzLmMtMTIxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYz0xNzQ9c3RhdGljIHZvaWQgX19pbml0IG51bWFfbW92ZV90YWlsX21lbWJsayhzdHJ1Y3QgbnVtYV9tZW1pbmZvICpkc3QsIGludCBpZHgsXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYy0xOTItICovXFxubW0vbnVtYV9tZW1ibGtzLmM6MTkzOmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcXG5tbS9udW1hX21lbWJsa3MuYy0xOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjo1MS43MDQwNTUyNDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQ2NzYyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucyBPbmx5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGZ1bmN0aW9ucyBsaWtlIGBudW1hX2FkZF9tZW1ibGtgLCBgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHlgLCBhbmQgc28gb24uIFRoZXNlIGFyZSBhbGwgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyB0aGUga2VybmVsJ3MgZWFybHkgYm9vdCBzZXF1ZW5jZSwgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGlzIHRoZW4gc3Vic2VxdWVudGx5IGZyZWVkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIEkgY2FuIGNvbmZpZGVudGx5IHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVtIGJlaW5nIHRhcmdldGVkIG9yIHJlYWNoZWQgYnkgYSBzeXNjYWxsIGZ1enplciBkdXJpbmcgbm9ybWFsIHN5c3RlbSBvcGVyYXRpb24uIFRoZXkgYXJlIHNpbXBseSBub3QgaW4gdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBmYWtlX251bWFfaW5pdGAsIGBhbWRfbnVtYV9pbml0YCwgYGR1bW15X251bWFfaW5pdGAsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgKGNhbGxlZCBmcm9tIGBhY3BpX251bWFfaW5pdGApLCBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AsIGBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlc2AsIGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AsIGBudW1hX2FsbG9jX2Rpc3RhbmNlYCwgYG51bWFfYWRkX21lbWJsa190b2AsIGBudW1hX2FkZF9tZW1ibGtgLCBgbnVtYV9jbGVhbnVwX21lbWluZm9gLCBhbmQgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AsIGFuZCB0aGV5IGFyZSBhbGwgY29ycmVjdGx5IGZsYWdnZWQgYXMgYF9faW5pdGAuXG5cbldpdGggdGhhdCB2ZXJpZmljYXRpb24sIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCdzIHNhZmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODcwLCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjo1OC4yNTA4MjA2OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ghgf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 04:16:12 +0000 UTC FinishedAt: 2026-07-03 04:32:59 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmNlODc5MGQyMTdjNjI4NjgzZjI3MjlkMWI1OWUwN2YxOGQzZWY0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDQ6MzI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbmluZGV4IDhiODk4OThlMjBkZjEwLi5jOTZjNTM2MjM3MTUxYiAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcbkBAIC0yMTYsNyAmIzQzOzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXG4gXHRwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTtcbiBcdHBoeXNfYWRkcl90IGVuZCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0cHJfaW5mbyhcJiMzNDtGYWtpbmcgYSBub2RlIGF0IFttZW0gJXBhcC0lcGFwXVxcblwmIzM0OywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG4gXG4gXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgJiM0MzsgMSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbmluZGV4IGY5ODBiMGViMDEwNTQxLi4xY2I1ODFiYmYyYjZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbkBAIC0xNTAsNyAmIzQzOzE1MCw2IEBAIGludCBfX2luaXQgYW1kX251bWFfaW5pdCh2b2lkKVxuIFxuIFx0XHRwcmV2YmFzZSA9IGJhc2U7XG4gXHRcdG51bWFfYWRkX21lbWJsayhub2RlaWQsIGJhc2UsIGxpbWl0KTtcbi1cdFx0bm9kZV9zZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXHR9XG4gXG4gXHRpZiAobm9kZXNfZW1wdHkobnVtYV9ub2Rlc19wYXJzZWQpKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuY1xuaW5kZXggOTlkMGE5MzMyYzE0NTkuLmNlZDY2ZTY4YTY4ZTY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbnVtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9udW1hLmNcbkBAIC0yMTYsNyAmIzQzOzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtGYWtpbmcgYSBub2RlIGF0IFttZW0gJSMwMThMeC0lIzAxOEx4XVxcblwmIzM0OyxcbiBcdCAgICAgICAwTExVLCBQRk5fUEhZUyhtYXhfcGZuKSAtIDEpO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0bm9kZV9zZXQoMCwgbnVtYV9waHlzX25vZGVzX3BhcnNlZCk7XG4gXHRudW1hX2FkZF9tZW1ibGsoMCwgMCwgUEZOX1BIWVMobWF4X3BmbikpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xuaW5kZXggNjJkNGE4ZGYwYjhjMTMuLjVjNDA3ZGM2NDAxZThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcbkBAIC0zOTksOCAmIzQzOzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxuIFx0XHRnb3RvIG91dF9lcnJfYmFkX3NyYXQ7XG4gXHR9XG4gXG4tXHRub2RlX3NldChub2RlLCBudW1hX25vZGVzX3BhcnNlZCk7XG4tXG4gXHRwcl9pbmZvKFwmIzM0O1NSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXG5cJiMzNDssXG4gXHRcdG5vZGUsIHB4bSxcbiBcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCAtIDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5pbmRleCA0NDJlYTIzOWJiYTczOS4uNjQ3NjIyN2I3NzJjNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuQEAgLTIyMSw5ICYjNDM7MjIxLDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9ub2Rlcyh2b2lkKVxuIFx0XHRub2RlX3NldF9vbmxpbmUobmlkKTtcbiBcdH1cbiBcbi1cdC8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqL1xuLVx0bm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNzksNyAmIzQzOzI3Niw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0XHRwcl9lcnIoXCYjMzQ7TlVNQSBpbml0IGZhaWxlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXG4gXHRudW1hX29mZiA9IHRydWU7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXG5pbmRleCBjZDJkYzhlODI1YzkyYi4uMjMwZDVmNjI4YzFiNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL29mX251bWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9vZi9vZl9udW1hLmNcbkBAIC01OSwxMSAmIzQzOzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcbiBcdFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHRmb3IgKGkgPSAwOyAhciBcdTAwMjZcdTAwMjYgIW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGksIFx1MDAyNnJzcmMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgIXIgXHUwMDI2XHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcdTAwMjZyc3JjKTsgaSYjNDM7JiM0MzspXG4gXHRcdFx0ciA9IG51bWFfYWRkX21lbWJsayhuaWQsIHJzcmMuc3RhcnQsIHJzcmMuZW5kICYjNDM7IDEpO1xuLVx0XHRcdGlmICghcilcbi1cdFx0XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVx0XHR9XG4gXG4gXHRcdGlmICghaSB8fCByKSB7XG4gXHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcbmluZGV4IDNjM2M0ZWFjMzUxNGQxLi40MjZkMTdmZjY4NTkyMCAxMDA2NDRcbi0tLSBhL21tL251bWFfbWVtYmxrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9udW1hX21lbWJsa3MuY1xuQEAgLTE3LDIwICYjNDM7MTcsNiBAQCBub2RlbWFza190IG51bWFfbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7XG4gc3RhdGljIHN0cnVjdCBudW1hX21lbWluZm8gbnVtYV9tZW1pbmZvIF9faW5pdGRhdGFfb3JfbWVtaW5mbztcbiBzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBudW1hX3Jlc2VydmVkX21lbWluZm8gX19pbml0ZGF0YV9vcl9tZW1pbmZvO1xuIFxuLS8qXG4tICogU2V0IG5vZGVzLCB3aGljaCBoYXZlIG1lbW9yeSBpbiBAbWksIGluICpAbm9kZW1hc2suXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbi17XG4tXHRpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWktXHUwMDNlYmxrKTsgaSYjNDM7JiM0MzspXG4tXHRcdGlmIChtaS1cdTAwM2VibGtbaV0uc3RhcnQgIT0gbWktXHUwMDNlYmxrW2ldLmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1pLVx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5vZGVfc2V0KG1pLVx1MDAzZWJsa1tpXS5uaWQsICpub2RlbWFzayk7XG4tfVxuLVxuIC8qKlxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXG4gICpcbkBAIC01Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FsbG9jX2Rpc3RhbmNlKHZvaWQpXG4gXG4gXHQvKiBzaXplIHRoZSBuZXcgdGFibGUgYW5kIGFsbG9jYXRlIGl0ICovXG4gXHRub2Rlc19wYXJzZWQgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cdG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKFx1MDAyNm5vZGVzX3BhcnNlZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbiBcbiBcdGZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpXG4gXHRcdGNudCA9IGk7XG5AQCAtMTM1LDEzICYjNDM7MTIwLDIwIEBAIEVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcbiBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtfdG8oaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbiB7XG4mIzQzO1x0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xuJiM0MztcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRuaWQsIHN0YXJ0LCBlbmQgLSAxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBpZ25vcmUgemVybyBsZW5ndGggYmxrcyAqL1xuIFx0aWYgKHN0YXJ0ID09IGVuZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgYmxrcyAqL1xuLVx0aWYgKHN0YXJ0IFx1MDAzZSBlbmQgfHwgbmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUykge1xuLVx0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCYjMzQ7LFxuJiM0MztcdGlmIChzdGFydCBcdTAwM2UgZW5kKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgc2l6ZSAlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXG5cJiMzNDssXG4gXHRcdFx0bmlkLCBzdGFydCwgZW5kIC0gMSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTE5MywxMyAmIzQzOzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcbiAgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgbmV3IG1lbWJsa1xuICAqXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXG4mIzQzOyAqIE9uIHN1Y2Nlc3MgQG5pZCBpcyBhbHNvIHNldCBpbiBudW1hX25vZGVzX3BhcnNlZC5cbiAgKlxuICAqIFJFVFVSTlM6XG4gICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbiBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsayhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4ge1xuLVx0cmV0dXJuIG51bWFfYWRkX21lbWJsa190byhuaWQsIHN0YXJ0LCBlbmQsIFx1MDAyNm51bWFfbWVtaW5mbyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0yNTYsOCAmIzQzOzI1NSw3IEBAIGludCBfX2luaXQgbnVtYV9jbGVhbnVwX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHRcdC8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJiMzOTttYXhfcGZuJiMzOTs6ICovXG4gXHRcdGlmIChiaS1cdTAwM2VlbmQgXHUwMDNlIGhpZ2gpIHtcbi1cdFx0XHRudW1hX2FkZF9tZW1ibGtfdG8oYmktXHUwMDNlbmlkLCBoaWdoLCBiaS1cdTAwM2VlbmQsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNm51bWFfcmVzZXJ2ZWRfbWVtaW5mbyk7XG4mIzQzO1x0XHRcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cdTAwM2VuaWQsIGhpZ2gsIGJpLVx1MDAzZWVuZCk7XG4gXHRcdFx0YmktXHUwMDNlZW5kID0gaGlnaDtcbiBcdFx0fVxuIFxuQEAgLTQwMSw3ICYjNDM7Mzk5LDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxuIFxuIFx0LyogQWNjb3VudCBmb3Igbm9kZXMgd2l0aCBjcHVzIGFuZCBubyBtZW1vcnkgKi9cbiBcdG5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7XG4tXHRudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhcdTAwMjZub2RlX3Bvc3NpYmxlX21hcCwgbWkpO1xuIFx0aWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIE5VTUEgbWVtb3J5IGJsb2NrIGluaXRpYWxpemF0aW9uIHRvIGNlbnRyYWxseSBzZXQgYG51bWFfbm9kZXNfcGFyc2VkYCBpbiBgbnVtYV9hZGRfbWVtYmxrKClgLiBBbGwgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYXMgYF9faW5pdGAgKGUuZy4sIGBudW1hX2FkZF9tZW1ibGtgLCBgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHlgLCBgbnVtYV9yZWdpc3Rlcl9tZW1pbmZvYCkuIFRoZXNlIGZ1bmN0aW9ucyBleGVjdXRlIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QgYW5kIGFyZSBzdWJzZXF1ZW50bHkgZnJlZWQuIFRoZXkgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGFyZ2V0ZWQgYnkgYSBzeXNjYWxsIGZ1enplciBkdXJpbmcgcG9zdC1ib290IG9wZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjZTg3OTBkMjE3YzYyODY4M2YyNzI5ZDFiNTllMDdmMThkM2VmNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDA0OjMyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMKaW5kZXggOGI4OTg5OGUyMGRmMTAuLmM5NmM1MzYyMzcxNTFiIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMKQEAgLTIxNiw3ICYjNDM7MjE2LDYgQEAgc3RhdGljIGludCBfX2luaXQgZmFrZV9udW1hX2luaXQodm9pZCkKIAlwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTsKIAlwaHlzX2FkZHJfdCBlbmQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gMTsKIAotCW5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTsKIAlwcl9pbmZvKCYjMzQ7RmFraW5nIGEgbm9kZSBhdCBbbWVtICVwYXAtJXBhcF1cbiYjMzQ7LCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCk7CiAKIAlyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgJiM0MzsgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jIGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYwppbmRleCBmOTgwYjBlYjAxMDU0MS4uMWNiNTgxYmJmMmI2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYwpAQCAtMTUwLDcgJiM0MzsxNTAsNiBAQCBpbnQgX19pbml0IGFtZF9udW1hX2luaXQodm9pZCkKIAogCQlwcmV2YmFzZSA9IGJhc2U7CiAJCW51bWFfYWRkX21lbWJsayhub2RlaWQsIGJhc2UsIGxpbWl0KTsKLQkJbm9kZV9zZXQobm9kZWlkLCBudW1hX25vZGVzX3BhcnNlZCk7CiAJfQogCiAJaWYgKG5vZGVzX2VtcHR5KG51bWFfbm9kZXNfcGFyc2VkKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwppbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9udW1hLmMKQEAgLTIxNiw3ICYjNDM7MjE2LDYgQEAgc3RhdGljIGludCBfX2luaXQgZHVtbXlfbnVtYV9pbml0KHZvaWQpCiAJcHJpbnRrKEtFUk5fSU5GTyAmIzM0O0Zha2luZyBhIG5vZGUgYXQgW21lbSAlIzAxOEx4LSUjMDE4THhdXG4mIzM0OywKIAkgICAgICAgMExMVSwgUEZOX1BIWVMobWF4X3BmbikgLSAxKTsKIAotCW5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTsKIAlub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTsKIAludW1hX2FkZF9tZW1ibGsoMCwgMCwgUEZOX1BIWVMobWF4X3BmbikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMKaW5kZXggNjJkNGE4ZGYwYjhjMTMuLjVjNDA3ZGM2NDAxZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jCkBAIC0zOTksOCAmIzQzOzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLAogCQlnb3RvIG91dF9lcnJfYmFkX3NyYXQ7CiAJfQogCi0Jbm9kZV9zZXQobm9kZSwgbnVtYV9ub2Rlc19wYXJzZWQpOwotCiAJcHJfaW5mbygmIzM0O1NSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcbiYjMzQ7LAogCQlub2RlLCBweG0sCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQgLSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuYwpAQCAtMjIxLDkgJiM0MzsyMjEsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX25vZGVzKHZvaWQpCiAJCW5vZGVfc2V0X29ubGluZShuaWQpOwogCX0KIAotCS8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqLwotCW5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc5LDcgJiM0MzsyNzYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZCkKIAkJcHJfZXJyKCYjMzQ7TlVNQSBpbml0IGZhaWxlZFxuJiMzNDspOwogCQlyZXR1cm4gcmV0OwogCX0KLQlub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7CiAKIAludW1hX29mZiA9IHRydWU7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jCmluZGV4IGNkMmRjOGU4MjVjOTJiLi4yMzBkNWY2MjhjMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9udW1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9vZi9vZl9udW1hLmMKQEAgLTU5LDExICYjNDM7NTksOCBAQCBzdGF0aWMgaW50IF9faW5pdCBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlcyh2b2lkKQogCQkJciA9IC1FSU5WQUw7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyAhciAmYW1wOyZhbXA7ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCAmYW1wO3JzcmMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgIXIgJmFtcDsmYW1wOyAhb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaSwgJmFtcDtyc3JjKTsgaSYjNDM7JiM0MzspCiAJCQlyID0gbnVtYV9hZGRfbWVtYmxrKG5pZCwgcnNyYy5zdGFydCwgcnNyYy5lbmQgJiM0MzsgMSk7Ci0JCQlpZiAoIXIpCi0JCQkJbm9kZV9zZXQobmlkLCBudW1hX25vZGVzX3BhcnNlZCk7Ci0JCX0KIAogCQlpZiAoIWkgfHwgcikgewogCQkJb2Zfbm9kZV9wdXQobnApOwpkaWZmIC0tZ2l0IGEvbW0vbnVtYV9tZW1ibGtzLmMgYi9tbS9udW1hX21lbWJsa3MuYwppbmRleCAzYzNjNGVhYzM1MTRkMS4uNDI2ZDE3ZmY2ODU5MjAgMTAwNjQ0Ci0tLSBhL21tL251bWFfbWVtYmxrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL251bWFfbWVtYmxrcy5jCkBAIC0xNywyMCAmIzQzOzE3LDYgQEAgbm9kZW1hc2tfdCBudW1hX25vZGVzX3BhcnNlZCBfX2luaXRkYXRhOwogc3RhdGljIHN0cnVjdCBudW1hX21lbWluZm8gbnVtYV9tZW1pbmZvIF9faW5pdGRhdGFfb3JfbWVtaW5mbzsKIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87CiAKLS8qCi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKG5vZGVtYXNrX3QgKm5vZGVtYXNrLAotCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG1pLSZndDtibGspOyBpJiM0MzsmIzQzOykKLQkJaWYgKG1pLSZndDtibGtbaV0uc3RhcnQgIT0gbWktJmd0O2Jsa1tpXS5lbmQgJmFtcDsmYW1wOwotCQkgICAgbWktJmd0O2Jsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKQotCQkJbm9kZV9zZXQobWktJmd0O2Jsa1tpXS5uaWQsICpub2RlbWFzayk7Ci19Ci0KIC8qKgogICogbnVtYV9yZXNldF9kaXN0YW5jZSAtIFJlc2V0IE5VTUEgZGlzdGFuY2UgdGFibGUKICAqCkBAIC01Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX2FsbG9jX2Rpc3RhbmNlKHZvaWQpCiAKIAkvKiBzaXplIHRoZSBuZXcgdGFibGUgYW5kIGFsbG9jYXRlIGl0ICovCiAJbm9kZXNfcGFyc2VkID0gbnVtYV9ub2Rlc19wYXJzZWQ7Ci0JbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oJmFtcDtub2Rlc19wYXJzZWQsICZhbXA7bnVtYV9tZW1pbmZvKTsKIAogCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpCiAJCWNudCA9IGk7CkBAIC0xMzUsMTMgJiM0MzsxMjAsMjAgQEAgRVhQT1JUX1NZTUJPTChfX25vZGVfZGlzdGFuY2UpOwogc3RhdGljIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrX3RvKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCQkgICAgIHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQogewomIzQzOwkvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgbmlkICovCiYjNDM7CWlmIChuaWQgJmx0OyAwIHx8IG5pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtXYXJuaW5nOiBpbnZhbGlkIG1lbWJsayBub2RlIGlkICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxuJiMzNDssCiYjNDM7CQkJbmlkLCBzdGFydCwgZW5kIC0gMSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCS8qIGlnbm9yZSB6ZXJvIGxlbmd0aCBibGtzICovCiAJaWYgKHN0YXJ0ID09IGVuZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgYmxrcyAqLwotCWlmIChzdGFydCAmZ3Q7IGVuZCB8fCBuaWQgJmx0OyAwIHx8IG5pZCAmZ3Q7PSBNQVhfTlVNTk9ERVMpIHsKLQkJcHJfd2FybigmIzM0O1dhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXG4mIzM0OywKJiM0MzsJaWYgKHN0YXJ0ICZndDsgZW5kKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7V2FybmluZzogaW52YWxpZCBtZW1ibGsgbm9kZSBzaXplICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxuJiMzNDssCiAJCQluaWQsIHN0YXJ0LCBlbmQgLSAxKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTkzLDEzICYjNDM7MTg1LDIwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBudW1hX21vdmVfdGFpbF9tZW1ibGsoc3RydWN0IG51bWFfbWVtaW5mbyAqZHN0LCBpbnQgaWR4LAogICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIG5ldyBtZW1ibGsKICAqCiAgKiBBZGQgYSBuZXcgbWVtYmxrIHRvIHRoZSBkZWZhdWx0IG51bWFfbWVtaW5mby4KJiM0MzsgKiBPbiBzdWNjZXNzIEBuaWQgaXMgYWxzbyBzZXQgaW4gbnVtYV9ub2Rlc19wYXJzZWQuCiAgKgogICogUkVUVVJOUzoKICAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCkKIHsKLQlyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgJmFtcDtudW1hX21lbWluZm8pOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCAmYW1wO251bWFfbWVtaW5mbyk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJbm9kZV9zZXQobmlkLCBudW1hX25vZGVzX3BhcnNlZCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMjU2LDggJiM0MzsyNTUsNyBAQCBpbnQgX19pbml0IG51bWFfY2xlYW51cF9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQogCiAJCS8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJiMzOTttYXhfcGZuJiMzOTs6ICovCiAJCWlmIChiaS0mZ3Q7ZW5kICZndDsgaGlnaCkgewotCQkJbnVtYV9hZGRfbWVtYmxrX3RvKGJpLSZndDtuaWQsIGhpZ2gsIGJpLSZndDtlbmQsCi0JCQkJCSAgICZhbXA7bnVtYV9yZXNlcnZlZF9tZW1pbmZvKTsKJiM0MzsJCQludW1hX2FkZF9yZXNlcnZlZF9tZW1ibGsoYmktJmd0O25pZCwgaGlnaCwgYmktJmd0O2VuZCk7CiAJCQliaS0mZ3Q7ZW5kID0gaGlnaDsKIAkJfQogCkBAIC00MDEsNyAmIzQzOzM5OSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbWVtaW5mbyhzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKIAogCS8qIEFjY291bnQgZm9yIG5vZGVzIHdpdGggY3B1cyBhbmQgbm8gbWVtb3J5ICovCiAJbm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDsKLQludW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbygmYW1wO25vZGVfcG9zc2libGVfbWFwLCBtaSk7CiAJaWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgTWVtb3J5IEJsb2NrIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBudW1hX25vZGVzX3BhcnNlZGAgbWFzayBpcyBpbml0aWFsaXplZC4gVGhlIG9yaWdpbmFsIGFwcHJvYWNoIHdhcyB0byBzZXQgdGhpcyBtYXNrIGluIHZhcmlvdXMgYXJjaGl0ZWN0dXJlIGFuZCBkcml2ZXItc3BlY2lmaWMgZmlsZXMuIE5vdywgdGhpcyBwYXRjaCBjZW50cmFsaXplcyB0aGUgc2V0dGluZyBvZiBgbnVtYV9ub2Rlc19wYXJzZWRgIHdpdGhpbiB0aGUgYG51bWFfYWRkX21lbWJsaygpYCBmdW5jdGlvbiBpbiBgbW0vbnVtYV9tZW1ibGtzLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGBudW1hX2FkZF9tZW1ibGsoKWAgaXRzZWxmOiBpdCBub3cgY2FsbHMgYG51bWFfYWRkX21lbWJsa190bygpYCwgYW5kICpvbmx5KiBzZXRzIHRoZSBgbmlkYCBiaXQgaW4gYG51bWFfbm9kZXNfcGFyc2VkYCBpZiB0aGF0IGNhbGwgc3VjY2VlZHMuIEFsc28sIHRoZSBgbnVtYV9hZGRfbWVtYmxrX3RvYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGEgbmV3IGNoZWNrIGZvciBgbmlkYC4KCkkgc2VlIHRoYXQgYG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvYCBhbmQgaXRzIHVzZSBoYXZlIGJlZW4gcmVtb3ZlZCBlbnRpcmVseSwgc28gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIGZvci4KClRoaXMgaXMgYWxsIGhhcHBlbmluZyBhdCBpbml0aWFsaXphdGlvbi10aW1lLCBzcGVjaWZpY2FsbHkgdXNpbmcgYF9faW5pdGAgZnVuY3Rpb25zLiBTbywgZnJvbSBhbiBleGVjdXRpb24gcGVyc3BlY3RpdmUsIGl0JiMzOTtzIG9ubHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoZSBjb2RlIGlzIGNlcnRhaW5seSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYXMgTlVNQSBpbml0aWFsaXphdGlvbiBpcyBwZXJmb3JtZWQgcmVnYXJkbGVzcy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbj8gRnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBhcmUgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIHRhcmdldCBzeXNjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN5c2NhbGxzIG9yIG1vZGlmeSBleGlzdGluZyBvbmVzOyBpdCYjMzk7cyBwdXJlbHkga2VybmVsIGluaXRpYWxpemF0aW9uIGNvZGUuIFdoaWxlIHN5emthbGxlciBkb2VzIGJvb3QgdGhlIGtlcm5lbCBhbmQgdGh1cywgaW5kaXJlY3RseSwgY291bGQgY2F0Y2ggYSBib290IGZhaWx1cmUgY2F1c2VkIGJ5IHRoaXMgY2hhbmdlLCBpdCYjMzk7cyBub3QgdGhlIHRvb2wmIzM5O3MgY29yZSBzdHJlbmd0aCwgYW5kIGZ1enppbmcgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBzZWVtcyBsaWtlIGFuIGluZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMuIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBhZnRlciBib290LCBzbyBhbnkgZnV6emluZyBlZmZvcnRzIHBvc3QtYm9vdCB3aWxsIHNpbXBseSBieXBhc3MgaXQuCgpUbyBiZSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoYXQgYG51bWFfYWRkX21lbWJsa2AgYW5kIGFsbCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBgX19pbml0YCBmdW5jdGlvbnMuIFllcywgYG51bWFfYWRkX21lbWJsa2AsIGBudW1hX2NsZWFudXBfbWVtaW5mb2AsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gLCBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgLCBgZHVtbXlfbnVtYV9pbml0YCBhbmQgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGFyZSBhbGwgb25seSB1c2VkIGR1cmluZyBpbml0LiBPa2F5LCBhbmQgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBBQ1BJIHRhYmxlIHBhcnNpbmcgLSB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgQUNQSSBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIG1lbW9yeSBob3RwbHVnLCBzbyBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNgLgoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBzbyBmYXIsIGl0IGFwcGVhcnMgdG8gYmUgYSBjbGVhbnVwIGFuZCByZXN0cnVjdHVyaW5nLCBidXQgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBwcmltYXJpbHkgY29uZmluZWQgdG8gdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcywgc28gZGVkaWNhdGVkIGZ1enppbmcgbWlnaHQgYmUgb3ZlcmtpbGwuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCBjYW4gb2NjdXIgYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz0zNTg9c3RhdGljIGludCBfX2luaXRcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYzozNTk6YWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHkodW5pb24gYWNwaV9zdWJ0YWJsZV9oZWFkZXJzICpoZWFkZXIsXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmMtMzYwLVx0XHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgdGFibGVfZW5kKVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz02MDE9aW50IF9faW5pdCBhY3BpX251bWFfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy02MzQtXHRcdGNudCA9IGFjcGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfVFlQRV9NRU1PUllfQUZGSU5JVFksXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6NjM1Olx0XHRcdFx0XHQgICAgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHksIDApO1xuZHJpdmVycy9hY3BpL251bWEvc3JhdC5jLTYzNi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGV2ZXJ5dGhpbmcgbW9kaWZpZWQgaXMgdGllZCB0byBgX19pbml0YCBmdW5jdGlvbnMuIEFuZCBhbGwgdGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSByZWxhdGVkIHRvIGBfX2luaXRgIG9yIGBfX2luaXRkYXRhYCDigJMgdGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGZ1enppbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLCBpcyBhbGwgYWJvdXQgcG9zdC1ib290IGV4ZWN1dGlvbiDigJMgc3lzY2FsbHMsIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGBfX2luaXRgIGNvZGUgb25seSBydW5zIG9uY2UsIGR1cmluZyBib290LiBXaGlsZSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCBpdCYjMzk7cyBub3QgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBhIHN5c2NhbGwgZnV6emVyIGNhbiByZWFsbHkgc2luayBpdHMgdGVldGggaW50byBhbmQgaGVhdmlseSBmdXp6LgoKQnV0IHdhaXQsIGxldCBtZSBjaGVjayB0aGUgZ3VpZGVsaW5lcyBhZ2Fpbi4gVGhlIGluc3RydWN0aW9ucyBzYXksIGFuZCBJJiMzOTttIHBhcmFwaHJhc2luZyBoZXJlLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpY2FsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoKU28sIGlzIHRoaXMgYF9faW5pdGAgY29kZSAmIzM0O3VucmVhY2hhYmxlJiMzNDsgaW4gYSBmdXp6aW5nIGNvbnRleHQ/IFdlbGwsIG5vLCBpdCAqaXMqIHJlYWNoZWQsIGJ1dCBvbmx5IGR1cmluZyBib290LiBJcyBpdCAqd29ydGgqIGZ1enppbmc/IElmIGl0JiMzOTtzIGp1c3QgYm9vdCBjb2RlLCBTeXprYWxsZXIgd2lsbCBydW4gaXQuIEl0IGRvZXNuJiMzOTt0IG5lZWQgc3BlY2lmaWMgdGFyZ2V0IHN5bWJvbHMgYmVjYXVzZSB0aGF0IGNvZGUgcnVucyB1bmNvbmRpdGlvbmFsbHksIG9yIGJhc2VkIG9uIGJvb3QgcGFyYW1ldGVycyBvciBBQ1BJIHRhYmxlcy4gSWYgaXQmIzM5O3MgKmZ1bmN0aW9uYWwqLCBzaG91bGQgSSByZXR1cm4gV29ydGhGdXp6aW5nPXRydWU/IEJ1dCBJIGhhdmUgdG8gYmUgYWJsZSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdG8gKmhlYXZpbHkqIGZ1enouIEhvdyBjYW4gSSBoZWF2aWx5IGZ1enogYF9faW5pdGAgZnVuY3Rpb25zPyBTeXprYWxsZXIgY2FuJiMzOTt0IHRhcmdldCB0aGVtLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1pbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSB0b3VjaGVkLgoKKiAgIGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLgoqICAgYG51bWFfYWRkX21lbWJsa190b2AgaXMgYF9faW5pdGAuCiogICBgbnVtYV9jbGVhbnVwX21lbWluZm9gIGlzIGBfX2luaXRgLgoqICAgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AgaXMgYF9faW5pdGAuCiogICBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgIGlzIGBfX2luaXRgLgoqICAgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGlzIGBfX2luaXRgLgoqICAgYGR1bW15X251bWFfaW5pdGAgaXMgYF9faW5pdGAuCiogICBgYW1kX251bWFfaW5pdGAgaXMgYF9faW5pdGAuCiogICBgZmFrZV9udW1hX2luaXRgIGlzIGBfX2luaXRgLgoKTm9wZS4gSXQmIzM5O3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU28sIHRoZXNlIGNoYW5nZXMgaGFwcGVuIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQuIEEgZnV6emVyIGNhbiYjMzk7dCAmIzM0O2ZvY3VzJiMzNDsgb24gdGhlbSBvciBnZW5lcmF0ZSBzcGVjaWZpYyBpbnB1dHMgd2l0aGluIGl0cyBub3JtYWwgZnV6emluZyBsb29wLiBUaGUgb25seSB3YXkgdG8gZXZlbiB0b3VjaCB0aGlzIGNvZGUgaW4gYSBtZWFuaW5nZnVsIHdheSBpcyBieSBmaWRkbGluZyB3aXRoIEFDUEkgdGFibGVzLCBEVEJzLCBvciBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMuIFRoYXQmIzM5O3Mgbm90IGhvdyBzeXNjYWxsIGZ1enppbmcgd29ya3MuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWxsIGNoYW5nZXMgYXJlIHdpdGhpbiBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBleGVjdXRlIG9ubHkgZHVyaW5nIGJvb3QgYW5kIGNhbiYjMzk7dCBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQgb3IgaGVhdmlseSBmdXp6ZWQgYnkgYSB0eXBpY2FsIHN5c2NhbGwgZnV6emVyLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGxpbWl0YXRpb24uCgpXYWl0LCBpcyB0aGVyZSBhbnkgZXhjZXB0aW9uPyBNZW1vcnkgaG90cGx1Zz8gTWF5YmUgdGhlc2UgaW5pdCBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gc29tZSByYXJlLCBsYXRlciBwYXRoLiBNZW1vcnkgaG90cGx1Zz8KTWVtb3J5IGhvdHBsdWcgdXNlcyBgbnVtYV9hZGRfbWVtYmxrYD8gTm8sIGBudW1hX2FkZF9tZW1ibGtgIGlzIG1hcmtlZCBgX19pbml0YC4gSWYgaXQgd2VyZSB1c2VkIGluIG1lbW9yeSBob3RwbHVnLCBpdCB3b3VsZG4mIzM5O3QgYmUgYF9faW5pdGAuCkxldCYjMzk7cyBqdXN0IHZlcmlmeSBgbnVtYV9hZGRfbWVtYmxrYCBpcyBgX19pbml0YC4uLiBZZXAsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvYXNtLWdlbmVyaWMvbnVtYS5oPTMzPXZvaWQgX19pbml0IGFyY2hfbnVtYV9pbml0KHZvaWQpO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg6MzQ6aW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsoaW50IG5vZGVpZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvbnVtYS5oLTM1LXZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oPTE5PXN0cnVjdCBudW1hX21lbWluZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvbnVtYV9tZW1ibGtzLmgtMjMtXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oOjI0OmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBub2RlaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oLTI1LWludCBfX2luaXQgbnVtYV9hZGRfcmVzZXJ2ZWRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XG4tLVxubW0vbnVtYV9tZW1ibGtzLmM9MTE4PUVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcbm1tL251bWFfbWVtYmxrcy5jLTExOS1cbm1tL251bWFfbWVtYmxrcy5jOjEyMDpzdGF0aWMgaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtfdG8oaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kLFxubW0vbnVtYV9tZW1ibGtzLmMtMTIxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSlcbi0tXG5tbS9udW1hX21lbWJsa3MuYz0xNzQ9c3RhdGljIHZvaWQgX19pbml0IG51bWFfbW92ZV90YWlsX21lbWJsayhzdHJ1Y3QgbnVtYV9tZW1pbmZvICpkc3QsIGludCBpZHgsXG4tLVxubW0vbnVtYV9tZW1ibGtzLmMtMTkyLSAqL1xubW0vbnVtYV9tZW1ibGtzLmM6MTkzOmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcbm1tL251bWFfbWVtYmxrcy5jLTE5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg3MAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogSW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zIE9ubHkqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZSBhbGwgYF9faW5pdGAgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGFuZCBzbyBvbi4gVGhlc2UgYXJlIGFsbCBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgZWFybHkgYm9vdCBzZXF1ZW5jZSwgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGlzIHRoZW4gc3Vic2VxdWVudGx5IGZyZWVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBJIGNhbiBjb25maWRlbnRseSBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlbSBiZWluZyB0YXJnZXRlZCBvciByZWFjaGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIG5vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uLiBUaGV5IGFyZSBzaW1wbHkgbm90IGluIHRoZSBhdHRhY2sgc3VyZmFjZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBmYWtlX251bWFfaW5pdGAsIGBhbWRfbnVtYV9pbml0YCwgYGR1bW15X251bWFfaW5pdGAsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgKGNhbGxlZCBmcm9tIGBhY3BpX251bWFfaW5pdGApLCBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AsIGBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlc2AsIGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AsIGBudW1hX2FsbG9jX2Rpc3RhbmNlYCwgYG51bWFfYWRkX21lbWJsa190b2AsIGBudW1hX2FkZF9tZW1ibGtgLCBgbnVtYV9jbGVhbnVwX21lbWluZm9gLCBhbmQgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AsIGFuZCB0aGV5IGFyZSBhbGwgY29ycmVjdGx5IGZsYWdnZWQgYXMgYF9faW5pdGAuCgpXaXRoIHRoYXQgdmVyaWZpY2F0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIHNhZmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjI0LjI5ODY3MTY2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTUyMjA0ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDQ6MzI6MjQuMjk4Njc3MDMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY3MTQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2U4NzkwZDIxN2M2Mjg2ODNmMjcyOWQxYjU5ZTA3ZjE4ZDNlZjQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDQ6MzI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcXG5pbmRleCA4Yjg5ODk4ZTIwZGYxMC4uYzk2YzUzNjIzNzE1MWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmNcXG5AQCAtMjE2LDcgKzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXFxuIFxcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpO1xcbiBcXHRwaHlzX2FkZHJfdCBlbmQgPSBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gMTtcXG4gXFxuLVxcdG5vZGVfc2V0KDAsIG51bWFfbm9kZXNfcGFyc2VkKTtcXG4gXFx0cHJfaW5mbyhcXFwiRmFraW5nIGEgbm9kZSBhdCBbbWVtICVwYXAtJXBhcF1cXFxcblxcXCIsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxuIFxcbiBcXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrKDAsIHN0YXJ0LCBlbmQgKyAxKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcXG5pbmRleCBmOTgwYjBlYjAxMDU0MS4uMWNiNTgxYmJmMmI2ZjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuY1xcbisrKyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcXG5AQCAtMTUwLDcgKzE1MCw2IEBAIGludCBfX2luaXQgYW1kX251bWFfaW5pdCh2b2lkKVxcbiBcXG4gXFx0XFx0cHJldmJhc2UgPSBiYXNlO1xcbiBcXHRcXHRudW1hX2FkZF9tZW1ibGsobm9kZWlkLCBiYXNlLCBsaW1pdCk7XFxuLVxcdFxcdG5vZGVfc2V0KG5vZGVpZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobm9kZXNfZW1wdHkobnVtYV9ub2Rlc19wYXJzZWQpKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hLmMgYi9hcmNoL3g4Ni9tbS9udW1hLmNcXG5pbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vbnVtYS5jXFxuKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jXFxuQEAgLTIxNiw3ICsyMTYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcXG4gXFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiRmFraW5nIGEgbm9kZSBhdCBbbWVtICUjMDE4THgtJSMwMThMeF1cXFxcblxcXCIsXFxuIFxcdCAgICAgICAwTExVLCBQRk5fUEhZUyhtYXhfcGZuKSAtIDEpO1xcbiBcXG4tXFx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbiBcXHRub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTtcXG4gXFx0bnVtYV9hZGRfbWVtYmxrKDAsIDAsIFBGTl9QSFlTKG1heF9wZm4pKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuYyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xcbmluZGV4IDYyZDRhOGRmMGI4YzEzLi41YzQwN2RjNjQwMWU4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcXG4rKysgYi9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcXG5AQCAtMzk5LDggKzM5OSw2IEBAIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxcbiBcXHRcXHRnb3RvIG91dF9lcnJfYmFkX3NyYXQ7XFxuIFxcdH1cXG4gXFxuLVxcdG5vZGVfc2V0KG5vZGUsIG51bWFfbm9kZXNfcGFyc2VkKTtcXG4tXFxuIFxcdHByX2luZm8oXFxcIlNSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXFxcblxcXCIsXFxuIFxcdFxcdG5vZGUsIHB4bSxcXG4gXFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCAtIDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuYyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcXG4rKysgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcXG5AQCAtMjIxLDkgKzIyMSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcXG4gXFx0XFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNldHVwIG9ubGluZSBub2RlcyB0byBhY3R1YWwgbm9kZXMqL1xcbi1cXHRub2RlX3Bvc3NpYmxlX21hcCA9IG51bWFfbm9kZXNfcGFyc2VkO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI3OSw3ICsyNzYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcXG4gXFx0XFx0cHJfZXJyKFxcXCJOVU1BIGluaXQgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbi1cXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XFxuIFxcbiBcXHRudW1hX29mZiA9IHRydWU7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX251bWEuYyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXFxuaW5kZXggY2QyZGM4ZTgyNWM5MmIuLjIzMGQ1ZjYyOGMxYjQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXFxuKysrIGIvZHJpdmVycy9vZi9vZl9udW1hLmNcXG5AQCAtNTksMTEgKzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcXG4gXFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGZvciAoaSA9IDA7ICFyIFxcdTAwMjZcXHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcXHUwMDI2cnNyYyk7IGkrKykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyAhciBcXHUwMDI2XFx1MDAyNiAhb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaSwgXFx1MDAyNnJzcmMpOyBpKyspXFxuIFxcdFxcdFxcdHIgPSBudW1hX2FkZF9tZW1ibGsobmlkLCByc3JjLnN0YXJ0LCByc3JjLmVuZCArIDEpO1xcbi1cXHRcXHRcXHRpZiAoIXIpXFxuLVxcdFxcdFxcdFxcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoIWkgfHwgcikge1xcbiBcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcXG5pbmRleCAzYzNjNGVhYzM1MTRkMS4uNDI2ZDE3ZmY2ODU5MjAgMTAwNjQ0XFxuLS0tIGEvbW0vbnVtYV9tZW1ibGtzLmNcXG4rKysgYi9tbS9udW1hX21lbWJsa3MuY1xcbkBAIC0xNywyMCArMTcsNiBAQCBub2RlbWFza190IG51bWFfbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7XFxuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XFxuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XFxuIFxcbi0vKlxcbi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay5cXG4tICovXFxuLXN0YXRpYyB2b2lkIF9faW5pdCBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhub2RlbWFza190ICpub2RlbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuLXtcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtaS1cXHUwMDNlYmxrKTsgaSsrKVxcbi1cXHRcXHRpZiAobWktXFx1MDAzZWJsa1tpXS5zdGFydCAhPSBtaS1cXHUwMDNlYmxrW2ldLmVuZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWktXFx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxcbi1cXHRcXHRcXHRub2RlX3NldChtaS1cXHUwMDNlYmxrW2ldLm5pZCwgKm5vZGVtYXNrKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXFxuICAqXFxuQEAgLTU2LDcgKzQyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9hbGxvY19kaXN0YW5jZSh2b2lkKVxcbiBcXG4gXFx0Lyogc2l6ZSB0aGUgbmV3IHRhYmxlIGFuZCBhbGxvY2F0ZSBpdCAqL1xcbiBcXHRub2Rlc19wYXJzZWQgPSBudW1hX25vZGVzX3BhcnNlZDtcXG4tXFx0bnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oXFx1MDAyNm5vZGVzX3BhcnNlZCwgXFx1MDAyNm51bWFfbWVtaW5mbyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKVxcbiBcXHRcXHRjbnQgPSBpO1xcbkBAIC0xMzUsMTMgKzEyMCwyMCBAQCBFWFBPUlRfU1lNQk9MKF9fbm9kZV9kaXN0YW5jZSk7XFxuIHN0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsa190byhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuIHtcXG4rXFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xcbitcXHRpZiAobmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRuaWQsIHN0YXJ0LCBlbmQgLSAxKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGlnbm9yZSB6ZXJvIGxlbmd0aCBibGtzICovXFxuIFxcdGlmIChzdGFydCA9PSBlbmQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIGJsa3MgKi9cXG4tXFx0aWYgKHN0YXJ0IFxcdTAwM2UgZW5kIHx8IG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUykge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJXYXJuaW5nOiBpbnZhbGlkIG1lbWJsayBub2RlICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcXFxuXFxcIixcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2UgZW5kKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgc2l6ZSAlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdG5pZCwgc3RhcnQsIGVuZCAtIDEpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0xOTMsMTMgKzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcXG4gICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIG5ldyBtZW1ibGtcXG4gICpcXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXFxuKyAqIE9uIHN1Y2Nlc3MgQG5pZCBpcyBhbHNvIHNldCBpbiBudW1hX25vZGVzX3BhcnNlZC5cXG4gICpcXG4gICogUkVUVVJOUzpcXG4gICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cXG4gICovXFxuIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcXG4ge1xcbi1cXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXFx1MDAyNm51bWFfbWVtaW5mbyk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCBcXHUwMDI2bnVtYV9tZW1pbmZvKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI1Niw4ICsyNTUsNyBAQCBpbnQgX19pbml0IG51bWFfY2xlYW51cF9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxcbiBcXG4gXFx0XFx0LyogcHJlc2VydmUgaW5mbyBmb3Igbm9uLVJBTSBhcmVhcyBhYm92ZSAnbWF4X3Bmbic6ICovXFxuIFxcdFxcdGlmIChiaS1cXHUwMDNlZW5kIFxcdTAwM2UgaGlnaCkge1xcbi1cXHRcXHRcXHRudW1hX2FkZF9tZW1ibGtfdG8oYmktXFx1MDAzZW5pZCwgaGlnaCwgYmktXFx1MDAzZWVuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm51bWFfcmVzZXJ2ZWRfbWVtaW5mbyk7XFxuK1xcdFxcdFxcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cXHUwMDNlbmlkLCBoaWdoLCBiaS1cXHUwMDNlZW5kKTtcXG4gXFx0XFx0XFx0YmktXFx1MDAzZWVuZCA9IGhpZ2g7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTQwMSw3ICszOTksNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuIFxcbiBcXHQvKiBBY2NvdW50IGZvciBub2RlcyB3aXRoIGNwdXMgYW5kIG5vIG1lbW9yeSAqL1xcbiBcXHRub2RlX3Bvc3NpYmxlX21hcCA9IG51bWFfbm9kZXNfcGFyc2VkO1xcbi1cXHRudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhcXHUwMDI2bm9kZV9wb3NzaWJsZV9tYXAsIG1pKTtcXG4gXFx0aWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjoyNS4wMzY1NDk3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjE0MzE3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyY2U4NzkwZDIxN2M2Mjg2ODNmMjcyOWQxYjU5ZTA3ZjE4ZDNlZjQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwNDozMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1hLmMgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG5pbmRleCA4Yjg5ODk4ZTIwZGYxMC4uYzk2YzUzNjIzNzE1MWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rZXJuZWwvbnVtYS5jXG5AQCAtMjE2LDcgKzIxNiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGZha2VfbnVtYV9pbml0KHZvaWQpXG4gXHRwaHlzX2FkZHJfdCBzdGFydCA9IG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKTtcbiBcdHBoeXNfYWRkcl90IGVuZCA9IG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxO1xuIFxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFx0cHJfaW5mbyhcIkZha2luZyBhIG5vZGUgYXQgW21lbSAlcGFwLSVwYXBdXFxuXCIsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpO1xuIFxuIFx0cmV0dXJuIG51bWFfYWRkX21lbWJsaygwLCBzdGFydCwgZW5kICsgMSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3kuYyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbmluZGV4IGY5ODBiMGViMDEwNTQxLi4xY2I1ODFiYmYyYjZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbisrKyBiL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5LmNcbkBAIC0xNTAsNyArMTUwLDYgQEAgaW50IF9faW5pdCBhbWRfbnVtYV9pbml0KHZvaWQpXG4gXG4gXHRcdHByZXZiYXNlID0gYmFzZTtcbiBcdFx0bnVtYV9hZGRfbWVtYmxrKG5vZGVpZCwgYmFzZSwgbGltaXQpO1xuLVx0XHRub2RlX3NldChub2RlaWQsIG51bWFfbm9kZXNfcGFyc2VkKTtcbiBcdH1cbiBcbiBcdGlmIChub2Rlc19lbXB0eShudW1hX25vZGVzX3BhcnNlZCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYS5jIGIvYXJjaC94ODYvbW0vbnVtYS5jXG5pbmRleCA5OWQwYTkzMzJjMTQ1OS4uY2VkNjZlNjhhNjhlNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9udW1hLmNcbisrKyBiL2FyY2gveDg2L21tL251bWEuY1xuQEAgLTIxNiw3ICsyMTYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkdW1teV9udW1hX2luaXQodm9pZClcbiBcdHByaW50ayhLRVJOX0lORk8gXCJGYWtpbmcgYSBub2RlIGF0IFttZW0gJSMwMThMeC0lIzAxOEx4XVxcblwiLFxuIFx0ICAgICAgIDBMTFUsIFBGTl9QSFlTKG1heF9wZm4pIC0gMSk7XG4gXG4tXHRub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7XG4gXHRub2RlX3NldCgwLCBudW1hX3BoeXNfbm9kZXNfcGFyc2VkKTtcbiBcdG51bWFfYWRkX21lbWJsaygwLCAwLCBQRk5fUEhZUyhtYXhfcGZuKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jIGIvZHJpdmVycy9hY3BpL251bWEvc3JhdC5jXG5pbmRleCA2MmQ0YThkZjBiOGMxMy4uNWM0MDdkYzY0MDFlOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmNcbisrKyBiL2RyaXZlcnMvYWNwaS9udW1hL3NyYXQuY1xuQEAgLTM5OSw4ICszOTksNiBAQCBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eSh1bmlvbiBhY3BpX3N1YnRhYmxlX2hlYWRlcnMgKmhlYWRlcixcbiBcdFx0Z290byBvdXRfZXJyX2JhZF9zcmF0O1xuIFx0fVxuIFxuLVx0bm9kZV9zZXQobm9kZSwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVxuIFx0cHJfaW5mbyhcIlNSQVQ6IE5vZGUgJXUgUFhNICV1IFttZW0gJSMwMTBMeC0lIzAxMEx4XSVzJXNcXG5cIixcbiBcdFx0bm9kZSwgcHhtLFxuIFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZW5kIC0gMSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbmluZGV4IDQ0MmVhMjM5YmJhNzM5Li42NDc2MjI3Yjc3MmM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuKysrIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5AQCAtMjIxLDkgKzIyMSw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfcmVnaXN0ZXJfbm9kZXModm9pZClcbiBcdFx0bm9kZV9zZXRfb25saW5lKG5pZCk7XG4gXHR9XG4gXG4tXHQvKiBTZXR1cCBvbmxpbmUgbm9kZXMgdG8gYWN0dWFsIG5vZGVzKi9cbi1cdG5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjc5LDcgKzI3Niw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKVxuIFx0XHRwcl9lcnIoXCJOVU1BIGluaXQgZmFpbGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuLVx0bm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuIFxuIFx0bnVtYV9vZmYgPSB0cnVlO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9udW1hLmMgYi9kcml2ZXJzL29mL29mX251bWEuY1xuaW5kZXggY2QyZGM4ZTgyNWM5MmIuLjIzMGQ1ZjYyOGMxYjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9vZl9udW1hLmNcbisrKyBiL2RyaXZlcnMvb2Yvb2ZfbnVtYS5jXG5AQCAtNTksMTEgKzU5LDggQEAgc3RhdGljIGludCBfX2luaXQgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXModm9pZClcbiBcdFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHRmb3IgKGkgPSAwOyAhciBcdTAwMjZcdTAwMjYgIW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGksIFx1MDAyNnJzcmMpOyBpKyspIHtcbitcdFx0Zm9yIChpID0gMDsgIXIgXHUwMDI2XHUwMDI2ICFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCBcdTAwMjZyc3JjKTsgaSsrKVxuIFx0XHRcdHIgPSBudW1hX2FkZF9tZW1ibGsobmlkLCByc3JjLnN0YXJ0LCByc3JjLmVuZCArIDEpO1xuLVx0XHRcdGlmICghcilcbi1cdFx0XHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuLVx0XHR9XG4gXG4gXHRcdGlmICghaSB8fCByKSB7XG4gXHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuZGlmZiAtLWdpdCBhL21tL251bWFfbWVtYmxrcy5jIGIvbW0vbnVtYV9tZW1ibGtzLmNcbmluZGV4IDNjM2M0ZWFjMzUxNGQxLi40MjZkMTdmZjY4NTkyMCAxMDA2NDRcbi0tLSBhL21tL251bWFfbWVtYmxrcy5jXG4rKysgYi9tbS9udW1hX21lbWJsa3MuY1xuQEAgLTE3LDIwICsxNyw2IEBAIG5vZGVtYXNrX3QgbnVtYV9ub2Rlc19wYXJzZWQgX19pbml0ZGF0YTtcbiBzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBudW1hX21lbWluZm8gX19pbml0ZGF0YV9vcl9tZW1pbmZvO1xuIHN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfcmVzZXJ2ZWRfbWVtaW5mbyBfX2luaXRkYXRhX29yX21lbWluZm87XG4gXG4tLypcbi0gKiBTZXQgbm9kZXMsIHdoaWNoIGhhdmUgbWVtb3J5IGluIEBtaSwgaW4gKkBub2RlbWFzay5cbi0gKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8obm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBudW1hX21lbWluZm8gKm1pKVxuLXtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtaS1cdTAwM2VibGspOyBpKyspXG4tXHRcdGlmIChtaS1cdTAwM2VibGtbaV0uc3RhcnQgIT0gbWktXHUwMDNlYmxrW2ldLmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1pLVx1MDAzZWJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5vZGVfc2V0KG1pLVx1MDAzZWJsa1tpXS5uaWQsICpub2RlbWFzayk7XG4tfVxuLVxuIC8qKlxuICAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlXG4gICpcbkBAIC01Niw3ICs0Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG51bWFfYWxsb2NfZGlzdGFuY2Uodm9pZClcbiBcbiBcdC8qIHNpemUgdGhlIG5ldyB0YWJsZSBhbmQgYWxsb2NhdGUgaXQgKi9cbiBcdG5vZGVzX3BhcnNlZCA9IG51bWFfbm9kZXNfcGFyc2VkO1xuLVx0bnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oXHUwMDI2bm9kZXNfcGFyc2VkLCBcdTAwMjZudW1hX21lbWluZm8pO1xuIFxuIFx0Zm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZClcbiBcdFx0Y250ID0gaTtcbkBAIC0xMzUsMTMgKzEyMCwyMCBAQCBFWFBPUlRfU1lNQk9MKF9fbm9kZV9kaXN0YW5jZSk7XG4gc3RhdGljIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrX3RvKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4ge1xuK1x0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIG5pZCAqL1xuK1x0aWYgKG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpIHtcbitcdFx0cHJfd2FybihcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgaWQgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCIsXG4rXHRcdFx0bmlkLCBzdGFydCwgZW5kIC0gMSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0LyogaWdub3JlIHplcm8gbGVuZ3RoIGJsa3MgKi9cbiBcdGlmIChzdGFydCA9PSBlbmQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Lyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIGJsa3MgKi9cbi1cdGlmIChzdGFydCBcdTAwM2UgZW5kIHx8IG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpIHtcbi1cdFx0cHJfd2FybihcIldhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXFxuXCIsXG4rXHRpZiAoc3RhcnQgXHUwMDNlIGVuZCkge1xuK1x0XHRwcl93YXJuKFwiV2FybmluZzogaW52YWxpZCBtZW1ibGsgbm9kZSBzaXplICVkIFttZW0gJSMwMTBMeC0lIzAxMEx4XVxcblwiLFxuIFx0XHRcdG5pZCwgc3RhcnQsIGVuZCAtIDEpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xOTMsMTMgKzE4NSwyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9tb3ZlX3RhaWxfbWVtYmxrKHN0cnVjdCBudW1hX21lbWluZm8gKmRzdCwgaW50IGlkeCxcbiAgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgbmV3IG1lbWJsa1xuICAqXG4gICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uXG4rICogT24gc3VjY2VzcyBAbmlkIGlzIGFsc28gc2V0IGluIG51bWFfbm9kZXNfcGFyc2VkLlxuICAqXG4gICogUkVUVVJOUzpcbiAgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcbiB7XG4tXHRyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgXHUwMDI2bnVtYV9tZW1pbmZvKTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBudW1hX2FkZF9tZW1ibGtfdG8obmlkLCBzdGFydCwgZW5kLCBcdTAwMjZudW1hX21lbWluZm8pO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG5vZGVfc2V0KG5pZCwgbnVtYV9ub2Rlc19wYXJzZWQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMjU2LDggKzI1NSw3IEBAIGludCBfX2luaXQgbnVtYV9jbGVhbnVwX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHRcdC8qIHByZXNlcnZlIGluZm8gZm9yIG5vbi1SQU0gYXJlYXMgYWJvdmUgJ21heF9wZm4nOiAqL1xuIFx0XHRpZiAoYmktXHUwMDNlZW5kIFx1MDAzZSBoaWdoKSB7XG4tXHRcdFx0bnVtYV9hZGRfbWVtYmxrX3RvKGJpLVx1MDAzZW5pZCwgaGlnaCwgYmktXHUwMDNlZW5kLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZudW1hX3Jlc2VydmVkX21lbWluZm8pO1xuK1x0XHRcdG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhiaS1cdTAwM2VuaWQsIGhpZ2gsIGJpLVx1MDAzZWVuZCk7XG4gXHRcdFx0YmktXHUwMDNlZW5kID0gaGlnaDtcbiBcdFx0fVxuIFxuQEAgLTQwMSw3ICszOTksNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXG4gXG4gXHQvKiBBY2NvdW50IGZvciBub2RlcyB3aXRoIGNwdXMgYW5kIG5vIG1lbW9yeSAqL1xuIFx0bm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDtcbi1cdG51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKFx1MDAyNm5vZGVfcG9zc2libGVfbWFwLCBtaSk7XG4gXHRpZiAoV0FSTl9PTihub2Rlc19lbXB0eShub2RlX3Bvc3NpYmxlX21hcCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjI1LjAzNjU1MjIwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzA2MjIyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIE1lbW9yeSBCbG9jayBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYG51bWFfbm9kZXNfcGFyc2VkYCBtYXNrIGlzIGluaXRpYWxpemVkLiBUaGUgb3JpZ2luYWwgYXBwcm9hY2ggd2FzIHRvIHNldCB0aGlzIG1hc2sgaW4gdmFyaW91cyBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlci1zcGVjaWZpYyBmaWxlcy4gTm93LCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIHRoZSBzZXR0aW5nIG9mIGBudW1hX25vZGVzX3BhcnNlZGAgd2l0aGluIHRoZSBgbnVtYV9hZGRfbWVtYmxrKClgIGZ1bmN0aW9uIGluIGBtbS9udW1hX21lbWJsa3MuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2UgaXMgaW4gYG51bWFfYWRkX21lbWJsaygpYCBpdHNlbGY6IGl0IG5vdyBjYWxscyBgbnVtYV9hZGRfbWVtYmxrX3RvKClgLCBhbmQgKm9ubHkqIHNldHMgdGhlIGBuaWRgIGJpdCBpbiBgbnVtYV9ub2Rlc19wYXJzZWRgIGlmIHRoYXQgY2FsbCBzdWNjZWVkcy4gQWxzbywgdGhlIGBudW1hX2FkZF9tZW1ibGtfdG9gIGZ1bmN0aW9uIHNlZW1zIHRvIGhhdmUgYSBuZXcgY2hlY2sgZm9yIGBuaWRgLlxuXG5JIHNlZSB0aGF0IGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AgYW5kIGl0cyB1c2UgaGF2ZSBiZWVuIHJlbW92ZWQgZW50aXJlbHksIHNvIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIGZvci5cblxuVGhpcyBpcyBhbGwgaGFwcGVuaW5nIGF0IGluaXRpYWxpemF0aW9uLXRpbWUsIHNwZWNpZmljYWxseSB1c2luZyBgX19pbml0YCBmdW5jdGlvbnMuIFNvLCBmcm9tIGFuIGV4ZWN1dGlvbiBwZXJzcGVjdGl2ZSwgaXQncyBvbmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGUgY29kZSBpcyBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGFzIE5VTUEgaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIHJlZ2FyZGxlc3MuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbj8gRnV6emluZyB0b29scyBsaWtlIHN5emthbGxlciBhcmUgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIHRhcmdldCBzeXNjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3lzY2FsbHMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXM7IGl0J3MgcHVyZWx5IGtlcm5lbCBpbml0aWFsaXphdGlvbiBjb2RlLiBXaGlsZSBzeXprYWxsZXIgZG9lcyBib290IHRoZSBrZXJuZWwgYW5kIHRodXMsIGluZGlyZWN0bHksIGNvdWxkIGNhdGNoIGEgYm9vdCBmYWlsdXJlIGNhdXNlZCBieSB0aGlzIGNoYW5nZSwgaXQncyBub3QgdGhlIHRvb2wncyBjb3JlIHN0cmVuZ3RoLCBhbmQgZnV6emluZyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHNlZW1zIGxpa2UgYW4gaW5lZmZpY2llbnQgdXNlIG9mIHJlc291cmNlcy4gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGFmdGVyIGJvb3QsIHNvIGFueSBmdXp6aW5nIGVmZm9ydHMgcG9zdC1ib290IHdpbGwgc2ltcGx5IGJ5cGFzcyBpdC5cblxuVG8gYmUgc3VyZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoYXQgYG51bWFfYWRkX21lbWJsa2AgYW5kIGFsbCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBgX19pbml0YCBmdW5jdGlvbnMuIFllcywgYG51bWFfYWRkX21lbWJsa2AsIGBudW1hX2NsZWFudXBfbWVtaW5mb2AsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gLCBgb2ZfbnVtYV9wYXJzZV9tZW1vcnlfbm9kZXNgLCBgZHVtbXlfbnVtYV9pbml0YCBhbmQgYG51bWFfcmVnaXN0ZXJfbm9kZXNgIGFyZSBhbGwgb25seSB1c2VkIGR1cmluZyBpbml0LiBPa2F5LCBhbmQgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBBQ1BJIHRhYmxlIHBhcnNpbmcgLSB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgQUNQSSBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIG1lbW9yeSBob3RwbHVnLCBzbyBsZXQncyBkb3VibGUgY2hlY2sgdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYGRyaXZlcnMvYWNwaS9udW1hL3NyYXQuY2AuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgc28gZmFyLCBpdCBhcHBlYXJzIHRvIGJlIGEgY2xlYW51cCBhbmQgcmVzdHJ1Y3R1cmluZywgYnV0IHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGNvbmZpbmVkIHRvIHRoZSBlYXJseSBib290IHByb2Nlc3MsIHNvIGRlZGljYXRlZCBmdXp6aW5nIG1pZ2h0IGJlIG92ZXJraWxsLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgY2FuIG9jY3VyIGFmdGVyIHRoZSBpbml0aWFsIGJvb3QgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjMzLjk2OTE5ODA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MTU5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYz0zNTg9c3RhdGljIGludCBfX2luaXRcXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6MzU5OmFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KHVuaW9uIGFjcGlfc3VidGFibGVfaGVhZGVycyAqaGVhZGVyLFxcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy0zNjAtXFx0XFx0XFx0ICAgY29uc3QgdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM9NjAxPWludCBfX2luaXQgYWNwaV9udW1hX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9udW1hL3NyYXQuYy02MzQtXFx0XFx0Y250ID0gYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX01FTU9SWV9BRkZJTklUWSxcXG5kcml2ZXJzL2FjcGkvbnVtYS9zcmF0LmM6NjM1OlxcdFxcdFxcdFxcdFxcdCAgICBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eSwgMCk7XFxuZHJpdmVycy9hY3BpL251bWEvc3JhdC5jLTYzNi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA0OjMyOjM2LjYyNDM2NTc3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk2MzUwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgaXQgc2VlbXMgbGlrZSBldmVyeXRoaW5nIG1vZGlmaWVkIGlzIHRpZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zLiBBbmQgYWxsIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZCB0byBgX19pbml0YCBvciBgX19pbml0ZGF0YWAg4oCTIHRoYXQncyBhIGh1Z2UgcmVkIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGZ1enppbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLCBpcyBhbGwgYWJvdXQgcG9zdC1ib290IGV4ZWN1dGlvbiDigJMgc3lzY2FsbHMsIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGBfX2luaXRgIGNvZGUgb25seSBydW5zIG9uY2UsIGR1cmluZyBib290LiBXaGlsZSBmdW5jdGlvbmFsbHkgaW1wb3J0YW50LCBpdCdzIG5vdCB0aGUga2luZCBvZiB0aGluZyB0aGF0IGEgc3lzY2FsbCBmdXp6ZXIgY2FuIHJlYWxseSBzaW5rIGl0cyB0ZWV0aCBpbnRvIGFuZCBoZWF2aWx5IGZ1enouXG5cbkJ1dCB3YWl0LCBsZXQgbWUgY2hlY2sgdGhlIGd1aWRlbGluZXMgYWdhaW4uIFRoZSBpbnN0cnVjdGlvbnMgc2F5LCBhbmQgSSdtIHBhcmFwaHJhc2luZyBoZXJlLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpY2FsIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGZsb3csIG9yIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG5cblNvLCBpcyB0aGlzIGBfX2luaXRgIGNvZGUgXCJ1bnJlYWNoYWJsZVwiIGluIGEgZnV6emluZyBjb250ZXh0PyBXZWxsLCBubywgaXQgKmlzKiByZWFjaGVkLCBidXQgb25seSBkdXJpbmcgYm9vdC4gSXMgaXQgKndvcnRoKiBmdXp6aW5nPyBJZiBpdCdzIGp1c3QgYm9vdCBjb2RlLCBTeXprYWxsZXIgd2lsbCBydW4gaXQuIEl0IGRvZXNuJ3QgbmVlZCBzcGVjaWZpYyB0YXJnZXQgc3ltYm9scyBiZWNhdXNlIHRoYXQgY29kZSBydW5zIHVuY29uZGl0aW9uYWxseSwgb3IgYmFzZWQgb24gYm9vdCBwYXJhbWV0ZXJzIG9yIEFDUEkgdGFibGVzLiBJZiBpdCdzICpmdW5jdGlvbmFsKiwgc2hvdWxkIEkgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlPyBCdXQgSSBoYXZlIHRvIGJlIGFibGUgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvICpoZWF2aWx5KiBmdXp6LiBIb3cgY2FuIEkgaGVhdmlseSBmdXp6IGBfX2luaXRgIGZ1bmN0aW9ucz8gU3l6a2FsbGVyIGNhbid0IHRhcmdldCB0aGVtLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24taW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZC5cblxuKiAgIGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLlxuKiAgIGBudW1hX2FkZF9tZW1ibGtfdG9gIGlzIGBfX2luaXRgLlxuKiAgIGBudW1hX2NsZWFudXBfbWVtaW5mb2AgaXMgYF9faW5pdGAuXG4qICAgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AgaXMgYF9faW5pdGAuXG4qICAgYG9mX251bWFfcGFyc2VfbWVtb3J5X25vZGVzYCBpcyBgX19pbml0YC5cbiogICBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AgaXMgYF9faW5pdGAuXG4qICAgYGR1bW15X251bWFfaW5pdGAgaXMgYF9faW5pdGAuXG4qICAgYGFtZF9udW1hX2luaXRgIGlzIGBfX2luaXRgLlxuKiAgIGBmYWtlX251bWFfaW5pdGAgaXMgYF9faW5pdGAuXG5cbk5vcGUuIEl0J3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU28sIHRoZXNlIGNoYW5nZXMgaGFwcGVuIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQuIEEgZnV6emVyIGNhbid0IFwiZm9jdXNcIiBvbiB0aGVtIG9yIGdlbmVyYXRlIHNwZWNpZmljIGlucHV0cyB3aXRoaW4gaXRzIG5vcm1hbCBmdXp6aW5nIGxvb3AuIFRoZSBvbmx5IHdheSB0byBldmVuIHRvdWNoIHRoaXMgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5IGlzIGJ5IGZpZGRsaW5nIHdpdGggQUNQSSB0YWJsZXMsIERUQnMsIG9yIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gVGhhdCdzIG5vdCBob3cgc3lzY2FsbCBmdXp6aW5nIHdvcmtzLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbGwgY2hhbmdlcyBhcmUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgb25seSBkdXJpbmcgYm9vdCBhbmQgY2FuJ3QgYmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkIG9yIGhlYXZpbHkgZnV6emVkIGJ5IGEgdHlwaWNhbCBzeXNjYWxsIGZ1enplci4gSXQncyBhIGZ1bmRhbWVudGFsIGxpbWl0YXRpb24uXG5cbldhaXQsIGlzIHRoZXJlIGFueSBleGNlcHRpb24/IE1lbW9yeSBob3RwbHVnPyBNYXliZSB0aGVzZSBpbml0IGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBzb21lIHJhcmUsIGxhdGVyIHBhdGguIE1lbW9yeSBob3RwbHVnP1xuTWVtb3J5IGhvdHBsdWcgdXNlcyBgbnVtYV9hZGRfbWVtYmxrYD8gTm8sIGBudW1hX2FkZF9tZW1ibGtgIGlzIG1hcmtlZCBgX19pbml0YC4gSWYgaXQgd2VyZSB1c2VkIGluIG1lbW9yeSBob3RwbHVnLCBpdCB3b3VsZG4ndCBiZSBgX19pbml0YC5cbkxldCdzIGp1c3QgdmVyaWZ5IGBudW1hX2FkZF9tZW1ibGtgIGlzIGBfX2luaXRgLi4uIFllcCwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDQ6MzI6NDcuMzIwNzIxMDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODMzMjcyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg9MzM9dm9pZCBfX2luaXQgYXJjaF9udW1hX2luaXQodm9pZCk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9udW1hLmg6MzQ6aW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsoaW50IG5vZGVpZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL251bWEuaC0zNS12b2lkIF9faW5pdCBlYXJseV9tYXBfY3B1X3RvX25vZGUodW5zaWduZWQgaW50IGNwdSwgaW50IG5pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oPTE5PXN0cnVjdCBudW1hX21lbWluZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9udW1hX21lbWJsa3MuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L251bWFfbWVtYmxrcy5oOjI0OmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBub2RlaWQsIHU2NCBzdGFydCwgdTY0IGVuZCk7XFxuaW5jbHVkZS9saW51eC9udW1hX21lbWJsa3MuaC0yNS1pbnQgX19pbml0IG51bWFfYWRkX3Jlc2VydmVkX21lbWJsayhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpO1xcbi0tXFxubW0vbnVtYV9tZW1ibGtzLmM9MTE4PUVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTtcXG5tbS9udW1hX21lbWJsa3MuYy0xMTktXFxubW0vbnVtYV9tZW1ibGtzLmM6MTIwOnN0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsa190byhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQsXFxubW0vbnVtYV9tZW1ibGtzLmMtMTIxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYz0xNzQ9c3RhdGljIHZvaWQgX19pbml0IG51bWFfbW92ZV90YWlsX21lbWJsayhzdHJ1Y3QgbnVtYV9tZW1pbmZvICpkc3QsIGludCBpZHgsXFxuLS1cXG5tbS9udW1hX21lbWJsa3MuYy0xOTItICovXFxubW0vbnVtYV9tZW1ibGtzLmM6MTkzOmludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZClcXG5tbS9udW1hX21lbWJsa3MuYy0xOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjo1MS43MDQwNTUyNDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQ2NzYyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucyBPbmx5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGZ1bmN0aW9ucyBsaWtlIGBudW1hX2FkZF9tZW1ibGtgLCBgYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHlgLCBhbmQgc28gb24uIFRoZXNlIGFyZSBhbGwgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyB0aGUga2VybmVsJ3MgZWFybHkgYm9vdCBzZXF1ZW5jZSwgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGlzIHRoZW4gc3Vic2VxdWVudGx5IGZyZWVkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIEkgY2FuIGNvbmZpZGVudGx5IHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVtIGJlaW5nIHRhcmdldGVkIG9yIHJlYWNoZWQgYnkgYSBzeXNjYWxsIGZ1enplciBkdXJpbmcgbm9ybWFsIHN5c3RlbSBvcGVyYXRpb24uIFRoZXkgYXJlIHNpbXBseSBub3QgaW4gdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBmYWtlX251bWFfaW5pdGAsIGBhbWRfbnVtYV9pbml0YCwgYGR1bW15X251bWFfaW5pdGAsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAgKGNhbGxlZCBmcm9tIGBhY3BpX251bWFfaW5pdGApLCBgbnVtYV9yZWdpc3Rlcl9ub2Rlc2AsIGBvZl9udW1hX3BhcnNlX21lbW9yeV9ub2Rlc2AsIGBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mb2AsIGBudW1hX2FsbG9jX2Rpc3RhbmNlYCwgYG51bWFfYWRkX21lbWJsa190b2AsIGBudW1hX2FkZF9tZW1ibGtgLCBgbnVtYV9jbGVhbnVwX21lbWluZm9gLCBhbmQgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2AsIGFuZCB0aGV5IGFyZSBhbGwgY29ycmVjdGx5IGZsYWdnZWQgYXMgYF9faW5pdGAuXG5cbldpdGggdGhhdCB2ZXJpZmljYXRpb24sIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLiBJdCdzIHNhZmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODcwLCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNDozMjo1OC4yNTA4MjA2OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBOVU1BIG1lbW9yeSBibG9jayBpbml0aWFsaXphdGlvbiB0byBjZW50cmFsbHkgc2V0IGBudW1hX25vZGVzX3BhcnNlZGAgaW4gYG51bWFfYWRkX21lbWJsaygpYC4gQWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzIGBfX2luaXRgIChlLmcuLCBgbnVtYV9hZGRfbWVtYmxrYCwgYGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5YCwgYG51bWFfcmVnaXN0ZXJfbWVtaW5mb2ApLiBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290IGFuZCBhcmUgc3Vic2VxdWVudGx5IGZyZWVkLiBUaGV5IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRhcmdldGVkIGJ5IGEgc3lzY2FsbCBmdXp6ZXIgZHVyaW5nIHBvc3QtYm9vdCBvcGVyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTlVNQSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6YXRpb24gdG8gY2VudHJhbGx5IHNldCBgbnVtYV9ub2Rlc19wYXJzZWRgIGluIGBudW1hX2FkZF9tZW1ibGsoKWAuIEFsbCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBgX19pbml0YCAoZS5nLiwgYG51bWFfYWRkX21lbWJsa2AsIGBhY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eWAsIGBudW1hX3JlZ2lzdGVyX21lbWluZm9gKS4gVGhlc2UgZnVuY3Rpb25zIGV4ZWN1dGUgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdCBhbmQgYXJlIHN1YnNlcXVlbnRseSBmcmVlZC4gVGhleSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0YXJnZXRlZCBieSBhIHN5c2NhbGwgZnV6emVyIGR1cmluZyBwb3N0LWJvb3Qgb3BlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ghgf[1] Phase: Running StartedAt: 2026-07-03 04:33:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ghgf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 04:33:09 +0000 UTC FinishedAt: 2026-07-03 04:33:29 +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,}