Name: series-workflow2tjnp Phase: Failed StartedAt: 2026-07-27 17:02:20 +0000 UTC FinishedAt: 2026-07-27 17:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2tjnp[0] Phase: Succeeded StartedAt: 2026-07-27 17:02:20 +0000 UTC FinishedAt: 2026-07-27 17:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2tjnp[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 17:02:20 +0000 UTC FinishedAt: 2026-07-27 17:19:58 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxYjQ5YjFkZjMyZTI3NzMwMGJhZTRiNjA0MzBiMDA1OGY1ZTBhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggMWUxZGVhNDg1NzYwYjMuLmVjNWJmNWM5ZmQ3OTI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxuIHtcbi1cdGludCBpLCBqO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDE0ICYjNDM7NTk4LDExIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuLVxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBudW1faXJxOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgaXJxX25hbWVbaXJxX2lkeF0pO1xuLVx0XHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHRcdFx0aXJxX3NldF9zdGF0dXNfZmxhZ3MoaXJxLCBJUlFfTk9BVVRPRU4gfCBJUlFfRElTQUJMRV9VTkxBWlkpO1xuIFx0XHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcbkBAIC02MDAsMTEgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgaXJxKTtcbiYjNDM7XHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuJiM0MztcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlcXVlc3RfaXJxOlxuJiM0MztcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OywgaXJxKTtcbiYjNDM7XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElSUSBjb25maWd1cmF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBBSEIgZHJpdmVyLCB3aGljaCBiaW5kcyB0byBzcGVjaWZpYyBRdWFsY29tbSBJUFEgU29DIFdpLUZpIGhhcmR3YXJlIChlLmcuLCBxY29tLGlwcTgwNzQtd2lmaSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjFiNDliMWRmMzJlMjc3MzAwYmFlNGI2MDQzMGIwMDU4ZjVlMGE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDE3OjE5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggMWUxZGVhNDg1NzYwYjMuLmVjNWJmNWM5ZmQ3OTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApCiB7Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJaW50IGo7CiAKLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQotCQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCiYjNDM7CQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiAKLQkJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKLQkJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKLQl9CiYjNDM7CW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7CiYjNDM7CWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewotCWludCBpcnFfaWR4OwogCWludCBpOwogCi0JaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQotCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXSk7CiYjNDM7fQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFiLSZndDtod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpCiYjNDM7ewomIzQzOwlpbnQgaXJxX2lkeCwgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiAJCQljb250aW51ZTsKIAkJaXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwogCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSwgJmFtcDthYi0mZ3Q7Y2UuY2VfcGlwZVtpXSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7ewomIzQzOwlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCiYjNDM7CQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwogCiYjNDM7CWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKIAlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7CiB9CiAKQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7CiAJc3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gJmFtcDthYi0mZ3Q7aHdfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwOwogCWludCBpLCBqOwogCWludCBpcnE7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwogCQl1MzIgbnVtX2lycSA9IDA7CiAKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsKIAkJaXJxX2dycC0mZ3Q7YWIgPSBhYjsKIAkJaXJxX2dycC0mZ3Q7Z3JwX2lkID0gaTsKIAogCQlpcnFfZ3JwLSZndDtuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7Ci0JCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IDA7CiYjNDM7CQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiYjNDM7CQl9CiAKIAkJbmV0aWZfbmFwaV9hZGQoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2LCAmYW1wO2lycV9ncnAtJmd0O25hcGksCiAJCQkgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7CkBAIC01ODUsMTQgJiM0Mzs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQkJfQogCQkJfQogCQl9Ci0JCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwotCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG51bV9pcnE7IGomIzQzOyYjNDM7KSB7CiAJCQlpbnQgaXJxX2lkeCA9IGlycV9ncnAtJmd0O2lycXNbal07CiAKIAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLSZndDtwZGV2LAogCQkJCQkJICAgICAgaXJxX25hbWVbaXJxX2lkeF0pOwotCQkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7CiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyLAogCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsCkBAIC02MDAsMTEgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywKIAkJCQkJICAgaXJxKTsKJiM0MzsJCQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IGo7CiYjNDM7CQkJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CQkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCQkJfQomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiYjNDM7CiYjNDM7CQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVxdWVzdF9pcnE6CiYjNDM7CWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkgewomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQpAQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLAogCQkJCSAgY2VfcGlwZSk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywgaXJxKTsKJiM0MzsJCQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7CiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCX0KIAogCS8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJcmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIGF0aDExayBBSEIgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLiBSaWdodCBhd2F5LCBJIHNlZSBpdCYjMzk7cyBmaXhpbmcgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBUaGF0JiMzOTtzIGdvb2Q7IGFsd2F5cyBpbXBvcnRhbnQgdG8gdGlnaHRlbiB1cCBlcnJvciBwYXRocyBhbmQgZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCBtYWtlcyBzdXJlIHdlJiMzOTtyZSBub3QgbGVha2luZyBJUlFzIG9uIGZhaWx1cmUuIFN0YW5kYXJkIHN0dWZmIGZvciBkcml2ZXIgZGV2ZWxvcG1lbnQuCgpOb3csIHRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXggd2lyZWxlc3MgY2FyZHMsIGBhdGgxMWtgLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgdGhlIEFIQiBidXMgZHJpdmVyIChgYWhiLmNgKSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZm9yIHRob3NlIGludGVybmFsIFNvQ3MgbGlrZSBJUFE4MDc0IGFuZCBJUFE2MDE4IOKAkyB0aGUgb25lcyB0aGF0IHVzZSB0aGUgQUhCIGJ1cywgd2hpY2ggYXJlIHByZXR0eSBjb21tb24gaW4gZW1iZWRkZWQgc3lzdGVtcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKmlzIHRoaXMgZXZlbiB0ZXN0YWJsZSBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50Kj8gVXN1YWxseSwgQUhCIGRldmljZXMgYXJlIHBsYXRmb3JtIGRldmljZXMsIGFuZCB0aGV5JiMzOTtyZSBkZXNjcmliZWQgaW4gdGhlIGRldmljZSB0cmVlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgbWFjaGluZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIFNvQyAqYW5kKiB0aGUgV2ktRmkgaGFyZHdhcmUgYXR0YWNoZWQgdG8gdGhlIEFIQiwgSSYjMzk7bSBnb2luZyB0byBzYXksIHByb2JhYmx5IG5vdC4gSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgYGF0aDExa19haGJfcHJvYmVgLCBpZiBpdCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbiwgdGhlbiBJJiMzOTtsbCB1c2Ugb3RoZXIgc2VhcmNoIHRvb2xzIHRvIGNoZWNrIHRoZSBwbGF0Zm9ybSBpbiB0aGUgZGV2aWNlIHRyZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTMzOTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzIC0gVGltZSB0byBQcm9iZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSByZWNvZ25pemluZyBpdCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gTXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHR1cm46IHRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHJlZ2lzdGVyaW5nIHdpdGggdGhlIGtlcm5lbCB0byBtYW5hZ2UgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgcHJpbWFyeSBmb2N1cyBhdCB0aGlzIHN0YWdlIHdpbGwgYmUgb24gdGhlICYjMzQ7Y29tcGF0aWJsZSYjMzQ7IHN0cmluZ3MgdXNlZCBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byBzZWUgcHJlY2lzZWx5ICp3aGF0KiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgc2NvcGUgb2YgaXRzIHN1cHBvcnRlZCBkZXZpY2VzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHVzZSBjYXNlLiBXaGF0IGFyZSB3ZSBsb29raW5nIGZvcj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX29mX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NDM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQ0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTMzND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzYtXHRcdC5uYW1lID0gXCYjMzQ7YXRoMTFrXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM3Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBhdGgxMWtfYWhiX29mX21hdGNoLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBDb21wYXRpYmlsaXR5IFN0cmluZ3MqKgoKUmlnaHQsIGxldCYjMzk7cyBjdXQgdG8gdGhlIGNoYXNlIGFuZCBnZXQgYSBsb29rIGF0IHRoZSAqYWN0dWFsKiBjb21wYXRpYmxlIHN0cmluZ3MuIEkgbmVlZCB0byBtb3ZlIGJleW9uZCBjb25jZXB0dWFsIHVuZGVyc3RhbmRpbmcgYW5kIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgYWxyZWFkeSBkb25lIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBjb25zaWRlcmVkIHRoZSB0aGVvcmV0aWNhbCBwb3NzaWJpbGl0aWVzLCBhbmQgbm93IHdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiB3b3JraW5nLiBObyBtb3JlIGh5cG90aGV0aWNhbHMsIEkgd2FudCByZWFsLXdvcmxkIGV4YW1wbGVzLCBhY3R1YWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkYXRhIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbiAgMjU6XHRcdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4gIDI2Olx0XHQgKiB0byBvbmUgdGhhdCBhdGgxMGsgdXNlcz9cbiAgMjc6XHRcdCAqL1xuICAyODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuICAyOTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXG4gIDMwOlx0XHR9LFxuICAzMTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNjAxOC13aWZpXCYjMzQ7LFxuICAzMjpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcbiAgMzM6XHRcdH0sXG4gIDM0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSx3Y242NzUwLXdpZmlcJiMzNDssXG4gIDM1Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfV0NONjc1MF9IVzEwLFxuICAzNjpcdFx0fSxcbiAgMzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtd2lmaVwmIzM0OyxcbiAgMzg6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXG4gIDM5Olx0XHR9LFxuICA0MDpcdFx0eyB9XG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQ3CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIFF1YWxjb21tIElQUSBTb0NzLCB0aGluZ3MgbGlrZSAmIzM0O3Fjb20saXBxODA3NC13aWZpJiMzNDsgYW5kICYjMzQ7cWNvbSxpcHE2MDE4LXdpZmkuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDb3VsZCB3ZSBnZXQgdGhpcyBydW5uaW5nIHVuZGVyIFFFTVU/JiMzNDsgQnV0IG5vLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhvc2Ugc3BlY2lmaWMgSVBRODA3NCBvciBJUFE2MDE4IFdpLUZpIGNvbXBvbmVudHMuCgpMb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGVycm9yIGhhbmRsaW5nIGlzc3VlcyB3aXRoaW4gdGhlIHByb2JlL2luaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhbGx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgb2YgdGhvc2UgUXVhbGNvbW0gU29DcywgYW5kIGl0JiMzOTtzIGFsbCBBSEIgYnVzIHNwZWNpZmljLCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgb3IgZXZlbiB3aXRoaW4gR0NFLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgaW4gSVJRIGNvbmZpZ3VyYXRpb24gZm9yIGEgZHJpdmVyIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQuIEl0JiMzOTtzIHNpbXBseSBub3Qgd29ydGggdGhlIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI4LjQ4NDg0NzkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI2NzIxOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI4LjQ4NDg1NjM3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDM3OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjFiNDliMWRmMzJlMjc3MzAwYmFlNGI2MDQzMGIwMDU4ZjVlMGE1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbmluZGV4IDFlMWRlYTQ4NTc2MGIzLi5lYzViZjVjOWZkNzkyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRhYi1cXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXFx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdGludCBqO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbitcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuIFxcbi1cXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuLVxcdH1cXG4rXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbitcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4tXFx0aW50IGlycV9pZHg7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbi1cXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkrKykge1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeClcXG4re1xcbitcXHRpbnQgaXJxX2lkeCwgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcXG4gXFx0XFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCArIGk7XFxuIFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcXHUwMDI2YWItXFx1MDAzZWNlLmNlX3BpcGVbaV0pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4re1xcbitcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuK1xcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuIFxcbitcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XFxuIFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcXG4gfVxcbiBcXG5AQCAtNTI0LDIwICs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXFx1MDAyNmFiLVxcdTAwM2Vod19wYXJhbXM7XFxuK1xcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XFxuIFxcdGludCBpLCBqO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuIFxcdFxcdHUzMiBudW1faXJxID0gMDtcXG4gXFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlYWIgPSBhYjtcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG4gXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcXG4tXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gMDtcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiwgXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGksXFxuIFxcdFxcdFxcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcXG5AQCAtNTg1LDE0ICs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XFxuLVxcdFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHRcXHRcXHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XFxuIFxcdFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcXG5AQCAtNjAwLDExICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlycSk7XFxuK1xcdFxcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBqO1xcbitcXHRcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI5LjAzMzI4NDc1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3ODc4Mjc5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxYjQ5YjFkZjMyZTI3NzMwMGJhZTRiNjA0MzBiMDA1OGY1ZTBhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5pbmRleCAxZTFkZWE0ODU3NjBiMy4uZWM1YmY1YzlmZDc5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4rXHRcdFx0XHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsMTQgKzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaisrKSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0XHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XG4gXHRcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLFxuQEAgLTYwMCwxMSArNjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuK1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbitcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4rXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOToyOS4wMzMyODU5NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE3ODE3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBhdGgxMWsgQUhCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jYC4gUmlnaHQgYXdheSwgSSBzZWUgaXQncyBmaXhpbmcgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBUaGF0J3MgZ29vZDsgYWx3YXlzIGltcG9ydGFudCB0byB0aWdodGVuIHVwIGVycm9yIHBhdGhzIGFuZCBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgIG1ha2VzIHN1cmUgd2UncmUgbm90IGxlYWtpbmcgSVJRcyBvbiBmYWlsdXJlLiBTdGFuZGFyZCBzdHVmZiBmb3IgZHJpdmVyIGRldmVsb3BtZW50LlxuXG5Ob3csIHRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXggd2lyZWxlc3MgY2FyZHMsIGBhdGgxMWtgLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgdGhlIEFIQiBidXMgZHJpdmVyIChgYWhiLmNgKSwgd2hpY2ggbWVhbnMgaXQncyBmb3IgdGhvc2UgaW50ZXJuYWwgU29DcyBsaWtlIElQUTgwNzQgYW5kIElQUTYwMTgg4oCTIHRoZSBvbmVzIHRoYXQgdXNlIHRoZSBBSEIgYnVzLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiBpbiBlbWJlZGRlZCBzeXN0ZW1zLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICppcyB0aGlzIGV2ZW4gdGVzdGFibGUgaW4gYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudCo/IFVzdWFsbHksIEFIQiBkZXZpY2VzIGFyZSBwbGF0Zm9ybSBkZXZpY2VzLCBhbmQgdGhleSdyZSBkZXNjcmliZWQgaW4gdGhlIGRldmljZSB0cmVlLiBVbmxlc3MgdGhlcmUncyBhIHZlcnkgc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgU29DICphbmQqIHRoZSBXaS1GaSBoYXJkd2FyZSBhdHRhY2hlZCB0byB0aGUgQUhCLCBJJ20gZ29pbmcgdG8gc2F5LCBwcm9iYWJseSBub3QuIEknZCBuZWVkIHRvIGNvbmZpcm0gaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSBmaW5kIHRoZSBjYWxsIHNpdGVzIGZvciBgYXRoMTFrX2FoYl9wcm9iZWAsIGlmIGl0IGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCB0aGVuIEknbGwgdXNlIG90aGVyIHNlYXJjaCB0b29scyB0byBjaGVjayB0aGUgcGxhdGZvcm0gaW4gdGhlIGRldmljZSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzUuMDUxMTA1NTQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDAzNzc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0fSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOTozNS4yMzExNDk4OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0NTMzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzIC0gVGltZSB0byBQcm9iZSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgaXQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIE15IG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSBzdGFydGluZyB0byB0dXJuOiB0aGlzIG1lYW5zIGl0J3MgbGlrZWx5IHJlZ2lzdGVyaW5nIHdpdGggdGhlIGtlcm5lbCB0byBtYW5hZ2UgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgcHJpbWFyeSBmb2N1cyBhdCB0aGlzIHN0YWdlIHdpbGwgYmUgb24gdGhlIFwiY29tcGF0aWJsZVwiIHN0cmluZ3MgdXNlZCBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIEknbSBrZWVuIHRvIHNlZSBwcmVjaXNlbHkgKndoYXQqIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBzY29wZSBvZiBpdHMgc3VwcG9ydGVkIGRldmljZXMgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgdXNlIGNhc2UuIFdoYXQgYXJlIHdlIGxvb2tpbmcgZm9yP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzguOTg1Njg2NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQxNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzYtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzc6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzkuMTc5MTEwMDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyNzA5NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgQ29tcGF0aWJpbGl0eSBTdHJpbmdzKipcblxuUmlnaHQsIGxldCdzIGN1dCB0byB0aGUgY2hhc2UgYW5kIGdldCBhIGxvb2sgYXQgdGhlICphY3R1YWwqIGNvbXBhdGlibGUgc3RyaW5ncy4gSSBuZWVkIHRvIG1vdmUgYmV5b25kIGNvbmNlcHR1YWwgdW5kZXJzdGFuZGluZyBhbmQgZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzLiBJJ20gYXNzdW1pbmcgd2UndmUgYWxyZWFkeSBkb25lIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBjb25zaWRlcmVkIHRoZSB0aGVvcmV0aWNhbCBwb3NzaWJpbGl0aWVzLCBhbmQgbm93IHdlIG5lZWQgdG8gc2VlIHdoYXQncyAqYWN0dWFsbHkqIHdvcmtpbmcuIE5vIG1vcmUgaHlwb3RoZXRpY2FscywgSSB3YW50IHJlYWwtd29ybGQgZXhhbXBsZXMsIGFjdHVhbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBMZXQncyBzZWUgd2hhdCB0aGUgZGF0YSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOTo0MS44MDYyMDgyODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuICAyNTpcXHRcXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbiAgMjY6XFx0XFx0ICogdG8gb25lIHRoYXQgYXRoMTBrIHVzZXM/XFxuICAyNzpcXHRcXHQgKi9cXG4gIDI4OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE4MDc0LXdpZmlcXFwiLFxcbiAgMjk6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXFxuICAzMDpcXHRcXHR9LFxcbiAgMzE6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTYwMTgtd2lmaVxcXCIsXFxuICAzMjpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNjAxOF9IVzEwLFxcbiAgMzM6XFx0XFx0fSxcXG4gIDM0OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSx3Y242NzUwLXdpZmlcXFwiLFxcbiAgMzU6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX1dDTjY3NTBfSFcxMCxcXG4gIDM2OlxcdFxcdH0sXFxuICAzNzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC13aWZpXFxcIixcXG4gIDM4OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXFxuICAzOTpcXHRcXHR9LFxcbiAgNDA6XFx0XFx0eyB9XFxuICA0MTpcXHR9O1xcbiAgNDI6XFx0XFxuICA0MzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6NDEuODA2MzIyMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTIxMTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gUXVhbGNvbW0gSVBRIFNvQ3MsIHRoaW5ncyBsaWtlIFwicWNvbSxpcHE4MDc0LXdpZmlcIiBhbmQgXCJxY29tLGlwcTYwMTgtd2lmaS5cIiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHdlIGdldCB0aGlzIHJ1bm5pbmcgdW5kZXIgUUVNVT9cIiBCdXQgbm8sIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRob3NlIHNwZWNpZmljIElQUTgwNzQgb3IgSVBRNjAxOCBXaS1GaSBjb21wb25lbnRzLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGVycm9yIGhhbmRsaW5nIGlzc3VlcyB3aXRoaW4gdGhlIHByb2JlL2luaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhbGx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgb2YgdGhvc2UgUXVhbGNvbW0gU29DcywgYW5kIGl0J3MgYWxsIEFIQiBidXMgc3BlY2lmaWMsIGl0J3MganVzdCBub3QgZ29pbmcgdG8gYmUgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIG9yIGV2ZW4gd2l0aGluIEdDRS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIGluIElSUSBjb25maWd1cmF0aW9uIGZvciBhIGRyaXZlciB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQuIEl0J3Mgc2ltcGx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDQ3LCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjQ2LjkxMTUzNjQzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElSUSBjb25maWd1cmF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBBSEIgZHJpdmVyLCB3aGljaCBiaW5kcyB0byBzcGVjaWZpYyBRdWFsY29tbSBJUFEgU29DIFdpLUZpIGhhcmR3YXJlIChlLmcuLCBxY29tLGlwcTgwNzQtd2lmaSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2tjnp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 17:02:20 +0000 UTC FinishedAt: 2026-07-27 17:19:49 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxYjQ5YjFkZjMyZTI3NzMwMGJhZTRiNjA0MzBiMDA1OGY1ZTBhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggMWUxZGVhNDg1NzYwYjMuLmVjNWJmNWM5ZmQ3OTI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxuIHtcbi1cdGludCBpLCBqO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XHRpbnQgajtcbiBcbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuIFxuLVx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGkpO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiB7XG4tXHRpbnQgaXJxX2lkeDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXG4tXHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaXJxX2lkeCwgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTtcbiBcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiYjNDM7e1xuJiM0MztcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuJiM0MztcdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbiBcbiYjNDM7XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiBcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcbiB9XG4gXG5AQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gXHRpbnQgaSwgajtcbiBcdGludCBpcnE7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcbiBcdFx0aXJxX2dycC1cdTAwM2VhYiA9IGFiO1xuIFx0XHRpcnFfZ3JwLVx1MDAzZWdycF9pZCA9IGk7XG4gXG4gXHRcdGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuLVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSAwO1xuJiM0MztcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bmV0aWZfbmFwaV9hZGQoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYsIFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSxcbiBcdFx0XHQgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7XG5AQCAtNTg1LDE0ICYjNDM7NTk4LDExIEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuLVxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBudW1faXJxOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cdTAwM2VpcnFzW2pdO1xuIFxuIFx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVx1MDAzZXBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgaXJxX25hbWVbaXJxX2lkeF0pO1xuLVx0XHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHRcdFx0aXJxX3NldF9zdGF0dXNfZmxhZ3MoaXJxLCBJUlFfTk9BVVRPRU4gfCBJUlFfRElTQUJMRV9VTkxBWlkpO1xuIFx0XHRcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHRcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcbkBAIC02MDAsMTEgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgaXJxKTtcbiYjNDM7XHRcdFx0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBqO1xuJiM0MztcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlcXVlc3RfaXJxOlxuJiM0MztcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4mIzQzO1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuQEAgLTYyOSwxNiAmIzQzOzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwmIzM0OywgaXJxKTtcbiYjNDM7XHRcdFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElSUSBjb25maWd1cmF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBBSEIgZHJpdmVyLCB3aGljaCBiaW5kcyB0byBzcGVjaWZpYyBRdWFsY29tbSBJUFEgU29DIFdpLUZpIGhhcmR3YXJlIChlLmcuLCBxY29tLGlwcTgwNzQtd2lmaSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjFiNDliMWRmMzJlMjc3MzAwYmFlNGI2MDQzMGIwMDU4ZjVlMGE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDE3OjE5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKaW5kZXggMWUxZGVhNDg1NzYwYjMuLmVjNWJmNWM5ZmQ3OTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKQEAgLTQzMSwzNiAmIzQzOzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCWFiLSZndDtxbWkuc2VydmljZV9pbnNfaWQgPSBhYi0mZ3Q7aHdfcGFyYW1zLnFtaV9zZXJ2aWNlX2luc19pZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoc3RydWN0IGF0aDExa19iYXNlICphYiwKJiM0MzsJCQkJCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApCiB7Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsJaW50IGo7CiAKLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KQotCQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2dycC0mZ3Q7aXJxc1tqXV0sIGlycV9ncnApOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCiYjNDM7CQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiAKLQkJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKLQkJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKLQl9CiYjNDM7CW5ldGlmX25hcGlfZGVsKCZhbXA7aXJxX2dycC0mZ3Q7bmFwaSk7CiYjNDM7CWZyZWVfbmV0ZGV2KGlycV9ncnAtJmd0O25hcGlfbmRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogewotCWludCBpcnFfaWR4OwogCWludCBpOwogCi0JaWYgKGFiLSZndDtod19wYXJhbXMuaHlicmlkX2J1c190eXBlKQotCQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXSk7CiYjNDM7fQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGFiLSZndDtod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7c3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpCiYjNDM7ewomIzQzOwlpbnQgaXJxX2lkeCwgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiAJCQljb250aW51ZTsKIAkJaXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwogCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSwgJmFtcDthYi0mZ3Q7Y2UuY2VfcGlwZVtpXSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiYjNDM7ewomIzQzOwlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCiYjNDM7CQlyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpOwogCiYjNDM7CWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKIAlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7CiB9CiAKQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7CiAJc3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gJmFtcDthYi0mZ3Q7aHdfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwOwogCWludCBpLCBqOwogCWludCBpcnE7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwogCQl1MzIgbnVtX2lycSA9IDA7CiAKJiM0MzsJCWlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKJiM0MzsKIAkJaXJxX2dycC0mZ3Q7YWIgPSBhYjsKIAkJaXJxX2dycC0mZ3Q7Z3JwX2lkID0gaTsKIAogCQlpcnFfZ3JwLSZndDtuYXBpX25kZXYgPSBhbGxvY19uZXRkZXZfZHVtbXkoMCk7Ci0JCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAoIWlycV9ncnAtJmd0O25hcGlfbmRldikgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IDA7CiYjNDM7CQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiYjNDM7CQl9CiAKIAkJbmV0aWZfbmFwaV9hZGQoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2LCAmYW1wO2lycV9ncnAtJmd0O25hcGksCiAJCQkgICAgICAgYXRoMTFrX2FoYl9leHRfZ3JwX25hcGlfcG9sbCk7CkBAIC01ODUsMTQgJiM0Mzs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQkJfQogCQkJfQogCQl9Ci0JCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwotCi0JCWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IG51bV9pcnE7IGomIzQzOyYjNDM7KSB7CiAJCQlpbnQgaXJxX2lkeCA9IGlycV9ncnAtJmd0O2lycXNbal07CiAKIAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLSZndDtwZGV2LAogCQkJCQkJICAgICAgaXJxX25hbWVbaXJxX2lkeF0pOwotCQkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7CiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyLAogCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsCkBAIC02MDAsMTEgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywKIAkJCQkJICAgaXJxKTsKJiM0MzsJCQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IGo7CiYjNDM7CQkJCWF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7CiYjNDM7CQkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCQkJfQomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiYjNDM7CiYjNDM7CQlpcnFfZ3JwLSZndDtudW1faXJxID0gbnVtX2lycTsKIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVxdWVzdF9pcnE6CiYjNDM7CWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkgewomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQpAQCAtNjI5LDE2ICYjNDM7NjUyLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9jZV9pbnRlcnJ1cHRfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLAogCQkJCSAgY2VfcGlwZSk7Ci0JCWlmIChyZXQpCiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXG4mIzM0OywgaXJxKTsKJiM0MzsJCQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7CiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQogCiAJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCX0KIAogCS8qIENvbmZpZ3VyZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJcmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDExa19lcnIoYWIsICYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIGF0aDExayBBSEIgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNgLiBSaWdodCBhd2F5LCBJIHNlZSBpdCYjMzk7cyBmaXhpbmcgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBUaGF0JiMzOTtzIGdvb2Q7IGFsd2F5cyBpbXBvcnRhbnQgdG8gdGlnaHRlbiB1cCBlcnJvciBwYXRocyBhbmQgZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwYCBhbmQgYGF0aDExa19haGJfZnJlZV9jZV9pcnFzYCBtYWtlcyBzdXJlIHdlJiMzOTtyZSBub3QgbGVha2luZyBJUlFzIG9uIGZhaWx1cmUuIFN0YW5kYXJkIHN0dWZmIGZvciBkcml2ZXIgZGV2ZWxvcG1lbnQuCgpOb3csIHRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXggd2lyZWxlc3MgY2FyZHMsIGBhdGgxMWtgLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgdGhlIEFIQiBidXMgZHJpdmVyIChgYWhiLmNgKSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZm9yIHRob3NlIGludGVybmFsIFNvQ3MgbGlrZSBJUFE4MDc0IGFuZCBJUFE2MDE4IOKAkyB0aGUgb25lcyB0aGF0IHVzZSB0aGUgQUhCIGJ1cywgd2hpY2ggYXJlIHByZXR0eSBjb21tb24gaW4gZW1iZWRkZWQgc3lzdGVtcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKmlzIHRoaXMgZXZlbiB0ZXN0YWJsZSBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50Kj8gVXN1YWxseSwgQUhCIGRldmljZXMgYXJlIHBsYXRmb3JtIGRldmljZXMsIGFuZCB0aGV5JiMzOTtyZSBkZXNjcmliZWQgaW4gdGhlIGRldmljZSB0cmVlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgbWFjaGluZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIFNvQyAqYW5kKiB0aGUgV2ktRmkgaGFyZHdhcmUgYXR0YWNoZWQgdG8gdGhlIEFIQiwgSSYjMzk7bSBnb2luZyB0byBzYXksIHByb2JhYmx5IG5vdC4gSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgYGF0aDExa19haGJfcHJvYmVgLCBpZiBpdCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbiwgdGhlbiBJJiMzOTtsbCB1c2Ugb3RoZXIgc2VhcmNoIHRvb2xzIHRvIGNoZWNrIHRoZSBwbGF0Zm9ybSBpbiB0aGUgZGV2aWNlIHRyZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTMzOTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzIC0gVGltZSB0byBQcm9iZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSByZWNvZ25pemluZyBpdCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gTXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHR1cm46IHRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHJlZ2lzdGVyaW5nIHdpdGggdGhlIGtlcm5lbCB0byBtYW5hZ2UgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgcHJpbWFyeSBmb2N1cyBhdCB0aGlzIHN0YWdlIHdpbGwgYmUgb24gdGhlICYjMzQ7Y29tcGF0aWJsZSYjMzQ7IHN0cmluZ3MgdXNlZCBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byBzZWUgcHJlY2lzZWx5ICp3aGF0KiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgc2NvcGUgb2YgaXRzIHN1cHBvcnRlZCBkZXZpY2VzIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHVzZSBjYXNlLiBXaGF0IGFyZSB3ZSBsb29raW5nIGZvcj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX29mX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRoMTFrX2FoYl9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NDM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRoMTFrX2FoYl9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTQ0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTMzND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGgxMWtfYWhiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzYtXHRcdC5uYW1lID0gXCYjMzQ7YXRoMTFrXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM3Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBhdGgxMWtfYWhiX29mX21hdGNoLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBDb21wYXRpYmlsaXR5IFN0cmluZ3MqKgoKUmlnaHQsIGxldCYjMzk7cyBjdXQgdG8gdGhlIGNoYXNlIGFuZCBnZXQgYSBsb29rIGF0IHRoZSAqYWN0dWFsKiBjb21wYXRpYmxlIHN0cmluZ3MuIEkgbmVlZCB0byBtb3ZlIGJleW9uZCBjb25jZXB0dWFsIHVuZGVyc3RhbmRpbmcgYW5kIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgYWxyZWFkeSBkb25lIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBjb25zaWRlcmVkIHRoZSB0aGVvcmV0aWNhbCBwb3NzaWJpbGl0aWVzLCBhbmQgbm93IHdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiB3b3JraW5nLiBObyBtb3JlIGh5cG90aGV0aWNhbHMsIEkgd2FudCByZWFsLXdvcmxkIGV4YW1wbGVzLCBhY3R1YWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkYXRhIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0aDExa19haGJfb2ZfbWF0Y2hbXSA9IHtcbiAgMjU6XHRcdC8qIFRPRE86IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIHNvbWV0aGluZyBzaW1pbGFyXG4gIDI2Olx0XHQgKiB0byBvbmUgdGhhdCBhdGgxMGsgdXNlcz9cbiAgMjc6XHRcdCAqL1xuICAyODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxODA3NC13aWZpXCYjMzQ7LFxuICAyOTpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXG4gIDMwOlx0XHR9LFxuICAzMTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20saXBxNjAxOC13aWZpXCYjMzQ7LFxuICAzMjpcdFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTYwMThfSFcxMCxcbiAgMzM6XHRcdH0sXG4gIDM0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSx3Y242NzUwLXdpZmlcJiMzNDssXG4gIDM1Olx0XHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfV0NONjc1MF9IVzEwLFxuICAzNjpcdFx0fSxcbiAgMzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGlwcTUwMTgtd2lmaVwmIzM0OyxcbiAgMzg6XHRcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXG4gIDM5Olx0XHR9LFxuICA0MDpcdFx0eyB9XG4gIDQxOlx0fTtcbiAgNDI6XHRcbiAgNDM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQ3CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIFF1YWxjb21tIElQUSBTb0NzLCB0aGluZ3MgbGlrZSAmIzM0O3Fjb20saXBxODA3NC13aWZpJiMzNDsgYW5kICYjMzQ7cWNvbSxpcHE2MDE4LXdpZmkuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDb3VsZCB3ZSBnZXQgdGhpcyBydW5uaW5nIHVuZGVyIFFFTVU/JiMzNDsgQnV0IG5vLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhvc2Ugc3BlY2lmaWMgSVBRODA3NCBvciBJUFE2MDE4IFdpLUZpIGNvbXBvbmVudHMuCgpMb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGVycm9yIGhhbmRsaW5nIGlzc3VlcyB3aXRoaW4gdGhlIHByb2JlL2luaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhbGx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgb2YgdGhvc2UgUXVhbGNvbW0gU29DcywgYW5kIGl0JiMzOTtzIGFsbCBBSEIgYnVzIHNwZWNpZmljLCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgb3IgZXZlbiB3aXRoaW4gR0NFLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgaW4gSVJRIGNvbmZpZ3VyYXRpb24gZm9yIGEgZHJpdmVyIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQuIEl0JiMzOTtzIHNpbXBseSBub3Qgd29ydGggdGhlIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI4LjQ4NDg0NzkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI2NzIxOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI4LjQ4NDg1NjM3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDM3OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjFiNDliMWRmMzJlMjc3MzAwYmFlNGI2MDQzMGIwMDU4ZjVlMGE1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbmluZGV4IDFlMWRlYTQ4NTc2MGIzLi5lYzViZjVjOWZkNzkyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRhYi1cXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXFx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdGludCBqO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbitcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuIFxcbi1cXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuLVxcdH1cXG4rXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbitcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4tXFx0aW50IGlycV9pZHg7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbi1cXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkrKykge1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeClcXG4re1xcbitcXHRpbnQgaXJxX2lkeCwgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcXG4gXFx0XFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCArIGk7XFxuIFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcXHUwMDI2YWItXFx1MDAzZWNlLmNlX3BpcGVbaV0pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4re1xcbitcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuK1xcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuIFxcbitcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XFxuIFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcXG4gfVxcbiBcXG5AQCAtNTI0LDIwICs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXFx1MDAyNmFiLVxcdTAwM2Vod19wYXJhbXM7XFxuK1xcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XFxuIFxcdGludCBpLCBqO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuIFxcdFxcdHUzMiBudW1faXJxID0gMDtcXG4gXFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlYWIgPSBhYjtcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG4gXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcXG4tXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gMDtcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiwgXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGksXFxuIFxcdFxcdFxcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcXG5AQCAtNTg1LDE0ICs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XFxuLVxcdFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHRcXHRcXHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XFxuIFxcdFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcXG5AQCAtNjAwLDExICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlycSk7XFxuK1xcdFxcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBqO1xcbitcXHRcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjI5LjAzMzI4NDc1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3ODc4Mjc5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVJRIGNvbmZpZ3VyYXRpb24gcGF0aCBvZiB0aGUgYXRoMTFrIEFIQiBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIHNwZWNpZmljIFF1YWxjb21tIElQUSBTb0MgV2ktRmkgaGFyZHdhcmUgKGUuZy4sIHFjb20saXBxODA3NC13aWZpKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxYjQ5YjFkZjMyZTI3NzMwMGJhZTRiNjA0MzBiMDA1OGY1ZTBhNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNzoxOToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5pbmRleCAxZTFkZWE0ODU3NjBiMy4uZWM1YmY1YzlmZDc5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4rXHRcdFx0XHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsMTQgKzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaisrKSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0XHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XG4gXHRcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLFxuQEAgLTYwMCwxMSArNjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuK1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbitcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4rXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOToyOS4wMzMyODU5NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE3ODE3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBhdGgxMWsgQUhCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jYC4gUmlnaHQgYXdheSwgSSBzZWUgaXQncyBmaXhpbmcgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgLiBUaGF0J3MgZ29vZDsgYWx3YXlzIGltcG9ydGFudCB0byB0aWdodGVuIHVwIGVycm9yIHBhdGhzIGFuZCBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgIG1ha2VzIHN1cmUgd2UncmUgbm90IGxlYWtpbmcgSVJRcyBvbiBmYWlsdXJlLiBTdGFuZGFyZCBzdHVmZiBmb3IgZHJpdmVyIGRldmVsb3BtZW50LlxuXG5Ob3csIHRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXggd2lyZWxlc3MgY2FyZHMsIGBhdGgxMWtgLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgdGhlIEFIQiBidXMgZHJpdmVyIChgYWhiLmNgKSwgd2hpY2ggbWVhbnMgaXQncyBmb3IgdGhvc2UgaW50ZXJuYWwgU29DcyBsaWtlIElQUTgwNzQgYW5kIElQUTYwMTgg4oCTIHRoZSBvbmVzIHRoYXQgdXNlIHRoZSBBSEIgYnVzLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiBpbiBlbWJlZGRlZCBzeXN0ZW1zLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICppcyB0aGlzIGV2ZW4gdGVzdGFibGUgaW4gYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudCo/IFVzdWFsbHksIEFIQiBkZXZpY2VzIGFyZSBwbGF0Zm9ybSBkZXZpY2VzLCBhbmQgdGhleSdyZSBkZXNjcmliZWQgaW4gdGhlIGRldmljZSB0cmVlLiBVbmxlc3MgdGhlcmUncyBhIHZlcnkgc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgU29DICphbmQqIHRoZSBXaS1GaSBoYXJkd2FyZSBhdHRhY2hlZCB0byB0aGUgQUhCLCBJJ20gZ29pbmcgdG8gc2F5LCBwcm9iYWJseSBub3QuIEknZCBuZWVkIHRvIGNvbmZpcm0gaWYgYGF0aDExa19haGJfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSBmaW5kIHRoZSBjYWxsIHNpdGVzIGZvciBgYXRoMTFrX2FoYl9wcm9iZWAsIGlmIGl0IGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCB0aGVuIEknbGwgdXNlIG90aGVyIHNlYXJjaCB0b29scyB0byBjaGVjayB0aGUgcGxhdGZvcm0gaW4gdGhlIGRldmljZSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzUuMDUxMTA1NTQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDAzNzc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0fSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XFx0LnByb2JlID0gYXRoMTFrX2FoYl9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXFx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOTozNS4yMzExNDk4OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU0NTMzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqUGxhdGZvcm0gRHJpdmVyIEFuYWx5c2lzIC0gVGltZSB0byBQcm9iZSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgaXQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIE15IG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSBzdGFydGluZyB0byB0dXJuOiB0aGlzIG1lYW5zIGl0J3MgbGlrZWx5IHJlZ2lzdGVyaW5nIHdpdGggdGhlIGtlcm5lbCB0byBtYW5hZ2UgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBtYXRjaGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhdGgxMWtfYWhiX3Byb2JlYC4gTXkgcHJpbWFyeSBmb2N1cyBhdCB0aGlzIHN0YWdlIHdpbGwgYmUgb24gdGhlIFwiY29tcGF0aWJsZVwiIHN0cmluZ3MgdXNlZCBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIEknbSBrZWVuIHRvIHNlZSBwcmVjaXNlbHkgKndoYXQqIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBzY29wZSBvZiBpdHMgc3VwcG9ydGVkIGRldmljZXMgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgdXNlIGNhc2UuIFdoYXQgYXJlIHdlIGxvb2tpbmcgZm9yP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzguOTg1Njg2NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQxNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX29mX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoyNDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0yNS1cXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy00Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjQzOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0aDExa19haGJfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNDQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzYtXFx0XFx0Lm5hbWUgPSBcXFwiYXRoMTFrXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzc6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gYXRoMTFrX2FoYl9vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzMzgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6MzkuMTc5MTEwMDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyNzA5NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgQ29tcGF0aWJpbGl0eSBTdHJpbmdzKipcblxuUmlnaHQsIGxldCdzIGN1dCB0byB0aGUgY2hhc2UgYW5kIGdldCBhIGxvb2sgYXQgdGhlICphY3R1YWwqIGNvbXBhdGlibGUgc3RyaW5ncy4gSSBuZWVkIHRvIG1vdmUgYmV5b25kIGNvbmNlcHR1YWwgdW5kZXJzdGFuZGluZyBhbmQgZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzLiBJJ20gYXNzdW1pbmcgd2UndmUgYWxyZWFkeSBkb25lIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBjb25zaWRlcmVkIHRoZSB0aGVvcmV0aWNhbCBwb3NzaWJpbGl0aWVzLCBhbmQgbm93IHdlIG5lZWQgdG8gc2VlIHdoYXQncyAqYWN0dWFsbHkqIHdvcmtpbmcuIE5vIG1vcmUgaHlwb3RoZXRpY2FscywgSSB3YW50IHJlYWwtd29ybGQgZXhhbXBsZXMsIGFjdHVhbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBMZXQncyBzZWUgd2hhdCB0aGUgZGF0YSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNzoxOTo0MS44MDYyMDgyODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGgxMWtfYWhiX29mX21hdGNoW10gPSB7XFxuICAyNTpcXHRcXHQvKiBUT0RPOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBzb21ldGhpbmcgc2ltaWxhclxcbiAgMjY6XFx0XFx0ICogdG8gb25lIHRoYXQgYXRoMTBrIHVzZXM/XFxuICAyNzpcXHRcXHQgKi9cXG4gIDI4OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxpcHE4MDc0LXdpZmlcXFwiLFxcbiAgMjk6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX0lQUTgwNzQsXFxuICAzMDpcXHRcXHR9LFxcbiAgMzE6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGlwcTYwMTgtd2lmaVxcXCIsXFxuICAzMjpcXHRcXHQgIC5kYXRhID0gKHZvaWQgKilBVEgxMUtfSFdfSVBRNjAxOF9IVzEwLFxcbiAgMzM6XFx0XFx0fSxcXG4gIDM0OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSx3Y242NzUwLXdpZmlcXFwiLFxcbiAgMzU6XFx0XFx0ICAuZGF0YSA9ICh2b2lkICopQVRIMTFLX0hXX1dDTjY3NTBfSFcxMCxcXG4gIDM2OlxcdFxcdH0sXFxuICAzNzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20saXBxNTAxOC13aWZpXFxcIixcXG4gIDM4OlxcdFxcdCAgLmRhdGEgPSAodm9pZCAqKUFUSDExS19IV19JUFE1MDE4X0hXMTAsXFxuICAzOTpcXHRcXHR9LFxcbiAgNDA6XFx0XFx0eyB9XFxuICA0MTpcXHR9O1xcbiAgNDI6XFx0XFxuICA0MzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdGgxMWtfYWhiX29mX21hdGNoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTc6MTk6NDEuODA2MzIyMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTIxMTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gUXVhbGNvbW0gSVBRIFNvQ3MsIHRoaW5ncyBsaWtlIFwicWNvbSxpcHE4MDc0LXdpZmlcIiBhbmQgXCJxY29tLGlwcTYwMTgtd2lmaS5cIiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHdlIGdldCB0aGlzIHJ1bm5pbmcgdW5kZXIgUUVNVT9cIiBCdXQgbm8sIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRob3NlIHNwZWNpZmljIElQUTgwNzQgb3IgSVBRNjAxOCBXaS1GaSBjb21wb25lbnRzLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGVycm9yIGhhbmRsaW5nIGlzc3VlcyB3aXRoaW4gdGhlIHByb2JlL2luaXRpYWxpemF0aW9uIHBhdGggb2YgdGhlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAuIEdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhbGx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgb2YgdGhvc2UgUXVhbGNvbW0gU29DcywgYW5kIGl0J3MgYWxsIEFIQiBidXMgc3BlY2lmaWMsIGl0J3MganVzdCBub3QgZ29pbmcgdG8gYmUgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIG9yIGV2ZW4gd2l0aGluIEdDRS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIGluIElSUSBjb25maWd1cmF0aW9uIGZvciBhIGRyaXZlciB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQuIEl0J3Mgc2ltcGx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDQ3LCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE3OjE5OjQ2LjkxMTUzNjQzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUlEgY29uZmlndXJhdGlvbiBwYXRoIG9mIHRoZSBhdGgxMWsgQUhCIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gc3BlY2lmaWMgUXVhbGNvbW0gSVBRIFNvQyBXaS1GaSBoYXJkd2FyZSAoZS5nLiwgcWNvbSxpcHE4MDc0LXdpZmkpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElSUSBjb25maWd1cmF0aW9uIHBhdGggb2YgdGhlIGF0aDExayBBSEIgZHJpdmVyLCB3aGljaCBiaW5kcyB0byBzcGVjaWZpYyBRdWFsY29tbSBJUFEgU29DIFdpLUZpIGhhcmR3YXJlIChlLmcuLCBxY29tLGlwcTgwNzQtd2lmaSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2tjnp[1] Phase: Running StartedAt: 2026-07-27 17:19:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2tjnp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 17:19:58 +0000 UTC FinishedAt: 2026-07-27 17:20:06 +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,}