Name: series-workflow86zrz Phase: Failed StartedAt: 2026-09-01 19:26:23 +0000 UTC FinishedAt: 2026-09-01 20:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86zrz[0] Phase: Succeeded StartedAt: 2026-09-01 19:26:23 +0000 UTC FinishedAt: 2026-09-01 20:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86zrz[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 19:26:23 +0000 UTC FinishedAt: 2026-09-01 20:13:50 +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+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjhmYjU4NTM1NWQwMjc2Y2VhZTdlMzFkYjZhZWZiODU0ZWRlYTM3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjA6MTI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuQEAgLTUyOSw2ICYjNDM7NTI5LDggQEAgc3RydWN0IGF0aDEya19zdGEge1xuIFx0ZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlO1xuIFxuIFx0Ym9vbCBlbmFibGVfNGFkZHI7XG4mIzQzO1xuJiM0MztcdGJvb2wgaXNfYXV0aG9yaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX0hBTEZfMjBNSFpfQldcdDEwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmNcbmluZGV4IDY4OTY4Zjk2YjRmMWIuLjcyMDY5NjQwYmQzODggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG5AQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCBhdGgxMmtfdXBkYXRlX3Blcl9wZWVyX3R4X3N0YXRzKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHVzcl9zdGF0cy1cdTAwM2VwZWVyX2lkKTtcbiBcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRpZiAoIWF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbkBAIC0xOTUsMzUgJiM0MzsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyX1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gfVxuIFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKVxuLXtcbi1cdHN0cnVjdCBhdGgxMmtfc3RhICphaHN0YTtcbi1cdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xuLVxuLVx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksXG4tXHRcdFx0IFwmIzM0O2F0aDEya19kcF9saW5rX3BlZXIgdG8gYXRoMTJrX2xpbmtfc3RhIGNhbGxlZCB3aXRob3V0IHJjdSBsb2NrXCYjMzQ7KTtcbi1cbi1cdGlmICghcGVlci1cdTAwM2VzdGEpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHBlZXItXHUwMDNlc3RhKTtcbi1cdGlmIChwZWVyLVx1MDAzZW1sX2lkIFx1MDAyNiBBVEgxMktfUEVFUl9NTF9JRF9WQUxJRCkge1xuLVx0XHRpZiAoIShhaHN0YS1cdTAwM2VsaW5rc19tYXAgXHUwMDI2IEJJVChwZWVyLVx1MDAzZWxpbmtfaWQpKSkge1xuLVx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbiYjMzk7dCBmb3VuZCBpbiBTVEEgbGlua19tYXAgMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICBwZWVyLVx1MDAzZWFkZHIsIHBlZXItXHUwMDNlcGVlcl9pZCwgcGVlci1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0ICAgIGFoc3RhLVx1MDAzZWxpbmtzX21hcCk7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0YXJzdGEgPSByY3VfZGVyZWZlcmVuY2UoYWhzdGEtXHUwMDNlbGlua1twZWVyLVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKCFhcnN0YSlcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdGFyc3RhID0gIFx1MDAyNmFoc3RhLVx1MDAzZWRlZmxpbms7XG4tXHR9XG4tXHRyZXR1cm4gYXJzdGE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGRyX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKVxuIHtcbiBcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkcC1cdTAwM2VhYjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG5pbmRleCAzNTAzODQwYjAzMjk1Li5kMDFlZjFhZWE0OGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG5AQCAtNzAsNyAmIzQzOzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyO1xuIFx0aW50IHZkZXZfaWQ7XG4gXHR1OCBhZGRyW0VUSF9BTEVOXTtcbkBAIC04MSw3ICYjNDM7ODAsNiBAQCBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXG4gXHRzdHJ1Y3QgcHBkdV91c2VyX2RlbGF5YmEgcHBkdV9zdGF0c19kZWxheWJhO1xuIFx0Ym9vbCBkZWxheWJhX2ZsYWc7XG4tXHRib29sIGlzX2F1dGhvcml6ZWQ7XG4gXHRib29sIG1sbztcbiBcdC8qIHByb3RlY3RlZCBieSBhYi1cdTAwM2VkYXRhX2xvY2sgKi9cbiBcbkBAIC0xNTksOCAmIzQzOzE1Nyw2IEBAIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9hc3Qoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCBhc3RfaGFzaCk7XG4gc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKlxuIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZGV2X2FuZF9hZGRyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB1OCBwZGV2X2lkeCxcbiBcdFx0XHRcdFx0ICBjb25zdCB1OCAqYWRkcik7XG4tc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXRoMTJrX2RwX2xpbmtfcGVlcl90b19saW5rX3N0YShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpO1xuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKTtcbiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfdGJsX2Rlc3Ryb3koc3RydWN0IGF0aDEya19kcCAqZHApO1xuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX2FkZChzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbkBAIC0xODMsNCAmIzQzOzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX3BlZXJfZml4dXBfcGVlcl9pZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBjb25zdCB1OCAqcGVlcl9hZGRyLFxuIFx0XHRcdFx0IHUxNiBwZWVyX2lkKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdGEgKl9fbXVzdF9jaGVja1xuJiM0MzthdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwZWVyID8gcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcbiYjNDM7YXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlZHBfcGVlciA/XG4mIzQzO1x0XHRsaW5rX3BlZXItXHUwMDNlZHBfcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuJiM0Mzt9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li5jZGI3OTU1NjdlOGM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbkBAIC0xMzgyLDcgJiM0MzsxMzgyLDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCByeGNiLVx1MDAzZXBlZXJfaWQpO1xuIFxuLVx0cHVic3RhID0gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbiYjNDM7XHRwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFxuIFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuIFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTEyMzIsNyAmIzQzOzEyMzIsNyBAQCB2b2lkIGF0aDEya19tYWNfcGVlcl9jbGVhbnVwX2FsbChzdHJ1Y3QgYXRoMTJrICphcilcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4gXHRcdC8qIFNraXAgUnggVElEIGNsZWFudXAgZm9yIHNlbGYgcGVlciAqL1xuLVx0XHRpZiAocGVlci1cdTAwM2VzdGEgXHUwMDI2XHUwMDI2IHBlZXItXHUwMDNlZHBfcGVlcilcbiYjNDM7XHRcdGlmIChhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpXG4gXHRcdFx0YXRoMTJrX2RwX3J4X3BlZXJfdGlkX2NsZWFudXAoYXIsIHBlZXIpO1xuIFxuIFx0XHQvKiBjbGVhbnVwIGRwIHBlZXIgKi9cbkBAIC0zOTE0LDExICYjNDM7MzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbi1cdGJvb2wgaXNfYXV0aCA9IGZhbHNlO1xuIFx0dTMyIGhlbW9kZSA9IDA7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG5AQCAtNDAyMiwxNyAmIzQzOzQwMTksOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHQgICBcJiMzNDttYWMgdmRldiAlZCB1cCAoYXNzb2NpYXRlZCkgYnNzaWQgJXBNIGFpZCAlZFxcblwmIzM0OyxcbiBcdFx0ICAgYXJ2aWYtXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXHUwMDNlYnNzaWQsIHZpZi1cdTAwM2VjZmcuYWlkKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnZpZi1cdTAwM2Vic3NpZCk7XG4tXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2Vpc19hdXRob3JpemVkKVxuLVx0XHRpc19hdXRoID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuLVxuIFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXG4tXHRpZiAoaXNfYXV0aCkge1xuJiM0MztcdGlmIChhaHN0YS1cdTAwM2Vpc19hdXRob3JpemVkKSB7XG4gXHRcdHJldCA9IGF0aDEya193bWlfc2V0X3BlZXJfcGFyYW0oYXIsIGFydmlmLVx1MDAzZWJzc2lkLFxuIFx0XHRcdFx0XHRcdGFydmlmLVx1MDAzZXZkZXZfaWQsXG4gXHRcdFx0XHRcdFx0V01JX1BFRVJfQVVUSE9SSVpFLFxuQEAgLTcwMDUsMTAgJiM0Mzs2OTkzLDkgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21hY19zdGF0aW9uX3Bvc3RfcmVtb3ZlKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV92ZGV2X2FuZF9hZGRyKGRwLCBhcnZpZi1cdTAwM2V2ZGV2X2lkLFxuIFx0XHRcdFx0XHRcdFx0IGFyc3RhLVx1MDAzZWFkZHIpO1xuLVx0aWYgKHBlZXIgXHUwMDI2XHUwMDI2IHBlZXItXHUwMDNlc3RhID09IHN0YSkge1xuJiM0MztcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikgPT0gc3RhKSB7XG4gXHRcdGF0aDEya193YXJuKGFyLVx1MDAzZWFiLCBcJiMzNDtGb3VuZCBwZWVyIGVudHJ5ICVwTSBuIHZkZXYgJWkgYWZ0ZXIgaXQgd2FzIHN1cHBvc2VkbHkgcmVtb3ZlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgdmlmLVx1MDAzZWFkZHIsIGFydmlmLVx1MDAzZXZkZXZfaWQpO1xuLVx0XHRwZWVyLVx1MDAzZXN0YSA9IE5VTEw7XG4gXG4gXHRcdGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTtcbiBcdFx0YXItXHUwMDNlbnVtX3BlZXJzLS07XG5AQCAtNzAyMSwyMCAmIzQzOzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4tXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiYjNDM7XHRhcnN0YS1cdTAwM2VhaHN0YS1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4gXG4gXHQvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tXG4gXHQgKiBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQgdG8gSUVFRTgwMjExX1NUQV9BU1NPQywgc2luY2UgYWZ0ZXJcbkBAIC03MDU2LDIxICYjNDM7NzAzNCwxMiBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc3RhdGlvbl9hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YSlcbiB7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBhdGgxMmtfYWh2aWZfdG9fdmlmKGFydmlmLVx1MDAzZWFodmlmKTtcbiBcdGludCByZXQ7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cdTAwM2VhYik7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF93aXBoeShhdGgxMmtfYXJfdG9faHcoYXIpLVx1MDAzZXdpcGh5KTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnN0YS1cdTAwM2VhZGRyKTtcbi1cdGlmIChwZWVyKVxuLVx0XHRwZWVyLVx1MDAzZWlzX2F1dGhvcml6ZWQgPSB0cnVlO1xuLVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4mIzQzO1x0YXJzdGEtXHUwMDNlYWhzdGEtXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XG4gXG4gXHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjYgYXJ2aWYtXHUwMDNlaXNfdXApIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJzdGEtXHUwMDNlYWRkcixcbkBAIC0xMzI5Miw2ICYjNDM7MTMyNjEsNyBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhblxuIFx0Ym9vbCBlaHRfZml4ZWRfcmF0ZSA9IGZhbHNlLCBoZV9maXhlZF9yYXRlID0gZmFsc2UsIHZodF9maXhlZF9yYXRlID0gZmFsc2U7XG4gXHRjb25zdCB1MTYgKnZodF9tY3NfbWFzaywgKmhlX21jc19tYXNrLCAqZWh0X21jc19tYXNrO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyLCAqdG1wO1xuIFx0dTggdmh0X25zcywgaGVfbnNzLCBlaHRfbnNzO1xuIFx0aW50IHJldCA9IHRydWU7XG5AQCAtMTMzMjEsOCAmIzQzOzEzMjkxLDkgQEAgYXRoMTJrX21hY192YWxpZGF0ZV9maXhlZF9yYXRlX3NldHRpbmdzKHN0cnVjdCBhdGgxMmsgKmFyLCBlbnVtIG5sODAyMTFfYmFuZCBiYW5cbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSkge1xuLVx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0c3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuJiM0MztcdFx0aWYgKHN0YSkge1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuQEAgLTI2Niw4ICYjNDM7MjY2LDYgQEAgaW50IGF0aDEya19wZWVyX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrICphciwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHR9XG4gXG4gXHRwZWVyLVx1MDAzZXBkZXZfaWR4ID0gYXItXHUwMDNlcGRldl9pZHg7XG4tXHRwZWVyLVx1MDAzZXN0YSA9IHN0YTtcbi1cbiBcdGlmICh2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4gXHRcdGRwX2xpbmtfdmlmLVx1MDAzZWFzdF9oYXNoID0gcGVlci1cdTAwM2Vhc3RfaGFzaDtcbiBcdFx0ZHBfbGlua192aWYtXHUwMDNlYXN0X2lkeCA9IHBlZXItXHUwMDNlaHdfcGVlcl9pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuaW5kZXggMDE2YjBjMzhlNTFlMi4uNzFiODUzOTRkNDg3NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcbkBAIC0zMzYyLDcgJiM0MzszMzYyLDcgQEAgYXRoMTJrX3dpZmk3X2RwX21vbl9zcm5nX3Byb2Nlc3Moc3RydWN0IGF0aDEya19wZGV2X2RwICpwZGV2X2RwLCBpbnQgKmJ1ZGdldCxcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChwZGV2X2RwLCBwcGR1X2luZm8tXHUwMDNlcGVlcl9pZCk7XG4tXHRcdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCYjMzQ7ZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBtb25pdG9yIHBlZXJfaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICBwcGR1X2luZm8tXHUwMDNlcGVlcl9pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCA1ODdkNThlZWNjZmE1Li4yYTA1ZTAzMTk0YWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC01NTIsMTMgJiM0Mzs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHR9XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRzdGF0dXMuc3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuJiM0MztcdGlmICghc3RhdHVzLnN0YSkge1xuIFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdFx0ICAgXCYjMzQ7ZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwmIzM0OywgcGVlcl9pZCk7XG4gXHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBtc2R1KTtcbiBcdFx0Z290byBleGl0O1xuLVx0fSBlbHNlIHtcbi1cdFx0c3RhdHVzLnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuIFx0fVxuIFxuIFx0c3RhdHVzLmluZm8gPSBpbmZvO1xuQEAgLTYyNyw3ICYjNDM7NjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdGludCByZXQ7XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCB0cy1cdTAwM2VwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4mIzQzO1x0aWYgKCFzdGEpIHtcbiBcdFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EUF9UWCxcbiBcdFx0XHQgICBcJiMzNDtmYWlsZWQgdG8gZmluZCB0aGUgcGVlciBieSBpZCAldVxcblwmIzM0OywgdHMtXHUwMDNlcGVlcl9pZCk7XG4gXHRcdHJldHVybjtcbkBAIC02MzUsNyAmIzQzOzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXG4tXHRzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbiBcdGFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShzdGEpO1xuIFx0YXJzdGEgPSBcdTAwMjZhaHN0YS1cdTAwM2VkZWZsaW5rO1xuIFxuQEAgLTc1Miw2ICYjNDM7NzUxLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yYXRlX3N0YXR1cyBzdGF0dXNfcmF0ZSA9IHt9O1xuIFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgcmF0ZV9pbmZvIHJhdGU7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UodHMtXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XG4gXHRcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xuQEAgLTg0Niw3ICYjNDM7ODQ2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0YXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKGRwX3BkZXYsIHRzKTtcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLVx1MDAzZXBlZXJfaWQpO1xuLVx0aWYgKCFwZWVyIHx8ICFwZWVyLVx1MDAzZXN0YSkge1xuJiM0MztcdHN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTtcbiYjNDM7XHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZXJyKGFiLFxuIFx0XHRcdCAgIFwmIzM0O2RwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgdHMtXHUwMDNlcGVlcl9pZCk7XG5AQCAtODU0LDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHN0YXR1cy5zdGEgPSBwZWVyLVx1MDAzZXN0YTtcbiYjNDM7XHRzdGF0dXMuc3RhID0gc3RhO1xuIFx0c3RhdHVzLmluZm8gPSBpbmZvO1xuIFx0c3RhdHVzLnNrYiA9IG1zZHU7XG4gXHRyYXRlID0gcGVlci1cdTAwM2VsYXN0X3R4cmF0ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuaW5kZXggZDUxNjBhZjYwZTAwZC4uOWJlZDg1MmY2NmM1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbkBAIC03MzczLDcgJiM0Mzs3MzczLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuJiM0MztcdFx0cHVic3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbiBcdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4gXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjhmYjU4NTM1NWQwMjc2Y2VhZTdlMzFkYjZhZWZiODU0ZWRlYTM3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMjA6MTI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCmluZGV4IGE5OGZjNmUwNjk5ZDcuLmEwNDc1N2EwMzhmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCkBAIC01MjksNiAmIzQzOzUyOSw4IEBAIHN0cnVjdCBhdGgxMmtfc3RhIHsKIAllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7CiAKIAlib29sIGVuYWJsZV80YWRkcjsKJiM0MzsKJiM0MzsJYm9vbCBpc19hdXRob3JpemVkOwogfTsKIAogI2RlZmluZSBBVEgxMktfSEFMRl8yME1IWl9CVwkxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmMKaW5kZXggNjg5NjhmOTZiNGYxYi4uNzIwNjk2NDBiZDM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jCkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIGF0aDEya191cGRhdGVfcGVyX3BlZXJfdHhfc3RhdHMoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LAogCXJjdV9yZWFkX2xvY2soKTsKIAlwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCB1c3Jfc3RhdHMtJmd0O3BlZXJfaWQpOwogCi0JaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJaWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCkBAIC0xOTUsMzUgJiM0MzsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyXwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwogfQogCi1zdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphdGgxMmtfZHBfbGlua19wZWVyX3RvX2xpbmtfc3RhKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCi0JCQkJCQkJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpCi17Ci0Jc3RydWN0IGF0aDEya19zdGEgKmFoc3RhOwotCXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhOwotCi0JUkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksCi0JCQkgJiMzNDthdGgxMmtfZHBfbGlua19wZWVyIHRvIGF0aDEya19saW5rX3N0YSBjYWxsZWQgd2l0aG91dCByY3UgbG9jayYjMzQ7KTsKLQotCWlmICghcGVlci0mZ3Q7c3RhKQotCQlyZXR1cm4gTlVMTDsKLQotCWFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShwZWVyLSZndDtzdGEpOwotCWlmIChwZWVyLSZndDttbF9pZCAmYW1wOyBBVEgxMktfUEVFUl9NTF9JRF9WQUxJRCkgewotCQlpZiAoIShhaHN0YS0mZ3Q7bGlua3NfbWFwICZhbXA7IEJJVChwZWVyLSZndDtsaW5rX2lkKSkpIHsKLQkJCWF0aDEya193YXJuKGFiLCAmIzM0O3BlZXIgJXBNIGlkICVkIGxpbmtfaWQgJWQgY2FuJiMzOTt0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XG4mIzM0OywKLQkJCQkgICAgcGVlci0mZ3Q7YWRkciwgcGVlci0mZ3Q7cGVlcl9pZCwgcGVlci0mZ3Q7bGlua19pZCwKLQkJCQkgICAgYWhzdGEtJmd0O2xpbmtzX21hcCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlhcnN0YSA9IHJjdV9kZXJlZmVyZW5jZShhaHN0YS0mZ3Q7bGlua1twZWVyLSZndDtsaW5rX2lkXSk7Ci0JCWlmICghYXJzdGEpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlhcnN0YSA9ICAmYW1wO2Foc3RhLSZndDtkZWZsaW5rOwotCX0KLQlyZXR1cm4gYXJzdGE7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGRyX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKQogewogCXN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkcC0mZ3Q7YWI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCmluZGV4IDM1MDM4NDBiMDMyOTUuLmQwMWVmMWFlYTQ4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCkBAIC03MCw3ICYjNDM7NzAsNiBAQCBERUNMQVJFX0VXTUEoYXZnX3Jzc2ksIDEwLCA4KQogCiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyOwogCWludCB2ZGV2X2lkOwogCXU4IGFkZHJbRVRIX0FMRU5dOwpAQCAtODEsNyAmIzQzOzgwLDYgQEAgc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgewogCiAJc3RydWN0IHBwZHVfdXNlcl9kZWxheWJhIHBwZHVfc3RhdHNfZGVsYXliYTsKIAlib29sIGRlbGF5YmFfZmxhZzsKLQlib29sIGlzX2F1dGhvcml6ZWQ7CiAJYm9vbCBtbG87CiAJLyogcHJvdGVjdGVkIGJ5IGFiLSZndDtkYXRhX2xvY2sgKi8KIApAQCAtMTU5LDggJiM0MzsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpOwogc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKgogYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BkZXZfYW5kX2FkZHIoc3RydWN0IGF0aDEya19kcCAqZHAsIHU4IHBkZXZfaWR4LAogCQkJCQkgIGNvbnN0IHU4ICphZGRyKTsKLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYiwKLQkJCQkJCQlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcik7CiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7CiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfdGJsX2Rlc3Ryb3koc3RydWN0IGF0aDEya19kcCAqZHApOwogaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLApAQCAtMTgzLDQgJiM0MzsxNzksMTcgQEAgYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHUxNiBwZWVyX2lkKTsKIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTsKIGludCBhdGgxMmtfZHBfcGVlcl9maXh1cF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGNvbnN0IHU4ICpwZWVyX2FkZHIsCiAJCQkJIHUxNiBwZWVyX2lkKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2sKJiM0MzthdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZWVyID8gcGVlci0mZ3Q7c3RhIDogTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqX19tdXN0X2NoZWNrCiYjNDM7YXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gbGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtkcF9wZWVyID8KJiM0MzsJCWxpbmtfcGVlci0mZ3Q7ZHBfcGVlci0mZ3Q7c3RhIDogTlVMTDsKJiM0Mzt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwppbmRleCA4ZmEwZTkwYjQ1MzE2Li5jZGI3OTU1NjdlOGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCkBAIC0xMzgyLDcgJiM0MzsxMzgyLDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWMKIAogCXBlZXIgPSBhdGgxMmtfZHBfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCByeGNiLSZndDtwZWVyX2lkKTsKIAotCXB1YnN0YSA9IHBlZXIgPyBwZWVyLSZndDtzdGEgOiBOVUxMOwomIzQzOwlwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpOwogCiAJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKIAlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jCmluZGV4IDk5YmY1Y2Y3OWQxMDIuLjRlYzJlZTFiMTdmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYwpAQCAtMTIzMiw3ICYjNDM7MTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKQogCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVlciwgdG1wLCAmYW1wO2RwLSZndDtwZWVycywgbGlzdCkgewogCQkvKiBTa2lwIFJ4IFRJRCBjbGVhbnVwIGZvciBzZWxmIHBlZXIgKi8KLQkJaWYgKHBlZXItJmd0O3N0YSAmYW1wOyZhbXA7IHBlZXItJmd0O2RwX3BlZXIpCiYjNDM7CQlpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKQogCQkJYXRoMTJrX2RwX3J4X3BlZXJfdGlkX2NsZWFudXAoYXIsIHBlZXIpOwogCiAJCS8qIGNsZWFudXAgZHAgcGVlciAqLwpAQCAtMzkxNCwxMSAmIzQzOzM5MTQsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLAogCXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7CiAJc3RydWN0IGF0aDEya19zdGEgKmFoc3RhOwotCXN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyOwotCWJvb2wgaXNfYXV0aCA9IGZhbHNlOwogCXUzMiBoZW1vZGUgPSAwOwogCWludCByZXQ7Ci0Jc3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItJmd0O2FiKTsKIAogCWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGF0aDEya19hcl90b19odyhhciktJmd0O3dpcGh5KTsKIApAQCAtNDAyMiwxNyAmIzQzOzQwMTksOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLAogCQkgICAmIzM0O21hYyB2ZGV2ICVkIHVwIChhc3NvY2lhdGVkKSBic3NpZCAlcE0gYWlkICVkXG4mIzM0OywKIAkJICAgYXJ2aWYtJmd0O3ZkZXZfaWQsIGJzc19jb25mLSZndDtic3NpZCwgdmlmLSZndDtjZmcuYWlkKTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKLQotCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtJmd0O3ZkZXZfaWQsCi0JCQkJCQkJIGFydmlmLSZndDtic3NpZCk7Ci0JaWYgKHBlZXIgJmFtcDsmYW1wOyBwZWVyLSZndDtpc19hdXRob3JpemVkKQotCQlpc19hdXRoID0gdHJ1ZTsKLQotCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwotCiAJLyogQXV0aG9yaXplIEJTUyBQZWVyICovCi0JaWYgKGlzX2F1dGgpIHsKJiM0MzsJaWYgKGFoc3RhLSZndDtpc19hdXRob3JpemVkKSB7CiAJCXJldCA9IGF0aDEya193bWlfc2V0X3BlZXJfcGFyYW0oYXIsIGFydmlmLSZndDtic3NpZCwKIAkJCQkJCWFydmlmLSZndDt2ZGV2X2lkLAogCQkJCQkJV01JX1BFRVJfQVVUSE9SSVpFLApAQCAtNzAwNSwxMCAmIzQzOzY5OTMsOSBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3N0YXRpb25fcG9zdF9yZW1vdmUoc3RydWN0IGF0aDEyayAqYXIsCiAKIAlwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLSZndDt2ZGV2X2lkLAogCQkJCQkJCSBhcnN0YS0mZ3Q7YWRkcik7Ci0JaWYgKHBlZXIgJmFtcDsmYW1wOyBwZWVyLSZndDtzdGEgPT0gc3RhKSB7CiYjNDM7CWlmIChwZWVyICZhbXA7JmFtcDsgYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpID09IHN0YSkgewogCQlhdGgxMmtfd2Fybihhci0mZ3Q7YWIsICYjMzQ7Rm91bmQgcGVlciBlbnRyeSAlcE0gbiB2ZGV2ICVpIGFmdGVyIGl0IHdhcyBzdXBwb3NlZGx5IHJlbW92ZWRcbiYjMzQ7LAogCQkJICAgIHZpZi0mZ3Q7YWRkciwgYXJ2aWYtJmd0O3ZkZXZfaWQpOwotCQlwZWVyLSZndDtzdGEgPSBOVUxMOwogCiAJCWF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTsKIAkJYXItJmd0O251bV9wZWVycy0tOwpAQCAtNzAyMSwyMCAmIzQzOzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCSAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsCiAJCQkJCSAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpCiB7Ci0Jc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci0mZ3Q7YWIpOwogCiAJbG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS0mZ3Q7d2lwaHkpOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwotCi0JcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV92ZGV2X2FuZF9hZGRyKGRwLCBhcnZpZi0mZ3Q7dmRldl9pZCwKLQkJCQkJCQkgYXJzdGEtJmd0O2FkZHIpOwotCWlmIChwZWVyKQotCQlwZWVyLSZndDtpc19hdXRob3JpemVkID0gZmFsc2U7Ci0KLQlzcGluX3VubG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKJiM0MzsJYXJzdGEtJmd0O2Foc3RhLSZndDtpc19hdXRob3JpemVkID0gZmFsc2U7CiAKIAkvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tCiAJICogSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEIHRvIElFRUU4MDIxMV9TVEFfQVNTT0MsIHNpbmNlIGFmdGVyCkBAIC03MDU2LDIxICYjNDM7NzAzNCwxMiBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc3RhdGlvbl9hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCXN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLAogCQkJCQlzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YSkKIHsKLQlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi0mZ3Q7YWh2aWYpOwogCWludCByZXQ7Ci0Jc3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItJmd0O2FiKTsKIAogCWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGF0aDEya19hcl90b19odyhhciktJmd0O3dpcGh5KTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKLQotCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtJmd0O3ZkZXZfaWQsCi0JCQkJCQkJIGFyc3RhLSZndDthZGRyKTsKLQlpZiAocGVlcikKLQkJcGVlci0mZ3Q7aXNfYXV0aG9yaXplZCA9IHRydWU7Ci0KLQlzcGluX3VubG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKJiM0MzsJYXJzdGEtJmd0O2Foc3RhLSZndDtpc19hdXRob3JpemVkID0gdHJ1ZTsKIAogCWlmICh2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmYW1wOyZhbXA7IGFydmlmLSZndDtpc191cCkgewogCQlyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnN0YS0mZ3Q7YWRkciwKQEAgLTEzMjkyLDYgJiM0MzsxMzI2MSw3IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuCiAJYm9vbCBlaHRfZml4ZWRfcmF0ZSA9IGZhbHNlLCBoZV9maXhlZF9yYXRlID0gZmFsc2UsIHZodF9maXhlZF9yYXRlID0gZmFsc2U7CiAJY29uc3QgdTE2ICp2aHRfbWNzX21hc2ssICpoZV9tY3NfbWFzaywgKmVodF9tY3NfbWFzazsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlciwgKnRtcDsKIAl1OCB2aHRfbnNzLCBoZV9uc3MsIGVodF9uc3M7CiAJaW50IHJldCA9IHRydWU7CkBAIC0xMzMyMSw4ICYjNDM7MTMyOTEsOSBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhbgogCXJjdV9yZWFkX2xvY2soKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgJmFtcDtkcC0mZ3Q7cGVlcnMsIGxpc3QpIHsKLQkJaWYgKHBlZXItJmd0O3N0YSkgewotCQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocGVlci0mZ3Q7c3RhLSZndDtsaW5rW2xpbmtfaWRdKTsKJiM0MzsJCXN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJCWlmIChzdGEpIHsKJiM0MzsJCQlsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19pZF0pOwogCQkJaWYgKCFsaW5rX3N0YSkgewogCQkJCXJldCA9IGZhbHNlOwogCQkJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKQEAgLTI2Niw4ICYjNDM7MjY2LDYgQEAgaW50IGF0aDEya19wZWVyX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrICphciwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsCiAJfQogCiAJcGVlci0mZ3Q7cGRldl9pZHggPSBhci0mZ3Q7cGRldl9pZHg7Ci0JcGVlci0mZ3Q7c3RhID0gc3RhOwotCiAJaWYgKHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWRwX2xpbmtfdmlmLSZndDthc3RfaGFzaCA9IHBlZXItJmd0O2FzdF9oYXNoOwogCQlkcF9saW5rX3ZpZi0mZ3Q7YXN0X2lkeCA9IHBlZXItJmd0O2h3X3BlZXJfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uYwppbmRleCAwMTZiMGMzOGU1MWUyLi43MWI4NTM5NGQ0ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmMKQEAgLTMzNjIsNyAmIzQzOzMzNjIsNyBAQCBhdGgxMmtfd2lmaTdfZHBfbW9uX3NybmdfcHJvY2VzcyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKnBkZXZfZHAsIGludCAqYnVkZ2V0LAogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLSZndDtwZWVyX2lkKTsKLQkJaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJCWlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7CiAJCQlhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0RBVEEsCiAJCQkJICAgJiMzNDtmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIG1vbml0b3IgcGVlcl9pZCAlZFxuJiMzNDssCiAJCQkJICAgcHBkdV9pbmZvLSZndDtwZWVyX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwppbmRleCA1ODdkNThlZWNjZmE1Li4yYTA1ZTAzMTk0YWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCkBAIC01NTIsMTMgJiM0Mzs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJfQogCiAJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcGVlcl9pZCk7Ci0JaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJc3RhdHVzLnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJaWYgKCFzdGF0dXMuc3RhKSB7CiAJCWF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSwKIAkJCSAgICYjMzQ7ZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxuJiMzNDssIHBlZXJfaWQpOwogCQlpZWVlODAyMTFfZnJlZV90eHNrYihhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbXNkdSk7CiAJCWdvdG8gZXhpdDsKLQl9IGVsc2UgewotCQlzdGF0dXMuc3RhID0gcGVlci0mZ3Q7c3RhOwogCX0KIAogCXN0YXR1cy5pbmZvID0gaW5mbzsKQEAgLTYyNyw3ICYjNDM7NjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlpbnQgcmV0OwogCiAJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtJmd0O3BlZXJfaWQpOwotCWlmICghcGVlciB8fCAhcGVlci0mZ3Q7c3RhKSB7CiYjNDM7CXN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJaWYgKCFzdGEpIHsKIAkJYXRoMTJrX2RiZyhkcC0mZ3Q7YWIsIEFUSDEyS19EQkdfRFBfVFgsCiAJCQkgICAmIzM0O2ZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIGJ5IGlkICV1XG4mIzM0OywgdHMtJmd0O3BlZXJfaWQpOwogCQlyZXR1cm47CkBAIC02MzUsNyAmIzQzOzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAKLQlzdGEgPSBwZWVyLSZndDtzdGE7CiAJYWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7CiAJYXJzdGEgPSAmYW1wO2Foc3RhLSZndDtkZWZsaW5rOwogCkBAIC03NTIsNiAmIzQzOzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfc3RhdHVzIHN0YXR1c19yYXRlID0ge307CiAJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJc3RydWN0IHJhdGVfaW5mbyByYXRlOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCiAJaWYgKFdBUk5fT05fT05DRSh0cy0mZ3Q7YnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7CiAJCS8qIE11c3Qgbm90IGhhcHBlbiAqLwpAQCAtODQ2LDcgJiM0Mzs4NDYsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKGRwX3BkZXYsIHRzKTsKIAogCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLSZndDtwZWVyX2lkKTsKLQlpZiAoIXBlZXIgfHwgIXBlZXItJmd0O3N0YSkgewomIzQzOwlzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7CiYjNDM7CWlmICghc3RhKSB7CiAJCWF0aDEya19lcnIoYWIsCiAJCQkgICAmIzM0O2RwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcbiYjMzQ7LAogCQkJICAgdHMtJmd0O3BlZXJfaWQpOwpAQCAtODU0LDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlzdGF0dXMuc3RhID0gcGVlci0mZ3Q7c3RhOwomIzQzOwlzdGF0dXMuc3RhID0gc3RhOwogCXN0YXR1cy5pbmZvID0gaW5mbzsKIAlzdGF0dXMuc2tiID0gbXNkdTsKIAlyYXRlID0gcGVlci0mZ3Q7bGFzdF90eHJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwppbmRleCBkNTE2MGFmNjBlMDBkLi45YmVkODUyZjY2YzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKQEAgLTczNzMsNyAmIzQzOzczNzMsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXB1YnN0YSA9IHBlZXItJmd0O3N0YTsKJiM0MzsJCXB1YnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKIAkJaWYgKHB1YnN0YSAmYW1wOyZhbXA7IHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKIAkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7CiAJCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBwZWVyLSZndDtsaW5rX2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBmYWxscyB1bmRlciBzcGVjaWZpYyBjYXRlZ29yaWVzLiBJIG5lZWQgdG8gYmUgbWV0aWN1bG91cyBoZXJlOyBhIGZhbHNlIG5lZ2F0aXZlIHdhc3RlcyB2YWx1YWJsZSBmdXp6aW5nIHJlc291cmNlcy4KClRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBkZWxpbmVhdGUgc2V2ZXJhbCBzY2VuYXJpb3M6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgKHByX2VyciwgcHJpbnRrLCB0cmFjZXBvaW50cyksIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50L21hY3JvIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UsIFFFTVUpLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgKFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcWVkLCBhbWRncHUpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgdGhhdCBhcmUgb25seSBleGVjdXRlZCBvbiBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgZmlsZXM6IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaGAsIGBkcF9odHQuY2AsIGBkcF9wZWVyLmNgLCBgZHBfcGVlci5oYCwgYGRwX3J4LmNgLCBgbWFjLmNgLCBgcGVlci5jYCwgYHdpZmk3L2RwX21vbi5jYCwgYHdpZmk3L2RwX3R4LmNgLCBhbmQgYHdtaS5jYC4gUmlnaHQgYXdheSwgdGhlc2UgcG9pbnQgdG8gdGhlIGBhdGgxMmtgIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGF0aDEya2AgaXMgUXVhbGNvbW0mIzM5O3MgSUVFRSA4MDIuMTFiZSAoV2ktRmkgNykgd2lyZWxlc3MgZHJpdmVyLCBzdXBwb3J0aW5nIFBDSWUsIEFIQiwgYW5kIG90aGVyIGludGVyZmFjZXMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBgYXRoMTJrYCBkcml2ZXIgYW5kIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW52b2x2ZSBjb2RlIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlLCBvciwgY2FuIGl0IGJlIHJ1biB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBzdGFuZGFyZCBRRU1VIGNhbiBlbXVsYXRlIHRoZSByZXF1aXJlZCBoYXJkd2FyZSB0byBleGVjdXRlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aHMuIElmIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgcGF0Y2ggaXMgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIHVzaW5nIGBncmVwcGVyYCBvciBieSBkaXJlY3QgaW5zcGVjdGlvbi4gSWYgSSBmaW5kIHRoYXQgdGhlIGNvZGUgcGF0aHMgaW4gdGhlc2UgZmlsZXMgYXJlIHRpZWQgZGlyZWN0bHkgdG8gcGh5c2ljYWwgV2ktRmkgNyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBzdHJhaWdodGZvcndhcmQsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBjYW4gYmUgdGVzdGVkIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZW52aXJvbm1lbnQuIE90aGVyd2lzZSwgdGhlIGZ1enppbmcgd29uJiMzOTt0IGJlIHByb2R1Y3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDEySyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEF0aGVyb3MgV2lyZWxlc3MgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEF0aGVyb3Mgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGF0aDEya2AgZGlyZWN0b3J5LiBUaGF0IGBLY29uZmlnYCBmaWxlIGlzIHR5cGljYWxseSB0aGUgYnJhaW4gb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBmb3IgdGhlIGRyaXZlciBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgb3V0bGluZWQsIGFuZCB0aGUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgZWFjaCBvcHRpb24gaXMgbG9jYXRlZC4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0b3Agd2hlbiBkaWdnaW5nIGludG8gdW5kZXJzdGFuZGluZyBvciBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzLCBvciB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgbW9kdWxlcywgb3IgaGFyZHdhcmUgc3VwcG9ydC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdGNvbmZpZyBBVEgxMktcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgSEFTX0RNQSBcdTAwMjZcdTAwMjYgUENJXG4gICA1Olx0XHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xuICAgNjpcdFx0c2VsZWN0IE1ISV9CVVNcbiAgIDc6XHRcdHNlbGVjdCBRUlRSXG4gICA4Olx0XHRzZWxlY3QgUVJUUl9NSElcbiAgIDk6XHRcdHNlbGVjdCBQQ0lfUFdSQ1RSTF9QV1JTRVEgaWYgSEFWRV9QV1JDVFJMXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgV2ktRmkgNyAoSUVFRVxuICAxMjpcdFx0ICA4MDIuMTFiZSkgZmFtaWx5IG9mIGNoaXBzZXRzLCBmb3IgZXhhbXBsZSBXQ043ODUwIGFuZFxuICAxMzpcdFx0ICBRQ045Mjc0LlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIGF0aDEyay5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQVRIMTJLX0FIQlxuICAxODpcdFx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBSRU1PVEVQUk9DXG4gIDIwOlx0XHRzZWxlY3QgUUNPTV9NRFRfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgUUNPTV9QQVNcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aDEyayBBSEIgYnVzIGNoaXBzZXRzLCBleGFtcGxlIElQUTUzMzIuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIEFUSDEyS19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIEFUSDEyS1xuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBFbmFibGUgZGVidWcgc3VwcG9ydCwgZm9yIGV4YW1wbGUgZGVidWcgbWVzc2FnZXMgd2hpY2ggbXVzdFxuICAzMDpcdFx0ICBiZSBlbmFibGVkIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGRlYnVnX21hc2sgbW9kdWxlIHBhcmFtZXRlci5cbiAgMzE6XHRcbiAgMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDMzOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEFUSDEyS19ERUJVR0ZTXG4gIDM2Olx0XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICA0MjpcdFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuICA0NTpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgRVZFTlRfVFJBQ0lOR1xuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBFbmFibGUgYXRoMTJrIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYXRoMTJrJiMzOTtzIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGF0aDEyayBkcml2ZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcmVhbCBoYXJkd2FyZS4gSSBrbm93IGl0JiMzOTtzIGEgZHJpdmVyIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGNoaXBzZXRzLCB0aGluZ3MgbGlrZSB0aGUgV0NONzg1MCBvciBRQ045Mjc0LCB3aGljaCBhcmUgUENJZSBvciBBSEIgYmFzZWQuIENhbiBJIGVtdWxhdGUgaXQgaW4gUUVNVT8gTm8sIHRoYXQmIzM5O3MgYSBuby1nby4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBkbyB0aGF0LgoKUmlnaHQsIHRpbWUgdG8gcmUtcmVhZCB0aGUgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IEVzc2VudGlhbGx5LCBpZiB0aGUgY29kZSBwYXRoIG5lZWRzIHJlYWwgaGFyZHdhcmUgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQsIGl0JiMzOTtzIG91dC4gVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSBjYWxsIG91dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVcywgdGhhdCBkZW1hbmQgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhleSBhbHNvIG1lbnRpb24gdGhhdCBkcml2ZXIgLnJlbW92ZSBhbmQgLnNodXRkb3duIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHdvcnRoIHRoZSBlZmZvcnQgc2luY2UgdGhleSByZXF1aXJlIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIGF0aDEyay4gSXQmIzM5O3MgKmRlZmluaXRlbHkqIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlciwgZGVzaWduZWQgZm9yIFF1YWxjb21tJiMzOTtzIFdpLUZpIDcgZGV2aWNlcy4gVGhpbmtpbmcgYWJvdXQgYnVzZXM6IHRoZSBXQ043ODUwIGlzIFBDSSBiYXNlZCwgYW5kIHRoZSBJUFE1MzMyIGlzIEFIQiBiYXNlZC4gRG9lcyBpdCB3b3JrIHdpdGggbWFjODAyMTFfaHdzaW0/IE5haCwgbWFjODAyMTFfaHdzaW0gaXMgYSBzZXBhcmF0ZSBkcml2ZXIuIERvZXMgaXQgaGF2ZSBhbnkgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHN1cHBvcnQgYXQgYWxsPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2AgZGlyZWN0b3J5IHRvIHNlZSB3aGF0IGJ1c2VzIGFuZCBoYXJkd2FyZSBpdCBldmVuICpzdXBwb3J0cyouIElmIGl0JiMzOTtzIGFsbCBiYXNlZCBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlbiBpdCBwcm9iYWJseSBpc24mIzM5O3QgYSBnb29kIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyfG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYXRoMTJrIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCBob3cgdGhlIGF0aDEyayBkcml2ZXIgYWN0dWFsbHkgcmVnaXN0ZXJzIGl0c2VsZi4gSSB3YW50IHRvIHRyYWNlIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmlzbXMgaW52b2x2ZWQgaW4gZGV2aWNlIHByb2JpbmcgYW5kIGJpbmRpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBkZXZpY2UgbW9kZWwsIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZm9yIHRoZSBoYXJkd2FyZSwgYW5kIHRoZSBudWFuY2VzIG9mIGludGVycnVwdCBoYW5kbGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBQQ0kvU0RJTy9VU0IgcHJvYmUgZnVuY3Rpb25zIGl0IHV0aWxpemVzLCBhbmQgaG93IGl0IG1hcHMgaGFyZHdhcmUgZmVhdHVyZXMgdG8ga2VybmVsIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjdXN0b20gcXVpcmtzIG9yIHdvcmthcm91bmRzIGluIHBsYWNlLCBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIGhpZ2gtcGVyZm9ybWFuY2Ugd2lyZWxlc3MgaW1wbGVtZW50YXRpb25zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgQXRoZXJvcyBXaUZpIDcgZHJpdmVyIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3IgV2lGaSA3IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmYW1pbHkgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJvdW5kIGZlYXR1cmVzIGxpa2UgTXVsdGktTGluayBPcGVyYXRpb24gKE1MTyksIHRoZSBuZXcgbW9kdWxhdGlvbiBzY2hlbWVzIChsaWtlIDQwOTYtUUFNKSwgYW5kIHBlcmhhcHMgdGhlIGluaXRpYWwgbG9naWMgZm9yIDMyME1IeiBjaGFubmVsIHN1cHBvcnQsIGFsbCBjcml0aWNhbCBmb3IgdGhpcyBuZXh0LWdlbiBzdGFuZGFyZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJIGNhbGxzIHRoYXQgZ2x1ZSB0b2dldGhlciB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHdpdGggdGhlIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1zdHJ1Y3R1cmVkIGVub3VnaCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgaW5jcmVhc2VkIGNvbXBsZXhpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0cmVhc3VyZXMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBhd2FpdCB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgNDpcdCAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICAgNTpcdCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7Li4vYWhiLmhcJiMzNDtcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDsuLi9wY2kuaFwmIzM0O1xuICAxMDpcdCNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gIDExOlx0I2luY2x1ZGUgXCYjMzQ7YWhiLmhcJiMzNDtcbiAgMTI6XHQjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiAgMTM6XHQjaW5jbHVkZSBcJiMzNDtkcC5oXCYjMzQ7XG4gIDE0Olx0I2luY2x1ZGUgXCYjMzQ7Li4vZGVidWcuaFwmIzM0O1xuICAxNTpcdFxuICAxNjpcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcbiAgMTc6XHRcbiAgMTg6XHRpbnQgYXRoMTJrX3dpZmk3X2FyY2hfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuICAxOTpcdHtcbiAgMjA6XHRcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xuICAyMTpcdFxuICAyMjpcdFx0ZHAgPSBhdGgxMmtfd2lmaTdfZHBfZGV2aWNlX2FsbG9jKGFiKTtcbiAgMjM6XHRcdGlmICghZHApIHtcbiAgMjQ6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZHAgYWxsb2MgZmFpbGVkXCYjMzQ7KTtcbiAgMjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDI2Olx0XHR9XG4gIDI3Olx0XG4gIDI4Olx0XHRhYi1cdTAwM2VkcCA9IGRwO1xuICAyOTpcdFxuICAzMDpcdFx0cmV0dXJuIDA7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHZvaWQgYXRoMTJrX3dpZmk3X2FyY2hfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gIDM0Olx0e1xuICAzNTpcdFx0YXRoMTJrX3dpZmk3X2RwX2RldmljZV9mcmVlKGFiLVx1MDAzZWRwKTtcbiAgMzY6XHRcdGFiLVx1MDAzZWRwID0gTlVMTDtcbiAgMzc6XHR9XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxuICA0MDpcdHtcbiAgNDE6XHRcdGFoYl9lcnIgPSBhdGgxMmtfd2lmaTdfYWhiX2luaXQoKTtcbiAgNDI6XHRcdGlmIChhaGJfZXJyKVxuICA0MzpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IEFIQiBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0NDpcdFx0XHRcdGFoYl9lcnIpO1xuICA0NTpcdFxuICA0NjpcdFx0cGNpX2VyciA9IGF0aDEya193aWZpN19wY2lfaW5pdCgpO1xuICA0NzpcdFx0aWYgKHBjaV9lcnIpXG4gIDQ4Olx0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgYXRoMTJrIFdpLUZpIDcgUENJIGRldmljZTogJWRcXG5cJiMzNDssXG4gIDQ5Olx0XHRcdFx0cGNpX2Vycik7XG4gIDUwOlx0XG4gIDUxOlx0XHQvKiBJZiBib3RoIGZhaWxlZCwgcmV0dXJuIG9uZSBvZiB0aGUgZmFpbHVyZXMgKGFyYml0cmFyeSkgKi9cbiAgNTI6XHRcdHJldHVybiBhaGJfZXJyIFx1MDAyNlx1MDAyNiBwY2lfZXJyID8gYWhiX2VyciA6IDA7XG4gIDUzOlx0fVxuICA1NDpcdFxuICA1NTpcdHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19leGl0KHZvaWQpXG4gIDU2Olx0e1xuICA1NzpcdFx0aWYgKCFwY2lfZXJyKVxuICA1ODpcdFx0XHRhdGgxMmtfd2lmaTdfcGNpX2V4aXQoKTtcbiAgNTk6XHRcbiAgNjA6XHRcdGlmICghYWhiX2VycilcbiAgNjE6XHRcdFx0YXRoMTJrX3dpZmk3X2FoYl9leGl0KCk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdG1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbiAgNjU6XHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XG4gIDY2Olx0XG4gIDY3Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYmUgV0xBTiBkZXZpY2VzXCYjMzQ7KTtcbiAgNjg6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4OAoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA1MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBhdGgxMmtgIGRyaXZlci4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgUXVhbGNvbW0mIzM5O3MgODAyLjExYmUgV0xBTiBjaGlwcy4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQgaW5pdGlhbGl6ZXMgdGhlIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKmFuZCogdGhlIFBDSSBkcml2ZXIgZm9yIHRoaXMgaGFyZHdhcmUuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZXNlIGRyaXZlcnMgYXJlICpkZXBlbmRlbnQqIG9uIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUXVhbGNvbW0gV2ktRmkgNyBjaGlwc2V0cyBsaWtlIHRoZSBXQ043ODUwIG9yIFFDTjkyNzQsIHNwZWNpZmljYWxseS4gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBwcm9iZSBvciB0ZXN0IHRoaXMgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcnVsZXMgdG8gYmUgc3VyZS4gQWxyaWdodCwgc28gdGhlIHJ1bGVzIHN0YXRlIHRoYXQgd2UgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIChsaWtlIGBwcl9lcnJgIG9yIGBwcmludGtgIGNhbGxzKSwgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cy9tYWNyb3MgdGhhdCBkb24mIzM5O3QgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3csIGNvZGUgcGF0aHMgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBhbHNvLCBkcml2ZXIgcmVtb3ZhbCBvciBzaHV0ZG93biBjYWxsYmFja3MgdGhhdCBvY2N1ciBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLgoKT2theSwgc28gbG9va2luZyBiYWNrIGF0IGBhdGgxMmtgLCBpdCBpcyBkZWZpbml0ZWx5IHZlbmRvci1zcGVjaWZpYywgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBoYXJkd2FyZS4gSXQgYWxzbyB1c2VzIFBDSS9BSEIgYW5kIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4KClNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93IHRvIHByZXBhcmUgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBuZWVkIHRvIGp1c3RpZnkgdGhlIHJlYXNvbmluZy4gU28sIEkgd2lsbCBuZWVkIHRvIHNldDoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgc3ltYm9scyBvZiBpbnRlcmVzdCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkKQoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7CgpOb3cgSSBzaG91bGQgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgYXJndW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIEFzIGEgcmVzdWx0LCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTI6NTEuODY1Mjg3ODg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNTc3MTgxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gV2ktRmkgNyAoYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmspLiBhdGgxMmsgcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gUENJZSBvciBBSEIgaGFyZHdhcmUgKHN1Y2ggYXMgV0NONzg1MCBvciBRQ045Mjc0KSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBBcyBhIHJlc3VsdCwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEyOjUxLjg2NTI5NTEyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTcwNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4ZmI1ODUzNTVkMDI3NmNlYWU3ZTMxZGI2YWVmYjg1NGVkZWEzNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMDoxMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXFxuQEAgLTUyOSw2ICs1MjksOCBAQCBzdHJ1Y3QgYXRoMTJrX3N0YSB7XFxuIFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBzdGF0ZTtcXG4gXFxuIFxcdGJvb2wgZW5hYmxlXzRhZGRyO1xcbitcXG4rXFx0Ym9vbCBpc19hdXRob3JpemVkO1xcbiB9O1xcbiBcXG4gI2RlZmluZSBBVEgxMktfSEFMRl8yME1IWl9CV1xcdDEwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXFxuaW5kZXggNjg5NjhmOTZiNGYxYi4uNzIwNjk2NDBiZDM4OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgYXRoMTJrX3VwZGF0ZV9wZXJfcGVlcl90eF9zdGF0cyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdXNyX3N0YXRzLVxcdTAwM2VwZWVyX2lkKTtcXG4gXFxuLVxcdGlmICghcGVlciB8fCAhcGVlci1cXHUwMDNlc3RhKSB7XFxuK1xcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xcbmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xcbkBAIC0xOTUsMzUgKzE5NSw2IEBAIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9tYXBfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggdmRldl9pZCwgdTE2IHBlZXJfXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIH1cXG4gXFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpXFxuLXtcXG4tXFx0c3RydWN0IGF0aDEya19zdGEgKmFoc3RhO1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcXG4tXFxuLVxcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfaGVsZCgpLFxcbi1cXHRcXHRcXHQgXFxcImF0aDEya19kcF9saW5rX3BlZXIgdG8gYXRoMTJrX2xpbmtfc3RhIGNhbGxlZCB3aXRob3V0IHJjdSBsb2NrXFxcIik7XFxuLVxcbi1cXHRpZiAoIXBlZXItXFx1MDAzZXN0YSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRhaHN0YSA9IGF0aDEya19zdGFfdG9fYWhzdGEocGVlci1cXHUwMDNlc3RhKTtcXG4tXFx0aWYgKHBlZXItXFx1MDAzZW1sX2lkIFxcdTAwMjYgQVRIMTJLX1BFRVJfTUxfSURfVkFMSUQpIHtcXG4tXFx0XFx0aWYgKCEoYWhzdGEtXFx1MDAzZWxpbmtzX21hcCBcXHUwMDI2IEJJVChwZWVyLVxcdTAwM2VsaW5rX2lkKSkpIHtcXG4tXFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbid0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgcGVlci1cXHUwMDNlYWRkciwgcGVlci1cXHUwMDNlcGVlcl9pZCwgcGVlci1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0ICAgIGFoc3RhLVxcdTAwM2VsaW5rc19tYXApO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRhcnN0YSA9IHJjdV9kZXJlZmVyZW5jZShhaHN0YS1cXHUwMDNlbGlua1twZWVyLVxcdTAwM2VsaW5rX2lkXSk7XFxuLVxcdFxcdGlmICghYXJzdGEpXFxuLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRhcnN0YSA9ICBcXHUwMDI2YWhzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIGFyc3RhO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkcl90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcClcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZHAtXFx1MDAzZWFiO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXFxuaW5kZXggMzUwMzg0MGIwMzI5NS4uZDAxZWYxYWVhNDhiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXFxuQEAgLTcwLDcgKzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcXG4gXFxuIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXI7XFxuIFxcdGludCB2ZGV2X2lkO1xcbiBcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG5AQCAtODEsNyArODAsNiBAQCBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XFxuIFxcbiBcXHRzdHJ1Y3QgcHBkdV91c2VyX2RlbGF5YmEgcHBkdV9zdGF0c19kZWxheWJhO1xcbiBcXHRib29sIGRlbGF5YmFfZmxhZztcXG4tXFx0Ym9vbCBpc19hdXRob3JpemVkO1xcbiBcXHRib29sIG1sbztcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IGFiLVxcdTAwM2VkYXRhX2xvY2sgKi9cXG4gXFxuQEAgLTE1OSw4ICsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpO1xcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqXFxuIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZGV2X2FuZF9hZGRyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB1OCBwZGV2X2lkeCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqYWRkcik7XFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpO1xcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XFxuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfZGVzdHJveShzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XFxuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX2FkZChzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG5AQCAtMTgzLDQgKzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xcbiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcik7XFxuIGludCBhdGgxMmtfZHBfcGVlcl9maXh1cF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGNvbnN0IHU4ICpwZWVyX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCB1MTYgcGVlcl9pZCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcXG4rYXRoMTJrX2RwX3BlZXJfZ2V0X3N0YShjb25zdCBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXIpXFxuK3tcXG4rXFx0cmV0dXJuIHBlZXIgPyBwZWVyLVxcdTAwM2VzdGEgOiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcXG4rYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZWRwX3BlZXIgP1xcbitcXHRcXHRsaW5rX3BlZXItXFx1MDAzZWRwX3BlZXItXFx1MDAzZXN0YSA6IE5VTEw7XFxuK31cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbmluZGV4IDhmYTBlOTBiNDUzMTYuLmNkYjc5NTU2N2U4YzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuQEAgLTEzODIsNyArMTM4Miw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcnhjYi1cXHUwMDNlcGVlcl9pZCk7XFxuIFxcbi1cXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cXHUwMDNlc3RhIDogTlVMTDtcXG4rXFx0cHVic3RhID0gYXRoMTJrX2RwX3BlZXJfZ2V0X3N0YShwZWVyKTtcXG4gXFxuIFxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuIFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXFxuQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKVxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgXFx1MDAyNmRwLVxcdTAwM2VwZWVycywgbGlzdCkge1xcbiBcXHRcXHQvKiBTa2lwIFJ4IFRJRCBjbGVhbnVwIGZvciBzZWxmIHBlZXIgKi9cXG4tXFx0XFx0aWYgKHBlZXItXFx1MDAzZXN0YSBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VkcF9wZWVyKVxcbitcXHRcXHRpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKVxcbiBcXHRcXHRcXHRhdGgxMmtfZHBfcnhfcGVlcl90aWRfY2xlYW51cChhciwgcGVlcik7XFxuIFxcbiBcXHRcXHQvKiBjbGVhbnVwIGRwIHBlZXIgKi9cXG5AQCAtMzkxNCwxMSArMzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYXBfc3RhO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbi1cXHRib29sIGlzX2F1dGggPSBmYWxzZTtcXG4gXFx0dTMyIGhlbW9kZSA9IDA7XFxuIFxcdGludCByZXQ7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gYXRoMTJrX2FiX3RvX2RwKGFyLVxcdTAwM2VhYik7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShhdGgxMmtfYXJfdG9faHcoYXIpLVxcdTAwM2V3aXBoeSk7XFxuIFxcbkBAIC00MDIyLDE3ICs0MDE5LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX2Jzc19hc3NvYyhzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0ICAgXFxcIm1hYyB2ZGV2ICVkIHVwIChhc3NvY2lhdGVkKSBic3NpZCAlcE0gYWlkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICBhcnZpZi1cXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXFx1MDAzZWJzc2lkLCB2aWYtXFx1MDAzZWNmZy5haWQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJ2aWYtXFx1MDAzZWJzc2lkKTtcXG4tXFx0aWYgKHBlZXIgXFx1MDAyNlxcdTAwMjYgcGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZClcXG4tXFx0XFx0aXNfYXV0aCA9IHRydWU7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZWRwX2xvY2spO1xcbi1cXG4gXFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXFxuLVxcdGlmIChpc19hdXRoKSB7XFxuK1xcdGlmIChhaHN0YS1cXHUwMDNlaXNfYXV0aG9yaXplZCkge1xcbiBcXHRcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnZpZi1cXHUwMDNlYnNzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRXTUlfUEVFUl9BVVRIT1JJWkUsXFxuQEAgLTcwMDUsMTAgKzY5OTMsOSBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3N0YXRpb25fcG9zdF9yZW1vdmUoc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlciBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VzdGEgPT0gc3RhKSB7XFxuK1xcdGlmIChwZWVyIFxcdTAwMjZcXHUwMDI2IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKSA9PSBzdGEpIHtcXG4gXFx0XFx0YXRoMTJrX3dhcm4oYXItXFx1MDAzZWFiLCBcXFwiRm91bmQgcGVlciBlbnRyeSAlcE0gbiB2ZGV2ICVpIGFmdGVyIGl0IHdhcyBzdXBwb3NlZGx5IHJlbW92ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICB2aWYtXFx1MDAzZWFkZHIsIGFydmlmLVxcdTAwM2V2ZGV2X2lkKTtcXG4tXFx0XFx0cGVlci1cXHUwMDNlc3RhID0gTlVMTDtcXG4gXFxuIFxcdFxcdGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTtcXG4gXFx0XFx0YXItXFx1MDAzZW51bV9wZWVycy0tO1xcbkBAIC03MDIxLDIwICs3MDA4LDExIEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zdGF0aW9uX3VuYXV0aG9yaXplKHN0cnVjdCBhdGgxMmsgKmFyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhKVxcbiB7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbiBcXHRpbnQgcmV0O1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cXHUwMDNlYWIpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cXHUwMDNld2lwaHkpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlcilcXG4tXFx0XFx0cGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZCA9IGZhbHNlO1xcbi1cXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4rXFx0YXJzdGEtXFx1MDAzZWFoc3RhLVxcdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tXFxuIFxcdCAqIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCB0byBJRUVFODAyMTFfU1RBX0FTU09DLCBzaW5jZSBhZnRlclxcbkBAIC03MDU2LDIxICs3MDM0LDEyIEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zdGF0aW9uX2F1dGhvcml6ZShzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhKVxcbiB7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi1cXHUwMDNlYWh2aWYpO1xcbiBcXHRpbnQgcmV0O1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cXHUwMDNlYWIpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cXHUwMDNld2lwaHkpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlcilcXG4tXFx0XFx0cGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZWRwX2xvY2spO1xcbitcXHRhcnN0YS1cXHUwMDNlYWhzdGEtXFx1MDAzZWlzX2F1dGhvcml6ZWQgPSB0cnVlO1xcbiBcXG4gXFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFxcdTAwMjZcXHUwMDI2IGFydmlmLVxcdTAwM2Vpc191cCkge1xcbiBcXHRcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnN0YS1cXHUwMDNlYWRkcixcXG5AQCAtMTMyOTIsNiArMTMyNjEsNyBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhblxcbiBcXHRib29sIGVodF9maXhlZF9yYXRlID0gZmFsc2UsIGhlX2ZpeGVkX3JhdGUgPSBmYWxzZSwgdmh0X2ZpeGVkX3JhdGUgPSBmYWxzZTtcXG4gXFx0Y29uc3QgdTE2ICp2aHRfbWNzX21hc2ssICpoZV9tY3NfbWFzaywgKmVodF9tY3NfbWFzaztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XFxuIFxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyLCAqdG1wO1xcbiBcXHR1OCB2aHRfbnNzLCBoZV9uc3MsIGVodF9uc3M7XFxuIFxcdGludCByZXQgPSB0cnVlO1xcbkBAIC0xMzMyMSw4ICsxMzI5MSw5IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFxcdTAwMjZkcC1cXHUwMDNlcGVlcnMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKHBlZXItXFx1MDAzZXN0YSkge1xcbi1cXHRcXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShwZWVyLVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRcXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuK1xcdFxcdGlmIChzdGEpIHtcXG4rXFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4gXFx0XFx0XFx0aWYgKCFsaW5rX3N0YSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4gXFx0XFx0XFx0XFx0Z290byBleGl0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXFxuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXFxuQEAgLTI2Niw4ICsyNjYsNiBAQCBpbnQgYXRoMTJrX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMmsgKmFyLCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcXG4gXFx0fVxcbiBcXG4gXFx0cGVlci1cXHUwMDNlcGRldl9pZHggPSBhci1cXHUwMDNlcGRldl9pZHg7XFxuLVxcdHBlZXItXFx1MDAzZXN0YSA9IHN0YTtcXG4tXFxuIFxcdGlmICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikge1xcbiBcXHRcXHRkcF9saW5rX3ZpZi1cXHUwMDNlYXN0X2hhc2ggPSBwZWVyLVxcdTAwM2Vhc3RfaGFzaDtcXG4gXFx0XFx0ZHBfbGlua192aWYtXFx1MDAzZWFzdF9pZHggPSBwZWVyLVxcdTAwM2Vod19wZWVyX2lkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xcbmluZGV4IDAxNmIwYzM4ZTUxZTIuLjcxYjg1Mzk0ZDQ4NzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcXG5AQCAtMzM2Miw3ICszMzYyLDcgQEAgYXRoMTJrX3dpZmk3X2RwX21vbl9zcm5nX3Byb2Nlc3Moc3RydWN0IGF0aDEya19wZGV2X2RwICpwZGV2X2RwLCBpbnQgKmJ1ZGdldCxcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLVxcdTAwM2VwZWVyX2lkKTtcXG4tXFx0XFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0XFx0aWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHtcXG4gXFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBtb25pdG9yIHBlZXJfaWQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgIHBwZHVfaW5mby1cXHUwMDNlcGVlcl9pZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbmluZGV4IDU4N2Q1OGVlY2NmYTUuLjJhMDVlMDMxOTRhYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuQEAgLTU1MiwxMyArNTUyLDEyIEBAIGF0aDEya19kcF90eF9odHRfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHR9XFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcXG4tXFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0c3RhdHVzLnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTtcXG4rXFx0aWYgKCFzdGF0dXMuc3RhKSB7XFxuIFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSxcXG4gXFx0XFx0XFx0ICAgXFxcImRwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcXFxcblxcXCIsIHBlZXJfaWQpO1xcbiBcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbXNkdSk7XFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RhdHVzLnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhdHVzLmluZm8gPSBpbmZvO1xcbkBAIC02MjcsNyArNjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLVxcdTAwM2VwZWVyX2lkKTtcXG4tXFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0c3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xcbitcXHRpZiAoIXN0YSkge1xcbiBcXHRcXHRhdGgxMmtfZGJnKGRwLVxcdTAwM2VhYiwgQVRIMTJLX0RCR19EUF9UWCxcXG4gXFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIGJ5IGlkICV1XFxcXG5cXFwiLCB0cy1cXHUwMDNlcGVlcl9pZCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNjM1LDcgKzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFxuLVxcdHN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4gXFx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7XFxuIFxcdGFyc3RhID0gXFx1MDAyNmFoc3RhLVxcdTAwM2VkZWZsaW5rO1xcbiBcXG5AQCAtNzUyLDYgKzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yYXRlX3N0YXR1cyBzdGF0dXNfcmF0ZSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IHJhdGVfaW5mbyByYXRlO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSh0cy1cXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XFxuIFxcdFxcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xcbkBAIC04NDYsNyArODQ2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRhdGgxMmtfd2lmaTdfZHBfdHhfdXBkYXRlX3R4Y29tcGwoZHBfcGRldiwgdHMpO1xcbiBcXG4gXFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXFx1MDAzZXBlZXJfaWQpO1xcbi1cXHRpZiAoIXBlZXIgfHwgIXBlZXItXFx1MDAzZXN0YSkge1xcbitcXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuK1xcdGlmICghc3RhKSB7XFxuIFxcdFxcdGF0aDEya19lcnIoYWIsXFxuIFxcdFxcdFxcdCAgIFxcXCJkcF90eDogZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBwZWVyX2lkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICB0cy1cXHUwMDNlcGVlcl9pZCk7XFxuQEAgLTg1NCw3ICs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzLnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4rXFx0c3RhdHVzLnN0YSA9IHN0YTtcXG4gXFx0c3RhdHVzLmluZm8gPSBpbmZvO1xcbiBcXHRzdGF0dXMuc2tiID0gbXNkdTtcXG4gXFx0cmF0ZSA9IHBlZXItXFx1MDAzZWxhc3RfdHhyYXRlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbmluZGV4IGQ1MTYwYWY2MGUwMGQuLjliZWQ4NTJmNjZjNTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5AQCAtNzM3Myw3ICs3MzczLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHVic3RhID0gcGVlci1cXHUwMDNlc3RhO1xcbitcXHRcXHRwdWJzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuIFxcdFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbiBcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbiBcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBwZWVyLVxcdTAwM2VsaW5rX2lkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMjo1My40NTc0NTYwOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1NDY1NTMwOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gV2ktRmkgNyAoYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmspLiBhdGgxMmsgcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gUENJZSBvciBBSEIgaGFyZHdhcmUgKHN1Y2ggYXMgV0NONzg1MCBvciBRQ045Mjc0KSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBBcyBhIHJlc3VsdCwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4ZmI1ODUzNTVkMDI3NmNlYWU3ZTMxZGI2YWVmYjg1NGVkZWEzNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjEyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuQEAgLTUyOSw2ICs1MjksOCBAQCBzdHJ1Y3QgYXRoMTJrX3N0YSB7XG4gXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7XG4gXG4gXHRib29sIGVuYWJsZV80YWRkcjtcbitcbitcdGJvb2wgaXNfYXV0aG9yaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX0hBTEZfMjBNSFpfQldcdDEwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmNcbmluZGV4IDY4OTY4Zjk2YjRmMWIuLjcyMDY5NjQwYmQzODggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIGF0aDEya191cGRhdGVfcGVyX3BlZXJfdHhfc3RhdHMoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdXNyX3N0YXRzLVx1MDAzZXBlZXJfaWQpO1xuIFxuLVx0aWYgKCFwZWVyIHx8ICFwZWVyLVx1MDAzZXN0YSkge1xuK1x0aWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jXG5pbmRleCBiYjUzNDFiNDI1MWExLi4wNmY2ZWNjZmI1NzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jXG5AQCAtMTk1LDM1ICsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyX1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gfVxuIFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKVxuLXtcbi1cdHN0cnVjdCBhdGgxMmtfc3RhICphaHN0YTtcbi1cdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xuLVxuLVx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksXG4tXHRcdFx0IFwiYXRoMTJrX2RwX2xpbmtfcGVlciB0byBhdGgxMmtfbGlua19zdGEgY2FsbGVkIHdpdGhvdXQgcmN1IGxvY2tcIik7XG4tXG4tXHRpZiAoIXBlZXItXHUwMDNlc3RhKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdGFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShwZWVyLVx1MDAzZXN0YSk7XG4tXHRpZiAocGVlci1cdTAwM2VtbF9pZCBcdTAwMjYgQVRIMTJLX1BFRVJfTUxfSURfVkFMSUQpIHtcbi1cdFx0aWYgKCEoYWhzdGEtXHUwMDNlbGlua3NfbWFwIFx1MDAyNiBCSVQocGVlci1cdTAwM2VsaW5rX2lkKSkpIHtcbi1cdFx0XHRhdGgxMmtfd2FybihhYiwgXCJwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbid0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XFxuXCIsXG4tXHRcdFx0XHQgICAgcGVlci1cdTAwM2VhZGRyLCBwZWVyLVx1MDAzZXBlZXJfaWQsIHBlZXItXHUwMDNlbGlua19pZCxcbi1cdFx0XHRcdCAgICBhaHN0YS1cdTAwM2VsaW5rc19tYXApO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdGFyc3RhID0gcmN1X2RlcmVmZXJlbmNlKGFoc3RhLVx1MDAzZWxpbmtbcGVlci1cdTAwM2VsaW5rX2lkXSk7XG4tXHRcdGlmICghYXJzdGEpXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRhcnN0YSA9ICBcdTAwMjZhaHN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0fVxuLVx0cmV0dXJuIGFyc3RhO1xuLX1cbi1cbiBzdGF0aWMgaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkcl90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcClcbiB7XG4gXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZHAtXHUwMDNlYWI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxuaW5kZXggMzUwMzg0MGIwMzI5NS4uZDAxZWYxYWVhNDhiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxuQEAgLTcwLDcgKzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyO1xuIFx0aW50IHZkZXZfaWQ7XG4gXHR1OCBhZGRyW0VUSF9BTEVOXTtcbkBAIC04MSw3ICs4MCw2IEBAIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyIHtcbiBcbiBcdHN0cnVjdCBwcGR1X3VzZXJfZGVsYXliYSBwcGR1X3N0YXRzX2RlbGF5YmE7XG4gXHRib29sIGRlbGF5YmFfZmxhZztcbi1cdGJvb2wgaXNfYXV0aG9yaXplZDtcbiBcdGJvb2wgbWxvO1xuIFx0LyogcHJvdGVjdGVkIGJ5IGFiLVx1MDAzZWRhdGFfbG9jayAqL1xuIFxuQEAgLTE1OSw4ICsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpO1xuIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpcbiBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGRldl9hbmRfYWRkcihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdTggcGRldl9pZHgsXG4gXHRcdFx0XHRcdCAgY29uc3QgdTggKmFkZHIpO1xuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XG4gdm9pZCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX3RibF9kZXN0cm95KHN0cnVjdCBhdGgxMmtfZHAgKmRwKTtcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGQoc3RydWN0IGF0aDEya19kcCAqZHAsXG5AQCAtMTgzLDQgKzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX3BlZXJfZml4dXBfcGVlcl9pZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBjb25zdCB1OCAqcGVlcl9hZGRyLFxuIFx0XHRcdFx0IHUxNiBwZWVyX2lkKTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcbithdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcilcbit7XG4rXHRyZXR1cm4gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqX19tdXN0X2NoZWNrXG4rYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXG4re1xuK1x0cmV0dXJuIGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZWRwX3BlZXIgP1xuK1x0XHRsaW5rX3BlZXItXHUwMDNlZHBfcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuK31cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbmluZGV4IDhmYTBlOTBiNDUzMTYuLmNkYjc5NTU2N2U4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuQEAgLTEzODIsNyArMTM4Miw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcnhjYi1cdTAwM2VwZWVyX2lkKTtcbiBcbi1cdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4rXHRwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFxuIFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuIFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKVxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgXHUwMDI2ZHAtXHUwMDNlcGVlcnMsIGxpc3QpIHtcbiBcdFx0LyogU2tpcCBSeCBUSUQgY2xlYW51cCBmb3Igc2VsZiBwZWVyICovXG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2VkcF9wZWVyKVxuK1x0XHRpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKVxuIFx0XHRcdGF0aDEya19kcF9yeF9wZWVyX3RpZF9jbGVhbnVwKGFyLCBwZWVyKTtcbiBcbiBcdFx0LyogY2xlYW51cCBkcCBwZWVyICovXG5AQCAtMzkxNCwxMSArMzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbi1cdGJvb2wgaXNfYXV0aCA9IGZhbHNlO1xuIFx0dTMyIGhlbW9kZSA9IDA7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG5AQCAtNDAyMiwxNyArNDAxOSw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdCAgIFwibWFjIHZkZXYgJWQgdXAgKGFzc29jaWF0ZWQpIGJzc2lkICVwTSBhaWQgJWRcXG5cIixcbiBcdFx0ICAgYXJ2aWYtXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXHUwMDNlYnNzaWQsIHZpZi1cdTAwM2VjZmcuYWlkKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnZpZi1cdTAwM2Vic3NpZCk7XG4tXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2Vpc19hdXRob3JpemVkKVxuLVx0XHRpc19hdXRoID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuLVxuIFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXG4tXHRpZiAoaXNfYXV0aCkge1xuK1x0aWYgKGFoc3RhLVx1MDAzZWlzX2F1dGhvcml6ZWQpIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJ2aWYtXHUwMDNlYnNzaWQsXG4gXHRcdFx0XHRcdFx0YXJ2aWYtXHUwMDNldmRldl9pZCxcbiBcdFx0XHRcdFx0XHRXTUlfUEVFUl9BVVRIT1JJWkUsXG5AQCAtNzAwNSwxMCArNjk5Myw5IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tYWNfc3RhdGlvbl9wb3N0X3JlbW92ZShzdHJ1Y3QgYXRoMTJrICphcixcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbiBcdFx0XHRcdFx0XHRcdCBhcnN0YS1cdTAwM2VhZGRyKTtcbi1cdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBwZWVyLVx1MDAzZXN0YSA9PSBzdGEpIHtcbitcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikgPT0gc3RhKSB7XG4gXHRcdGF0aDEya193YXJuKGFyLVx1MDAzZWFiLCBcIkZvdW5kIHBlZXIgZW50cnkgJXBNIG4gdmRldiAlaSBhZnRlciBpdCB3YXMgc3VwcG9zZWRseSByZW1vdmVkXFxuXCIsXG4gXHRcdFx0ICAgIHZpZi1cdTAwM2VhZGRyLCBhcnZpZi1cdTAwM2V2ZGV2X2lkKTtcbi1cdFx0cGVlci1cdTAwM2VzdGEgPSBOVUxMO1xuIFxuIFx0XHRhdGgxMmtfZHBfbGlua19wZWVyX2ZyZWUocGVlcik7XG4gXHRcdGFyLVx1MDAzZW51bV9wZWVycy0tO1xuQEAgLTcwMjEsMjAgKzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4tXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbitcdGFyc3RhLVx1MDAzZWFoc3RhLVx1MDAzZWlzX2F1dGhvcml6ZWQgPSBmYWxzZTtcbiBcbiBcdC8qIERyaXZlciBtdXN0IGNsZWFyIHRoZSBrZXlzIGR1cmluZyB0aGUgc3RhdGUgY2hhbmdlIGZyb21cbiBcdCAqIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCB0byBJRUVFODAyMTFfU1RBX0FTU09DLCBzaW5jZSBhZnRlclxuQEAgLTcwNTYsMjEgKzcwMzQsMTIgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fYXV0aG9yaXplKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdFx0c3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi1cdTAwM2VhaHZpZik7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuK1x0YXJzdGEtXHUwMDNlYWhzdGEtXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XG4gXG4gXHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjYgYXJ2aWYtXHUwMDNlaXNfdXApIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJzdGEtXHUwMDNlYWRkcixcbkBAIC0xMzI5Miw2ICsxMzI2MSw3IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuXG4gXHRib29sIGVodF9maXhlZF9yYXRlID0gZmFsc2UsIGhlX2ZpeGVkX3JhdGUgPSBmYWxzZSwgdmh0X2ZpeGVkX3JhdGUgPSBmYWxzZTtcbiBcdGNvbnN0IHUxNiAqdmh0X21jc19tYXNrLCAqaGVfbWNzX21hc2ssICplaHRfbWNzX21hc2s7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlciwgKnRtcDtcbiBcdHU4IHZodF9uc3MsIGhlX25zcywgZWh0X25zcztcbiBcdGludCByZXQgPSB0cnVlO1xuQEAgLTEzMzIxLDggKzEzMjkxLDkgQEAgYXRoMTJrX21hY192YWxpZGF0ZV9maXhlZF9yYXRlX3NldHRpbmdzKHN0cnVjdCBhdGgxMmsgKmFyLCBlbnVtIG5sODAyMTFfYmFuZCBiYW5cbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSkge1xuLVx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuK1x0XHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRcdGlmIChzdGEpIHtcbitcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuQEAgLTI2Niw4ICsyNjYsNiBAQCBpbnQgYXRoMTJrX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMmsgKmFyLCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdH1cbiBcbiBcdHBlZXItXHUwMDNlcGRldl9pZHggPSBhci1cdTAwM2VwZGV2X2lkeDtcbi1cdHBlZXItXHUwMDNlc3RhID0gc3RhO1xuLVxuIFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbiBcdFx0ZHBfbGlua192aWYtXHUwMDNlYXN0X2hhc2ggPSBwZWVyLVx1MDAzZWFzdF9oYXNoO1xuIFx0XHRkcF9saW5rX3ZpZi1cdTAwM2Vhc3RfaWR4ID0gcGVlci1cdTAwM2Vod19wZWVyX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jXG5pbmRleCAwMTZiMGMzOGU1MWUyLi43MWI4NTM5NGQ0ODc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuQEAgLTMzNjIsNyArMzM2Miw3IEBAIGF0aDEya193aWZpN19kcF9tb25fc3JuZ19wcm9jZXNzKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqcGRldl9kcCwgaW50ICpidWRnZXQsXG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLVx1MDAzZXBlZXJfaWQpO1xuLVx0XHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCJmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIG1vbml0b3IgcGVlcl9pZCAlZFxcblwiLFxuIFx0XHRcdFx0ICAgcHBkdV9pbmZvLVx1MDAzZXBlZXJfaWQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuaW5kZXggNTg3ZDU4ZWVjY2ZhNS4uMmEwNWUwMzE5NGFhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5AQCAtNTUyLDEzICs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHR9XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbitcdHN0YXR1cy5zdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YXR1cy5zdGEpIHtcbiBcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdCAgIFwiZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwiLCBwZWVyX2lkKTtcbiBcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIG1zZHUpO1xuIFx0XHRnb3RvIGV4aXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdGF0dXMuc3RhID0gcGVlci1cdTAwM2VzdGE7XG4gXHR9XG4gXG4gXHRzdGF0dXMuaW5mbyA9IGluZm87XG5AQCAtNjI3LDcgKzYyNiw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRpbnQgcmV0O1xuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4tXHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RQX1RYLFxuIFx0XHRcdCAgIFwiZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgYnkgaWQgJXVcXG5cIiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4gXHRcdHJldHVybjtcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcbi1cdHN0YSA9IHBlZXItXHUwMDNlc3RhO1xuIFx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7XG4gXHRhcnN0YSA9IFx1MDAyNmFoc3RhLVx1MDAzZWRlZmxpbms7XG4gXG5AQCAtNzUyLDYgKzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmF0ZV9zdGF0dXMgc3RhdHVzX3JhdGUgPSB7fTtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IHJhdGVfaW5mbyByYXRlO1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UodHMtXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XG4gXHRcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xuQEAgLTg0Niw3ICs4NDYsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRhdGgxMmtfd2lmaTdfZHBfdHhfdXBkYXRlX3R4Y29tcGwoZHBfcGRldiwgdHMpO1xuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4tXHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZXJyKGFiLFxuIFx0XHRcdCAgIFwiZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwiLFxuIFx0XHRcdCAgIHRzLVx1MDAzZXBlZXJfaWQpO1xuQEAgLTg1NCw3ICs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHN0YXR1cy5zdGEgPSBwZWVyLVx1MDAzZXN0YTtcbitcdHN0YXR1cy5zdGEgPSBzdGE7XG4gXHRzdGF0dXMuaW5mbyA9IGluZm87XG4gXHRzdGF0dXMuc2tiID0gbXNkdTtcbiBcdHJhdGUgPSBwZWVyLVx1MDAzZWxhc3RfdHhyYXRlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCBkNTE2MGFmNjBlMDBkLi45YmVkODUyZjY2YzUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTczNzMsNyArNzM3Myw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRwdWJzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbitcdFx0cHVic3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbiBcdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4gXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMjo1My40NTc0NTg2MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM1NzQzOTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY2F0ZWdvcmllcy4gSSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgaGVyZTsgYSBmYWxzZSBuZWdhdGl2ZSB3YXN0ZXMgdmFsdWFibGUgZnV6emluZyByZXNvdXJjZXMuXG5cblRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBkZWxpbmVhdGUgc2V2ZXJhbCBzY2VuYXJpb3M6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgKHByX2VyciwgcHJpbnRrLCB0cmFjZXBvaW50cyksIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50L21hY3JvIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UsIFFFTVUpLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgKFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcWVkLCBhbWRncHUpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgdGhhdCBhcmUgb25seSBleGVjdXRlZCBvbiBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIG1vZGlmaWVkIGZpbGVzOiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmhgLCBgZHBfaHR0LmNgLCBgZHBfcGVlci5jYCwgYGRwX3BlZXIuaGAsIGBkcF9yeC5jYCwgYG1hYy5jYCwgYHBlZXIuY2AsIGB3aWZpNy9kcF9tb24uY2AsIGB3aWZpNy9kcF90eC5jYCwgYW5kIGB3bWkuY2AuIFJpZ2h0IGF3YXksIHRoZXNlIHBvaW50IHRvIHRoZSBgYXRoMTJrYCBkaXJlY3RvcnkuIEkga25vdyB0aGF0IGBhdGgxMmtgIGlzIFF1YWxjb21tJ3MgSUVFRSA4MDIuMTFiZSAoV2ktRmkgNykgd2lyZWxlc3MgZHJpdmVyLCBzdXBwb3J0aW5nIFBDSWUsIEFIQiwgYW5kIG90aGVyIGludGVyZmFjZXMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCBpbnZvbHZlIGNvZGUgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUsIG9yLCBjYW4gaXQgYmUgcnVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHN0YW5kYXJkIFFFTVUgY2FuIGVtdWxhdGUgdGhlIHJlcXVpcmVkIGhhcmR3YXJlIHRvIGV4ZWN1dGUgdGhlIHBhdGNoZWQgY29kZSBwYXRocy4gSWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBwYXRjaCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuSSdsbCBjaGVjayB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIHVzaW5nIGBncmVwcGVyYCBvciBieSBkaXJlY3QgaW5zcGVjdGlvbi4gSWYgSSBmaW5kIHRoYXQgdGhlIGNvZGUgcGF0aHMgaW4gdGhlc2UgZmlsZXMgYXJlIHRpZWQgZGlyZWN0bHkgdG8gcGh5c2ljYWwgV2ktRmkgNyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBzdHJhaWdodGZvcndhcmQsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBjYW4gYmUgdGVzdGVkIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZW52aXJvbm1lbnQuIE90aGVyd2lzZSwgdGhlIGZ1enppbmcgd29uJ3QgYmUgcHJvZHVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjEyLjgxNDkwMjUzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc3MjM5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMktcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI1OmNvbmZpZyBBVEgxMktfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzU6Y29uZmlnIEFUSDEyS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00NS1cXHRib29sIFxcXCJhdGgxMmsgdHJhY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1Mzpjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU0LVxcdGJvb2wgXFxcImF0aDEyayBjb3JlZHVtcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MTMuMzUyNjMxOTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc1MDExMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBhdGgxMmtgIGRpcmVjdG9yeS4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBpcyB0eXBpY2FsbHkgdGhlIGJyYWluIG9mIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEl0J3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBmb3IgdGhlIGRyaXZlciBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgb3V0bGluZWQsIGFuZCB0aGUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgZWFjaCBvcHRpb24gaXMgbG9jYXRlZC4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0b3Agd2hlbiBkaWdnaW5nIGludG8gdW5kZXJzdGFuZGluZyBvciBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzLCBvciB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgbW9kdWxlcywgb3IgaGFyZHdhcmUgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MTcuMTAyNzQ3MDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1BBU1xcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoxNy4xMDI4NzQ5MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDM0ODE5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYXRoMTJrJ3MgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGF0aDEyayBkcml2ZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcmVhbCBoYXJkd2FyZS4gSSBrbm93IGl0J3MgYSBkcml2ZXIgZm9yIFF1YWxjb21tJ3MgV2ktRmkgNyBjaGlwc2V0cywgdGhpbmdzIGxpa2UgdGhlIFdDTjc4NTAgb3IgUUNOOTI3NCwgd2hpY2ggYXJlIFBDSWUgb3IgQUhCIGJhc2VkLiBDYW4gSSBlbXVsYXRlIGl0IGluIFFFTVU/IE5vLCB0aGF0J3MgYSBuby1nby4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IGRvIHRoYXQuXG5cblJpZ2h0LCB0aW1lIHRvIHJlLXJlYWQgdGhlIGd1aWRlbGluZXMgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIiBFc3NlbnRpYWxseSwgaWYgdGhlIGNvZGUgcGF0aCBuZWVkcyByZWFsIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQsIGl0J3Mgb3V0LiBUaGUgZ3VpZGVsaW5lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFVzLCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGV5IGFsc28gbWVudGlvbiB0aGF0IGRyaXZlciAucmVtb3ZlIGFuZCAuc2h1dGRvd24gZnVuY3Rpb25zIGFyZW4ndCB3b3J0aCB0aGUgZWZmb3J0IHNpbmNlIHRoZXkgcmVxdWlyZSBob3QtdW5wbHVnIG9wZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGJhY2sgdG8gYXRoMTJrLiBJdCdzICpkZWZpbml0ZWx5KiBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIsIGRlc2lnbmVkIGZvciBRdWFsY29tbSdzIFdpLUZpIDcgZGV2aWNlcy4gVGhpbmtpbmcgYWJvdXQgYnVzZXM6IHRoZSBXQ043ODUwIGlzIFBDSSBiYXNlZCwgYW5kIHRoZSBJUFE1MzMyIGlzIEFIQiBiYXNlZC4gRG9lcyBpdCB3b3JrIHdpdGggbWFjODAyMTFfaHdzaW0/IE5haCwgbWFjODAyMTFfaHdzaW0gaXMgYSBzZXBhcmF0ZSBkcml2ZXIuIERvZXMgaXQgaGF2ZSBhbnkgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHN1cHBvcnQgYXQgYWxsPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYCBkaXJlY3RvcnkgdG8gc2VlIHdoYXQgYnVzZXMgYW5kIGhhcmR3YXJlIGl0IGV2ZW4gKnN1cHBvcnRzKi4gSWYgaXQncyBhbGwgYmFzZWQgb24gcGh5c2ljYWwgaGFyZHdhcmUsIHRoZW4gaXQgcHJvYmFibHkgaXNuJ3QgYSBnb29kIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoyNi4xMzc2OTg0NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODUzODM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlcnxtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjI2LjI3NzU2MTE3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk3OTU2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYXRoMTJrIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgaG93IHRoZSBhdGgxMmsgZHJpdmVyIGFjdHVhbGx5IHJlZ2lzdGVycyBpdHNlbGYuIEkgd2FudCB0byB0cmFjZSB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmlzbXMgaW52b2x2ZWQgaW4gZGV2aWNlIHByb2JpbmcgYW5kIGJpbmRpbmcuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGZvciB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgbnVhbmNlcyBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgUENJL1NESU8vVVNCIHByb2JlIGZ1bmN0aW9ucyBpdCB1dGlsaXplcywgYW5kIGhvdyBpdCBtYXBzIGhhcmR3YXJlIGZlYXR1cmVzIHRvIGtlcm5lbCBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gcGxhY2UsIGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaGlnaC1wZXJmb3JtYW5jZSB3aXJlbGVzcyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50IGFuZCBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoyOC42MTczNjg2MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjEzNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjI4LjcxNjk4OTI0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDIwNTAxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBDb3JlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIEF0aGVyb3MgV2lGaSA3IGRyaXZlciBjb2RlLiBTcGVjaWZpY2FsbHksIGxldCdzIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3IgV2lGaSA3IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmYW1pbHkgc2hvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcm91bmQgZmVhdHVyZXMgbGlrZSBNdWx0aS1MaW5rIE9wZXJhdGlvbiAoTUxPKSwgdGhlIG5ldyBtb2R1bGF0aW9uIHNjaGVtZXMgKGxpa2UgNDA5Ni1RQU0pLCBhbmQgcGVyaGFwcyB0aGUgaW5pdGlhbCBsb2dpYyBmb3IgMzIwTUh6IGNoYW5uZWwgc3VwcG9ydCwgYWxsIGNyaXRpY2FsIGZvciB0aGlzIG5leHQtZ2VuIHN0YW5kYXJkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSSBjYWxscyB0aGF0IGdsdWUgdG9nZXRoZXIgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB3aXRoIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBlbm91Z2ggdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgdGhlIGluY3JlYXNlZCBjb21wbGV4aXR5LiBMZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBhd2FpdCB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzozMy4xMzc0OTQ0OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcIi4uL2FoYi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcIi4uL3BjaS5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImFoYi5oXFxcIlxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJkcC5oXFxcIlxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcIi4uL2RlYnVnLmhcXFwiXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDE5OlxcdHtcXG4gIDIwOlxcdFxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRkcCA9IGF0aDEya193aWZpN19kcF9kZXZpY2VfYWxsb2MoYWIpO1xcbiAgMjM6XFx0XFx0aWYgKCFkcCkge1xcbiAgMjQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImRwIGFsbG9jIGZhaWxlZFxcXCIpO1xcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAyNjpcXHRcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdGFiLVxcdTAwM2VkcCA9IGRwO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRyZXR1cm4gMDtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDM0OlxcdHtcXG4gIDM1OlxcdFxcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cXHUwMDNlZHApO1xcbiAgMzY6XFx0XFx0YWItXFx1MDAzZWRwID0gTlVMTDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0YWhiX2VyciA9IGF0aDEya193aWZpN19haGJfaW5pdCgpO1xcbiAgNDI6XFx0XFx0aWYgKGFoYl9lcnIpXFxuICA0MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ0OlxcdFxcdFxcdFxcdGFoYl9lcnIpO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRwY2lfZXJyID0gYXRoMTJrX3dpZmk3X3BjaV9pbml0KCk7XFxuICA0NzpcXHRcXHRpZiAocGNpX2VycilcXG4gIDQ4OlxcdFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0cGNpX2Vycik7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdC8qIElmIGJvdGggZmFpbGVkLCByZXR1cm4gb25lIG9mIHRoZSBmYWlsdXJlcyAoYXJiaXRyYXJ5KSAqL1xcbiAgNTI6XFx0XFx0cmV0dXJuIGFoYl9lcnIgXFx1MDAyNlxcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aWYgKCFwY2lfZXJyKVxcbiAgNTg6XFx0XFx0XFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmICghYWhiX2VycilcXG4gIDYxOlxcdFxcdFxcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuICA2NTpcXHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFiZSBXTEFOIGRldmljZXNcXFwiKTtcXG4gIDY4OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MzMuMTM3NjAwNDM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODUzNDkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gdGhlIGBhdGgxMmtgIGRyaXZlci4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgUXVhbGNvbW0ncyA4MDIuMTFiZSBXTEFOIGNoaXBzLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBpbml0aWFsaXplcyB0aGUgQUhCIHBsYXRmb3JtIGRyaXZlciAqYW5kKiB0aGUgUENJIGRyaXZlciBmb3IgdGhpcyBoYXJkd2FyZS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhlc2UgZHJpdmVycyBhcmUgKmRlcGVuZGVudCogb24gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IFF1YWxjb21tIFdpLUZpIDcgY2hpcHNldHMgbGlrZSB0aGUgV0NONzg1MCBvciBRQ045Mjc0LCBzcGVjaWZpY2FsbHkuIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byBwcm9iZSBvciB0ZXN0IHRoaXMgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUuXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJ1bGVzIHRvIGJlIHN1cmUuIEFscmlnaHQsIHNvIHRoZSBydWxlcyBzdGF0ZSB0aGF0IHdlIG5lZWQgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZyAobGlrZSBgcHJfZXJyYCBvciBgcHJpbnRrYCBjYWxscyksIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJ3QgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3csIGNvZGUgcGF0aHMgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBhbHNvLCBkcml2ZXIgcmVtb3ZhbCBvciBzaHV0ZG93biBjYWxsYmFja3MgdGhhdCBvY2N1ciBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLlxuXG5Pa2F5LCBzbyBsb29raW5nIGJhY2sgYXQgYGF0aDEya2AsIGl0IGlzIGRlZmluaXRlbHkgdmVuZG9yLXNwZWNpZmljLCBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIGhhcmR3YXJlLiBJdCBhbHNvIHVzZXMgUENJL0FIQiBhbmQgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3cgdG8gcHJlcGFyZSB0aGUgYXJndW1lbnRzIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJIG5lZWQgdG8ganVzdGlmeSB0aGUgcmVhc29uaW5nLiBTbywgSSB3aWxsIG5lZWQgdG8gc2V0OlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNwZWNpZmljIHN5bWJvbHMgb2YgaW50ZXJlc3QpXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiXG5cbk5vdyBJIHNob3VsZCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzg4LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjM4LjkyMjk1MjMxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIEFzIGEgcmVzdWx0LCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzozOC45MjI5ODk0NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86zrz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 19:26:23 +0000 UTC FinishedAt: 2026-09-01 20:13:40 +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+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjhmYjU4NTM1NWQwMjc2Y2VhZTdlMzFkYjZhZWZiODU0ZWRlYTM3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjA6MTI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuQEAgLTUyOSw2ICYjNDM7NTI5LDggQEAgc3RydWN0IGF0aDEya19zdGEge1xuIFx0ZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlO1xuIFxuIFx0Ym9vbCBlbmFibGVfNGFkZHI7XG4mIzQzO1xuJiM0MztcdGJvb2wgaXNfYXV0aG9yaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX0hBTEZfMjBNSFpfQldcdDEwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmNcbmluZGV4IDY4OTY4Zjk2YjRmMWIuLjcyMDY5NjQwYmQzODggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG5AQCAtMjc2LDcgJiM0MzsyNzYsNyBAQCBhdGgxMmtfdXBkYXRlX3Blcl9wZWVyX3R4X3N0YXRzKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHVzcl9zdGF0cy1cdTAwM2VwZWVyX2lkKTtcbiBcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRpZiAoIWF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbkBAIC0xOTUsMzUgJiM0MzsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyX1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gfVxuIFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKVxuLXtcbi1cdHN0cnVjdCBhdGgxMmtfc3RhICphaHN0YTtcbi1cdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xuLVxuLVx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksXG4tXHRcdFx0IFwmIzM0O2F0aDEya19kcF9saW5rX3BlZXIgdG8gYXRoMTJrX2xpbmtfc3RhIGNhbGxlZCB3aXRob3V0IHJjdSBsb2NrXCYjMzQ7KTtcbi1cbi1cdGlmICghcGVlci1cdTAwM2VzdGEpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHBlZXItXHUwMDNlc3RhKTtcbi1cdGlmIChwZWVyLVx1MDAzZW1sX2lkIFx1MDAyNiBBVEgxMktfUEVFUl9NTF9JRF9WQUxJRCkge1xuLVx0XHRpZiAoIShhaHN0YS1cdTAwM2VsaW5rc19tYXAgXHUwMDI2IEJJVChwZWVyLVx1MDAzZWxpbmtfaWQpKSkge1xuLVx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbiYjMzk7dCBmb3VuZCBpbiBTVEEgbGlua19tYXAgMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICBwZWVyLVx1MDAzZWFkZHIsIHBlZXItXHUwMDNlcGVlcl9pZCwgcGVlci1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0ICAgIGFoc3RhLVx1MDAzZWxpbmtzX21hcCk7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0YXJzdGEgPSByY3VfZGVyZWZlcmVuY2UoYWhzdGEtXHUwMDNlbGlua1twZWVyLVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKCFhcnN0YSlcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdGFyc3RhID0gIFx1MDAyNmFoc3RhLVx1MDAzZWRlZmxpbms7XG4tXHR9XG4tXHRyZXR1cm4gYXJzdGE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGRyX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKVxuIHtcbiBcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkcC1cdTAwM2VhYjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG5pbmRleCAzNTAzODQwYjAzMjk1Li5kMDFlZjFhZWE0OGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG5AQCAtNzAsNyAmIzQzOzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyO1xuIFx0aW50IHZkZXZfaWQ7XG4gXHR1OCBhZGRyW0VUSF9BTEVOXTtcbkBAIC04MSw3ICYjNDM7ODAsNiBAQCBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXG4gXHRzdHJ1Y3QgcHBkdV91c2VyX2RlbGF5YmEgcHBkdV9zdGF0c19kZWxheWJhO1xuIFx0Ym9vbCBkZWxheWJhX2ZsYWc7XG4tXHRib29sIGlzX2F1dGhvcml6ZWQ7XG4gXHRib29sIG1sbztcbiBcdC8qIHByb3RlY3RlZCBieSBhYi1cdTAwM2VkYXRhX2xvY2sgKi9cbiBcbkBAIC0xNTksOCAmIzQzOzE1Nyw2IEBAIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9hc3Qoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCBhc3RfaGFzaCk7XG4gc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKlxuIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZGV2X2FuZF9hZGRyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB1OCBwZGV2X2lkeCxcbiBcdFx0XHRcdFx0ICBjb25zdCB1OCAqYWRkcik7XG4tc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXRoMTJrX2RwX2xpbmtfcGVlcl90b19saW5rX3N0YShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpO1xuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKTtcbiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfdGJsX2Rlc3Ryb3koc3RydWN0IGF0aDEya19kcCAqZHApO1xuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX2FkZChzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbkBAIC0xODMsNCAmIzQzOzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX3BlZXJfZml4dXBfcGVlcl9pZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBjb25zdCB1OCAqcGVlcl9hZGRyLFxuIFx0XHRcdFx0IHUxNiBwZWVyX2lkKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdGEgKl9fbXVzdF9jaGVja1xuJiM0MzthdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwZWVyID8gcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcbiYjNDM7YXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlZHBfcGVlciA/XG4mIzQzO1x0XHRsaW5rX3BlZXItXHUwMDNlZHBfcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuJiM0Mzt9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li5jZGI3OTU1NjdlOGM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbkBAIC0xMzgyLDcgJiM0MzsxMzgyLDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCByeGNiLVx1MDAzZXBlZXJfaWQpO1xuIFxuLVx0cHVic3RhID0gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbiYjNDM7XHRwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFxuIFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuIFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTEyMzIsNyAmIzQzOzEyMzIsNyBAQCB2b2lkIGF0aDEya19tYWNfcGVlcl9jbGVhbnVwX2FsbChzdHJ1Y3QgYXRoMTJrICphcilcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4gXHRcdC8qIFNraXAgUnggVElEIGNsZWFudXAgZm9yIHNlbGYgcGVlciAqL1xuLVx0XHRpZiAocGVlci1cdTAwM2VzdGEgXHUwMDI2XHUwMDI2IHBlZXItXHUwMDNlZHBfcGVlcilcbiYjNDM7XHRcdGlmIChhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpXG4gXHRcdFx0YXRoMTJrX2RwX3J4X3BlZXJfdGlkX2NsZWFudXAoYXIsIHBlZXIpO1xuIFxuIFx0XHQvKiBjbGVhbnVwIGRwIHBlZXIgKi9cbkBAIC0zOTE0LDExICYjNDM7MzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbi1cdGJvb2wgaXNfYXV0aCA9IGZhbHNlO1xuIFx0dTMyIGhlbW9kZSA9IDA7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG5AQCAtNDAyMiwxNyAmIzQzOzQwMTksOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHQgICBcJiMzNDttYWMgdmRldiAlZCB1cCAoYXNzb2NpYXRlZCkgYnNzaWQgJXBNIGFpZCAlZFxcblwmIzM0OyxcbiBcdFx0ICAgYXJ2aWYtXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXHUwMDNlYnNzaWQsIHZpZi1cdTAwM2VjZmcuYWlkKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnZpZi1cdTAwM2Vic3NpZCk7XG4tXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2Vpc19hdXRob3JpemVkKVxuLVx0XHRpc19hdXRoID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuLVxuIFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXG4tXHRpZiAoaXNfYXV0aCkge1xuJiM0MztcdGlmIChhaHN0YS1cdTAwM2Vpc19hdXRob3JpemVkKSB7XG4gXHRcdHJldCA9IGF0aDEya193bWlfc2V0X3BlZXJfcGFyYW0oYXIsIGFydmlmLVx1MDAzZWJzc2lkLFxuIFx0XHRcdFx0XHRcdGFydmlmLVx1MDAzZXZkZXZfaWQsXG4gXHRcdFx0XHRcdFx0V01JX1BFRVJfQVVUSE9SSVpFLFxuQEAgLTcwMDUsMTAgJiM0Mzs2OTkzLDkgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21hY19zdGF0aW9uX3Bvc3RfcmVtb3ZlKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV92ZGV2X2FuZF9hZGRyKGRwLCBhcnZpZi1cdTAwM2V2ZGV2X2lkLFxuIFx0XHRcdFx0XHRcdFx0IGFyc3RhLVx1MDAzZWFkZHIpO1xuLVx0aWYgKHBlZXIgXHUwMDI2XHUwMDI2IHBlZXItXHUwMDNlc3RhID09IHN0YSkge1xuJiM0MztcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikgPT0gc3RhKSB7XG4gXHRcdGF0aDEya193YXJuKGFyLVx1MDAzZWFiLCBcJiMzNDtGb3VuZCBwZWVyIGVudHJ5ICVwTSBuIHZkZXYgJWkgYWZ0ZXIgaXQgd2FzIHN1cHBvc2VkbHkgcmVtb3ZlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgdmlmLVx1MDAzZWFkZHIsIGFydmlmLVx1MDAzZXZkZXZfaWQpO1xuLVx0XHRwZWVyLVx1MDAzZXN0YSA9IE5VTEw7XG4gXG4gXHRcdGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTtcbiBcdFx0YXItXHUwMDNlbnVtX3BlZXJzLS07XG5AQCAtNzAyMSwyMCAmIzQzOzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4tXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiYjNDM7XHRhcnN0YS1cdTAwM2VhaHN0YS1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4gXG4gXHQvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tXG4gXHQgKiBJRUVFODAyMTFfU1RBX0FVVEhPUklaRUQgdG8gSUVFRTgwMjExX1NUQV9BU1NPQywgc2luY2UgYWZ0ZXJcbkBAIC03MDU2LDIxICYjNDM7NzAzNCwxMiBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc3RhdGlvbl9hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YSlcbiB7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBhdGgxMmtfYWh2aWZfdG9fdmlmKGFydmlmLVx1MDAzZWFodmlmKTtcbiBcdGludCByZXQ7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cdTAwM2VhYik7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF93aXBoeShhdGgxMmtfYXJfdG9faHcoYXIpLVx1MDAzZXdpcGh5KTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnN0YS1cdTAwM2VhZGRyKTtcbi1cdGlmIChwZWVyKVxuLVx0XHRwZWVyLVx1MDAzZWlzX2F1dGhvcml6ZWQgPSB0cnVlO1xuLVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4mIzQzO1x0YXJzdGEtXHUwMDNlYWhzdGEtXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XG4gXG4gXHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjYgYXJ2aWYtXHUwMDNlaXNfdXApIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJzdGEtXHUwMDNlYWRkcixcbkBAIC0xMzI5Miw2ICYjNDM7MTMyNjEsNyBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhblxuIFx0Ym9vbCBlaHRfZml4ZWRfcmF0ZSA9IGZhbHNlLCBoZV9maXhlZF9yYXRlID0gZmFsc2UsIHZodF9maXhlZF9yYXRlID0gZmFsc2U7XG4gXHRjb25zdCB1MTYgKnZodF9tY3NfbWFzaywgKmhlX21jc19tYXNrLCAqZWh0X21jc19tYXNrO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyLCAqdG1wO1xuIFx0dTggdmh0X25zcywgaGVfbnNzLCBlaHRfbnNzO1xuIFx0aW50IHJldCA9IHRydWU7XG5AQCAtMTMzMjEsOCAmIzQzOzEzMjkxLDkgQEAgYXRoMTJrX21hY192YWxpZGF0ZV9maXhlZF9yYXRlX3NldHRpbmdzKHN0cnVjdCBhdGgxMmsgKmFyLCBlbnVtIG5sODAyMTFfYmFuZCBiYW5cbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSkge1xuLVx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0c3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuJiM0MztcdFx0aWYgKHN0YSkge1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuQEAgLTI2Niw4ICYjNDM7MjY2LDYgQEAgaW50IGF0aDEya19wZWVyX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrICphciwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHR9XG4gXG4gXHRwZWVyLVx1MDAzZXBkZXZfaWR4ID0gYXItXHUwMDNlcGRldl9pZHg7XG4tXHRwZWVyLVx1MDAzZXN0YSA9IHN0YTtcbi1cbiBcdGlmICh2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4gXHRcdGRwX2xpbmtfdmlmLVx1MDAzZWFzdF9oYXNoID0gcGVlci1cdTAwM2Vhc3RfaGFzaDtcbiBcdFx0ZHBfbGlua192aWYtXHUwMDNlYXN0X2lkeCA9IHBlZXItXHUwMDNlaHdfcGVlcl9pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuaW5kZXggMDE2YjBjMzhlNTFlMi4uNzFiODUzOTRkNDg3NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcbkBAIC0zMzYyLDcgJiM0MzszMzYyLDcgQEAgYXRoMTJrX3dpZmk3X2RwX21vbl9zcm5nX3Byb2Nlc3Moc3RydWN0IGF0aDEya19wZGV2X2RwICpwZGV2X2RwLCBpbnQgKmJ1ZGdldCxcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChwZGV2X2RwLCBwcGR1X2luZm8tXHUwMDNlcGVlcl9pZCk7XG4tXHRcdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCYjMzQ7ZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBtb25pdG9yIHBlZXJfaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICBwcGR1X2luZm8tXHUwMDNlcGVlcl9pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCA1ODdkNThlZWNjZmE1Li4yYTA1ZTAzMTk0YWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC01NTIsMTMgJiM0Mzs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHR9XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRzdGF0dXMuc3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuJiM0MztcdGlmICghc3RhdHVzLnN0YSkge1xuIFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdFx0ICAgXCYjMzQ7ZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwmIzM0OywgcGVlcl9pZCk7XG4gXHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBtc2R1KTtcbiBcdFx0Z290byBleGl0O1xuLVx0fSBlbHNlIHtcbi1cdFx0c3RhdHVzLnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuIFx0fVxuIFxuIFx0c3RhdHVzLmluZm8gPSBpbmZvO1xuQEAgLTYyNyw3ICYjNDM7NjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdGludCByZXQ7XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCB0cy1cdTAwM2VwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbiYjNDM7XHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4mIzQzO1x0aWYgKCFzdGEpIHtcbiBcdFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EUF9UWCxcbiBcdFx0XHQgICBcJiMzNDtmYWlsZWQgdG8gZmluZCB0aGUgcGVlciBieSBpZCAldVxcblwmIzM0OywgdHMtXHUwMDNlcGVlcl9pZCk7XG4gXHRcdHJldHVybjtcbkBAIC02MzUsNyAmIzQzOzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXG4tXHRzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbiBcdGFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShzdGEpO1xuIFx0YXJzdGEgPSBcdTAwMjZhaHN0YS1cdTAwM2VkZWZsaW5rO1xuIFxuQEAgLTc1Miw2ICYjNDM7NzUxLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yYXRlX3N0YXR1cyBzdGF0dXNfcmF0ZSA9IHt9O1xuIFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgcmF0ZV9pbmZvIHJhdGU7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UodHMtXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XG4gXHRcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xuQEAgLTg0Niw3ICYjNDM7ODQ2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0YXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKGRwX3BkZXYsIHRzKTtcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLVx1MDAzZXBlZXJfaWQpO1xuLVx0aWYgKCFwZWVyIHx8ICFwZWVyLVx1MDAzZXN0YSkge1xuJiM0MztcdHN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTtcbiYjNDM7XHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZXJyKGFiLFxuIFx0XHRcdCAgIFwmIzM0O2RwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgdHMtXHUwMDNlcGVlcl9pZCk7XG5AQCAtODU0LDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHN0YXR1cy5zdGEgPSBwZWVyLVx1MDAzZXN0YTtcbiYjNDM7XHRzdGF0dXMuc3RhID0gc3RhO1xuIFx0c3RhdHVzLmluZm8gPSBpbmZvO1xuIFx0c3RhdHVzLnNrYiA9IG1zZHU7XG4gXHRyYXRlID0gcGVlci1cdTAwM2VsYXN0X3R4cmF0ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuaW5kZXggZDUxNjBhZjYwZTAwZC4uOWJlZDg1MmY2NmM1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbkBAIC03MzczLDcgJiM0Mzs3MzczLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuJiM0MztcdFx0cHVic3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbiBcdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4gXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjhmYjU4NTM1NWQwMjc2Y2VhZTdlMzFkYjZhZWZiODU0ZWRlYTM3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMjA6MTI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCmluZGV4IGE5OGZjNmUwNjk5ZDcuLmEwNDc1N2EwMzhmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oCkBAIC01MjksNiAmIzQzOzUyOSw4IEBAIHN0cnVjdCBhdGgxMmtfc3RhIHsKIAllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7CiAKIAlib29sIGVuYWJsZV80YWRkcjsKJiM0MzsKJiM0MzsJYm9vbCBpc19hdXRob3JpemVkOwogfTsKIAogI2RlZmluZSBBVEgxMktfSEFMRl8yME1IWl9CVwkxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmMKaW5kZXggNjg5NjhmOTZiNGYxYi4uNzIwNjk2NDBiZDM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jCkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIGF0aDEya191cGRhdGVfcGVyX3BlZXJfdHhfc3RhdHMoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LAogCXJjdV9yZWFkX2xvY2soKTsKIAlwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCB1c3Jfc3RhdHMtJmd0O3BlZXJfaWQpOwogCi0JaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJaWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jCkBAIC0xOTUsMzUgJiM0MzsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyXwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwogfQogCi1zdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphdGgxMmtfZHBfbGlua19wZWVyX3RvX2xpbmtfc3RhKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCi0JCQkJCQkJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpCi17Ci0Jc3RydWN0IGF0aDEya19zdGEgKmFoc3RhOwotCXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhOwotCi0JUkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksCi0JCQkgJiMzNDthdGgxMmtfZHBfbGlua19wZWVyIHRvIGF0aDEya19saW5rX3N0YSBjYWxsZWQgd2l0aG91dCByY3UgbG9jayYjMzQ7KTsKLQotCWlmICghcGVlci0mZ3Q7c3RhKQotCQlyZXR1cm4gTlVMTDsKLQotCWFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShwZWVyLSZndDtzdGEpOwotCWlmIChwZWVyLSZndDttbF9pZCAmYW1wOyBBVEgxMktfUEVFUl9NTF9JRF9WQUxJRCkgewotCQlpZiAoIShhaHN0YS0mZ3Q7bGlua3NfbWFwICZhbXA7IEJJVChwZWVyLSZndDtsaW5rX2lkKSkpIHsKLQkJCWF0aDEya193YXJuKGFiLCAmIzM0O3BlZXIgJXBNIGlkICVkIGxpbmtfaWQgJWQgY2FuJiMzOTt0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XG4mIzM0OywKLQkJCQkgICAgcGVlci0mZ3Q7YWRkciwgcGVlci0mZ3Q7cGVlcl9pZCwgcGVlci0mZ3Q7bGlua19pZCwKLQkJCQkgICAgYWhzdGEtJmd0O2xpbmtzX21hcCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlhcnN0YSA9IHJjdV9kZXJlZmVyZW5jZShhaHN0YS0mZ3Q7bGlua1twZWVyLSZndDtsaW5rX2lkXSk7Ci0JCWlmICghYXJzdGEpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlhcnN0YSA9ICAmYW1wO2Foc3RhLSZndDtkZWZsaW5rOwotCX0KLQlyZXR1cm4gYXJzdGE7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGRyX3RibF9pbml0KHN0cnVjdCBhdGgxMmtfZHAgKmRwKQogewogCXN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkcC0mZ3Q7YWI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCmluZGV4IDM1MDM4NDBiMDMyOTUuLmQwMWVmMWFlYTQ4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oCkBAIC03MCw3ICYjNDM7NzAsNiBAQCBERUNMQVJFX0VXTUEoYXZnX3Jzc2ksIDEwLCA4KQogCiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyOwogCWludCB2ZGV2X2lkOwogCXU4IGFkZHJbRVRIX0FMRU5dOwpAQCAtODEsNyAmIzQzOzgwLDYgQEAgc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgewogCiAJc3RydWN0IHBwZHVfdXNlcl9kZWxheWJhIHBwZHVfc3RhdHNfZGVsYXliYTsKIAlib29sIGRlbGF5YmFfZmxhZzsKLQlib29sIGlzX2F1dGhvcml6ZWQ7CiAJYm9vbCBtbG87CiAJLyogcHJvdGVjdGVkIGJ5IGFiLSZndDtkYXRhX2xvY2sgKi8KIApAQCAtMTU5LDggJiM0MzsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpOwogc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKgogYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BkZXZfYW5kX2FkZHIoc3RydWN0IGF0aDEya19kcCAqZHAsIHU4IHBkZXZfaWR4LAogCQkJCQkgIGNvbnN0IHU4ICphZGRyKTsKLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYiwKLQkJCQkJCQlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcik7CiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7CiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfdGJsX2Rlc3Ryb3koc3RydWN0IGF0aDEya19kcCAqZHApOwogaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLApAQCAtMTgzLDQgJiM0MzsxNzksMTcgQEAgYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHUxNiBwZWVyX2lkKTsKIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTsKIGludCBhdGgxMmtfZHBfcGVlcl9maXh1cF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGNvbnN0IHU4ICpwZWVyX2FkZHIsCiAJCQkJIHUxNiBwZWVyX2lkKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2sKJiM0MzthdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZWVyID8gcGVlci0mZ3Q7c3RhIDogTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqX19tdXN0X2NoZWNrCiYjNDM7YXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gbGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtkcF9wZWVyID8KJiM0MzsJCWxpbmtfcGVlci0mZ3Q7ZHBfcGVlci0mZ3Q7c3RhIDogTlVMTDsKJiM0Mzt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwppbmRleCA4ZmEwZTkwYjQ1MzE2Li5jZGI3OTU1NjdlOGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCkBAIC0xMzgyLDcgJiM0MzsxMzgyLDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWMKIAogCXBlZXIgPSBhdGgxMmtfZHBfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCByeGNiLSZndDtwZWVyX2lkKTsKIAotCXB1YnN0YSA9IHBlZXIgPyBwZWVyLSZndDtzdGEgOiBOVUxMOwomIzQzOwlwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpOwogCiAJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKIAlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jCmluZGV4IDk5YmY1Y2Y3OWQxMDIuLjRlYzJlZTFiMTdmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYwpAQCAtMTIzMiw3ICYjNDM7MTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKQogCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVlciwgdG1wLCAmYW1wO2RwLSZndDtwZWVycywgbGlzdCkgewogCQkvKiBTa2lwIFJ4IFRJRCBjbGVhbnVwIGZvciBzZWxmIHBlZXIgKi8KLQkJaWYgKHBlZXItJmd0O3N0YSAmYW1wOyZhbXA7IHBlZXItJmd0O2RwX3BlZXIpCiYjNDM7CQlpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKQogCQkJYXRoMTJrX2RwX3J4X3BlZXJfdGlkX2NsZWFudXAoYXIsIHBlZXIpOwogCiAJCS8qIGNsZWFudXAgZHAgcGVlciAqLwpAQCAtMzkxNCwxMSAmIzQzOzM5MTQsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLAogCXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7CiAJc3RydWN0IGF0aDEya19zdGEgKmFoc3RhOwotCXN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyOwotCWJvb2wgaXNfYXV0aCA9IGZhbHNlOwogCXUzMiBoZW1vZGUgPSAwOwogCWludCByZXQ7Ci0Jc3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItJmd0O2FiKTsKIAogCWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGF0aDEya19hcl90b19odyhhciktJmd0O3dpcGh5KTsKIApAQCAtNDAyMiwxNyAmIzQzOzQwMTksOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfYnNzX2Fzc29jKHN0cnVjdCBhdGgxMmsgKmFyLAogCQkgICAmIzM0O21hYyB2ZGV2ICVkIHVwIChhc3NvY2lhdGVkKSBic3NpZCAlcE0gYWlkICVkXG4mIzM0OywKIAkJICAgYXJ2aWYtJmd0O3ZkZXZfaWQsIGJzc19jb25mLSZndDtic3NpZCwgdmlmLSZndDtjZmcuYWlkKTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKLQotCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtJmd0O3ZkZXZfaWQsCi0JCQkJCQkJIGFydmlmLSZndDtic3NpZCk7Ci0JaWYgKHBlZXIgJmFtcDsmYW1wOyBwZWVyLSZndDtpc19hdXRob3JpemVkKQotCQlpc19hdXRoID0gdHJ1ZTsKLQotCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwotCiAJLyogQXV0aG9yaXplIEJTUyBQZWVyICovCi0JaWYgKGlzX2F1dGgpIHsKJiM0MzsJaWYgKGFoc3RhLSZndDtpc19hdXRob3JpemVkKSB7CiAJCXJldCA9IGF0aDEya193bWlfc2V0X3BlZXJfcGFyYW0oYXIsIGFydmlmLSZndDtic3NpZCwKIAkJCQkJCWFydmlmLSZndDt2ZGV2X2lkLAogCQkJCQkJV01JX1BFRVJfQVVUSE9SSVpFLApAQCAtNzAwNSwxMCAmIzQzOzY5OTMsOSBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3N0YXRpb25fcG9zdF9yZW1vdmUoc3RydWN0IGF0aDEyayAqYXIsCiAKIAlwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLSZndDt2ZGV2X2lkLAogCQkJCQkJCSBhcnN0YS0mZ3Q7YWRkcik7Ci0JaWYgKHBlZXIgJmFtcDsmYW1wOyBwZWVyLSZndDtzdGEgPT0gc3RhKSB7CiYjNDM7CWlmIChwZWVyICZhbXA7JmFtcDsgYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpID09IHN0YSkgewogCQlhdGgxMmtfd2Fybihhci0mZ3Q7YWIsICYjMzQ7Rm91bmQgcGVlciBlbnRyeSAlcE0gbiB2ZGV2ICVpIGFmdGVyIGl0IHdhcyBzdXBwb3NlZGx5IHJlbW92ZWRcbiYjMzQ7LAogCQkJICAgIHZpZi0mZ3Q7YWRkciwgYXJ2aWYtJmd0O3ZkZXZfaWQpOwotCQlwZWVyLSZndDtzdGEgPSBOVUxMOwogCiAJCWF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTsKIAkJYXItJmd0O251bV9wZWVycy0tOwpAQCAtNzAyMSwyMCAmIzQzOzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCSAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsCiAJCQkJCSAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpCiB7Ci0Jc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci0mZ3Q7YWIpOwogCiAJbG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS0mZ3Q7d2lwaHkpOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwotCi0JcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV92ZGV2X2FuZF9hZGRyKGRwLCBhcnZpZi0mZ3Q7dmRldl9pZCwKLQkJCQkJCQkgYXJzdGEtJmd0O2FkZHIpOwotCWlmIChwZWVyKQotCQlwZWVyLSZndDtpc19hdXRob3JpemVkID0gZmFsc2U7Ci0KLQlzcGluX3VubG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKJiM0MzsJYXJzdGEtJmd0O2Foc3RhLSZndDtpc19hdXRob3JpemVkID0gZmFsc2U7CiAKIAkvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tCiAJICogSUVFRTgwMjExX1NUQV9BVVRIT1JJWkVEIHRvIElFRUU4MDIxMV9TVEFfQVNTT0MsIHNpbmNlIGFmdGVyCkBAIC03MDU2LDIxICYjNDM7NzAzNCwxMiBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc3RhdGlvbl9hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCXN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLAogCQkJCQlzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YSkKIHsKLQlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi0mZ3Q7YWh2aWYpOwogCWludCByZXQ7Ci0Jc3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItJmd0O2FiKTsKIAogCWxvY2tkZXBfYXNzZXJ0X3dpcGh5KGF0aDEya19hcl90b19odyhhciktJmd0O3dpcGh5KTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKLQotCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtJmd0O3ZkZXZfaWQsCi0JCQkJCQkJIGFyc3RhLSZndDthZGRyKTsKLQlpZiAocGVlcikKLQkJcGVlci0mZ3Q7aXNfYXV0aG9yaXplZCA9IHRydWU7Ci0KLQlzcGluX3VubG9ja19iaCgmYW1wO2RwLSZndDtkcF9sb2NrKTsKJiM0MzsJYXJzdGEtJmd0O2Foc3RhLSZndDtpc19hdXRob3JpemVkID0gdHJ1ZTsKIAogCWlmICh2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmYW1wOyZhbXA7IGFydmlmLSZndDtpc191cCkgewogCQlyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnN0YS0mZ3Q7YWRkciwKQEAgLTEzMjkyLDYgJiM0MzsxMzI2MSw3IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuCiAJYm9vbCBlaHRfZml4ZWRfcmF0ZSA9IGZhbHNlLCBoZV9maXhlZF9yYXRlID0gZmFsc2UsIHZodF9maXhlZF9yYXRlID0gZmFsc2U7CiAJY29uc3QgdTE2ICp2aHRfbWNzX21hc2ssICpoZV9tY3NfbWFzaywgKmVodF9tY3NfbWFzazsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlciwgKnRtcDsKIAl1OCB2aHRfbnNzLCBoZV9uc3MsIGVodF9uc3M7CiAJaW50IHJldCA9IHRydWU7CkBAIC0xMzMyMSw4ICYjNDM7MTMyOTEsOSBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhbgogCXJjdV9yZWFkX2xvY2soKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgJmFtcDtkcC0mZ3Q7cGVlcnMsIGxpc3QpIHsKLQkJaWYgKHBlZXItJmd0O3N0YSkgewotCQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocGVlci0mZ3Q7c3RhLSZndDtsaW5rW2xpbmtfaWRdKTsKJiM0MzsJCXN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJCWlmIChzdGEpIHsKJiM0MzsJCQlsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19pZF0pOwogCQkJaWYgKCFsaW5rX3N0YSkgewogCQkJCXJldCA9IGZhbHNlOwogCQkJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMKQEAgLTI2Niw4ICYjNDM7MjY2LDYgQEAgaW50IGF0aDEya19wZWVyX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrICphciwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsCiAJfQogCiAJcGVlci0mZ3Q7cGRldl9pZHggPSBhci0mZ3Q7cGRldl9pZHg7Ci0JcGVlci0mZ3Q7c3RhID0gc3RhOwotCiAJaWYgKHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCWRwX2xpbmtfdmlmLSZndDthc3RfaGFzaCA9IHBlZXItJmd0O2FzdF9oYXNoOwogCQlkcF9saW5rX3ZpZi0mZ3Q7YXN0X2lkeCA9IHBlZXItJmd0O2h3X3BlZXJfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uYwppbmRleCAwMTZiMGMzOGU1MWUyLi43MWI4NTM5NGQ0ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmMKQEAgLTMzNjIsNyAmIzQzOzMzNjIsNyBAQCBhdGgxMmtfd2lmaTdfZHBfbW9uX3NybmdfcHJvY2VzcyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKnBkZXZfZHAsIGludCAqYnVkZ2V0LAogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLSZndDtwZWVyX2lkKTsKLQkJaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJCWlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7CiAJCQlhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0RBVEEsCiAJCQkJICAgJiMzNDtmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIG1vbml0b3IgcGVlcl9pZCAlZFxuJiMzNDssCiAJCQkJICAgcHBkdV9pbmZvLSZndDtwZWVyX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwppbmRleCA1ODdkNThlZWNjZmE1Li4yYTA1ZTAzMTk0YWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCkBAIC01NTIsMTMgJiM0Mzs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJfQogCiAJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcGVlcl9pZCk7Ci0JaWYgKCFwZWVyIHx8ICFwZWVyLSZndDtzdGEpIHsKJiM0MzsJc3RhdHVzLnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJaWYgKCFzdGF0dXMuc3RhKSB7CiAJCWF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSwKIAkJCSAgICYjMzQ7ZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxuJiMzNDssIHBlZXJfaWQpOwogCQlpZWVlODAyMTFfZnJlZV90eHNrYihhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbXNkdSk7CiAJCWdvdG8gZXhpdDsKLQl9IGVsc2UgewotCQlzdGF0dXMuc3RhID0gcGVlci0mZ3Q7c3RhOwogCX0KIAogCXN0YXR1cy5pbmZvID0gaW5mbzsKQEAgLTYyNyw3ICYjNDM7NjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlpbnQgcmV0OwogCiAJcGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtJmd0O3BlZXJfaWQpOwotCWlmICghcGVlciB8fCAhcGVlci0mZ3Q7c3RhKSB7CiYjNDM7CXN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKJiM0MzsJaWYgKCFzdGEpIHsKIAkJYXRoMTJrX2RiZyhkcC0mZ3Q7YWIsIEFUSDEyS19EQkdfRFBfVFgsCiAJCQkgICAmIzM0O2ZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIGJ5IGlkICV1XG4mIzM0OywgdHMtJmd0O3BlZXJfaWQpOwogCQlyZXR1cm47CkBAIC02MzUsNyAmIzQzOzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAKLQlzdGEgPSBwZWVyLSZndDtzdGE7CiAJYWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7CiAJYXJzdGEgPSAmYW1wO2Foc3RhLSZndDtkZWZsaW5rOwogCkBAIC03NTIsNiAmIzQzOzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfc3RhdHVzIHN0YXR1c19yYXRlID0ge307CiAJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJc3RydWN0IHJhdGVfaW5mbyByYXRlOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCiAJaWYgKFdBUk5fT05fT05DRSh0cy0mZ3Q7YnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7CiAJCS8qIE11c3Qgbm90IGhhcHBlbiAqLwpAQCAtODQ2LDcgJiM0Mzs4NDYsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKGRwX3BkZXYsIHRzKTsKIAogCXBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLSZndDtwZWVyX2lkKTsKLQlpZiAoIXBlZXIgfHwgIXBlZXItJmd0O3N0YSkgewomIzQzOwlzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7CiYjNDM7CWlmICghc3RhKSB7CiAJCWF0aDEya19lcnIoYWIsCiAJCQkgICAmIzM0O2RwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcbiYjMzQ7LAogCQkJICAgdHMtJmd0O3BlZXJfaWQpOwpAQCAtODU0LDcgJiM0Mzs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlzdGF0dXMuc3RhID0gcGVlci0mZ3Q7c3RhOwomIzQzOwlzdGF0dXMuc3RhID0gc3RhOwogCXN0YXR1cy5pbmZvID0gaW5mbzsKIAlzdGF0dXMuc2tiID0gbXNkdTsKIAlyYXRlID0gcGVlci0mZ3Q7bGFzdF90eHJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwppbmRleCBkNTE2MGFmNjBlMDBkLi45YmVkODUyZjY2YzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKQEAgLTczNzMsNyAmIzQzOzczNzMsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXB1YnN0YSA9IHBlZXItJmd0O3N0YTsKJiM0MzsJCXB1YnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTsKIAkJaWYgKHB1YnN0YSAmYW1wOyZhbXA7IHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKIAkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7CiAJCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBwZWVyLSZndDtsaW5rX2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBmYWxscyB1bmRlciBzcGVjaWZpYyBjYXRlZ29yaWVzLiBJIG5lZWQgdG8gYmUgbWV0aWN1bG91cyBoZXJlOyBhIGZhbHNlIG5lZ2F0aXZlIHdhc3RlcyB2YWx1YWJsZSBmdXp6aW5nIHJlc291cmNlcy4KClRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBkZWxpbmVhdGUgc2V2ZXJhbCBzY2VuYXJpb3M6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgKHByX2VyciwgcHJpbnRrLCB0cmFjZXBvaW50cyksIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50L21hY3JvIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UsIFFFTVUpLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgKFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcWVkLCBhbWRncHUpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgdGhhdCBhcmUgb25seSBleGVjdXRlZCBvbiBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgbW9kaWZpZWQgZmlsZXM6IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaGAsIGBkcF9odHQuY2AsIGBkcF9wZWVyLmNgLCBgZHBfcGVlci5oYCwgYGRwX3J4LmNgLCBgbWFjLmNgLCBgcGVlci5jYCwgYHdpZmk3L2RwX21vbi5jYCwgYHdpZmk3L2RwX3R4LmNgLCBhbmQgYHdtaS5jYC4gUmlnaHQgYXdheSwgdGhlc2UgcG9pbnQgdG8gdGhlIGBhdGgxMmtgIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGF0aDEya2AgaXMgUXVhbGNvbW0mIzM5O3MgSUVFRSA4MDIuMTFiZSAoV2ktRmkgNykgd2lyZWxlc3MgZHJpdmVyLCBzdXBwb3J0aW5nIFBDSWUsIEFIQiwgYW5kIG90aGVyIGludGVyZmFjZXMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBgYXRoMTJrYCBkcml2ZXIgYW5kIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW52b2x2ZSBjb2RlIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlLCBvciwgY2FuIGl0IGJlIHJ1biB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBzdGFuZGFyZCBRRU1VIGNhbiBlbXVsYXRlIHRoZSByZXF1aXJlZCBoYXJkd2FyZSB0byBleGVjdXRlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aHMuIElmIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgcGF0Y2ggaXMgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIHVzaW5nIGBncmVwcGVyYCBvciBieSBkaXJlY3QgaW5zcGVjdGlvbi4gSWYgSSBmaW5kIHRoYXQgdGhlIGNvZGUgcGF0aHMgaW4gdGhlc2UgZmlsZXMgYXJlIHRpZWQgZGlyZWN0bHkgdG8gcGh5c2ljYWwgV2ktRmkgNyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBzdHJhaWdodGZvcndhcmQsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBjYW4gYmUgdGVzdGVkIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZW52aXJvbm1lbnQuIE90aGVyd2lzZSwgdGhlIGZ1enppbmcgd29uJiMzOTt0IGJlIHByb2R1Y3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDEySyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEF0aGVyb3MgV2lyZWxlc3MgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEF0aGVyb3Mgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGF0aDEya2AgZGlyZWN0b3J5LiBUaGF0IGBLY29uZmlnYCBmaWxlIGlzIHR5cGljYWxseSB0aGUgYnJhaW4gb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBmb3IgdGhlIGRyaXZlciBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgb3V0bGluZWQsIGFuZCB0aGUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgZWFjaCBvcHRpb24gaXMgbG9jYXRlZC4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0b3Agd2hlbiBkaWdnaW5nIGludG8gdW5kZXJzdGFuZGluZyBvciBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzLCBvciB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgbW9kdWxlcywgb3IgaGFyZHdhcmUgc3VwcG9ydC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdGNvbmZpZyBBVEgxMktcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcdTAwMjZcdTAwMjYgSEFTX0RNQSBcdTAwMjZcdTAwMjYgUENJXG4gICA1Olx0XHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xuICAgNjpcdFx0c2VsZWN0IE1ISV9CVVNcbiAgIDc6XHRcdHNlbGVjdCBRUlRSXG4gICA4Olx0XHRzZWxlY3QgUVJUUl9NSElcbiAgIDk6XHRcdHNlbGVjdCBQQ0lfUFdSQ1RSTF9QV1JTRVEgaWYgSEFWRV9QV1JDVFJMXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgV2ktRmkgNyAoSUVFRVxuICAxMjpcdFx0ICA4MDIuMTFiZSkgZmFtaWx5IG9mIGNoaXBzZXRzLCBmb3IgZXhhbXBsZSBXQ043ODUwIGFuZFxuICAxMzpcdFx0ICBRQ045Mjc0LlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIGF0aDEyay5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQVRIMTJLX0FIQlxuICAxODpcdFx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBSRU1PVEVQUk9DXG4gIDIwOlx0XHRzZWxlY3QgUUNPTV9NRFRfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgUUNPTV9QQVNcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aDEyayBBSEIgYnVzIGNoaXBzZXRzLCBleGFtcGxlIElQUTUzMzIuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIEFUSDEyS19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIEFUSDEyS1xuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBFbmFibGUgZGVidWcgc3VwcG9ydCwgZm9yIGV4YW1wbGUgZGVidWcgbWVzc2FnZXMgd2hpY2ggbXVzdFxuICAzMDpcdFx0ICBiZSBlbmFibGVkIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGRlYnVnX21hc2sgbW9kdWxlIHBhcmFtZXRlci5cbiAgMzE6XHRcbiAgMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDMzOlx0XHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEFUSDEyS19ERUJVR0ZTXG4gIDM2Olx0XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICA0MjpcdFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuICA0NTpcdFx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgRVZFTlRfVFJBQ0lOR1xuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBFbmFibGUgYXRoMTJrIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYXRoMTJrJiMzOTtzIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGF0aDEyayBkcml2ZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcmVhbCBoYXJkd2FyZS4gSSBrbm93IGl0JiMzOTtzIGEgZHJpdmVyIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGNoaXBzZXRzLCB0aGluZ3MgbGlrZSB0aGUgV0NONzg1MCBvciBRQ045Mjc0LCB3aGljaCBhcmUgUENJZSBvciBBSEIgYmFzZWQuIENhbiBJIGVtdWxhdGUgaXQgaW4gUUVNVT8gTm8sIHRoYXQmIzM5O3MgYSBuby1nby4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBkbyB0aGF0LgoKUmlnaHQsIHRpbWUgdG8gcmUtcmVhZCB0aGUgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IEVzc2VudGlhbGx5LCBpZiB0aGUgY29kZSBwYXRoIG5lZWRzIHJlYWwgaGFyZHdhcmUgdGhhdCYjMzk7cyBub3QgZW11bGF0ZWQsIGl0JiMzOTtzIG91dC4gVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSBjYWxsIG91dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVcywgdGhhdCBkZW1hbmQgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhleSBhbHNvIG1lbnRpb24gdGhhdCBkcml2ZXIgLnJlbW92ZSBhbmQgLnNodXRkb3duIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHdvcnRoIHRoZSBlZmZvcnQgc2luY2UgdGhleSByZXF1aXJlIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIGF0aDEyay4gSXQmIzM5O3MgKmRlZmluaXRlbHkqIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlciwgZGVzaWduZWQgZm9yIFF1YWxjb21tJiMzOTtzIFdpLUZpIDcgZGV2aWNlcy4gVGhpbmtpbmcgYWJvdXQgYnVzZXM6IHRoZSBXQ043ODUwIGlzIFBDSSBiYXNlZCwgYW5kIHRoZSBJUFE1MzMyIGlzIEFIQiBiYXNlZC4gRG9lcyBpdCB3b3JrIHdpdGggbWFjODAyMTFfaHdzaW0/IE5haCwgbWFjODAyMTFfaHdzaW0gaXMgYSBzZXBhcmF0ZSBkcml2ZXIuIERvZXMgaXQgaGF2ZSBhbnkgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHN1cHBvcnQgYXQgYWxsPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2AgZGlyZWN0b3J5IHRvIHNlZSB3aGF0IGJ1c2VzIGFuZCBoYXJkd2FyZSBpdCBldmVuICpzdXBwb3J0cyouIElmIGl0JiMzOTtzIGFsbCBiYXNlZCBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlbiBpdCBwcm9iYWJseSBpc24mIzM5O3QgYSBnb29kIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyfG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYXRoMTJrIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCBob3cgdGhlIGF0aDEyayBkcml2ZXIgYWN0dWFsbHkgcmVnaXN0ZXJzIGl0c2VsZi4gSSB3YW50IHRvIHRyYWNlIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmlzbXMgaW52b2x2ZWQgaW4gZGV2aWNlIHByb2JpbmcgYW5kIGJpbmRpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBkZXZpY2UgbW9kZWwsIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZm9yIHRoZSBoYXJkd2FyZSwgYW5kIHRoZSBudWFuY2VzIG9mIGludGVycnVwdCBoYW5kbGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBQQ0kvU0RJTy9VU0IgcHJvYmUgZnVuY3Rpb25zIGl0IHV0aWxpemVzLCBhbmQgaG93IGl0IG1hcHMgaGFyZHdhcmUgZmVhdHVyZXMgdG8ga2VybmVsIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjdXN0b20gcXVpcmtzIG9yIHdvcmthcm91bmRzIGluIHBsYWNlLCBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIGhpZ2gtcGVyZm9ybWFuY2Ugd2lyZWxlc3MgaW1wbGVtZW50YXRpb25zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgQXRoZXJvcyBXaUZpIDcgZHJpdmVyIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3IgV2lGaSA3IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmYW1pbHkgc2hvdWxkIHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJvdW5kIGZlYXR1cmVzIGxpa2UgTXVsdGktTGluayBPcGVyYXRpb24gKE1MTyksIHRoZSBuZXcgbW9kdWxhdGlvbiBzY2hlbWVzIChsaWtlIDQwOTYtUUFNKSwgYW5kIHBlcmhhcHMgdGhlIGluaXRpYWwgbG9naWMgZm9yIDMyME1IeiBjaGFubmVsIHN1cHBvcnQsIGFsbCBjcml0aWNhbCBmb3IgdGhpcyBuZXh0LWdlbiBzdGFuZGFyZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJIGNhbGxzIHRoYXQgZ2x1ZSB0b2dldGhlciB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHdpdGggdGhlIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1zdHJ1Y3R1cmVkIGVub3VnaCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgaW5jcmVhc2VkIGNvbXBsZXhpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0cmVhc3VyZXMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBhd2FpdCB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgNDpcdCAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICAgNTpcdCAqL1xuICAgNjpcdFxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7Li4vYWhiLmhcJiMzNDtcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDsuLi9wY2kuaFwmIzM0O1xuICAxMDpcdCNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gIDExOlx0I2luY2x1ZGUgXCYjMzQ7YWhiLmhcJiMzNDtcbiAgMTI6XHQjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiAgMTM6XHQjaW5jbHVkZSBcJiMzNDtkcC5oXCYjMzQ7XG4gIDE0Olx0I2luY2x1ZGUgXCYjMzQ7Li4vZGVidWcuaFwmIzM0O1xuICAxNTpcdFxuICAxNjpcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcbiAgMTc6XHRcbiAgMTg6XHRpbnQgYXRoMTJrX3dpZmk3X2FyY2hfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuICAxOTpcdHtcbiAgMjA6XHRcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xuICAyMTpcdFxuICAyMjpcdFx0ZHAgPSBhdGgxMmtfd2lmaTdfZHBfZGV2aWNlX2FsbG9jKGFiKTtcbiAgMjM6XHRcdGlmICghZHApIHtcbiAgMjQ6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZHAgYWxsb2MgZmFpbGVkXCYjMzQ7KTtcbiAgMjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDI2Olx0XHR9XG4gIDI3Olx0XG4gIDI4Olx0XHRhYi1cdTAwM2VkcCA9IGRwO1xuICAyOTpcdFxuICAzMDpcdFx0cmV0dXJuIDA7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHZvaWQgYXRoMTJrX3dpZmk3X2FyY2hfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gIDM0Olx0e1xuICAzNTpcdFx0YXRoMTJrX3dpZmk3X2RwX2RldmljZV9mcmVlKGFiLVx1MDAzZWRwKTtcbiAgMzY6XHRcdGFiLVx1MDAzZWRwID0gTlVMTDtcbiAgMzc6XHR9XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxuICA0MDpcdHtcbiAgNDE6XHRcdGFoYl9lcnIgPSBhdGgxMmtfd2lmaTdfYWhiX2luaXQoKTtcbiAgNDI6XHRcdGlmIChhaGJfZXJyKVxuICA0MzpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IEFIQiBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0NDpcdFx0XHRcdGFoYl9lcnIpO1xuICA0NTpcdFxuICA0NjpcdFx0cGNpX2VyciA9IGF0aDEya193aWZpN19wY2lfaW5pdCgpO1xuICA0NzpcdFx0aWYgKHBjaV9lcnIpXG4gIDQ4Olx0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgYXRoMTJrIFdpLUZpIDcgUENJIGRldmljZTogJWRcXG5cJiMzNDssXG4gIDQ5Olx0XHRcdFx0cGNpX2Vycik7XG4gIDUwOlx0XG4gIDUxOlx0XHQvKiBJZiBib3RoIGZhaWxlZCwgcmV0dXJuIG9uZSBvZiB0aGUgZmFpbHVyZXMgKGFyYml0cmFyeSkgKi9cbiAgNTI6XHRcdHJldHVybiBhaGJfZXJyIFx1MDAyNlx1MDAyNiBwY2lfZXJyID8gYWhiX2VyciA6IDA7XG4gIDUzOlx0fVxuICA1NDpcdFxuICA1NTpcdHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19leGl0KHZvaWQpXG4gIDU2Olx0e1xuICA1NzpcdFx0aWYgKCFwY2lfZXJyKVxuICA1ODpcdFx0XHRhdGgxMmtfd2lmaTdfcGNpX2V4aXQoKTtcbiAgNTk6XHRcbiAgNjA6XHRcdGlmICghYWhiX2VycilcbiAgNjE6XHRcdFx0YXRoMTJrX3dpZmk3X2FoYl9leGl0KCk7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdG1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbiAgNjU6XHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XG4gIDY2Olx0XG4gIDY3Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgODAyLjExYmUgV0xBTiBkZXZpY2VzXCYjMzQ7KTtcbiAgNjg6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4OAoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA1MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBhdGgxMmtgIGRyaXZlci4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgUXVhbGNvbW0mIzM5O3MgODAyLjExYmUgV0xBTiBjaGlwcy4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQgaW5pdGlhbGl6ZXMgdGhlIEFIQiBwbGF0Zm9ybSBkcml2ZXIgKmFuZCogdGhlIFBDSSBkcml2ZXIgZm9yIHRoaXMgaGFyZHdhcmUuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZXNlIGRyaXZlcnMgYXJlICpkZXBlbmRlbnQqIG9uIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUXVhbGNvbW0gV2ktRmkgNyBjaGlwc2V0cyBsaWtlIHRoZSBXQ043ODUwIG9yIFFDTjkyNzQsIHNwZWNpZmljYWxseS4gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBwcm9iZSBvciB0ZXN0IHRoaXMgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcnVsZXMgdG8gYmUgc3VyZS4gQWxyaWdodCwgc28gdGhlIHJ1bGVzIHN0YXRlIHRoYXQgd2UgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIChsaWtlIGBwcl9lcnJgIG9yIGBwcmludGtgIGNhbGxzKSwgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cy9tYWNyb3MgdGhhdCBkb24mIzM5O3QgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3csIGNvZGUgcGF0aHMgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBhbHNvLCBkcml2ZXIgcmVtb3ZhbCBvciBzaHV0ZG93biBjYWxsYmFja3MgdGhhdCBvY2N1ciBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLgoKT2theSwgc28gbG9va2luZyBiYWNrIGF0IGBhdGgxMmtgLCBpdCBpcyBkZWZpbml0ZWx5IHZlbmRvci1zcGVjaWZpYywgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBoYXJkd2FyZS4gSXQgYWxzbyB1c2VzIFBDSS9BSEIgYW5kIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4KClNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93IHRvIHByZXBhcmUgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBuZWVkIHRvIGp1c3RpZnkgdGhlIHJlYXNvbmluZy4gU28sIEkgd2lsbCBuZWVkIHRvIHNldDoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgc3ltYm9scyBvZiBpbnRlcmVzdCkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkKQoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7CgpOb3cgSSBzaG91bGQgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgYXJndW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIEFzIGEgcmVzdWx0LCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTI6NTEuODY1Mjg3ODg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNTc3MTgxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gV2ktRmkgNyAoYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmspLiBhdGgxMmsgcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gUENJZSBvciBBSEIgaGFyZHdhcmUgKHN1Y2ggYXMgV0NONzg1MCBvciBRQ045Mjc0KSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBBcyBhIHJlc3VsdCwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEyOjUxLjg2NTI5NTEyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTcwNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4ZmI1ODUzNTVkMDI3NmNlYWU3ZTMxZGI2YWVmYjg1NGVkZWEzNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMDoxMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXFxuQEAgLTUyOSw2ICs1MjksOCBAQCBzdHJ1Y3QgYXRoMTJrX3N0YSB7XFxuIFxcdGVudW0gaWVlZTgwMjExX3N0YV9zdGF0ZSBzdGF0ZTtcXG4gXFxuIFxcdGJvb2wgZW5hYmxlXzRhZGRyO1xcbitcXG4rXFx0Ym9vbCBpc19hdXRob3JpemVkO1xcbiB9O1xcbiBcXG4gI2RlZmluZSBBVEgxMktfSEFMRl8yME1IWl9CV1xcdDEwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXFxuaW5kZXggNjg5NjhmOTZiNGYxYi4uNzIwNjk2NDBiZDM4OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgYXRoMTJrX3VwZGF0ZV9wZXJfcGVlcl90eF9zdGF0cyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdXNyX3N0YXRzLVxcdTAwM2VwZWVyX2lkKTtcXG4gXFxuLVxcdGlmICghcGVlciB8fCAhcGVlci1cXHUwMDNlc3RhKSB7XFxuK1xcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xcbmluZGV4IGJiNTM0MWI0MjUxYTEuLjA2ZjZlY2NmYjU3NDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuY1xcbkBAIC0xOTUsMzUgKzE5NSw2IEBAIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9tYXBfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggdmRldl9pZCwgdTE2IHBlZXJfXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIH1cXG4gXFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpXFxuLXtcXG4tXFx0c3RydWN0IGF0aDEya19zdGEgKmFoc3RhO1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcXG4tXFxuLVxcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfaGVsZCgpLFxcbi1cXHRcXHRcXHQgXFxcImF0aDEya19kcF9saW5rX3BlZXIgdG8gYXRoMTJrX2xpbmtfc3RhIGNhbGxlZCB3aXRob3V0IHJjdSBsb2NrXFxcIik7XFxuLVxcbi1cXHRpZiAoIXBlZXItXFx1MDAzZXN0YSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRhaHN0YSA9IGF0aDEya19zdGFfdG9fYWhzdGEocGVlci1cXHUwMDNlc3RhKTtcXG4tXFx0aWYgKHBlZXItXFx1MDAzZW1sX2lkIFxcdTAwMjYgQVRIMTJLX1BFRVJfTUxfSURfVkFMSUQpIHtcXG4tXFx0XFx0aWYgKCEoYWhzdGEtXFx1MDAzZWxpbmtzX21hcCBcXHUwMDI2IEJJVChwZWVyLVxcdTAwM2VsaW5rX2lkKSkpIHtcXG4tXFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbid0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgcGVlci1cXHUwMDNlYWRkciwgcGVlci1cXHUwMDNlcGVlcl9pZCwgcGVlci1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0ICAgIGFoc3RhLVxcdTAwM2VsaW5rc19tYXApO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRhcnN0YSA9IHJjdV9kZXJlZmVyZW5jZShhaHN0YS1cXHUwMDNlbGlua1twZWVyLVxcdTAwM2VsaW5rX2lkXSk7XFxuLVxcdFxcdGlmICghYXJzdGEpXFxuLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRhcnN0YSA9ICBcXHUwMDI2YWhzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIGFyc3RhO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkcl90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcClcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZHAtXFx1MDAzZWFiO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXFxuaW5kZXggMzUwMzg0MGIwMzI5NS4uZDAxZWYxYWVhNDhiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXFxuQEAgLTcwLDcgKzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcXG4gXFxuIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXI7XFxuIFxcdGludCB2ZGV2X2lkO1xcbiBcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG5AQCAtODEsNyArODAsNiBAQCBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XFxuIFxcbiBcXHRzdHJ1Y3QgcHBkdV91c2VyX2RlbGF5YmEgcHBkdV9zdGF0c19kZWxheWJhO1xcbiBcXHRib29sIGRlbGF5YmFfZmxhZztcXG4tXFx0Ym9vbCBpc19hdXRob3JpemVkO1xcbiBcXHRib29sIG1sbztcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IGFiLVxcdTAwM2VkYXRhX2xvY2sgKi9cXG4gXFxuQEAgLTE1OSw4ICsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpO1xcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqXFxuIGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZGV2X2FuZF9hZGRyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB1OCBwZGV2X2lkeCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqYWRkcik7XFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXIpO1xcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XFxuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfZGVzdHJveShzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XFxuIGludCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX2FkZChzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG5AQCAtMTgzLDQgKzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xcbiB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcik7XFxuIGludCBhdGgxMmtfZHBfcGVlcl9maXh1cF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGNvbnN0IHU4ICpwZWVyX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCB1MTYgcGVlcl9pZCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcXG4rYXRoMTJrX2RwX3BlZXJfZ2V0X3N0YShjb25zdCBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXIpXFxuK3tcXG4rXFx0cmV0dXJuIHBlZXIgPyBwZWVyLVxcdTAwM2VzdGEgOiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcXG4rYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZWRwX3BlZXIgP1xcbitcXHRcXHRsaW5rX3BlZXItXFx1MDAzZWRwX3BlZXItXFx1MDAzZXN0YSA6IE5VTEw7XFxuK31cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbmluZGV4IDhmYTBlOTBiNDUzMTYuLmNkYjc5NTU2N2U4YzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuQEAgLTEzODIsNyArMTM4Miw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcnhjYi1cXHUwMDNlcGVlcl9pZCk7XFxuIFxcbi1cXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cXHUwMDNlc3RhIDogTlVMTDtcXG4rXFx0cHVic3RhID0gYXRoMTJrX2RwX3BlZXJfZ2V0X3N0YShwZWVyKTtcXG4gXFxuIFxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuIFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXFxuQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKVxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgXFx1MDAyNmRwLVxcdTAwM2VwZWVycywgbGlzdCkge1xcbiBcXHRcXHQvKiBTa2lwIFJ4IFRJRCBjbGVhbnVwIGZvciBzZWxmIHBlZXIgKi9cXG4tXFx0XFx0aWYgKHBlZXItXFx1MDAzZXN0YSBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VkcF9wZWVyKVxcbitcXHRcXHRpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKVxcbiBcXHRcXHRcXHRhdGgxMmtfZHBfcnhfcGVlcl90aWRfY2xlYW51cChhciwgcGVlcik7XFxuIFxcbiBcXHRcXHQvKiBjbGVhbnVwIGRwIHBlZXIgKi9cXG5AQCAtMzkxNCwxMSArMzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYXBfc3RhO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbi1cXHRib29sIGlzX2F1dGggPSBmYWxzZTtcXG4gXFx0dTMyIGhlbW9kZSA9IDA7XFxuIFxcdGludCByZXQ7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gYXRoMTJrX2FiX3RvX2RwKGFyLVxcdTAwM2VhYik7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShhdGgxMmtfYXJfdG9faHcoYXIpLVxcdTAwM2V3aXBoeSk7XFxuIFxcbkBAIC00MDIyLDE3ICs0MDE5LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX2Jzc19hc3NvYyhzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0ICAgXFxcIm1hYyB2ZGV2ICVkIHVwIChhc3NvY2lhdGVkKSBic3NpZCAlcE0gYWlkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICBhcnZpZi1cXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXFx1MDAzZWJzc2lkLCB2aWYtXFx1MDAzZWNmZy5haWQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJ2aWYtXFx1MDAzZWJzc2lkKTtcXG4tXFx0aWYgKHBlZXIgXFx1MDAyNlxcdTAwMjYgcGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZClcXG4tXFx0XFx0aXNfYXV0aCA9IHRydWU7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZWRwX2xvY2spO1xcbi1cXG4gXFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXFxuLVxcdGlmIChpc19hdXRoKSB7XFxuK1xcdGlmIChhaHN0YS1cXHUwMDNlaXNfYXV0aG9yaXplZCkge1xcbiBcXHRcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnZpZi1cXHUwMDNlYnNzaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRXTUlfUEVFUl9BVVRIT1JJWkUsXFxuQEAgLTcwMDUsMTAgKzY5OTMsOSBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3N0YXRpb25fcG9zdF9yZW1vdmUoc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlciBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VzdGEgPT0gc3RhKSB7XFxuK1xcdGlmIChwZWVyIFxcdTAwMjZcXHUwMDI2IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKSA9PSBzdGEpIHtcXG4gXFx0XFx0YXRoMTJrX3dhcm4oYXItXFx1MDAzZWFiLCBcXFwiRm91bmQgcGVlciBlbnRyeSAlcE0gbiB2ZGV2ICVpIGFmdGVyIGl0IHdhcyBzdXBwb3NlZGx5IHJlbW92ZWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICB2aWYtXFx1MDAzZWFkZHIsIGFydmlmLVxcdTAwM2V2ZGV2X2lkKTtcXG4tXFx0XFx0cGVlci1cXHUwMDNlc3RhID0gTlVMTDtcXG4gXFxuIFxcdFxcdGF0aDEya19kcF9saW5rX3BlZXJfZnJlZShwZWVyKTtcXG4gXFx0XFx0YXItXFx1MDAzZW51bV9wZWVycy0tO1xcbkBAIC03MDIxLDIwICs3MDA4LDExIEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zdGF0aW9uX3VuYXV0aG9yaXplKHN0cnVjdCBhdGgxMmsgKmFyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhKVxcbiB7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbiBcXHRpbnQgcmV0O1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cXHUwMDNlYWIpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cXHUwMDNld2lwaHkpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlcilcXG4tXFx0XFx0cGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZCA9IGZhbHNlO1xcbi1cXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4rXFx0YXJzdGEtXFx1MDAzZWFoc3RhLVxcdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBEcml2ZXIgbXVzdCBjbGVhciB0aGUga2V5cyBkdXJpbmcgdGhlIHN0YXRlIGNoYW5nZSBmcm9tXFxuIFxcdCAqIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCB0byBJRUVFODAyMTFfU1RBX0FTU09DLCBzaW5jZSBhZnRlclxcbkBAIC03MDU2LDIxICs3MDM0LDEyIEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zdGF0aW9uX2F1dGhvcml6ZShzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhKVxcbiB7XFxuLVxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi1cXHUwMDNlYWh2aWYpO1xcbiBcXHRpbnQgcmV0O1xcbi1cXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhci1cXHUwMDNlYWIpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cXHUwMDNld2lwaHkpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuLVxcbi1cXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVxcdTAwM2V2ZGV2X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJzdGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRpZiAocGVlcilcXG4tXFx0XFx0cGVlci1cXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZWRwX2xvY2spO1xcbitcXHRhcnN0YS1cXHUwMDNlYWhzdGEtXFx1MDAzZWlzX2F1dGhvcml6ZWQgPSB0cnVlO1xcbiBcXG4gXFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFxcdTAwMjZcXHUwMDI2IGFydmlmLVxcdTAwM2Vpc191cCkge1xcbiBcXHRcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9wZWVyX3BhcmFtKGFyLCBhcnN0YS1cXHUwMDNlYWRkcixcXG5AQCAtMTMyOTIsNiArMTMyNjEsNyBAQCBhdGgxMmtfbWFjX3ZhbGlkYXRlX2ZpeGVkX3JhdGVfc2V0dGluZ3Moc3RydWN0IGF0aDEyayAqYXIsIGVudW0gbmw4MDIxMV9iYW5kIGJhblxcbiBcXHRib29sIGVodF9maXhlZF9yYXRlID0gZmFsc2UsIGhlX2ZpeGVkX3JhdGUgPSBmYWxzZSwgdmh0X2ZpeGVkX3JhdGUgPSBmYWxzZTtcXG4gXFx0Y29uc3QgdTE2ICp2aHRfbWNzX21hc2ssICpoZV9tY3NfbWFzaywgKmVodF9tY3NfbWFzaztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XFxuIFxcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyLCAqdG1wO1xcbiBcXHR1OCB2aHRfbnNzLCBoZV9uc3MsIGVodF9uc3M7XFxuIFxcdGludCByZXQgPSB0cnVlO1xcbkBAIC0xMzMyMSw4ICsxMzI5MSw5IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFxcdTAwMjZkcC1cXHUwMDNlcGVlcnMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKHBlZXItXFx1MDAzZXN0YSkge1xcbi1cXHRcXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShwZWVyLVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRcXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuK1xcdFxcdGlmIChzdGEpIHtcXG4rXFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4gXFx0XFx0XFx0aWYgKCFsaW5rX3N0YSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4gXFx0XFx0XFx0XFx0Z290byBleGl0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXFxuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXFxuQEAgLTI2Niw4ICsyNjYsNiBAQCBpbnQgYXRoMTJrX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMmsgKmFyLCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcXG4gXFx0fVxcbiBcXG4gXFx0cGVlci1cXHUwMDNlcGRldl9pZHggPSBhci1cXHUwMDNlcGRldl9pZHg7XFxuLVxcdHBlZXItXFx1MDAzZXN0YSA9IHN0YTtcXG4tXFxuIFxcdGlmICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikge1xcbiBcXHRcXHRkcF9saW5rX3ZpZi1cXHUwMDNlYXN0X2hhc2ggPSBwZWVyLVxcdTAwM2Vhc3RfaGFzaDtcXG4gXFx0XFx0ZHBfbGlua192aWYtXFx1MDAzZWFzdF9pZHggPSBwZWVyLVxcdTAwM2Vod19wZWVyX2lkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xcbmluZGV4IDAxNmIwYzM4ZTUxZTIuLjcxYjg1Mzk0ZDQ4NzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmNcXG5AQCAtMzM2Miw3ICszMzYyLDcgQEAgYXRoMTJrX3dpZmk3X2RwX21vbl9zcm5nX3Byb2Nlc3Moc3RydWN0IGF0aDEya19wZGV2X2RwICpwZGV2X2RwLCBpbnQgKmJ1ZGdldCxcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLVxcdTAwM2VwZWVyX2lkKTtcXG4tXFx0XFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0XFx0aWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHtcXG4gXFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBtb25pdG9yIHBlZXJfaWQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgIHBwZHVfaW5mby1cXHUwMDNlcGVlcl9pZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbmluZGV4IDU4N2Q1OGVlY2NmYTUuLjJhMDVlMDMxOTRhYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuQEAgLTU1MiwxMyArNTUyLDEyIEBAIGF0aDEya19kcF90eF9odHRfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHR9XFxuIFxcbiBcXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcXG4tXFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0c3RhdHVzLnN0YSA9IGF0aDEya19kcF9saW5rX3BlZXJfZ2V0X3N0YShwZWVyKTtcXG4rXFx0aWYgKCFzdGF0dXMuc3RhKSB7XFxuIFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSxcXG4gXFx0XFx0XFx0ICAgXFxcImRwX3R4OiBmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIHBlZXJfaWQgJWRcXFxcblxcXCIsIHBlZXJfaWQpO1xcbiBcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbXNkdSk7XFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RhdHVzLnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhdHVzLmluZm8gPSBpbmZvO1xcbkBAIC02MjcsNyArNjI2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKGRwX3BkZXYsIHRzLVxcdTAwM2VwZWVyX2lkKTtcXG4tXFx0aWYgKCFwZWVyIHx8ICFwZWVyLVxcdTAwM2VzdGEpIHtcXG4rXFx0c3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xcbitcXHRpZiAoIXN0YSkge1xcbiBcXHRcXHRhdGgxMmtfZGJnKGRwLVxcdTAwM2VhYiwgQVRIMTJLX0RCR19EUF9UWCxcXG4gXFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIGJ5IGlkICV1XFxcXG5cXFwiLCB0cy1cXHUwMDNlcGVlcl9pZCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNjM1LDcgKzYzNSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFxuLVxcdHN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4gXFx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7XFxuIFxcdGFyc3RhID0gXFx1MDAyNmFoc3RhLVxcdTAwM2VkZWZsaW5rO1xcbiBcXG5AQCAtNzUyLDYgKzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yYXRlX3N0YXR1cyBzdGF0dXNfcmF0ZSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IHJhdGVfaW5mbyByYXRlO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSh0cy1cXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XFxuIFxcdFxcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xcbkBAIC04NDYsNyArODQ2LDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRhdGgxMmtfd2lmaTdfZHBfdHhfdXBkYXRlX3R4Y29tcGwoZHBfcGRldiwgdHMpO1xcbiBcXG4gXFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXFx1MDAzZXBlZXJfaWQpO1xcbi1cXHRpZiAoIXBlZXIgfHwgIXBlZXItXFx1MDAzZXN0YSkge1xcbitcXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuK1xcdGlmICghc3RhKSB7XFxuIFxcdFxcdGF0aDEya19lcnIoYWIsXFxuIFxcdFxcdFxcdCAgIFxcXCJkcF90eDogZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgd2l0aCBwZWVyX2lkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICB0cy1cXHUwMDNlcGVlcl9pZCk7XFxuQEAgLTg1NCw3ICs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzLnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4rXFx0c3RhdHVzLnN0YSA9IHN0YTtcXG4gXFx0c3RhdHVzLmluZm8gPSBpbmZvO1xcbiBcXHRzdGF0dXMuc2tiID0gbXNkdTtcXG4gXFx0cmF0ZSA9IHBlZXItXFx1MDAzZWxhc3RfdHhyYXRlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbmluZGV4IGQ1MTYwYWY2MGUwMGQuLjliZWQ4NTJmNjZjNTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5AQCAtNzM3Myw3ICs3MzczLDcgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHVic3RhID0gcGVlci1cXHUwMDNlc3RhO1xcbitcXHRcXHRwdWJzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XFxuIFxcdFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbiBcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbiBcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBwZWVyLVxcdTAwM2VsaW5rX2lkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMjo1My40NTc0NTYwOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1NDY1NTMwOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gV2ktRmkgNyAoYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmspLiBhdGgxMmsgcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gUENJZSBvciBBSEIgaGFyZHdhcmUgKHN1Y2ggYXMgV0NONzg1MCBvciBRQ045Mjc0KSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBBcyBhIHJlc3VsdCwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4ZmI1ODUzNTVkMDI3NmNlYWU3ZTMxZGI2YWVmYjg1NGVkZWEzNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjEyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuaW5kZXggYTk4ZmM2ZTA2OTlkNy4uYTA0NzU3YTAzOGYyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaFxuQEAgLTUyOSw2ICs1MjksOCBAQCBzdHJ1Y3QgYXRoMTJrX3N0YSB7XG4gXHRlbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7XG4gXG4gXHRib29sIGVuYWJsZV80YWRkcjtcbitcbitcdGJvb2wgaXNfYXV0aG9yaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX0hBTEZfMjBNSFpfQldcdDEwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9odHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfaHR0LmNcbmluZGV4IDY4OTY4Zjk2YjRmMWIuLjcyMDY5NjQwYmQzODggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX2h0dC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIGF0aDEya191cGRhdGVfcGVyX3BlZXJfdHhfc3RhdHMoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdXNyX3N0YXRzLVx1MDAzZXBlZXJfaWQpO1xuIFxuLVx0aWYgKCFwZWVyIHx8ICFwZWVyLVx1MDAzZXN0YSkge1xuK1x0aWYgKCFhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jXG5pbmRleCBiYjUzNDFiNDI1MWExLi4wNmY2ZWNjZmI1NzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5jXG5AQCAtMTk1LDM1ICsxOTUsNiBAQCB2b2lkIGF0aDEya19kcF9saW5rX3BlZXJfbWFwX2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IHZkZXZfaWQsIHUxNiBwZWVyX1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gfVxuIFxuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKVxuLXtcbi1cdHN0cnVjdCBhdGgxMmtfc3RhICphaHN0YTtcbi1cdHN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmFyc3RhO1xuLVxuLVx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19oZWxkKCksXG4tXHRcdFx0IFwiYXRoMTJrX2RwX2xpbmtfcGVlciB0byBhdGgxMmtfbGlua19zdGEgY2FsbGVkIHdpdGhvdXQgcmN1IGxvY2tcIik7XG4tXG4tXHRpZiAoIXBlZXItXHUwMDNlc3RhKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdGFoc3RhID0gYXRoMTJrX3N0YV90b19haHN0YShwZWVyLVx1MDAzZXN0YSk7XG4tXHRpZiAocGVlci1cdTAwM2VtbF9pZCBcdTAwMjYgQVRIMTJLX1BFRVJfTUxfSURfVkFMSUQpIHtcbi1cdFx0aWYgKCEoYWhzdGEtXHUwMDNlbGlua3NfbWFwIFx1MDAyNiBCSVQocGVlci1cdTAwM2VsaW5rX2lkKSkpIHtcbi1cdFx0XHRhdGgxMmtfd2FybihhYiwgXCJwZWVyICVwTSBpZCAlZCBsaW5rX2lkICVkIGNhbid0IGZvdW5kIGluIFNUQSBsaW5rX21hcCAweCV4XFxuXCIsXG4tXHRcdFx0XHQgICAgcGVlci1cdTAwM2VhZGRyLCBwZWVyLVx1MDAzZXBlZXJfaWQsIHBlZXItXHUwMDNlbGlua19pZCxcbi1cdFx0XHRcdCAgICBhaHN0YS1cdTAwM2VsaW5rc19tYXApO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdGFyc3RhID0gcmN1X2RlcmVmZXJlbmNlKGFoc3RhLVx1MDAzZWxpbmtbcGVlci1cdTAwM2VsaW5rX2lkXSk7XG4tXHRcdGlmICghYXJzdGEpXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRhcnN0YSA9ICBcdTAwMjZhaHN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0fVxuLVx0cmV0dXJuIGFyc3RhO1xuLX1cbi1cbiBzdGF0aWMgaW50IGF0aDEya19kcF9saW5rX3BlZXJfcmhhc2hfYWRkcl90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcClcbiB7XG4gXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZHAtXHUwMDNlYWI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxuaW5kZXggMzUwMzg0MGIwMzI5NS4uZDAxZWYxYWVhNDhiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3BlZXIuaFxuQEAgLTcwLDcgKzcwLDYgQEAgREVDTEFSRV9FV01BKGF2Z19yc3NpLCAxMCwgOClcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyO1xuIFx0aW50IHZkZXZfaWQ7XG4gXHR1OCBhZGRyW0VUSF9BTEVOXTtcbkBAIC04MSw3ICs4MCw2IEBAIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyIHtcbiBcbiBcdHN0cnVjdCBwcGR1X3VzZXJfZGVsYXliYSBwcGR1X3N0YXRzX2RlbGF5YmE7XG4gXHRib29sIGRlbGF5YmFfZmxhZztcbi1cdGJvb2wgaXNfYXV0aG9yaXplZDtcbiBcdGJvb2wgbWxvO1xuIFx0LyogcHJvdGVjdGVkIGJ5IGFiLVx1MDAzZWRhdGFfbG9jayAqL1xuIFxuQEAgLTE1OSw4ICsxNTcsNiBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfYXN0KHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgYXN0X2hhc2gpO1xuIHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpcbiBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGRldl9hbmRfYWRkcihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdTggcGRldl9pZHgsXG4gXHRcdFx0XHRcdCAgY29uc3QgdTggKmFkZHIpO1xuLXN0cnVjdCBhdGgxMmtfbGlua19zdGEgKmF0aDEya19kcF9saW5rX3BlZXJfdG9fbGlua19zdGEoc3RydWN0IGF0aDEya19iYXNlICphYixcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF90YmxfaW5pdChzdHJ1Y3QgYXRoMTJrX2RwICpkcCk7XG4gdm9pZCBhdGgxMmtfZHBfbGlua19wZWVyX3JoYXNoX3RibF9kZXN0cm95KHN0cnVjdCBhdGgxMmtfZHAgKmRwKTtcbiBpbnQgYXRoMTJrX2RwX2xpbmtfcGVlcl9yaGFzaF9hZGQoc3RydWN0IGF0aDEya19kcCAqZHAsXG5AQCAtMTgzLDQgKzE3OSwxNyBAQCBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfcGVlcmlkKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgdTE2IHBlZXJfaWQpO1xuIHZvaWQgYXRoMTJrX2RwX2xpbmtfcGVlcl9mcmVlKHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyKTtcbiBpbnQgYXRoMTJrX2RwX3BlZXJfZml4dXBfcGVlcl9pZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBjb25zdCB1OCAqcGVlcl9hZGRyLFxuIFx0XHRcdFx0IHUxNiBwZWVyX2lkKTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX211c3RfY2hlY2tcbithdGgxMmtfZHBfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcilcbit7XG4rXHRyZXR1cm4gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqX19tdXN0X2NoZWNrXG4rYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKGNvbnN0IHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpsaW5rX3BlZXIpXG4re1xuK1x0cmV0dXJuIGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZWRwX3BlZXIgP1xuK1x0XHRsaW5rX3BlZXItXHUwMDNlZHBfcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuK31cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbmluZGV4IDhmYTBlOTBiNDUzMTYuLmNkYjc5NTU2N2U4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuQEAgLTEzODIsNyArMTM4Miw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgcnhjYi1cdTAwM2VwZWVyX2lkKTtcbiBcbi1cdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4rXHRwdWJzdGEgPSBhdGgxMmtfZHBfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFxuIFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuIFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCA5OWJmNWNmNzlkMTAyLi40ZWMyZWUxYjE3ZmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgYXRoMTJrX21hY19wZWVyX2NsZWFudXBfYWxsKHN0cnVjdCBhdGgxMmsgKmFyKVxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgXHUwMDI2ZHAtXHUwMDNlcGVlcnMsIGxpc3QpIHtcbiBcdFx0LyogU2tpcCBSeCBUSUQgY2xlYW51cCBmb3Igc2VsZiBwZWVyICovXG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2VkcF9wZWVyKVxuK1x0XHRpZiAoYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKVxuIFx0XHRcdGF0aDEya19kcF9yeF9wZWVyX3RpZF9jbGVhbnVwKGFyLCBwZWVyKTtcbiBcbiBcdFx0LyogY2xlYW51cCBkcCBwZWVyICovXG5AQCAtMzkxNCwxMSArMzkxNCw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRzdHJ1Y3QgYXRoMTJrX2xpbmtfc3RhICphcnN0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhICphcF9zdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX3N0YSAqYWhzdGE7XG4tXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbi1cdGJvb2wgaXNfYXV0aCA9IGZhbHNlO1xuIFx0dTMyIGhlbW9kZSA9IDA7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG5AQCAtNDAyMiwxNyArNDAxOSw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19ic3NfYXNzb2Moc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdCAgIFwibWFjIHZkZXYgJWQgdXAgKGFzc29jaWF0ZWQpIGJzc2lkICVwTSBhaWQgJWRcXG5cIixcbiBcdFx0ICAgYXJ2aWYtXHUwMDNldmRldl9pZCwgYnNzX2NvbmYtXHUwMDNlYnNzaWQsIHZpZi1cdTAwM2VjZmcuYWlkKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbi1cbi1cdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbi1cdFx0XHRcdFx0XHRcdCBhcnZpZi1cdTAwM2Vic3NpZCk7XG4tXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2Vpc19hdXRob3JpemVkKVxuLVx0XHRpc19hdXRoID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuLVxuIFx0LyogQXV0aG9yaXplIEJTUyBQZWVyICovXG4tXHRpZiAoaXNfYXV0aCkge1xuK1x0aWYgKGFoc3RhLVx1MDAzZWlzX2F1dGhvcml6ZWQpIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJ2aWYtXHUwMDNlYnNzaWQsXG4gXHRcdFx0XHRcdFx0YXJ2aWYtXHUwMDNldmRldl9pZCxcbiBcdFx0XHRcdFx0XHRXTUlfUEVFUl9BVVRIT1JJWkUsXG5AQCAtNzAwNSwxMCArNjk5Myw5IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tYWNfc3RhdGlvbl9wb3N0X3JlbW92ZShzdHJ1Y3QgYXRoMTJrICphcixcbiBcbiBcdHBlZXIgPSBhdGgxMmtfZHBfbGlua19wZWVyX2ZpbmRfYnlfdmRldl9hbmRfYWRkcihkcCwgYXJ2aWYtXHUwMDNldmRldl9pZCxcbiBcdFx0XHRcdFx0XHRcdCBhcnN0YS1cdTAwM2VhZGRyKTtcbi1cdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBwZWVyLVx1MDAzZXN0YSA9PSBzdGEpIHtcbitcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcikgPT0gc3RhKSB7XG4gXHRcdGF0aDEya193YXJuKGFyLVx1MDAzZWFiLCBcIkZvdW5kIHBlZXIgZW50cnkgJXBNIG4gdmRldiAlaSBhZnRlciBpdCB3YXMgc3VwcG9zZWRseSByZW1vdmVkXFxuXCIsXG4gXHRcdFx0ICAgIHZpZi1cdTAwM2VhZGRyLCBhcnZpZi1cdTAwM2V2ZGV2X2lkKTtcbi1cdFx0cGVlci1cdTAwM2VzdGEgPSBOVUxMO1xuIFxuIFx0XHRhdGgxMmtfZHBfbGlua19wZWVyX2ZyZWUocGVlcik7XG4gXHRcdGFyLVx1MDAzZW51bV9wZWVycy0tO1xuQEAgLTcwMjEsMjAgKzcwMDgsMTEgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fdW5hdXRob3JpemUoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gZmFsc2U7XG4tXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbitcdGFyc3RhLVx1MDAzZWFoc3RhLVx1MDAzZWlzX2F1dGhvcml6ZWQgPSBmYWxzZTtcbiBcbiBcdC8qIERyaXZlciBtdXN0IGNsZWFyIHRoZSBrZXlzIGR1cmluZyB0aGUgc3RhdGUgY2hhbmdlIGZyb21cbiBcdCAqIElFRUU4MDIxMV9TVEFfQVVUSE9SSVpFRCB0byBJRUVFODAyMTFfU1RBX0FTU09DLCBzaW5jZSBhZnRlclxuQEAgLTcwNTYsMjEgKzcwMzQsMTIgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3N0YXRpb25fYXV0aG9yaXplKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdFx0c3RydWN0IGF0aDEya19saW5rX3N0YSAqYXJzdGEpXG4ge1xuLVx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXRoMTJrX2FodmlmX3RvX3ZpZihhcnZpZi1cdTAwM2VhaHZpZik7XG4gXHRpbnQgcmV0O1xuLVx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYXItXHUwMDNlYWIpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkoYXRoMTJrX2FyX3RvX2h3KGFyKS1cdTAwM2V3aXBoeSk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4tXG4tXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3ZkZXZfYW5kX2FkZHIoZHAsIGFydmlmLVx1MDAzZXZkZXZfaWQsXG4tXHRcdFx0XHRcdFx0XHQgYXJzdGEtXHUwMDNlYWRkcik7XG4tXHRpZiAocGVlcilcbi1cdFx0cGVlci1cdTAwM2Vpc19hdXRob3JpemVkID0gdHJ1ZTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuK1x0YXJzdGEtXHUwMDNlYWhzdGEtXHUwMDNlaXNfYXV0aG9yaXplZCA9IHRydWU7XG4gXG4gXHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjYgYXJ2aWYtXHUwMDNlaXNfdXApIHtcbiBcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfcGVlcl9wYXJhbShhciwgYXJzdGEtXHUwMDNlYWRkcixcbkBAIC0xMzI5Miw2ICsxMzI2MSw3IEBAIGF0aDEya19tYWNfdmFsaWRhdGVfZml4ZWRfcmF0ZV9zZXR0aW5ncyhzdHJ1Y3QgYXRoMTJrICphciwgZW51bSBubDgwMjExX2JhbmQgYmFuXG4gXHRib29sIGVodF9maXhlZF9yYXRlID0gZmFsc2UsIGhlX2ZpeGVkX3JhdGUgPSBmYWxzZSwgdmh0X2ZpeGVkX3JhdGUgPSBmYWxzZTtcbiBcdGNvbnN0IHUxNiAqdmh0X21jc19tYXNrLCAqaGVfbWNzX21hc2ssICplaHRfbWNzX21hc2s7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlciwgKnRtcDtcbiBcdHU4IHZodF9uc3MsIGhlX25zcywgZWh0X25zcztcbiBcdGludCByZXQgPSB0cnVlO1xuQEAgLTEzMzIxLDggKzEzMjkxLDkgQEAgYXRoMTJrX21hY192YWxpZGF0ZV9maXhlZF9yYXRlX3NldHRpbmdzKHN0cnVjdCBhdGgxMmsgKmFyLCBlbnVtIG5sODAyMTFfYmFuZCBiYW5cbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0bXAsIFx1MDAyNmRwLVx1MDAzZXBlZXJzLCBsaXN0KSB7XG4tXHRcdGlmIChwZWVyLVx1MDAzZXN0YSkge1xuLVx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuK1x0XHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRcdGlmIChzdGEpIHtcbitcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuaW5kZXggODBlZGViZjBlMzY0Yi4uMGU4OTQ0MDhlOTdmZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BlZXIuY1xuQEAgLTI2Niw4ICsyNjYsNiBAQCBpbnQgYXRoMTJrX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMmsgKmFyLCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdH1cbiBcbiBcdHBlZXItXHUwMDNlcGRldl9pZHggPSBhci1cdTAwM2VwZGV2X2lkeDtcbi1cdHBlZXItXHUwMDNlc3RhID0gc3RhO1xuLVxuIFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbiBcdFx0ZHBfbGlua192aWYtXHUwMDNlYXN0X2hhc2ggPSBwZWVyLVx1MDAzZWFzdF9oYXNoO1xuIFx0XHRkcF9saW5rX3ZpZi1cdTAwM2Vhc3RfaWR4ID0gcGVlci1cdTAwM2Vod19wZWVyX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX21vbi5jXG5pbmRleCAwMTZiMGMzOGU1MWUyLi43MWI4NTM5NGQ0ODc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9tb24uY1xuQEAgLTMzNjIsNyArMzM2Miw3IEBAIGF0aDEya193aWZpN19kcF9tb25fc3JuZ19wcm9jZXNzKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqcGRldl9kcCwgaW50ICpidWRnZXQsXG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQocGRldl9kcCwgcHBkdV9pbmZvLVx1MDAzZXBlZXJfaWQpO1xuLVx0XHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRcdGlmICghYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpKSB7XG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCJmYWlsZWQgdG8gZmluZCB0aGUgcGVlciB3aXRoIG1vbml0b3IgcGVlcl9pZCAlZFxcblwiLFxuIFx0XHRcdFx0ICAgcHBkdV9pbmZvLVx1MDAzZXBlZXJfaWQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuaW5kZXggNTg3ZDU4ZWVjY2ZhNS4uMmEwNWUwMzE5NGFhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5AQCAtNTUyLDEzICs1NTIsMTIgQEAgYXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHR9XG4gXG4gXHRwZWVyID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9maW5kX2J5X3BlZXJpZChkcF9wZGV2LCBwZWVyX2lkKTtcbi1cdGlmICghcGVlciB8fCAhcGVlci1cdTAwM2VzdGEpIHtcbitcdHN0YXR1cy5zdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YXR1cy5zdGEpIHtcbiBcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdCAgIFwiZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwiLCBwZWVyX2lkKTtcbiBcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIG1zZHUpO1xuIFx0XHRnb3RvIGV4aXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdGF0dXMuc3RhID0gcGVlci1cdTAwM2VzdGE7XG4gXHR9XG4gXG4gXHRzdGF0dXMuaW5mbyA9IGluZm87XG5AQCAtNjI3LDcgKzYyNiw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF91cGRhdGVfdHhjb21wbChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRpbnQgcmV0O1xuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4tXHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RQX1RYLFxuIFx0XHRcdCAgIFwiZmFpbGVkIHRvIGZpbmQgdGhlIHBlZXIgYnkgaWQgJXVcXG5cIiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4gXHRcdHJldHVybjtcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X3VwZGF0ZV90eGNvbXBsKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcbi1cdHN0YSA9IHBlZXItXHUwMDNlc3RhO1xuIFx0YWhzdGEgPSBhdGgxMmtfc3RhX3RvX2Foc3RhKHN0YSk7XG4gXHRhcnN0YSA9IFx1MDAyNmFoc3RhLVx1MDAzZWRlZmxpbms7XG4gXG5AQCAtNzUyLDYgKzc1MSw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmF0ZV9zdGF0dXMgc3RhdHVzX3JhdGUgPSB7fTtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IHJhdGVfaW5mbyByYXRlO1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UodHMtXHUwMDNlYnVmX3JlbF9zb3VyY2UgIT0gSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU0pKSB7XG4gXHRcdC8qIE11c3Qgbm90IGhhcHBlbiAqL1xuQEAgLTg0Niw3ICs4NDYsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRhdGgxMmtfd2lmaTdfZHBfdHhfdXBkYXRlX3R4Y29tcGwoZHBfcGRldiwgdHMpO1xuIFxuIFx0cGVlciA9IGF0aDEya19kcF9saW5rX3BlZXJfZmluZF9ieV9wZWVyaWQoZHBfcGRldiwgdHMtXHUwMDNlcGVlcl9pZCk7XG4tXHRpZiAoIXBlZXIgfHwgIXBlZXItXHUwMDNlc3RhKSB7XG4rXHRzdGEgPSBhdGgxMmtfZHBfbGlua19wZWVyX2dldF9zdGEocGVlcik7XG4rXHRpZiAoIXN0YSkge1xuIFx0XHRhdGgxMmtfZXJyKGFiLFxuIFx0XHRcdCAgIFwiZHBfdHg6IGZhaWxlZCB0byBmaW5kIHRoZSBwZWVyIHdpdGggcGVlcl9pZCAlZFxcblwiLFxuIFx0XHRcdCAgIHRzLVx1MDAzZXBlZXJfaWQpO1xuQEAgLTg1NCw3ICs4NTUsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGVfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHN0YXR1cy5zdGEgPSBwZWVyLVx1MDAzZXN0YTtcbitcdHN0YXR1cy5zdGEgPSBzdGE7XG4gXHRzdGF0dXMuaW5mbyA9IGluZm87XG4gXHRzdGF0dXMuc2tiID0gbXNkdTtcbiBcdHJhdGUgPSBwZWVyLVx1MDAzZWxhc3RfdHhyYXRlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCBkNTE2MGFmNjBlMDBkLi45YmVkODUyZjY2YzUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTczNzMsNyArNzM3Myw3IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRwdWJzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbitcdFx0cHVic3RhID0gYXRoMTJrX2RwX2xpbmtfcGVlcl9nZXRfc3RhKHBlZXIpO1xuIFx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbiBcdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4gXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMjo1My40NTc0NTg2MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM1NzQzOTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY2F0ZWdvcmllcy4gSSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgaGVyZTsgYSBmYWxzZSBuZWdhdGl2ZSB3YXN0ZXMgdmFsdWFibGUgZnV6emluZyByZXNvdXJjZXMuXG5cblRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBkZWxpbmVhdGUgc2V2ZXJhbCBzY2VuYXJpb3M6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgKHByX2VyciwgcHJpbnRrLCB0cmFjZXBvaW50cyksIG5vbi1mdW5jdGlvbmFsIGNvbnN0YW50L21hY3JvIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UsIFFFTVUpLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgKFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcWVkLCBhbWRncHUpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgdGhhdCBhcmUgb25seSBleGVjdXRlZCBvbiBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIG1vZGlmaWVkIGZpbGVzOiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmhgLCBgZHBfaHR0LmNgLCBgZHBfcGVlci5jYCwgYGRwX3BlZXIuaGAsIGBkcF9yeC5jYCwgYG1hYy5jYCwgYHBlZXIuY2AsIGB3aWZpNy9kcF9tb24uY2AsIGB3aWZpNy9kcF90eC5jYCwgYW5kIGB3bWkuY2AuIFJpZ2h0IGF3YXksIHRoZXNlIHBvaW50IHRvIHRoZSBgYXRoMTJrYCBkaXJlY3RvcnkuIEkga25vdyB0aGF0IGBhdGgxMmtgIGlzIFF1YWxjb21tJ3MgSUVFRSA4MDIuMTFiZSAoV2ktRmkgNykgd2lyZWxlc3MgZHJpdmVyLCBzdXBwb3J0aW5nIFBDSWUsIEFIQiwgYW5kIG90aGVyIGludGVyZmFjZXMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCBpbnZvbHZlIGNvZGUgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUsIG9yLCBjYW4gaXQgYmUgcnVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHN0YW5kYXJkIFFFTVUgY2FuIGVtdWxhdGUgdGhlIHJlcXVpcmVkIGhhcmR3YXJlIHRvIGV4ZWN1dGUgdGhlIHBhdGNoZWQgY29kZSBwYXRocy4gSWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBwYXRjaCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuSSdsbCBjaGVjayB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9gIHVzaW5nIGBncmVwcGVyYCBvciBieSBkaXJlY3QgaW5zcGVjdGlvbi4gSWYgSSBmaW5kIHRoYXQgdGhlIGNvZGUgcGF0aHMgaW4gdGhlc2UgZmlsZXMgYXJlIHRpZWQgZGlyZWN0bHkgdG8gcGh5c2ljYWwgV2ktRmkgNyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBzdHJhaWdodGZvcndhcmQsIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBjYW4gYmUgdGVzdGVkIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZW52aXJvbm1lbnQuIE90aGVyd2lzZSwgdGhlIGZ1enppbmcgd29uJ3QgYmUgcHJvZHVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjEyLjgxNDkwMjUzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc3MjM5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoyOmNvbmZpZyBBVEgxMktcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gV2ktRmkgNyBzdXBwb3J0IChhdGgxMmspXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI1OmNvbmZpZyBBVEgxMktfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzU6Y29uZmlnIEFUSDEyS19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00NS1cXHRib29sIFxcXCJhdGgxMmsgdHJhY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1Mzpjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU0LVxcdGJvb2wgXFxcImF0aDEyayBjb3JlZHVtcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MTMuMzUyNjMxOTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc1MDExMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBhdGgxMmtgIGRpcmVjdG9yeS4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBpcyB0eXBpY2FsbHkgdGhlIGJyYWluIG9mIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEl0J3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBmb3IgdGhlIGRyaXZlciBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgb3V0bGluZWQsIGFuZCB0aGUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgZWFjaCBvcHRpb24gaXMgbG9jYXRlZC4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0b3Agd2hlbiBkaWdnaW5nIGludG8gdW5kZXJzdGFuZGluZyBvciBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzLCBvciB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcywgbW9kdWxlcywgb3IgaGFyZHdhcmUgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MTcuMTAyNzQ3MDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1BBU1xcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoxNy4xMDI4NzQ5MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDM0ODE5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYXRoMTJrJ3MgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGF0aDEyayBkcml2ZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0ICpyZXF1aXJlcyogcmVhbCBoYXJkd2FyZS4gSSBrbm93IGl0J3MgYSBkcml2ZXIgZm9yIFF1YWxjb21tJ3MgV2ktRmkgNyBjaGlwc2V0cywgdGhpbmdzIGxpa2UgdGhlIFdDTjc4NTAgb3IgUUNOOTI3NCwgd2hpY2ggYXJlIFBDSWUgb3IgQUhCIGJhc2VkLiBDYW4gSSBlbXVsYXRlIGl0IGluIFFFTVU/IE5vLCB0aGF0J3MgYSBuby1nby4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IGRvIHRoYXQuXG5cblJpZ2h0LCB0aW1lIHRvIHJlLXJlYWQgdGhlIGd1aWRlbGluZXMgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIiBFc3NlbnRpYWxseSwgaWYgdGhlIGNvZGUgcGF0aCBuZWVkcyByZWFsIGhhcmR3YXJlIHRoYXQncyBub3QgZW11bGF0ZWQsIGl0J3Mgb3V0LiBUaGUgZ3VpZGVsaW5lcyBleHBsaWNpdGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFVzLCB0aGF0IGRlbWFuZCBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGV5IGFsc28gbWVudGlvbiB0aGF0IGRyaXZlciAucmVtb3ZlIGFuZCAuc2h1dGRvd24gZnVuY3Rpb25zIGFyZW4ndCB3b3J0aCB0aGUgZWZmb3J0IHNpbmNlIHRoZXkgcmVxdWlyZSBob3QtdW5wbHVnIG9wZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGJhY2sgdG8gYXRoMTJrLiBJdCdzICpkZWZpbml0ZWx5KiBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIsIGRlc2lnbmVkIGZvciBRdWFsY29tbSdzIFdpLUZpIDcgZGV2aWNlcy4gVGhpbmtpbmcgYWJvdXQgYnVzZXM6IHRoZSBXQ043ODUwIGlzIFBDSSBiYXNlZCwgYW5kIHRoZSBJUFE1MzMyIGlzIEFIQiBiYXNlZC4gRG9lcyBpdCB3b3JrIHdpdGggbWFjODAyMTFfaHdzaW0/IE5haCwgbWFjODAyMTFfaHdzaW0gaXMgYSBzZXBhcmF0ZSBkcml2ZXIuIERvZXMgaXQgaGF2ZSBhbnkgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHN1cHBvcnQgYXQgYWxsPyBOZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYCBkaXJlY3RvcnkgdG8gc2VlIHdoYXQgYnVzZXMgYW5kIGhhcmR3YXJlIGl0IGV2ZW4gKnN1cHBvcnRzKi4gSWYgaXQncyBhbGwgYmFzZWQgb24gcGh5c2ljYWwgaGFyZHdhcmUsIHRoZW4gaXQgcHJvYmFibHkgaXNuJ3QgYSBnb29kIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoyNi4xMzc2OTg0NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODUzODM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlcnxtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjI2LjI3NzU2MTE3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk3OTU2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYXRoMTJrIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgaG93IHRoZSBhdGgxMmsgZHJpdmVyIGFjdHVhbGx5IHJlZ2lzdGVycyBpdHNlbGYuIEkgd2FudCB0byB0cmFjZSB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lY2hhbmlzbXMgaW52b2x2ZWQgaW4gZGV2aWNlIHByb2JpbmcgYW5kIGJpbmRpbmcuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJ3MgZGV2aWNlIG1vZGVsLCBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uIGZvciB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgbnVhbmNlcyBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgUENJL1NESU8vVVNCIHByb2JlIGZ1bmN0aW9ucyBpdCB1dGlsaXplcywgYW5kIGhvdyBpdCBtYXBzIGhhcmR3YXJlIGZlYXR1cmVzIHRvIGtlcm5lbCBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0aW9uLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gcGxhY2UsIGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaGlnaC1wZXJmb3JtYW5jZSB3aXJlbGVzcyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50IGFuZCBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzoyOC42MTczNjg2MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjEzNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjI4LjcxNjk4OTI0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDIwNTAxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBDb3JlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIEF0aGVyb3MgV2lGaSA3IGRyaXZlciBjb2RlLiBTcGVjaWZpY2FsbHksIGxldCdzIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmb3IgV2lGaSA3IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmYW1pbHkgc2hvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcm91bmQgZmVhdHVyZXMgbGlrZSBNdWx0aS1MaW5rIE9wZXJhdGlvbiAoTUxPKSwgdGhlIG5ldyBtb2R1bGF0aW9uIHNjaGVtZXMgKGxpa2UgNDA5Ni1RQU0pLCBhbmQgcGVyaGFwcyB0aGUgaW5pdGlhbCBsb2dpYyBmb3IgMzIwTUh6IGNoYW5uZWwgc3VwcG9ydCwgYWxsIGNyaXRpY2FsIGZvciB0aGlzIG5leHQtZ2VuIHN0YW5kYXJkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSSBjYWxscyB0aGF0IGdsdWUgdG9nZXRoZXIgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB3aXRoIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBlbm91Z2ggdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgdGhlIGluY3JlYXNlZCBjb21wbGV4aXR5LiBMZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBhd2FpdCB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzozMy4xMzc0OTQ0OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcIi4uL2FoYi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcIi4uL3BjaS5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImFoYi5oXFxcIlxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJkcC5oXFxcIlxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcIi4uL2RlYnVnLmhcXFwiXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDE5OlxcdHtcXG4gIDIwOlxcdFxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRkcCA9IGF0aDEya193aWZpN19kcF9kZXZpY2VfYWxsb2MoYWIpO1xcbiAgMjM6XFx0XFx0aWYgKCFkcCkge1xcbiAgMjQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImRwIGFsbG9jIGZhaWxlZFxcXCIpO1xcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAyNjpcXHRcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdGFiLVxcdTAwM2VkcCA9IGRwO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRyZXR1cm4gMDtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDM0OlxcdHtcXG4gIDM1OlxcdFxcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cXHUwMDNlZHApO1xcbiAgMzY6XFx0XFx0YWItXFx1MDAzZWRwID0gTlVMTDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0YWhiX2VyciA9IGF0aDEya193aWZpN19haGJfaW5pdCgpO1xcbiAgNDI6XFx0XFx0aWYgKGFoYl9lcnIpXFxuICA0MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ0OlxcdFxcdFxcdFxcdGFoYl9lcnIpO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRwY2lfZXJyID0gYXRoMTJrX3dpZmk3X3BjaV9pbml0KCk7XFxuICA0NzpcXHRcXHRpZiAocGNpX2VycilcXG4gIDQ4OlxcdFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0cGNpX2Vycik7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdC8qIElmIGJvdGggZmFpbGVkLCByZXR1cm4gb25lIG9mIHRoZSBmYWlsdXJlcyAoYXJiaXRyYXJ5KSAqL1xcbiAgNTI6XFx0XFx0cmV0dXJuIGFoYl9lcnIgXFx1MDAyNlxcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aWYgKCFwY2lfZXJyKVxcbiAgNTg6XFx0XFx0XFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmICghYWhiX2VycilcXG4gIDYxOlxcdFxcdFxcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuICA2NTpcXHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFiZSBXTEFOIGRldmljZXNcXFwiKTtcXG4gIDY4OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTM6MzMuMTM3NjAwNDM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODUzNDkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gdGhlIGBhdGgxMmtgIGRyaXZlci4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgUXVhbGNvbW0ncyA4MDIuMTFiZSBXTEFOIGNoaXBzLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBpbml0aWFsaXplcyB0aGUgQUhCIHBsYXRmb3JtIGRyaXZlciAqYW5kKiB0aGUgUENJIGRyaXZlciBmb3IgdGhpcyBoYXJkd2FyZS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhlc2UgZHJpdmVycyBhcmUgKmRlcGVuZGVudCogb24gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IFF1YWxjb21tIFdpLUZpIDcgY2hpcHNldHMgbGlrZSB0aGUgV0NONzg1MCBvciBRQ045Mjc0LCBzcGVjaWZpY2FsbHkuIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byBwcm9iZSBvciB0ZXN0IHRoaXMgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUuXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJ1bGVzIHRvIGJlIHN1cmUuIEFscmlnaHQsIHNvIHRoZSBydWxlcyBzdGF0ZSB0aGF0IHdlIG5lZWQgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZyAobGlrZSBgcHJfZXJyYCBvciBgcHJpbnRrYCBjYWxscyksIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJ3QgY2hhbmdlIHRoZSBwcm9ncmFtIGZsb3csIGNvZGUgcGF0aHMgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBhbHNvLCBkcml2ZXIgcmVtb3ZhbCBvciBzaHV0ZG93biBjYWxsYmFja3MgdGhhdCBvY2N1ciBkdXJpbmcgaG90LXVucGx1ZyBvcGVyYXRpb25zLlxuXG5Pa2F5LCBzbyBsb29raW5nIGJhY2sgYXQgYGF0aDEya2AsIGl0IGlzIGRlZmluaXRlbHkgdmVuZG9yLXNwZWNpZmljLCBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIGhhcmR3YXJlLiBJdCBhbHNvIHVzZXMgUENJL0FIQiBhbmQgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3cgdG8gcHJlcGFyZSB0aGUgYXJndW1lbnRzIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJIG5lZWQgdG8ganVzdGlmeSB0aGUgcmVhc29uaW5nLiBTbywgSSB3aWxsIG5lZWQgdG8gc2V0OlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNwZWNpZmljIHN5bWJvbHMgb2YgaW50ZXJlc3QpXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiXG5cbk5vdyBJIHNob3VsZCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBhcmd1bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzg4LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEzOjM4LjkyMjk1MjMxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBXaS1GaSA3IChhdGgxMmspIHdpcmVsZXNzIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyaykuIGF0aDEyayByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBQQ0llIG9yIEFIQiBoYXJkd2FyZSAoc3VjaCBhcyBXQ043ODUwIG9yIFFDTjkyNzQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIEFzIGEgcmVzdWx0LCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFF1YWxjb21tIFdpLUZpIDcgKGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrKS4gYXRoMTJrIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFBDSWUgb3IgQUhCIGhhcmR3YXJlIChzdWNoIGFzIFdDTjc4NTAgb3IgUUNOOTI3NCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQXMgYSByZXN1bHQsIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMzozOC45MjI5ODk0NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86zrz[1] Phase: Running StartedAt: 2026-09-01 20:13:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86zrz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-01 20:13:50 +0000 UTC FinishedAt: 2026-09-01 20:14:05 +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,}