Name: series-workflow7b9wq Phase: Failed StartedAt: 2026-08-30 07:14:37 +0000 UTC FinishedAt: 2026-08-30 07:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b9wq[0] Phase: Succeeded StartedAt: 2026-08-30 07:14:37 +0000 UTC FinishedAt: 2026-08-30 07:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b9wq[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 07:14:37 +0000 UTC FinishedAt: 2026-08-30 07:34:38 +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+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2Y3ZGZjOGU2M2U5MGE2MzkzNmFlNmYyZDk0YjZiOTkwYzBhYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMDc6Mjg6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjcwMTQ3OTAxYjkwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMjAxLDEyICYjNDM7MjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFxuLVx0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjQsOCAmIzQzOzI3MCwxNiBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuIFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0eF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggOTQwZDJlNTk4NzZjNy4uYzBmYjU2MzllMzcwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSAmIzQzOz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgJiM0Mzs9IDI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uOWUyY2Y3OTRmODFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTggQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGogPSByaW5nLVx1MDAzZXJlZ19pZHg7XG4gXHRcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxuIFx0XHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG5AQCAtMjg3MCw4ICYjNDM7Mjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5MywxMCAmIzQzOzI5MDYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4mIzQzO1x0XHRpZiAoIXJ4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xuIFx0XHRod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICYjNDM7MjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRyc2NfY291bnQgJiM0Mzs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCAmIzQzOz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbiYjNDM7XHRcdFx0cnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbiBcdFx0fVxuIFx0XHR3eC1cdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSAmIzQzOz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0d3gtXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XG4gXHR3eC1cdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZWQ1YWFkNzg1N2JkOS4uYzIyN2U5YWI4YTRhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0yMTkxLDcgJiM0MzsyMTkxLDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxuIFx0XHRyaW5nLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHhyX2lkeDtcbiBcbiBcdFx0LyogYXNzaWduIHJpbmcgdG8gd3ggKi9cbi1cdFx0d3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XG4mIzQzO1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyAmIzQzOzIyMTcsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXG4gXHRcdHJpbmctXHUwMDNlcXVldWVfaW5kZXggPSByeHJfaWR4O1xuIFxuIFx0XHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xuLVx0XHR3eC1cdTAwM2VyeF9yaW5nW3J4cl9pZHhdID0gcmluZztcbiYjNDM7XHRcdFdSSVRFX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0cnhyX2NvdW50LS07XG5AQCAtMjI0NSwxMCAmIzQzOzIyNDUsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZztcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNldHgpXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh3eC1cdTAwM2VyeF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4LVx1MDAzZXFfdmVjdG9yW3ZfaWR4XSA9IE5VTEw7XG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZxX3ZlY3Rvci1cdTAwM2VuYXBpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDcwOGU3ZjM5NThmNy4uMDEwNzEzODY0MDlhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0yNTcsNyAmIzQzOzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxuICAqL1xuIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4ge1xuLVx0c3RydWN0IHd4X3JpbmcgKnJ4X3Jpbmc7XG4gXHR1bnNpZ25lZCBsb25nIHJ4X2V2ZW50O1xuIFx0dTMyIHRzeW5jcnhjdGw7XG4gXHRpbnQgbjtcbkBAIC0yNzQsMTEgJiM0MzsyNzMsMTYgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAobiA9IDA7IG4gXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tuXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRpbWVfYWZ0ZXIocnhfcmluZy1cdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxuIFx0XHRcdHJ4X2V2ZW50ID0gcnhfcmluZy1cdTAwM2VsYXN0X3J4X3RpbWVzdGFtcDtcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgJiM0MzsgNSAqIEhaKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdmN2RmYzhlNjNlOTBhNjM5MzZhZTZmMmQ5NGI2Yjk5MGMwYWFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDA3OjI4OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKaW5kZXggYjU2ZmJkYzk1OWRlYy4uNzAxNDc5MDFiOTBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCkBAIC0yMDEsMTIgJiM0MzsyMDEsMTggQEAgc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKIAotCQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCWlmICghdHhfcmluZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKSB7CiYjNDM7CQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMjY0LDggJiM0MzsyNzAsMTYgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKIAogCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KIAlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB0eF9yaW5nLSZndDtzdGF0ZSk7CiYjNDM7CQl9CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggOTQwZDJlNTk4NzZjNy4uYzBmYjU2MzllMzcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQl9CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGogPSAwOyBqICZsdDsgbmV0ZGV2LSZndDtudW1fdHhfcXVldWVzOyBqJiM0MzsmIzQzOykgewotCQlyaW5nID0gd3gtJmd0O3R4X3Jpbmdbal07CiYjNDM7CQlyaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2pdKTsKIAkJaWYgKCFyaW5nKSB7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJaSAmIzQzOz0gMjsKIAl9CiAJZm9yIChqID0gMDsgaiAmbHQ7IFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7Ci0JCXJpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tqXTsKJiM0MzsJCXJpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3Jpbmdbal0pOwogCQlpZiAoIXJpbmcpIHsKIAkJCWRhdGFbaSYjNDM7JiM0MztdID0gMDsKIAkJCWRhdGFbaSYjNDM7JiM0MztdID0gMDsKQEAgLTE4NCw2ICYjNDM7MTg1LDcgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtyaW5nLSZndDtzeW5jcCwgc3RhcnQpKTsKIAkJaSAmIzQzOz0gMjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTCh3eF9nZXRfZXRodG9vbF9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwppbmRleCAxMjJjNDk1MmQyMDNmLi45ZTJjZjc5NGY4MWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0xNTk4LDEzICYjNDM7MTU5OCwxOCBAQCBzdGF0aWMgdm9pZCB3eF92bGFuX3N0cmlwX2NvbnRyb2woc3RydWN0IHd4ICp3eCwgYm9vbCBlbmFibGUpCiB7CiAJaW50IGksIGo7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghcmluZykKJiM0MzsJCQljb250aW51ZTsKIAogCQlqID0gcmluZy0mZ3Q7cmVnX2lkeDsKIAkJd3IzMm0od3gsIFdYX1BYX1JSX0NGRyhqKSwgV1hfUFhfUlJfQ0ZHX1ZMQU4sCiAJCSAgICAgIGVuYWJsZSA/IFdYX1BYX1JSX0NGR19WTEFOIDogMCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgd3hfdmxhbl9wcm9taXNjX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4KQpAQCAtMjg3MCw4ICYjNDM7Mjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eCkKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghdHhfcmluZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLSZndDtzdGF0ZSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtMjg5MywxMCAmIzQzOzI5MDYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eCkKIAogCXNwaW5fbG9jaygmYW1wO3d4LSZndDtod19zdGF0c19sb2NrKTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJLyogZ2F0aGVyIHNvbWUgc3RhdHMgdG8gdGhlIHd4IHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gd3gtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiAKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJbm9uX2VvcF9kZXNjcyAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMubm9uX2VvcF9kZXNjczsKIAkJYWxsb2NfcnhfYnVmZl9mYWlsZWQgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkOwogCQlod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7CkBAIC0yOTEyLDE5ICYjNDM7MjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KQogCQl1NjQgcnNjX2ZsdXNoID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQlyc2NfY291bnQgJiM0Mzs9IHd4LSZndDtyeF9yaW5nW2ldLSZndDtyeF9zdGF0cy5yc2NfY291bnQ7Ci0JCQlyc2NfZmx1c2ggJiM0Mzs9IHd4LSZndDtyeF9yaW5nW2ldLSZndDtyeF9zdGF0cy5yc2NfZmx1c2g7CiYjNDM7CQkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwomIzQzOwkJCWlmICghcnhfcmluZykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJcnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5yc2NfY291bnQ7CiYjNDM7CQkJcnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5yc2NfZmx1c2g7CiAJCX0KIAkJd3gtJmd0O3JzY19jb3VudCA9IHJzY19jb3VudDsKIAkJd3gtJmd0O3JzY19mbHVzaCA9IHJzY19mbHVzaDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXR4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiAKIAkJcmVzdGFydF9xdWV1ZSAmIzQzOz0gdHhfcmluZy0mZ3Q7dHhfc3RhdHMucmVzdGFydF9xdWV1ZTsKIAkJdHhfYnVzeSAmIzQzOz0gdHhfcmluZy0mZ3Q7dHhfc3RhdHMudHhfYnVzeTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXd4LSZndDtyZXN0YXJ0X3F1ZXVlID0gcmVzdGFydF9xdWV1ZTsKIAl3eC0mZ3Q7dHhfYnVzeSA9IHR4X2J1c3k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCmluZGV4IGVkNWFhZDc4NTdiZDkuLmMyMjdlOWFiOGE0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMjE5MSw3ICYjNDM7MjE5MSw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwKIAkJcmluZy0mZ3Q7cXVldWVfaW5kZXggPSB0eHJfaWR4OwogCiAJCS8qIGFzc2lnbiByaW5nIHRvIHd4ICovCi0JCXd4LSZndDt0eF9yaW5nW3R4cl9pZHhdID0gcmluZzsKJiM0MzsJCVdSSVRFX09OQ0Uod3gtJmd0O3R4X3JpbmdbdHhyX2lkeF0sIHJpbmcpOwogCiAJCS8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi8KIAkJdHhyX2NvdW50LS07CkBAIC0yMjE3LDcgJiM0MzsyMjE3LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LAogCQlyaW5nLSZndDtxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7CiAKIAkJLyogYXNzaWduIHJpbmcgdG8gd3ggKi8KLQkJd3gtJmd0O3J4X3JpbmdbcnhyX2lkeF0gPSByaW5nOwomIzQzOwkJV1JJVEVfT05DRSh3eC0mZ3Q7cnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7CiAKIAkJLyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqLwogCQlyeHJfY291bnQtLTsKQEAgLTIyNDUsMTAgJiM0MzsyMjQ1LDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KQogCXN0cnVjdCB3eF9yaW5nICpyaW5nOwogCiAJd3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci0mZ3Q7dHgpCi0JCXd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKHd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSwgTlVMTCk7CiAKIAl3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLSZndDtyeCkKLQkJd3gtJmd0O3J4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0Uod3gtJmd0O3J4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdLCBOVUxMKTsKIAogCXd4LSZndDtxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMOwogCW5ldGlmX25hcGlfZGVsKCZhbXA7cV92ZWN0b3ItJmd0O25hcGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKaW5kZXggNDcwOGU3ZjM5NThmNy4uMDEwNzEzODY0MDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0yNTcsNyAmIzQzOzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KQogICovCiBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KQogewotCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nOwogCXVuc2lnbmVkIGxvbmcgcnhfZXZlbnQ7CiAJdTMyIHRzeW5jcnhjdGw7CiAJaW50IG47CkBAIC0yNzQsMTEgJiM0MzsyNzMsMTYgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eCkKIAogCS8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovCiAJcnhfZXZlbnQgPSB3eC0mZ3Q7bGFzdF9yeF9wdHBfY2hlY2s7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKG4gPSAwOyBuICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7Ci0JCXJ4X3JpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tuXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDtyeF9yaW5nW25dKTsKJiM0MzsKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIocnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSkKIAkJCXJ4X2V2ZW50ID0gcnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXA7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqLwogCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYCBjb2RlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZXhhY3RseSAqaXMqIFdhbmd4dW4gZXRoZXJuZXQ/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGhhcmR3YXJlIHRoZXNlIGRyaXZlcnMgc3VwcG9ydC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHJlbGF0aXZlbHkgY29tbW9uIGFuZCB2aXJ0dWFsaXphYmxlLCBvciBhcmUgd2UgbG9va2luZyBhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUNzIHRoYXQgd291bGQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gQ2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwIGxpa2UgR0NFIG9yIFFFTVU/IE9yIGlzIHRoaXMgZ29pbmcgdG8gYmUgYW4gdW4tZnV6emFibGUgZGVhZCBlbmQ/CgpUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBydWxlcy4gVGhlIHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpbmNsdWRlcyBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoYXJkd2FyZSB0aGF0IGlzICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbGlzdCBpbmNsdWRlcyB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggY29kZSwgU21hcnROSUMgZHJpdmVycywgb3IgR1BVIGRyaXZlcnMuIEFsc28sIGFueXRoaW5nIGluIGEgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGVhcmRvd24gY2FsbGJhY2sgaXMgYXV0b21hdGljYWxseSBhIG5vLWdvIGZvciBpbml0aWFsIGZ1enppbmcgZWZmb3J0cy4gSSBoYXZlIHRvIGF2b2lkIHdhc3RpbmcgcmVzb3VyY2VzIG9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gIGFuZCBmaWd1cmUgb3V0IHdoYXQgZHJpdmVycyBhY3R1YWxseSB1dGlsaXplIGBsaWJ3eGAuIGBncmVwcGVyYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlIGhlcmUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyAqdXNpbmcqIHRoaXMgbGlicmFyeSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuIFRoYXQgd2lsbCBoZWxwIG1lIG1ha2UgYSBkZXRlcm1pbmF0aW9uIG9uIHdoZXRoZXIgZnV6emluZyBpcyBldmVuIHZpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMSUJXWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzI6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTU1LVx0c2VsZWN0IFBDU19YUENTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTY6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzI6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04OC1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4OTpcdHNlbGVjdCBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTkwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICYjNDM7PSB0eGdiZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS02LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgJmFtcDsgRGF0YSBHYXRoZXJpbmcqKgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGNsYXJpZnlpbmcgZXhhY3RseSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBhY3JvbnltcyBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgYW5kIE5HQkVWRiBuZWVkIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhlc2UgcmVwcmVzZW50LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCB0ZWNobm9sb2d5IHRoZXkgcmVmZXIgdG8uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlcyBvciBFdGhlcm5ldCBjb250cm9sbGVycywgZ2l2ZW4gdGhlIGNvbnRleHQuCgpOZXh0IHN0ZXA6IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodHMgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZXNlIGVsZW1lbnRzLiBUaGF0IEtjb25maWcgZmlsZSBpcyBhIHRyZWFzdXJlIHRyb3ZlOyBpdCBzaG91bGQgcHJvdmlkZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gICA3Olx0XHRib29sIFwmIzM0O1dhbmd4dW4gZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEzOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTQ6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXG4gIDE1Olx0XHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIExJQldYXG4gIDIwOlx0XHR0cmlzdGF0ZVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0c2VsZWN0IERJTUxJQlxuICAyNDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5HQkVcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gUENJXG4gIDMxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMyOlx0XHRzZWxlY3QgTElCV1hcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDM1Olx0XHQgIGFkYXB0ZXJzLlxuICAzNjpcdFxuICAzNzpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgMzg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA0MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBUWEdCRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gIDQ3Olx0XHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQ5Olx0XHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXG4gIDUwOlx0XHRzZWxlY3QgUkVHTUFQXG4gIDUxOlx0XHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxuICA1MjpcdFx0c2VsZWN0IFNGUFxuICA1MzpcdFx0c2VsZWN0IEdQSU9MSUJcbiAgNTQ6XHRcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcbiAgNTU6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICA1NjpcdFx0c2VsZWN0IExJQldYXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDU5Olx0XHQgIGFkYXB0ZXJzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgNjI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXG4gIDY2Olx0XG4gIDY3Olx0Y29uZmlnIFRYR0JFVkZcbiAgNjg6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICA2OTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA3MjpcdFx0c2VsZWN0IExJQldYXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcbiAgNzU6XHRcdCAgV1g1WFhYLCBXWDVYWFhBTC5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA4MDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuICA4MTpcdFxuICA4MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgODM6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnIE5HQkVWRlxuICA4NjpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDg3Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgODg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgODk6XHRcdHNlbGVjdCBMSUJXWFxuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgV1gxODYwLCBXWDE4NjBBTC5cbiAgOTI6XHRcbiAgOTM6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIG5nYmV2Zi5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDk2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFx1MDAzZS5cbiAgOTc6XHRcbiAgOTg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gTVNJLVggaW50ZXJydXB0XG4gIDk5Olx0XHQgIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjkKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IFdhbmd4dW4gRXRoZXJuZXQgUENJZSBhZGFwdGVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIChgdHhnYmVgLCBgbmdiZWAsIGB0eGdiZXZmYCwgYG5nYmV2ZmAsIGFuZCBgbGlid3hgKS4gSSBrbm93IHRoZXNlIGFyZSBmb3IgMUdiRSwgMTAvMjUvNDBHYkUgUENJZSBuZXR3b3JrIGNhcmRzIGFuZCB0aGVpciBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUg4oCTIHRoZSBraW5kIHVzZWQgZm9yIGZ1enppbmcg4oCTIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgV2FuZ3h1biBkZXZpY2VzLiBJdCBzdXBwb3J0cyBvdGhlciBhZGFwdGVycyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBldGMuLCBidXQgbm90IFdhbmd4dW4uCgpOb3csIHRoZSBpbnN0cnVjdGlvbiBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBzcGVjaWZpY2FsbHkgaWYgaXQmIzM5O3M6CgoqICAgQ29kZSBmb3IgaGFyZHdhcmUgbm90IGVtdWxhdGVkIChsaWtlIFVTQiBnYWRnZXRzIG9yIG1hYzgwMjExX2h3c2ltKQoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcyB0aGF0ICpuZWVkKiBwaHlzaWNhbCBoYXJkd2FyZS4KKiAgIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmQuCgpNeSBhc3Nlc3NtZW50IGlzIGNsZWFyOiBXYW5neHVuIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgc2Vjb25kIGNhdGVnb3J5LiBUaGVzZSBhcmUgcGh5c2ljYWwgUENJZSBOSUNzLCBtYWRlIGJ5IGEgQ2hpbmVzZSB2ZW5kb3IuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbGlid3hgLCB0aGUgc2hhcmVkIGxpYnJhcnkgdXNlZCBieSB0aGVzZSBXYW5neHVuIGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiBmaWxlcyBsaWtlIGB3eF9lcnIuY2AsIGB3eF9ldGh0b29sLmNgLCBhbmQgc28gb24uCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlci4gVGhpcyBpcyBhICpyZXF1aXJlbWVudCogZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UuIFRoaXMgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgd2l0aGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgZW1wdHkgYW5kIHdlIGNhbiBpZ25vcmUgYW55IGVuYWJsZSBjb25maWdzLiBJdOKAmXMgYSBjbGVhbiBhbmQgY29uY2lzZSByZWFzb24gdG8gbW92ZSBvbiB0byBzb21ldGhpbmcgZWxzZS4gVGltZSB0byBtb3ZlIG9uIGFuZCBsZXTigJlzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsaWJ3eCwgdGhlIHNoYXJlZCBsaWJyYXJ5IGZvciBXYW5neHVuIEV0aGVybmV0IFBDSWUgTklDIGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBuZ2JldmYsIHR4Z2JldmYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgV2FuZ3h1biBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjI4OjIxLjQ1MTUxOTY4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NTgzMDczODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS40NTE1MjM2OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDM0NjU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3ZjdkZmM4ZTYzZTkwYTYzOTM2YWU2ZjJkOTRiNmI5OTBjMGFhYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMzAgMDc6Mjg6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi43MDE0NzkwMWI5MGI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuIFxcbi1cXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMjY0LDggKzI3MCwxNiBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbiBcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoIXR4X3JpbmcpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCA5NDBkMmU1OTg3NmM3Li5jMGZiNTYzOWUzNzBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMTU0LDggKzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGorKykge1xcbi1cXHRcXHRyaW5nID0gd3gtXFx1MDAzZXR4X3Jpbmdbal07XFxuK1xcdFxcdHJpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXR4X3Jpbmdbal0pO1xcbiBcXHRcXHRpZiAoIXJpbmcpIHtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG5AQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0aSArPSAyO1xcbiBcXHR9XFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBXWF9OVU1fUlhfUVVFVUVTOyBqKyspIHtcXG4tXFx0XFx0cmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2pdO1xcbitcXHRcXHRyaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2VyeF9yaW5nW2pdKTtcXG4gXFx0XFx0aWYgKCFyaW5nKSB7XFxuIFxcdFxcdFxcdGRhdGFbaSsrXSA9IDA7XFxuIFxcdFxcdFxcdGRhdGFbaSsrXSA9IDA7XFxuQEAgLTE4NCw2ICsxODUsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cmluZy1cXHUwMDNlc3luY3AsIHN0YXJ0KSk7XFxuIFxcdFxcdGkgKz0gMjtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X2dldF9ldGh0b29sX3N0YXRzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbmluZGV4IDEyMmM0OTUyZDIwM2YuLjllMmNmNzk0ZjgxY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuQEAgLTE1OTgsMTMgKzE1OTgsMTggQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxcbiB7XFxuIFxcdGludCBpLCBqO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoIXJpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aiA9IHJpbmctXFx1MDAzZXJlZ19pZHg7XFxuIFxcdFxcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxcbiBcXHRcXHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTI4NzAsOCArMjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yODkzLDEwICsyOTA2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnd4LVxcdTAwM2Vod19zdGF0c19sb2NrKTtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0LyogZ2F0aGVyIHNvbWUgc3RhdHMgdG8gdGhlIHd4IHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKCFyeF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bm9uX2VvcF9kZXNjcyArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5ub25fZW9wX2Rlc2NzO1xcbiBcXHRcXHRhbGxvY19yeF9idWZmX2ZhaWxlZCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDtcXG4gXFx0XFx0aHdfY3N1bV9yeF9nb29kICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7XFxuQEAgLTI5MTIsMTkgKzI5MjgsMjggQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcXG4gXFx0XFx0dTY0IHJzY19mbHVzaCA9IDA7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRcXHRyc2NfY291bnQgKz0gd3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcXG4tXFx0XFx0XFx0cnNjX2ZsdXNoICs9IHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghcnhfcmluZylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyc2NfY291bnQgKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xcbitcXHRcXHRcXHRyc2NfZmx1c2ggKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHd4LVxcdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2Vyc2NfZmx1c2ggPSByc2NfZmx1c2g7XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghdHhfcmluZylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRyZXN0YXJ0X3F1ZXVlICs9IHR4X3JpbmctXFx1MDAzZXR4X3N0YXRzLnJlc3RhcnRfcXVldWU7XFxuIFxcdFxcdHR4X2J1c3kgKz0gdHhfcmluZy1cXHUwMDNldHhfc3RhdHMudHhfYnVzeTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0d3gtXFx1MDAzZXJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR3eC1cXHUwMDNldHhfYnVzeSA9IHR4X2J1c3k7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IGVkNWFhZDc4NTdiZDkuLmMyMjdlOWFiOGE0YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMjE5MSw3ICsyMTkxLDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xcbiBcXG4gXFx0XFx0LyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqL1xcbiBcXHRcXHR0eHJfY291bnQtLTtcXG5AQCAtMjIxNyw3ICsyMjE3LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xcbiBcXG4gXFx0XFx0LyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqL1xcbiBcXHRcXHRyeHJfY291bnQtLTtcXG5AQCAtMjI0NSwxMCArMjI0NSwxMCBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsIGludCB2X2lkeClcXG4gXFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7XFxuIFxcbiBcXHR3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLVxcdTAwM2V0eClcXG4tXFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbcmluZy1cXHUwMDNlcXVldWVfaW5kZXhdID0gTlVMTDtcXG4rXFx0XFx0V1JJVEVfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNlcngpXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbcmluZy1cXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcXG4gXFxuIFxcdHd4LVxcdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cV92ZWN0b3ItXFx1MDAzZW5hcGkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjAxMDcxMzg2NDA5YTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5AQCAtMjU3LDcgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4ge1xcbi1cXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZztcXG4gXFx0dW5zaWduZWQgbG9uZyByeF9ldmVudDtcXG4gXFx0dTMyIHRzeW5jcnhjdGw7XFxuIFxcdGludCBuO1xcbkBAIC0yNzQsMTEgKzI3MywxNiBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCB3YXRjaGRvZyBvciByeF90aW1lc3RhbXAgZXZlbnQgKi9cXG4gXFx0cnhfZXZlbnQgPSB3eC1cXHUwMDNlbGFzdF9yeF9wdHBfY2hlY2s7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChuID0gMDsgbiBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBuKyspIHtcXG4tXFx0XFx0cnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW25dO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNlcnhfcmluZ1tuXSk7XFxuK1xcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAodGltZV9hZnRlcihyeF9yaW5nLVxcdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxcbiBcXHRcXHRcXHRyeF9ldmVudCA9IHJ4X3JpbmctXFx1MDAzZWxhc3RfcnhfdGltZXN0YW1wO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Lyogb25seSBuZWVkIHRvIHJlYWQgdGhlIGhpZ2ggUlhTVE1QIHJlZ2lzdGVyIHRvIGNsZWFyIHRoZSBsb2NrICovXFxuIFxcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICsgNSAqIEhaKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS44NTI1OTc3NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NTQyOTY0ODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3ZjdkZmM4ZTYzZTkwYTYzOTM2YWU2ZjJkOTRiNmI5OTBjMGFhYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAwNzoyODoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi43MDE0NzkwMWI5MGI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4gXG4tXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2NCw4ICsyNzAsMTYgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICghdHhfcmluZylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuK1x0XHR9XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA5NDBkMmU1OTg3NmM3Li5jMGZiNTYzOWUzNzBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtMTU0LDggKzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGorKykge1xuLVx0XHRyaW5nID0gd3gtXHUwMDNldHhfcmluZ1tqXTtcbitcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpKytdID0gMDtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuQEAgLTE3MCw3ICsxNzEsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdGkgKz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGorKykge1xuLVx0XHRyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tqXTtcbitcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpKytdID0gMDtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuQEAgLTE4NCw2ICsxODUsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyaW5nLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuIFx0XHRpICs9IDI7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9nZXRfZXRodG9vbF9zdGF0cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAxMjJjNDk1MmQyMDNmLi45ZTJjZjc5NGY4MWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xNTk4LDEzICsxNTk4LDE4IEBAIHN0YXRpYyB2b2lkIHd4X3ZsYW5fc3RyaXBfY29udHJvbChzdHJ1Y3Qgd3ggKnd4LCBib29sIGVuYWJsZSlcbiB7XG4gXHRpbnQgaSwgajtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1xuK1x0XHRpZiAoIXJpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGogPSByaW5nLVx1MDAzZXJlZ19pZHg7XG4gXHRcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxuIFx0XHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eClcbkBAIC0yODcwLDggKzI4NzUsMTYgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRpZiAoIXR4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLVx1MDAzZXN0YXRlKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yODkzLDEwICsyOTA2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHRzcGluX2xvY2soXHUwMDI2d3gtXHUwMDNlaHdfc3RhdHNfbG9jayk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4rXHRcdGlmICghcnhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0bm9uX2VvcF9kZXNjcyArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuYWxsb2NfcnhfYnVmZl9mYWlsZWQ7XG4gXHRcdGh3X2NzdW1fcnhfZ29vZCArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7XG5AQCAtMjkxMiwxOSArMjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdFx0cnNjX2NvdW50ICs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCArPSB3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcbitcdFx0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyc2NfY291bnQgKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XG4rXHRcdFx0cnNjX2ZsdXNoICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xuIFx0XHR9XG4gXHRcdHd4LVx1MDAzZXJzY19jb3VudCA9IHJzY19jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnNjX2ZsdXNoID0gcnNjX2ZsdXNoO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXG4rXHRcdGlmICghdHhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0cmVzdGFydF9xdWV1ZSArPSB0eF9yaW5nLVx1MDAzZXR4X3N0YXRzLnJlc3RhcnRfcXVldWU7XG4gXHRcdHR4X2J1c3kgKz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR3eC1cdTAwM2VyZXN0YXJ0X3F1ZXVlID0gcmVzdGFydF9xdWV1ZTtcbiBcdHd4LVx1MDAzZXR4X2J1c3kgPSB0eF9idXN5O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBlZDVhYWQ3ODU3YmQ5Li5jMjI3ZTlhYjhhNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTIxOTEsNyArMjE5MSw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0gPSByaW5nO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyArMjIxNyw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHJ4cl9jb3VudC0tO1xuQEAgLTIyNDUsMTAgKzIyNDUsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZztcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNldHgpXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xuIFxuIFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cdTAwM2VyeClcbi1cdFx0d3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSwgTlVMTCk7XG4gXG4gXHR3eC1cdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cV92ZWN0b3ItXHUwMDNlbmFwaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjAxMDcxMzg2NDA5YTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMjU3LDcgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxuICAqL1xuIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4ge1xuLVx0c3RydWN0IHd4X3JpbmcgKnJ4X3Jpbmc7XG4gXHR1bnNpZ25lZCBsb25nIHJ4X2V2ZW50O1xuIFx0dTMyIHRzeW5jcnhjdGw7XG4gXHRpbnQgbjtcbkBAIC0yNzQsMTEgKzI3MywxNiBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCB3YXRjaGRvZyBvciByeF90aW1lc3RhbXAgZXZlbnQgKi9cbiBcdHJ4X2V2ZW50ID0gd3gtXHUwMDNlbGFzdF9yeF9wdHBfY2hlY2s7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKG4gPSAwOyBuIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBuKyspIHtcbi1cdFx0cnhfcmluZyA9IHd4LVx1MDAzZXJ4X3Jpbmdbbl07XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3Jpbmdbbl0pO1xuK1xuK1x0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgKyA1ICogSFopKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS44NTI1OTkyMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUwNjg5OTMxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9gIGNvZGUuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogV2FuZ3h1biBldGhlcm5ldD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaGFyZHdhcmUgdGhlc2UgZHJpdmVycyBzdXBwb3J0LiBBcmUgd2UgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRpdmVseSBjb21tb24gYW5kIHZpcnR1YWxpemFibGUsIG9yIGFyZSB3ZSBsb29raW5nIGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQ3MgdGhhdCB3b3VsZCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlPyBDYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXAgbGlrZSBHQ0Ugb3IgUUVNVT8gT3IgaXMgdGhpcyBnb2luZyB0byBiZSBhbiB1bi1mdXp6YWJsZSBkZWFkIGVuZD9cblxuVGltZSB0byBydW4gdGhyb3VnaCB0aGUgcnVsZXMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgaW5jbHVkZXMgY29kZSB0aGF0IGRlYWxzIHdpdGggaGFyZHdhcmUgdGhhdCBpcyAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGNvZGUsIFNtYXJ0TklDIGRyaXZlcnMsIG9yIEdQVSBkcml2ZXJzLiBBbHNvLCBhbnl0aGluZyBpbiBhIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrIGlzIGF1dG9tYXRpY2FsbHkgYSBuby1nbyBmb3IgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMuIEkgaGF2ZSB0byBhdm9pZCB3YXN0aW5nIHJlc291cmNlcyBvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vYCBhbmQgZmlndXJlIG91dCB3aGF0IGRyaXZlcnMgYWN0dWFsbHkgdXRpbGl6ZSBgbGlid3hgLiBgZ3JlcHBlcmAgb3IgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB3aWxsIGJlIG15IHRvb2xzIG9mIGNob2ljZSBoZXJlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyAqdXNpbmcqIHRoaXMgbGlicmFyeSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuIFRoYXQgd2lsbCBoZWxwIG1lIG1ha2UgYSBkZXRlcm1pbmF0aW9uIG9uIHdoZXRoZXIgZnV6emluZyBpcyBldmVuIHZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjMxOjI2LjkyMTU5NTMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5MDc3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTElCV1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTc9aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoxOTpjb25maWcgTElCV1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTMxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzI6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTMzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01NS1cXHRzZWxlY3QgUENTX1hQQ1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTY6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzI6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODgtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4OTpcXHRzZWxlY3QgTElCV1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4L1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICs9IHR4Z2JlL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjMxOjI3LjI1OTUyNzMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODI1OTU4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBcdTAwMjYgRGF0YSBHYXRoZXJpbmcqKlxuXG5Pa2F5LCBsZXQncyBzdGFydCBieSBjbGFyaWZ5aW5nIGV4YWN0bHkgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBhY3JvbnltcyBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgYW5kIE5HQkVWRiBuZWVkIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhlc2UgcmVwcmVzZW50LCBzbyBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IHRlY2hub2xvZ3kgdGhleSByZWZlciB0by4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzIG9yIEV0aGVybmV0IGNvbnRyb2xsZXJzLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTmV4dCBzdGVwOiBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodHMgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZXNlIGVsZW1lbnRzLiBUaGF0IEtjb25maWcgZmlsZSBpcyBhIHRyZWFzdXJlIHRyb3ZlOyBpdCBzaG91bGQgcHJvdmlkZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDc6MzE6NTAuMDg1NDg3OTI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXYW5neHVuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuZ3h1biBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTM6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNDpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgV2FuZ3h1bihSKSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1dBTkdYVU5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIExJQldYXFxuICAyMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjQ6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBOR0JFXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICAzNTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgMzg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNDE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgVFhHQkVcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0OTpcXHRcXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuICA1MDpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICA1MTpcXHRcXHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxcbiAgNTI6XFx0XFx0c2VsZWN0IFNGUFxcbiAgNTM6XFx0XFx0c2VsZWN0IEdQSU9MSUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcXG4gIDU1OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgNTY6XFx0XFx0c2VsZWN0IExJQldYXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICA1OTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgNjI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXFxuICA2NjpcXHRcXG4gIDY3OlxcdGNvbmZpZyBUWEdCRVZGXFxuICA2ODpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgNjk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcXG4gIDc1OlxcdFxcdCAgV1g1WFhYLCBXWDVYWFhBTC5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDgwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgODM6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnIE5HQkVWRlxcbiAgODY6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgODk6XFx0XFx0c2VsZWN0IExJQldYXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCBuZ2JldmYuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA5NjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgOTk6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzozMTo1MC4wODU1NzEwODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTcxOTY2NDU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IFdhbmd4dW4gRXRoZXJuZXQgUENJZSBhZGFwdGVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIChgdHhnYmVgLCBgbmdiZWAsIGB0eGdiZXZmYCwgYG5nYmV2ZmAsIGFuZCBgbGlid3hgKS4gSSBrbm93IHRoZXNlIGFyZSBmb3IgMUdiRSwgMTAvMjUvNDBHYkUgUENJZSBuZXR3b3JrIGNhcmRzIGFuZCB0aGVpciBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUg4oCTIHRoZSBraW5kIHVzZWQgZm9yIGZ1enppbmcg4oCTIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBXYW5neHVuIGRldmljZXMuIEl0IHN1cHBvcnRzIG90aGVyIGFkYXB0ZXJzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGV0Yy4sIGJ1dCBub3QgV2FuZ3h1bi5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IGlmIGl0J3M6XG5cbiogICBDb2RlIGZvciBoYXJkd2FyZSBub3QgZW11bGF0ZWQgKGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0pXG4qICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcyB0aGF0ICpuZWVkKiBwaHlzaWNhbCBoYXJkd2FyZS5cbiogICBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLlxuXG5NeSBhc3Nlc3NtZW50IGlzIGNsZWFyOiBXYW5neHVuIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgc2Vjb25kIGNhdGVnb3J5LiBUaGVzZSBhcmUgcGh5c2ljYWwgUENJZSBOSUNzLCBtYWRlIGJ5IGEgQ2hpbmVzZSB2ZW5kb3IuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbGlid3hgLCB0aGUgc2hhcmVkIGxpYnJhcnkgdXNlZCBieSB0aGVzZSBXYW5neHVuIGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiBmaWxlcyBsaWtlIGB3eF9lcnIuY2AsIGB3eF9ldGh0b29sLmNgLCBhbmQgc28gb24uXG5cblRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyLiBUaGlzIGlzIGEgKnJlcXVpcmVtZW50KiBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRS4gVGhpcyBtYWtlcyB0aGUgY29kZSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBlbXB0eSBhbmQgd2UgY2FuIGlnbm9yZSBhbnkgZW5hYmxlIGNvbmZpZ3MuIEl04oCZcyBhIGNsZWFuIGFuZCBjb25jaXNlIHJlYXNvbiB0byBtb3ZlIG9uIHRvIHNvbWV0aGluZyBlbHNlLiBUaW1lIHRvIG1vdmUgb24gYW5kIGxldOKAmXMgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyOSwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjM0OjI3LjI4MjIxOTg4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzozNDoyNy4yODIyNDg0OTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7b9wq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 07:14:37 +0000 UTC FinishedAt: 2026-08-30 07:34:28 +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+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2Y3ZGZjOGU2M2U5MGE2MzkzNmFlNmYyZDk0YjZiOTkwYzBhYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMDc6Mjg6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbmluZGV4IGI1NmZiZGM5NTlkZWMuLjcwMTQ3OTAxYjkwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMjAxLDEyICYjNDM7MjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuIFxuLVx0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRpZiAoIXR4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjQsOCAmIzQzOzI3MCwxNiBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuIFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0eF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggOTQwZDJlNTk4NzZjNy4uYzBmYjU2MzllMzcwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0aSAmIzQzOz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7XG4tXHRcdHJpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2pdO1xuJiM0MztcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSAwO1xuIFx0XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gMDtcbkBAIC0xODQsNiAmIzQzOzE4NSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnJpbmctXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4gXHRcdGkgJiM0Mzs9IDI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZ2V0X2V0aHRvb2xfc3RhdHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uOWUyY2Y3OTRmODFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTU5OCwxMyAmIzQzOzE1OTgsMTggQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGogPSByaW5nLVx1MDAzZXJlZ19pZHg7XG4gXHRcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxuIFx0XHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG5AQCAtMjg3MCw4ICYjNDM7Mjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4tXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5MywxMCAmIzQzOzI5MDYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4mIzQzO1x0XHRpZiAoIXJ4X3JpbmcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRub25fZW9wX2Rlc2NzICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkO1xuIFx0XHRod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuY3N1bV9nb29kX2NudDtcbkBAIC0yOTEyLDE5ICYjNDM7MjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRyc2NfY291bnQgJiM0Mzs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCAmIzQzOz0gd3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XG4mIzQzO1x0XHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcbiYjNDM7XHRcdFx0cnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbiBcdFx0fVxuIFx0XHR3eC1cdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XG4gXHRcdHd4LVx1MDAzZXJzY19mbHVzaCA9IHJzY19mbHVzaDtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdHhfcmluZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHJlc3RhcnRfcXVldWUgJiM0Mzs9IHR4X3JpbmctXHUwMDNldHhfc3RhdHMucmVzdGFydF9xdWV1ZTtcbiBcdFx0dHhfYnVzeSAmIzQzOz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0d3gtXHUwMDNlcmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7XG4gXHR3eC1cdTAwM2V0eF9idXN5ID0gdHhfYnVzeTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZWQ1YWFkNzg1N2JkOS4uYzIyN2U5YWI4YTRhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0yMTkxLDcgJiM0MzsyMTkxLDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxuIFx0XHRyaW5nLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHhyX2lkeDtcbiBcbiBcdFx0LyogYXNzaWduIHJpbmcgdG8gd3ggKi9cbi1cdFx0d3gtXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XG4mIzQzO1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyAmIzQzOzIyMTcsNyBAQCBzdGF0aWMgaW50IHd4X2FsbG9jX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsXG4gXHRcdHJpbmctXHUwMDNlcXVldWVfaW5kZXggPSByeHJfaWR4O1xuIFxuIFx0XHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xuLVx0XHR3eC1cdTAwM2VyeF9yaW5nW3J4cl9pZHhdID0gcmluZztcbiYjNDM7XHRcdFdSSVRFX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7XG4gXG4gXHRcdC8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi9cbiBcdFx0cnhyX2NvdW50LS07XG5AQCAtMjI0NSwxMCAmIzQzOzIyNDUsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZztcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNldHgpXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh3eC1cdTAwM2V0eF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNlcngpXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh3eC1cdTAwM2VyeF9yaW5nW3JpbmctXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcbiBcbiBcdHd4LVx1MDAzZXFfdmVjdG9yW3ZfaWR4XSA9IE5VTEw7XG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZxX3ZlY3Rvci1cdTAwM2VuYXBpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDcwOGU3ZjM5NThmNy4uMDEwNzEzODY0MDlhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0yNTcsNyAmIzQzOzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxuICAqL1xuIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4ge1xuLVx0c3RydWN0IHd4X3JpbmcgKnJ4X3Jpbmc7XG4gXHR1bnNpZ25lZCBsb25nIHJ4X2V2ZW50O1xuIFx0dTMyIHRzeW5jcnhjdGw7XG4gXHRpbnQgbjtcbkBAIC0yNzQsMTEgJiM0MzsyNzMsMTYgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovXG4gXHRyeF9ldmVudCA9IHd4LVx1MDAzZWxhc3RfcnhfcHRwX2NoZWNrO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAobiA9IDA7IG4gXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7XG4tXHRcdHJ4X3JpbmcgPSB3eC1cdTAwM2VyeF9yaW5nW25dO1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tuXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyeF9yaW5nKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHRpbWVfYWZ0ZXIocnhfcmluZy1cdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxuIFx0XHRcdHJ4X2V2ZW50ID0gcnhfcmluZy1cdTAwM2VsYXN0X3J4X3RpbWVzdGFtcDtcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgJiM0MzsgNSAqIEhaKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdmN2RmYzhlNjNlOTBhNjM5MzZhZTZmMmQ5NGI2Yjk5MGMwYWFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDA3OjI4OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKaW5kZXggYjU2ZmJkYzk1OWRlYy4uNzAxNDc5MDFiOTBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCkBAIC0yMDEsMTIgJiM0MzsyMDEsMTggQEAgc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKIAotCQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCWlmICghdHhfcmluZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKSB7CiYjNDM7CQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMjY0LDggJiM0MzsyNzAsMTYgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKIAogCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KIAlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQotCQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQkJaWYgKCF0eF9yaW5nKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB0eF9yaW5nLSZndDtzdGF0ZSk7CiYjNDM7CQl9CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggOTQwZDJlNTk4NzZjNy4uYzBmYjU2MzllMzcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKQEAgLTE1NCw4ICYjNDM7MTU0LDkgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQl9CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGogPSAwOyBqICZsdDsgbmV0ZGV2LSZndDtudW1fdHhfcXVldWVzOyBqJiM0MzsmIzQzOykgewotCQlyaW5nID0gd3gtJmd0O3R4X3Jpbmdbal07CiYjNDM7CQlyaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2pdKTsKIAkJaWYgKCFyaW5nKSB7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CiAJCQlkYXRhW2kmIzQzOyYjNDM7XSA9IDA7CkBAIC0xNzAsNyAmIzQzOzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJaSAmIzQzOz0gMjsKIAl9CiAJZm9yIChqID0gMDsgaiAmbHQ7IFdYX05VTV9SWF9RVUVVRVM7IGomIzQzOyYjNDM7KSB7Ci0JCXJpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tqXTsKJiM0MzsJCXJpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3Jpbmdbal0pOwogCQlpZiAoIXJpbmcpIHsKIAkJCWRhdGFbaSYjNDM7JiM0MztdID0gMDsKIAkJCWRhdGFbaSYjNDM7JiM0MztdID0gMDsKQEAgLTE4NCw2ICYjNDM7MTg1LDcgQEAgdm9pZCB3eF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtyaW5nLSZndDtzeW5jcCwgc3RhcnQpKTsKIAkJaSAmIzQzOz0gMjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTCh3eF9nZXRfZXRodG9vbF9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwppbmRleCAxMjJjNDk1MmQyMDNmLi45ZTJjZjc5NGY4MWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0xNTk4LDEzICYjNDM7MTU5OCwxOCBAQCBzdGF0aWMgdm9pZCB3eF92bGFuX3N0cmlwX2NvbnRyb2woc3RydWN0IHd4ICp3eCwgYm9vbCBlbmFibGUpCiB7CiAJaW50IGksIGo7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHd4X3JpbmcgKnJpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LSZndDtyeF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghcmluZykKJiM0MzsJCQljb250aW51ZTsKIAogCQlqID0gcmluZy0mZ3Q7cmVnX2lkeDsKIAkJd3IzMm0od3gsIFdYX1BYX1JSX0NGRyhqKSwgV1hfUFhfUlJfQ0ZHX1ZMQU4sCiAJCSAgICAgIGVuYWJsZSA/IFdYX1BYX1JSX0NGR19WTEFOIDogMCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgd3hfdmxhbl9wcm9taXNjX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4KQpAQCAtMjg3MCw4ICYjNDM7Mjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eCkKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCi0JCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDt0eF9yaW5nW2ldKTsKJiM0MzsKJiM0MzsJCWlmICghdHhfcmluZykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLSZndDtzdGF0ZSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtMjg5MywxMCAmIzQzOzI5MDYsMTMgQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eCkKIAogCXNwaW5fbG9jaygmYW1wO3d4LSZndDtod19zdGF0c19sb2NrKTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJLyogZ2F0aGVyIHNvbWUgc3RhdHMgdG8gdGhlIHd4IHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gd3gtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7cnhfcmluZ1tpXSk7CiAKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJbm9uX2VvcF9kZXNjcyAmIzQzOz0gcnhfcmluZy0mZ3Q7cnhfc3RhdHMubm9uX2VvcF9kZXNjczsKIAkJYWxsb2NfcnhfYnVmZl9mYWlsZWQgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkOwogCQlod19jc3VtX3J4X2dvb2QgJiM0Mzs9IHJ4X3JpbmctJmd0O3J4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7CkBAIC0yOTEyLDE5ICYjNDM7MjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KQogCQl1NjQgcnNjX2ZsdXNoID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQlyc2NfY291bnQgJiM0Mzs9IHd4LSZndDtyeF9yaW5nW2ldLSZndDtyeF9zdGF0cy5yc2NfY291bnQ7Ci0JCQlyc2NfZmx1c2ggJiM0Mzs9IHd4LSZndDtyeF9yaW5nW2ldLSZndDtyeF9zdGF0cy5yc2NfZmx1c2g7CiYjNDM7CQkJc3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtJmd0O3J4X3JpbmdbaV0pOwomIzQzOwomIzQzOwkJCWlmICghcnhfcmluZykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJcnNjX2NvdW50ICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5yc2NfY291bnQ7CiYjNDM7CQkJcnNjX2ZsdXNoICYjNDM7PSByeF9yaW5nLSZndDtyeF9zdGF0cy5yc2NfZmx1c2g7CiAJCX0KIAkJd3gtJmd0O3JzY19jb3VudCA9IHJzY19jb3VudDsKIAkJd3gtJmd0O3JzY19mbHVzaCA9IHJzY19mbHVzaDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CQlzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC0mZ3Q7dHhfcmluZ1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoIXR4X3JpbmcpCiYjNDM7CQkJY29udGludWU7CiAKIAkJcmVzdGFydF9xdWV1ZSAmIzQzOz0gdHhfcmluZy0mZ3Q7dHhfc3RhdHMucmVzdGFydF9xdWV1ZTsKIAkJdHhfYnVzeSAmIzQzOz0gdHhfcmluZy0mZ3Q7dHhfc3RhdHMudHhfYnVzeTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXd4LSZndDtyZXN0YXJ0X3F1ZXVlID0gcmVzdGFydF9xdWV1ZTsKIAl3eC0mZ3Q7dHhfYnVzeSA9IHR4X2J1c3k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCmluZGV4IGVkNWFhZDc4NTdiZDkuLmMyMjdlOWFiOGE0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMjE5MSw3ICYjNDM7MjE5MSw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwKIAkJcmluZy0mZ3Q7cXVldWVfaW5kZXggPSB0eHJfaWR4OwogCiAJCS8qIGFzc2lnbiByaW5nIHRvIHd4ICovCi0JCXd4LSZndDt0eF9yaW5nW3R4cl9pZHhdID0gcmluZzsKJiM0MzsJCVdSSVRFX09OQ0Uod3gtJmd0O3R4X3JpbmdbdHhyX2lkeF0sIHJpbmcpOwogCiAJCS8qIHVwZGF0ZSBjb3VudCBhbmQgaW5kZXggKi8KIAkJdHhyX2NvdW50LS07CkBAIC0yMjE3LDcgJiM0MzsyMjE3LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LAogCQlyaW5nLSZndDtxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7CiAKIAkJLyogYXNzaWduIHJpbmcgdG8gd3ggKi8KLQkJd3gtJmd0O3J4X3JpbmdbcnhyX2lkeF0gPSByaW5nOwomIzQzOwkJV1JJVEVfT05DRSh3eC0mZ3Q7cnhfcmluZ1tyeHJfaWR4XSwgcmluZyk7CiAKIAkJLyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqLwogCQlyeHJfY291bnQtLTsKQEAgLTIyNDUsMTAgJiM0MzsyMjQ1LDEwIEBAIHN0YXRpYyB2b2lkIHd4X2ZyZWVfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCwgaW50IHZfaWR4KQogCXN0cnVjdCB3eF9yaW5nICpyaW5nOwogCiAJd3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci0mZ3Q7dHgpCi0JCXd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKHd4LSZndDt0eF9yaW5nW3JpbmctJmd0O3F1ZXVlX2luZGV4XSwgTlVMTCk7CiAKIAl3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLSZndDtyeCkKLQkJd3gtJmd0O3J4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0Uod3gtJmd0O3J4X3JpbmdbcmluZy0mZ3Q7cXVldWVfaW5kZXhdLCBOVUxMKTsKIAogCXd4LSZndDtxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMOwogCW5ldGlmX25hcGlfZGVsKCZhbXA7cV92ZWN0b3ItJmd0O25hcGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKaW5kZXggNDcwOGU3ZjM5NThmNy4uMDEwNzEzODY0MDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0yNTcsNyAmIzQzOzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KQogICovCiBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KQogewotCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nOwogCXVuc2lnbmVkIGxvbmcgcnhfZXZlbnQ7CiAJdTMyIHRzeW5jcnhjdGw7CiAJaW50IG47CkBAIC0yNzQsMTEgJiM0MzsyNzMsMTYgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eCkKIAogCS8qIGRldGVybWluZSB0aGUgbW9zdCByZWNlbnQgd2F0Y2hkb2cgb3IgcnhfdGltZXN0YW1wIGV2ZW50ICovCiAJcnhfZXZlbnQgPSB3eC0mZ3Q7bGFzdF9yeF9wdHBfY2hlY2s7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKG4gPSAwOyBuICZsdDsgd3gtJmd0O251bV9yeF9xdWV1ZXM7IG4mIzQzOyYjNDM7KSB7Ci0JCXJ4X3JpbmcgPSB3eC0mZ3Q7cnhfcmluZ1tuXTsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LSZndDtyeF9yaW5nW25dKTsKJiM0MzsKJiM0MzsJCWlmICghcnhfcmluZykKJiM0MzsJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIocnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSkKIAkJCXJ4X2V2ZW50ID0gcnhfcmluZy0mZ3Q7bGFzdF9yeF90aW1lc3RhbXA7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqLwogCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICYjNDM7IDUgKiBIWikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYCBjb2RlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZXhhY3RseSAqaXMqIFdhbmd4dW4gZXRoZXJuZXQ/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGhhcmR3YXJlIHRoZXNlIGRyaXZlcnMgc3VwcG9ydC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHJlbGF0aXZlbHkgY29tbW9uIGFuZCB2aXJ0dWFsaXphYmxlLCBvciBhcmUgd2UgbG9va2luZyBhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUNzIHRoYXQgd291bGQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gQ2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwIGxpa2UgR0NFIG9yIFFFTVU/IE9yIGlzIHRoaXMgZ29pbmcgdG8gYmUgYW4gdW4tZnV6emFibGUgZGVhZCBlbmQ/CgpUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBydWxlcy4gVGhlIHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpbmNsdWRlcyBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoYXJkd2FyZSB0aGF0IGlzICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbGlzdCBpbmNsdWRlcyB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggY29kZSwgU21hcnROSUMgZHJpdmVycywgb3IgR1BVIGRyaXZlcnMuIEFsc28sIGFueXRoaW5nIGluIGEgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGVhcmRvd24gY2FsbGJhY2sgaXMgYXV0b21hdGljYWxseSBhIG5vLWdvIGZvciBpbml0aWFsIGZ1enppbmcgZWZmb3J0cy4gSSBoYXZlIHRvIGF2b2lkIHdhc3RpbmcgcmVzb3VyY2VzIG9uIGNvZGUgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gIGFuZCBmaWd1cmUgb3V0IHdoYXQgZHJpdmVycyBhY3R1YWxseSB1dGlsaXplIGBsaWJ3eGAuIGBncmVwcGVyYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgIHdpbGwgYmUgbXkgdG9vbHMgb2YgY2hvaWNlIGhlcmUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyAqdXNpbmcqIHRoaXMgbGlicmFyeSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuIFRoYXQgd2lsbCBoZWxwIG1lIG1ha2UgYSBkZXRlcm1pbmF0aW9uIG9uIHdoZXRoZXIgZnV6emluZyBpcyBldmVuIHZpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMSUJXWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzI6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTU1LVx0c2VsZWN0IFBDU19YUENTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTY6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzI6XHRzZWxlY3QgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04OC1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4OTpcdHNlbGVjdCBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTkwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICYjNDM7PSB0eGdiZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS02LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgJmFtcDsgRGF0YSBHYXRoZXJpbmcqKgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGNsYXJpZnlpbmcgZXhhY3RseSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBhY3JvbnltcyBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgYW5kIE5HQkVWRiBuZWVkIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhlc2UgcmVwcmVzZW50LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCB0ZWNobm9sb2d5IHRoZXkgcmVmZXIgdG8uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlcyBvciBFdGhlcm5ldCBjb250cm9sbGVycywgZ2l2ZW4gdGhlIGNvbnRleHQuCgpOZXh0IHN0ZXA6IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodHMgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZXNlIGVsZW1lbnRzLiBUaGF0IEtjb25maWcgZmlsZSBpcyBhIHRyZWFzdXJlIHRyb3ZlOyBpdCBzaG91bGQgcHJvdmlkZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gICA3Olx0XHRib29sIFwmIzM0O1dhbmd4dW4gZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEzOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTQ6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXG4gIDE1Olx0XHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIExJQldYXG4gIDIwOlx0XHR0cmlzdGF0ZVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0c2VsZWN0IERJTUxJQlxuICAyNDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5HQkVcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gUENJXG4gIDMxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMyOlx0XHRzZWxlY3QgTElCV1hcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDM1Olx0XHQgIGFkYXB0ZXJzLlxuICAzNjpcdFxuICAzNzpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgMzg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA0MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBUWEdCRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gIDQ3Olx0XHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQ5Olx0XHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXG4gIDUwOlx0XHRzZWxlY3QgUkVHTUFQXG4gIDUxOlx0XHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxuICA1MjpcdFx0c2VsZWN0IFNGUFxuICA1MzpcdFx0c2VsZWN0IEdQSU9MSUJcbiAgNTQ6XHRcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcbiAgNTU6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICA1NjpcdFx0c2VsZWN0IExJQldYXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDU5Olx0XHQgIGFkYXB0ZXJzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgNjI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXG4gIDY2Olx0XG4gIDY3Olx0Y29uZmlnIFRYR0JFVkZcbiAgNjg6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICA2OTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA3MjpcdFx0c2VsZWN0IExJQldYXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcbiAgNzU6XHRcdCAgV1g1WFhYLCBXWDVYWFhBTC5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA4MDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuICA4MTpcdFxuICA4MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBNU0ktWCBpbnRlcnJ1cHRcbiAgODM6XHRcdCAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnIE5HQkVWRlxuICA4NjpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDg3Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgODg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgODk6XHRcdHNlbGVjdCBMSUJXWFxuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgV1gxODYwLCBXWDE4NjBBTC5cbiAgOTI6XHRcbiAgOTM6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIG5nYmV2Zi5cbiAgOTQ6XHRcbiAgOTU6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDk2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFx1MDAzZS5cbiAgOTc6XHRcbiAgOTg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gTVNJLVggaW50ZXJydXB0XG4gIDk5Olx0XHQgIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjkKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IFdhbmd4dW4gRXRoZXJuZXQgUENJZSBhZGFwdGVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIChgdHhnYmVgLCBgbmdiZWAsIGB0eGdiZXZmYCwgYG5nYmV2ZmAsIGFuZCBgbGlid3hgKS4gSSBrbm93IHRoZXNlIGFyZSBmb3IgMUdiRSwgMTAvMjUvNDBHYkUgUENJZSBuZXR3b3JrIGNhcmRzIGFuZCB0aGVpciBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUg4oCTIHRoZSBraW5kIHVzZWQgZm9yIGZ1enppbmcg4oCTIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgV2FuZ3h1biBkZXZpY2VzLiBJdCBzdXBwb3J0cyBvdGhlciBhZGFwdGVycyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBldGMuLCBidXQgbm90IFdhbmd4dW4uCgpOb3csIHRoZSBpbnN0cnVjdGlvbiBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBzcGVjaWZpY2FsbHkgaWYgaXQmIzM5O3M6CgoqICAgQ29kZSBmb3IgaGFyZHdhcmUgbm90IGVtdWxhdGVkIChsaWtlIFVTQiBnYWRnZXRzIG9yIG1hYzgwMjExX2h3c2ltKQoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcyB0aGF0ICpuZWVkKiBwaHlzaWNhbCBoYXJkd2FyZS4KKiAgIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmQuCgpNeSBhc3Nlc3NtZW50IGlzIGNsZWFyOiBXYW5neHVuIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgc2Vjb25kIGNhdGVnb3J5LiBUaGVzZSBhcmUgcGh5c2ljYWwgUENJZSBOSUNzLCBtYWRlIGJ5IGEgQ2hpbmVzZSB2ZW5kb3IuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbGlid3hgLCB0aGUgc2hhcmVkIGxpYnJhcnkgdXNlZCBieSB0aGVzZSBXYW5neHVuIGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiBmaWxlcyBsaWtlIGB3eF9lcnIuY2AsIGB3eF9ldGh0b29sLmNgLCBhbmQgc28gb24uCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlci4gVGhpcyBpcyBhICpyZXF1aXJlbWVudCogZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UuIFRoaXMgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgd2l0aGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgZW1wdHkgYW5kIHdlIGNhbiBpZ25vcmUgYW55IGVuYWJsZSBjb25maWdzLiBJdOKAmXMgYSBjbGVhbiBhbmQgY29uY2lzZSByZWFzb24gdG8gbW92ZSBvbiB0byBzb21ldGhpbmcgZWxzZS4gVGltZSB0byBtb3ZlIG9uIGFuZCBsZXTigJlzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsaWJ3eCwgdGhlIHNoYXJlZCBsaWJyYXJ5IGZvciBXYW5neHVuIEV0aGVybmV0IFBDSWUgTklDIGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBuZ2JldmYsIHR4Z2JldmYpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgV2FuZ3h1biBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDc6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjI4OjIxLjQ1MTUxOTY4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NTgzMDczODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS40NTE1MjM2OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDM0NjU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3ZjdkZmM4ZTYzZTkwYTYzOTM2YWU2ZjJkOTRiNmI5OTBjMGFhYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMzAgMDc6Mjg6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi43MDE0NzkwMWI5MGI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuIFxcbi1cXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMjY0LDggKzI3MCwxNiBAQCBzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbiBcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tpXSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoIXR4X3JpbmcpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgdHhfcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCA5NDBkMmU1OTg3NmM3Li5jMGZiNTYzOWUzNzBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMTU0LDggKzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGorKykge1xcbi1cXHRcXHRyaW5nID0gd3gtXFx1MDAzZXR4X3Jpbmdbal07XFxuK1xcdFxcdHJpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXR4X3Jpbmdbal0pO1xcbiBcXHRcXHRpZiAoIXJpbmcpIHtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG4gXFx0XFx0XFx0ZGF0YVtpKytdID0gMDtcXG5AQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0aSArPSAyO1xcbiBcXHR9XFxuIFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBXWF9OVU1fUlhfUVVFVUVTOyBqKyspIHtcXG4tXFx0XFx0cmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2pdO1xcbitcXHRcXHRyaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2VyeF9yaW5nW2pdKTtcXG4gXFx0XFx0aWYgKCFyaW5nKSB7XFxuIFxcdFxcdFxcdGRhdGFbaSsrXSA9IDA7XFxuIFxcdFxcdFxcdGRhdGFbaSsrXSA9IDA7XFxuQEAgLTE4NCw2ICsxODUsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cmluZy1cXHUwMDNlc3luY3AsIHN0YXJ0KSk7XFxuIFxcdFxcdGkgKz0gMjtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X2dldF9ldGh0b29sX3N0YXRzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbmluZGV4IDEyMmM0OTUyZDIwM2YuLjllMmNmNzk0ZjgxY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuQEAgLTE1OTgsMTMgKzE1OTgsMTggQEAgc3RhdGljIHZvaWQgd3hfdmxhbl9zdHJpcF9jb250cm9sKHN0cnVjdCB3eCAqd3gsIGJvb2wgZW5hYmxlKVxcbiB7XFxuIFxcdGludCBpLCBqO1xcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoIXJpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aiA9IHJpbmctXFx1MDAzZXJlZ19pZHg7XFxuIFxcdFxcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxcbiBcXHRcXHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3eF92bGFuX3Byb21pc2NfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuQEAgLTI4NzAsOCArMjg3NSwxNiBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4gXFx0aWYgKCFkYXRhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4tXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXR4X3JpbmdbaV0pO1xcbitcXG4rXFx0XFx0aWYgKCF0eF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yODkzLDEwICsyOTA2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnd4LVxcdTAwM2Vod19zdGF0c19sb2NrKTtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0LyogZ2F0aGVyIHNvbWUgc3RhdHMgdG8gdGhlIHd4IHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSB3eC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKCFyeF9yaW5nKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bm9uX2VvcF9kZXNjcyArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5ub25fZW9wX2Rlc2NzO1xcbiBcXHRcXHRhbGxvY19yeF9idWZmX2ZhaWxlZCArPSByeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZDtcXG4gXFx0XFx0aHdfY3N1bV9yeF9nb29kICs9IHJ4X3JpbmctXFx1MDAzZXJ4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7XFxuQEAgLTI5MTIsMTkgKzI5MjgsMjggQEAgdm9pZCB3eF91cGRhdGVfc3RhdHMoc3RydWN0IHd4ICp3eClcXG4gXFx0XFx0dTY0IHJzY19mbHVzaCA9IDA7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbi1cXHRcXHRcXHRyc2NfY291bnQgKz0gd3gtXFx1MDAzZXJ4X3JpbmdbaV0tXFx1MDAzZXJ4X3N0YXRzLnJzY19jb3VudDtcXG4tXFx0XFx0XFx0cnNjX2ZsdXNoICs9IHd4LVxcdTAwM2VyeF9yaW5nW2ldLVxcdTAwM2VyeF9zdGF0cy5yc2NfZmx1c2g7XFxuK1xcdFxcdFxcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghcnhfcmluZylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyc2NfY291bnQgKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xcbitcXHRcXHRcXHRyc2NfZmx1c2ggKz0gcnhfcmluZy1cXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHd4LVxcdTAwM2Vyc2NfY291bnQgPSByc2NfY291bnQ7XFxuIFxcdFxcdHd4LVxcdTAwM2Vyc2NfZmx1c2ggPSByc2NfZmx1c2g7XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVxcdTAwM2V0eF9yaW5nW2ldKTtcXG4rXFxuK1xcdFxcdGlmICghdHhfcmluZylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRyZXN0YXJ0X3F1ZXVlICs9IHR4X3JpbmctXFx1MDAzZXR4X3N0YXRzLnJlc3RhcnRfcXVldWU7XFxuIFxcdFxcdHR4X2J1c3kgKz0gdHhfcmluZy1cXHUwMDNldHhfc3RhdHMudHhfYnVzeTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0d3gtXFx1MDAzZXJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR3eC1cXHUwMDNldHhfYnVzeSA9IHR4X2J1c3k7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IGVkNWFhZDc4NTdiZDkuLmMyMjdlOWFiOGE0YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMjE5MSw3ICsyMTkxLDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNldHhfcmluZ1t0eHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xcbiBcXG4gXFx0XFx0LyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqL1xcbiBcXHRcXHR0eHJfY291bnQtLTtcXG5AQCAtMjIxNyw3ICsyMjE3LDcgQEAgc3RhdGljIGludCB3eF9hbGxvY19xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRcXHRyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XFxuIFxcbiBcXHRcXHQvKiBhc3NpZ24gcmluZyB0byB3eCAqL1xcbi1cXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tyeHJfaWR4XSA9IHJpbmc7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xcbiBcXG4gXFx0XFx0LyogdXBkYXRlIGNvdW50IGFuZCBpbmRleCAqL1xcbiBcXHRcXHRyeHJfY291bnQtLTtcXG5AQCAtMjI0NSwxMCArMjI0NSwxMCBAQCBzdGF0aWMgdm9pZCB3eF9mcmVlX3FfdmVjdG9yKHN0cnVjdCB3eCAqd3gsIGludCB2X2lkeClcXG4gXFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7XFxuIFxcbiBcXHR3eF9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLVxcdTAwM2V0eClcXG4tXFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdbcmluZy1cXHUwMDNlcXVldWVfaW5kZXhdID0gTlVMTDtcXG4rXFx0XFx0V1JJVEVfT05DRSh3eC1cXHUwMDNldHhfcmluZ1tyaW5nLVxcdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xcbiBcXG4gXFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cXHUwMDNlcngpXFxuLVxcdFxcdHd4LVxcdTAwM2VyeF9yaW5nW3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0Uod3gtXFx1MDAzZXJ4X3JpbmdbcmluZy1cXHUwMDNlcXVldWVfaW5kZXhdLCBOVUxMKTtcXG4gXFxuIFxcdHd4LVxcdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cV92ZWN0b3ItXFx1MDAzZW5hcGkpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjAxMDcxMzg2NDA5YTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5AQCAtMjU3LDcgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4ge1xcbi1cXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZztcXG4gXFx0dW5zaWduZWQgbG9uZyByeF9ldmVudDtcXG4gXFx0dTMyIHRzeW5jcnhjdGw7XFxuIFxcdGludCBuO1xcbkBAIC0yNzQsMTEgKzI3MywxNiBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCB3YXRjaGRvZyBvciByeF90aW1lc3RhbXAgZXZlbnQgKi9cXG4gXFx0cnhfZXZlbnQgPSB3eC1cXHUwMDNlbGFzdF9yeF9wdHBfY2hlY2s7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yIChuID0gMDsgbiBcXHUwMDNjIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzOyBuKyspIHtcXG4tXFx0XFx0cnhfcmluZyA9IHd4LVxcdTAwM2VyeF9yaW5nW25dO1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC1cXHUwMDNlcnhfcmluZ1tuXSk7XFxuK1xcbitcXHRcXHRpZiAoIXJ4X3JpbmcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAodGltZV9hZnRlcihyeF9yaW5nLVxcdTAwM2VsYXN0X3J4X3RpbWVzdGFtcCwgcnhfZXZlbnQpKVxcbiBcXHRcXHRcXHRyeF9ldmVudCA9IHJ4X3JpbmctXFx1MDAzZWxhc3RfcnhfdGltZXN0YW1wO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Lyogb25seSBuZWVkIHRvIHJlYWQgdGhlIGhpZ2ggUlhTVE1QIHJlZ2lzdGVyIHRvIGNsZWFyIHRoZSBsb2NrICovXFxuIFxcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHJ4X2V2ZW50ICsgNSAqIEhaKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS44NTI1OTc3NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NTQyOTY0ODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3ZjdkZmM4ZTYzZTkwYTYzOTM2YWU2ZjJkOTRiNmI5OTBjMGFhYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAwNzoyODoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5pbmRleCBiNTZmYmRjOTU5ZGVjLi43MDE0NzkwMWI5MGI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTIwMSwxMiArMjAxLDE4IEBAIHN0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBpO1xuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4gXG4tXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0aWYgKCF0eF9yaW5nKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2NCw4ICsyNzAsMTYgQEAgc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuLVx0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRcdGlmICghdHhfcmluZylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHR4X3JpbmctXHUwMDNlc3RhdGUpO1xuK1x0XHR9XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA5NDBkMmU1OTg3NmM3Li5jMGZiNTYzOWUzNzBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtMTU0LDggKzE1NCw5IEBAIHZvaWQgd3hfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IGorKykge1xuLVx0XHRyaW5nID0gd3gtXHUwMDNldHhfcmluZ1tqXTtcbitcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2V0eF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpKytdID0gMDtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuQEAgLTE3MCw3ICsxNzEsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdGkgKz0gMjtcbiBcdH1cbiBcdGZvciAoaiA9IDA7IGogXHUwMDNjIFdYX05VTV9SWF9RVUVVRVM7IGorKykge1xuLVx0XHRyaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tqXTtcbitcdFx0cmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2pdKTtcbiBcdFx0aWYgKCFyaW5nKSB7XG4gXHRcdFx0ZGF0YVtpKytdID0gMDtcbiBcdFx0XHRkYXRhW2krK10gPSAwO1xuQEAgLTE4NCw2ICsxODUsNyBAQCB2b2lkIHd4X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyaW5nLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuIFx0XHRpICs9IDI7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9nZXRfZXRodG9vbF9zdGF0cyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAxMjJjNDk1MmQyMDNmLi45ZTJjZjc5NGY4MWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xNTk4LDEzICsxNTk4LDE4IEBAIHN0YXRpYyB2b2lkIHd4X3ZsYW5fc3RyaXBfY29udHJvbChzdHJ1Y3Qgd3ggKnd4LCBib29sIGVuYWJsZSlcbiB7XG4gXHRpbnQgaSwgajtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuLVx0XHRzdHJ1Y3Qgd3hfcmluZyAqcmluZyA9IHd4LVx1MDAzZXJ4X3JpbmdbaV07XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbaV0pO1xuK1xuK1x0XHRpZiAoIXJpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGogPSByaW5nLVx1MDAzZXJlZ19pZHg7XG4gXHRcdHdyMzJtKHd4LCBXWF9QWF9SUl9DRkcoaiksIFdYX1BYX1JSX0NGR19WTEFOLFxuIFx0XHQgICAgICBlbmFibGUgPyBXWF9QWF9SUl9DRkdfVkxBTiA6IDApO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHd4X3ZsYW5fcHJvbWlzY19lbmFibGUoc3RydWN0IHd4ICp3eClcbkBAIC0yODcwLDggKzI4NzUsMTYgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbi1cdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbaV0pO1xuK1xuK1x0XHRpZiAoIXR4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB0eF9yaW5nLVx1MDAzZXN0YXRlKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yODkzLDEwICsyOTA2LDEzIEBAIHZvaWQgd3hfdXBkYXRlX3N0YXRzKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHRzcGluX2xvY2soXHUwMDI2d3gtXHUwMDNlaHdfc3RhdHNfbG9jayk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHQvKiBnYXRoZXIgc29tZSBzdGF0cyB0byB0aGUgd3ggc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gd3gtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnJ4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tpXSk7XG4gXG4rXHRcdGlmICghcnhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0bm9uX2VvcF9kZXNjcyArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLm5vbl9lb3BfZGVzY3M7XG4gXHRcdGFsbG9jX3J4X2J1ZmZfZmFpbGVkICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuYWxsb2NfcnhfYnVmZl9mYWlsZWQ7XG4gXHRcdGh3X2NzdW1fcnhfZ29vZCArPSByeF9yaW5nLVx1MDAzZXJ4X3N0YXRzLmNzdW1fZ29vZF9jbnQ7XG5AQCAtMjkxMiwxOSArMjkyOCwyOCBAQCB2b2lkIHd4X3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd3ggKnd4KVxuIFx0XHR1NjQgcnNjX2ZsdXNoID0gMDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdFx0cnNjX2NvdW50ICs9IHd4LVx1MDAzZXJ4X3JpbmdbaV0tXHUwMDNlcnhfc3RhdHMucnNjX2NvdW50O1xuLVx0XHRcdHJzY19mbHVzaCArPSB3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZXJ4X3N0YXRzLnJzY19mbHVzaDtcbitcdFx0XHRzdHJ1Y3Qgd3hfcmluZyAqcnhfcmluZyA9IFJFQURfT05DRSh3eC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcbitcdFx0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyc2NfY291bnQgKz0gcnhfcmluZy1cdTAwM2VyeF9zdGF0cy5yc2NfY291bnQ7XG4rXHRcdFx0cnNjX2ZsdXNoICs9IHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMucnNjX2ZsdXNoO1xuIFx0XHR9XG4gXHRcdHd4LVx1MDAzZXJzY19jb3VudCA9IHJzY19jb3VudDtcbiBcdFx0d3gtXHUwMDNlcnNjX2ZsdXNoID0gcnNjX2ZsdXNoO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSBSRUFEX09OQ0Uod3gtXHUwMDNldHhfcmluZ1tpXSk7XG4rXG4rXHRcdGlmICghdHhfcmluZylcbitcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0cmVzdGFydF9xdWV1ZSArPSB0eF9yaW5nLVx1MDAzZXR4X3N0YXRzLnJlc3RhcnRfcXVldWU7XG4gXHRcdHR4X2J1c3kgKz0gdHhfcmluZy1cdTAwM2V0eF9zdGF0cy50eF9idXN5O1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR3eC1cdTAwM2VyZXN0YXJ0X3F1ZXVlID0gcmVzdGFydF9xdWV1ZTtcbiBcdHd4LVx1MDAzZXR4X2J1c3kgPSB0eF9idXN5O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBlZDVhYWQ3ODU3YmQ5Li5jMjI3ZTlhYjhhNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTIxOTEsNyArMjE5MSw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHR4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0gPSByaW5nO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbdHhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHR4cl9jb3VudC0tO1xuQEAgLTIyMTcsNyArMjIxNyw3IEBAIHN0YXRpYyBpbnQgd3hfYWxsb2NfcV92ZWN0b3Ioc3RydWN0IHd4ICp3eCxcbiBcdFx0cmluZy1cdTAwM2VxdWV1ZV9pbmRleCA9IHJ4cl9pZHg7XG4gXG4gXHRcdC8qIGFzc2lnbiByaW5nIHRvIHd4ICovXG4tXHRcdHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0gPSByaW5nO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXJ4X3JpbmdbcnhyX2lkeF0sIHJpbmcpO1xuIFxuIFx0XHQvKiB1cGRhdGUgY291bnQgYW5kIGluZGV4ICovXG4gXHRcdHJ4cl9jb3VudC0tO1xuQEAgLTIyNDUsMTAgKzIyNDUsMTAgQEAgc3RhdGljIHZvaWQgd3hfZnJlZV9xX3ZlY3RvcihzdHJ1Y3Qgd3ggKnd4LCBpbnQgdl9pZHgpXG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZztcbiBcbiBcdHd4X2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItXHUwMDNldHgpXG4tXHRcdHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0gPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKHd4LVx1MDAzZXR4X3JpbmdbcmluZy1cdTAwM2VxdWV1ZV9pbmRleF0sIE5VTEwpO1xuIFxuIFx0d3hfZm9yX2VhY2hfcmluZyhyaW5nLCBxX3ZlY3Rvci1cdTAwM2VyeClcbi1cdFx0d3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0Uod3gtXHUwMDNlcnhfcmluZ1tyaW5nLVx1MDAzZXF1ZXVlX2luZGV4XSwgTlVMTCk7XG4gXG4gXHR3eC1cdTAwM2VxX3ZlY3Rvclt2X2lkeF0gPSBOVUxMO1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cV92ZWN0b3ItXHUwMDNlbmFwaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLjAxMDcxMzg2NDA5YTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMjU3LDcgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9vdmVyZmxvd19jaGVjayhzdHJ1Y3Qgd3ggKnd4KVxuICAqL1xuIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4ge1xuLVx0c3RydWN0IHd4X3JpbmcgKnJ4X3Jpbmc7XG4gXHR1bnNpZ25lZCBsb25nIHJ4X2V2ZW50O1xuIFx0dTMyIHRzeW5jcnhjdGw7XG4gXHRpbnQgbjtcbkBAIC0yNzQsMTEgKzI3MywxNiBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogZGV0ZXJtaW5lIHRoZSBtb3N0IHJlY2VudCB3YXRjaGRvZyBvciByeF90aW1lc3RhbXAgZXZlbnQgKi9cbiBcdHJ4X2V2ZW50ID0gd3gtXHUwMDNlbGFzdF9yeF9wdHBfY2hlY2s7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKG4gPSAwOyBuIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBuKyspIHtcbi1cdFx0cnhfcmluZyA9IHd4LVx1MDAzZXJ4X3Jpbmdbbl07XG4rXHRcdHN0cnVjdCB3eF9yaW5nICpyeF9yaW5nID0gUkVBRF9PTkNFKHd4LVx1MDAzZXJ4X3Jpbmdbbl0pO1xuK1xuK1x0XHRpZiAoIXJ4X3JpbmcpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICh0aW1lX2FmdGVyKHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXAsIHJ4X2V2ZW50KSlcbiBcdFx0XHRyeF9ldmVudCA9IHJ4X3JpbmctXHUwMDNlbGFzdF9yeF90aW1lc3RhbXA7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdC8qIG9ubHkgbmVlZCB0byByZWFkIHRoZSBoaWdoIFJYU1RNUCByZWdpc3RlciB0byBjbGVhciB0aGUgbG9jayAqL1xuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocnhfZXZlbnQgKyA1ICogSFopKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzoyODoyMS44NTI1OTkyMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUwNjg5OTMxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9gIGNvZGUuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogV2FuZ3h1biBldGhlcm5ldD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaGFyZHdhcmUgdGhlc2UgZHJpdmVycyBzdXBwb3J0LiBBcmUgd2UgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRpdmVseSBjb21tb24gYW5kIHZpcnR1YWxpemFibGUsIG9yIGFyZSB3ZSBsb29raW5nIGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQ3MgdGhhdCB3b3VsZCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlPyBDYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXAgbGlrZSBHQ0Ugb3IgUUVNVT8gT3IgaXMgdGhpcyBnb2luZyB0byBiZSBhbiB1bi1mdXp6YWJsZSBkZWFkIGVuZD9cblxuVGltZSB0byBydW4gdGhyb3VnaCB0aGUgcnVsZXMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoIGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgaW5jbHVkZXMgY29kZSB0aGF0IGRlYWxzIHdpdGggaGFyZHdhcmUgdGhhdCBpcyAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGNvZGUsIFNtYXJ0TklDIGRyaXZlcnMsIG9yIEdQVSBkcml2ZXJzLiBBbHNvLCBhbnl0aGluZyBpbiBhIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrIGlzIGF1dG9tYXRpY2FsbHkgYSBuby1nbyBmb3IgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMuIEkgaGF2ZSB0byBhdm9pZCB3YXN0aW5nIHJlc291cmNlcyBvbiBjb2RlIHRoYXQgaXMgb25seSBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vYCBhbmQgZmlndXJlIG91dCB3aGF0IGRyaXZlcnMgYWN0dWFsbHkgdXRpbGl6ZSBgbGlid3hgLiBgZ3JlcHBlcmAgb3IgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB3aWxsIGJlIG15IHRvb2xzIG9mIGNob2ljZSBoZXJlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyAqdXNpbmcqIHRoaXMgbGlicmFyeSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuIFRoYXQgd2lsbCBoZWxwIG1lIG1ha2UgYSBkZXRlcm1pbmF0aW9uIG9uIHdoZXRoZXIgZnV6emluZyBpcyBldmVuIHZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjMxOjI2LjkyMTU5NTMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5MDc3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTElCV1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTc9aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoxOTpjb25maWcgTElCV1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTMxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzI6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTMzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01NS1cXHRzZWxlY3QgUENTX1hQQ1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTY6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzI6XFx0c2VsZWN0IExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODgtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4OTpcXHRzZWxlY3QgTElCV1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4L1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVFhHQkUpICs9IHR4Z2JlL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjMxOjI3LjI1OTUyNzMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODI1OTU4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBcdTAwMjYgRGF0YSBHYXRoZXJpbmcqKlxuXG5Pa2F5LCBsZXQncyBzdGFydCBieSBjbGFyaWZ5aW5nIGV4YWN0bHkgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBhY3JvbnltcyBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgYW5kIE5HQkVWRiBuZWVkIGltbWVkaWF0ZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhlc2UgcmVwcmVzZW50LCBzbyBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IHRlY2hub2xvZ3kgdGhleSByZWZlciB0by4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzIG9yIEV0aGVybmV0IGNvbnRyb2xsZXJzLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTmV4dCBzdGVwOiBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgaW5zaWdodHMgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZXNlIGVsZW1lbnRzLiBUaGF0IEtjb25maWcgZmlsZSBpcyBhIHRyZWFzdXJlIHRyb3ZlOyBpdCBzaG91bGQgcHJvdmlkZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDc6MzE6NTAuMDg1NDg3OTI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXYW5neHVuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuZ3h1biBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTM6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNDpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgV2FuZ3h1bihSKSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1dBTkdYVU5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIExJQldYXFxuICAyMDpcXHRcXHR0cmlzdGF0ZVxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMjQ6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBOR0JFXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICAzNTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgMzg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNDE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgVFhHQkVcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0OTpcXHRcXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuICA1MDpcXHRcXHRzZWxlY3QgUkVHTUFQXFxuICA1MTpcXHRcXHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxcbiAgNTI6XFx0XFx0c2VsZWN0IFNGUFxcbiAgNTM6XFx0XFx0c2VsZWN0IEdQSU9MSUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcXG4gIDU1OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgNTY6XFx0XFx0c2VsZWN0IExJQldYXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXFxuICA1OTpcXHRcXHQgIGFkYXB0ZXJzLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgNjI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXFxuICA2NjpcXHRcXG4gIDY3OlxcdGNvbmZpZyBUWEdCRVZGXFxuICA2ODpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgNjk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNzI6XFx0XFx0c2VsZWN0IExJQldYXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcXG4gIDc1OlxcdFxcdCAgV1g1WFhYLCBXWDVYWFhBTC5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgZm9ybWVybHkgbmFtZWQgdHhnYmV2Zi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDgwOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgODM6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gIDg0OlxcdFxcbiAgODU6XFx0Y29uZmlnIE5HQkVWRlxcbiAgODY6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDg3OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgODg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgODk6XFx0XFx0c2VsZWN0IExJQldYXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBXWDE4NjAsIFdYMTg2MEFMLlxcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCBuZ2JldmYuXFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA5NjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIE1TSS1YIGludGVycnVwdFxcbiAgOTk6XFx0XFx0ICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS5cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzozMTo1MC4wODU1NzEwODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTcxOTY2NDU5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IFdhbmd4dW4gRXRoZXJuZXQgUENJZSBhZGFwdGVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBkcml2ZXJzIChgdHhnYmVgLCBgbmdiZWAsIGB0eGdiZXZmYCwgYG5nYmV2ZmAsIGFuZCBgbGlid3hgKS4gSSBrbm93IHRoZXNlIGFyZSBmb3IgMUdiRSwgMTAvMjUvNDBHYkUgUENJZSBuZXR3b3JrIGNhcmRzIGFuZCB0aGVpciBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbnMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUg4oCTIHRoZSBraW5kIHVzZWQgZm9yIGZ1enppbmcg4oCTIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBXYW5neHVuIGRldmljZXMuIEl0IHN1cHBvcnRzIG90aGVyIGFkYXB0ZXJzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGV0Yy4sIGJ1dCBub3QgV2FuZ3h1bi5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IGlmIGl0J3M6XG5cbiogICBDb2RlIGZvciBoYXJkd2FyZSBub3QgZW11bGF0ZWQgKGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0pXG4qICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcyB0aGF0ICpuZWVkKiBwaHlzaWNhbCBoYXJkd2FyZS5cbiogICBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLlxuXG5NeSBhc3Nlc3NtZW50IGlzIGNsZWFyOiBXYW5neHVuIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgc2Vjb25kIGNhdGVnb3J5LiBUaGVzZSBhcmUgcGh5c2ljYWwgUENJZSBOSUNzLCBtYWRlIGJ5IGEgQ2hpbmVzZSB2ZW5kb3IuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbGlid3hgLCB0aGUgc2hhcmVkIGxpYnJhcnkgdXNlZCBieSB0aGVzZSBXYW5neHVuIGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiBmaWxlcyBsaWtlIGB3eF9lcnIuY2AsIGB3eF9ldGh0b29sLmNgLCBhbmQgc28gb24uXG5cblRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyLiBUaGlzIGlzIGEgKnJlcXVpcmVtZW50KiBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRS4gVGhpcyBtYWtlcyB0aGUgY29kZSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBlbXB0eSBhbmQgd2UgY2FuIGlnbm9yZSBhbnkgZW5hYmxlIGNvbmZpZ3MuIEl04oCZcyBhIGNsZWFuIGFuZCBjb25jaXNlIHJlYXNvbiB0byBtb3ZlIG9uIHRvIHNvbWV0aGluZyBlbHNlLiBUaW1lIHRvIG1vdmUgb24gYW5kIGxldOKAmXMgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyOSwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA3OjM0OjI3LjI4MjIxOTg4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbGlid3gsIHRoZSBzaGFyZWQgbGlicmFyeSBmb3IgV2FuZ3h1biBFdGhlcm5ldCBQQ0llIE5JQyBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbmdiZXZmLCB0eGdiZXZmKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxpYnd4LCB0aGUgc2hhcmVkIGxpYnJhcnkgZm9yIFdhbmd4dW4gRXRoZXJuZXQgUENJZSBOSUMgZHJpdmVycyAobmdiZSwgdHhnYmUsIG5nYmV2ZiwgdHhnYmV2ZikuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBXYW5neHVuIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNzozNDoyNy4yODIyNDg0OTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7b9wq[1] Phase: Running StartedAt: 2026-08-30 07:34:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b9wq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-30 07:34:38 +0000 UTC FinishedAt: 2026-08-30 07:34:42 +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,}