Name: series-workflowss86t Phase: Failed StartedAt: 2026-09-07 00:59:48 +0000 UTC FinishedAt: 2026-09-07 01:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowss86t[0] Phase: Succeeded StartedAt: 2026-09-07 00:59:48 +0000 UTC FinishedAt: 2026-09-07 01:01:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowss86t[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 00:59:48 +0000 UTC FinishedAt: 2026-09-07 01:01:21 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxNGExMWQxNDMyZmI0NjI4NWE3ZWZjMTAxMjA1NzlkZTZhMGMwZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjAxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGhlbGxvICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcXFxuICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTE0Myw2ICYjNDM7MTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5pbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxuJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcbiAkKE9VVFBVVCl0ZXN0LWxpYnRyYWNlZnMuYmluOlxuIFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcdTAwM2UvZGV2L251bGwpIC1sdHJhY2Vmc1xuIFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XG4tXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXG4tXG4tJChPVVRQVVQpdGVzdC1ndGsyLWluZm9iYXIuYmluOlxuLVx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcbiYjNDM7XHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiBcbiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxMiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NndGsvZ3RrLmhcdTAwM2Vcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLXtcbi1cdGd0a19pbml0KFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YpO1xuLVx0Z3RrX2luZm9fYmFyX25ldygpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xucmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcJiMzNDstV3N0cmljdC1wcm90b3R5cGVzXCYjMzQ7XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7aW50IG1haW4odm9pZClcbiB7XG4tXHRndGtfaW5pdChcdTAwMjZhcmdjLCBcdTAwMjZhcmd2KTtcbiYjNDM7XHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OU1xuIFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcbiBcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXG4gXG4tLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLlxuJiM0MzstLWd0azo6IFVzZSB0aGUgR1RLNCBpbnRlcmZhY2UuXG4gXG4gLWs6OlxuIC0tdm1saW51eD1cdTAwM2NmaWxlXHUwMDNlOjpcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4mIzQzO1x0QCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXRcbiBcbiBidWlsZC10ZXN0LXRhcmJhbGw6XG4gXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5pbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5AQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuLWlmZGVmIEdUSzJcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuJiM0MztpZmRlZiBHVEs0XG4mIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4mIzQzOyAgaWZuZXEgKCQoZmVhdHVyZS1ndGs0KSwgMSlcbiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldilcbiYjNDM7ICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVFxuLSAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBDRkxBR1MgJiM0Mzs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbFxuJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50b1xuJiM0MzsgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlXG4mIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS5cbiYjNDM7ICAgIExERkxBR1MgJiM0Mzs9IC1yZHluYW1pY1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWtcbiAjXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxuICNcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuICNcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQyYjNDM7JiM0Mzsgc3ltYm9sIGRlbWFuZ2xpbmcuXG4gI1xuQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpXG4gICBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xuIGVuZGlmXG5AQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiBcdCQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRib29sXHQgICB1c2VfZ3RrO1xuICNlbmRpZlxuIFx0Ym9vbFx0ICAgc2tpcF9taXNzaW5nO1xuQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRPUFRfQk9PTEVBTigmIzM5O3EmIzM5OywgXCYjMzQ7cXVpZXRcJiMzNDssIFx1MDAyNnF1aWV0LCBcJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcJiMzNDspLFxuIFx0T1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssIFwmIzM0O2R1bXAtcmF3LXRyYWNlXCYjMzQ7LCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcJiMzNDspLFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXCYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG5AQCAtODI4LDcgJiM0Mzs4MjgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiBcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwmIzM0Oy0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcbiBcdFx0dXNlX2Jyb3dzZXIgPSAyO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5AQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7XG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV90dWk7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0T1BUX0JPT0xFQU4oMCwgXCYjMzQ7dHVpXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbi1cdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2VcJiMzNDspLFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7XHRPUFRfQk9PTEVBTigwLCBcJiMzNDtndGtcJiMzNDssIFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O3N0ZGlvXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3N0ZGlvLFxuIFx0XHQgICAgXCYjMzQ7VXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcJiMzNDspLFxuQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcbiBcdFx0dXNlX2Jyb3dzZXIgPSAxO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggJiM0MzsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcbiBcdCMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkXG4gXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxuIFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cbi1cdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZFxuLVx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4mIzQzO1x0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzQsIExJQlBFUkwgYW5kXG4mIzQzO1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXG4gbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MVxuIG1ha2Vfbm9fc2R0XHQgICAgOj0gTk9fU0RUPTFcbiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MVxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXG4mIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XCYjMzQ7LURSRUZDTlRfQ0hFQ0tJTkc9MVwmIzM0O1xuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xuIG1ha2VfY3Njb3BlICAgICAgICAgOj0gY3Njb3BlXG5AQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6XG4gXHQkKGNhbGwgdGVzdCwkQCkgXHUwMDI2XHUwMDI2IFxcXG4gXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXG4gXG4tbWFrZV93aXRoX2d0azI6XG4mIzQzO21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCYjMzQ7Y2QgJChQRVJGKSBcdTAwMjZcdTAwMjYgJChNQUtFX0YpICQoJEApICQoUEFSQUxMRUxfT1BUKSAkKE9fT1BUKSBERVNURElSPSQkVE1QX0RFU1RcJiMzNDs7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcbmluZGV4IDg5MjBlMjk4NDIwYTguLmE5NjI5YmFhNjUwNzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4mIzQzO1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIFx1MDAyNm5vdGVzLVx1MDAzZXNyYy1cdTAwM2Vzb3VyY2UsIGFsLm5vZGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb3MtXHUwMDNlYWwubm9kZSk7XG5AQCAtMjExLDM0ICYjNDM7MjExLDMwIEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLFxuIFx0XHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XG4gXHRcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4mIzQzO1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwmIzM0O3BlcmYgYW5ub3RhdGVcJiMzNDspO1xuIFxuLVx0XHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7ZGVsZXRlX2V2ZW50XCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0XHRpZiAoIXBnY3R4KVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4mIzQzO1x0XHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcbiBcdFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XG4gXHRcdHBnY3R4LVx1MDAzZW5vdGVib29rID0gbm90ZWJvb2s7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdFx0aW5mb2JhciA9IHBlcmZfZ3RrX19zZXR1cF9pbmZvX2JhcigpO1xuLVx0XHRpZiAoaW5mb2Jhcikge1xuLVx0XHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvYmFyLFxuLVx0XHRcdFx0XHQgICBGQUxTRSwgRkFMU0UsIDApO1xuLVx0XHR9XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTtcbiBcbiBcdFx0c3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTtcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbiYjNDM7XHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXHR9XG4gXG4tXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcbiYjNDM7XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xuIFx0dGFiX2xhYmVsID0gZ3RrX2xhYmVsX25ldyhzeW0tXHUwMDNlbmFtZSk7XG4gXG4gXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxuQEAgLTI2NywxMiAmIzQzOzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XG4gXG4tXHRndGtfbWFpbigpO1xuJiM0MztcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XG4gXG4gXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFx1MDAyNnBnY3R4KTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5pbmRleCBkMmRhZGYzODczZmJkLi5lMWQyODY5NDU4MzI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmNcbkBAIC0xNiwyMSAmIzQzOzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKVxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXG4ge1xuIFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XG4tXHRHZGtTY3JlZW4gKnNjcmVlbjtcbi1cdGludCBtb25pdG9yO1xuJiM0MztcdEdka01vbml0b3IgKm1vbml0b3I7XG4mIzQzO1x0R2RrRGlzcGxheSAqZGlzcGxheTtcbiYjNDM7XHRHTGlzdE1vZGVsICptb25pdG9ycztcbiBcdGludCBoZWlnaHQ7XG4gXHRpbnQgd2lkdGg7XG4gXG4tXHRzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTtcbiYjNDM7XHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xuJiM0MztcdG1vbml0b3JzID0gZ2RrX2Rpc3BsYXlfZ2V0X21vbml0b3JzKGRpc3BsYXkpO1xuJiM0MztcdG1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApO1xuJiM0MztcdGlmICghbW9uaXRvcikge1xuJiM0MztcdFx0Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgODAwLCA2MDApO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdG1vbml0b3IgPSBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdy1cdTAwM2V3aW5kb3cpO1xuLVxuLVx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuJiM0MztcdGdka19tb25pdG9yX2dldF9nZW9tZXRyeShtb25pdG9yLCBcdTAwMjZyZWN0KTtcbiYjNDM7XHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcbiBcbiBcdHdpZHRoXHQ9IHJlY3Qud2lkdGggKiAzIC8gNDtcbiBcdGhlaWdodFx0PSByZWN0LmhlaWdodCAqIDMgLyA0O1xuIFxuLVx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbiYjNDM7XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGVyZl9ndGtfX21haW5fbG9vcClcbiYjNDM7XHRcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEZBTFNFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KVxuJiM0Mzt7XG4mIzQzO1x0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwmIzM0O2Nsb3NlLXJlcXVlc3RcJiMzNDssXG4mIzQzO1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuJiM0MztcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcbiYjNDM7XHRnX2NsZWFyX3BvaW50ZXIoXHUwMDI2cGVyZl9ndGtfX21haW5fbG9vcCwgZ19tYWluX2xvb3BfdW5yZWYpO1xuIH1cbiBcbiBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG5AQCAtNDIsMjMgJiM0Mzs3NCwyMCBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIHtcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKmxhYmVsO1xuLVx0R3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7XG4gXG4gXHRpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTtcbi1cdGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKGluZm9fYmFyLCBUUlVFKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGluZm9fYmFyLCBGQUxTRSk7XG4gXG4gXHRsYWJlbCA9IGd0a19sYWJlbF9uZXcoXCYjMzQ7XCYjMzQ7KTtcbiBcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuJiM0MztcdGd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpO1xuIFxuLVx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLFxuJiM0MztcdGd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIFwmIzM0O19PS1wmIzM0OyxcbiBcdFx0XHRcdEdUS19SRVNQT05TRV9PSyk7XG4gXHRnX3NpZ25hbF9jb25uZWN0KGluZm9fYmFyLCBcJiMzNDtyZXNwb25zZVwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbkBAIC02OCw3ICYjNDM7OTcsNiBAQCBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIFxuIFx0cmV0dXJuIGluZm9fYmFyO1xuIH1cbi0jZW5kaWZcbiBcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxuaW5kZXggYTJiNDk3ZjAzZmQ2ZS4uNWQyNjNmOTBmZTNhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxuQEAgLTEzLDEwICYjNDM7MTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7XG4gXHRHdGtXaWRnZXQgKm1haW5fd2luZG93O1xuIFx0R3RrV2lkZ2V0ICpub3RlYm9vaztcbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuIFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcbiBcdEd0a1dpZGdldCAqbWVzc2FnZV9sYWJlbDtcbi0jZW5kaWZcbiBcdEd0a1dpZGdldCAqc3RhdGJhcjtcbiBcdGd1aW50IHN0YXRiYXJfY3R4X2lkO1xuIH07XG5AQCAtNDAsMTcgJiM0MzszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTtcbiBcbiB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjBiNzg2YzVhMDQ2YjIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtMzk1LDExICYjNDM7Mzk1LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XG4tXG4gXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFwmIzM0O3Jvdy1hY3RpdmF0ZWRcJiMzNDssXG4gXHRcdFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcbiYjNDM7XHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXG5AQCAtNTgzLDExICYjNDM7NTgxLDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0cGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhoaXN0cywgXHUwMDI2aGlzdHMtXHUwMDNlZW50cmllcywgc3RvcmUsXG4gXHRcdFx0XHRcdE5VTEwsIFx1MDAyNmhwcCwgbWluX3BjbnQpO1xuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCYjMzQ7cm93LWFjdGl2YXRlZFwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuQEAgLTYwNiwzMCAmIzQzOzYwMiwyOCBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuJiM0MztcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXG4gXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwmIzM0O3BlcmYgcmVwb3J0XCYjMzQ7KTtcbiBcbi1cdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcJiMzNDtkZWxldGVfZXZlbnRcJiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0aWYgKCFwZ2N0eClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4mIzQzO1x0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXG4gXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcbiBcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XG4mIzQzO1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdGlmIChpbmZvX2Jhcilcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuJiM0MztcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcbiBcbiBcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcbiYjNDM7XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XG4mIzQzO1x0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcbiBcdGV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHtcbiBcdFx0c3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpO1xuQEAgLTY0OSw3ICYjNDM7NjQzLDcgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcbiBcdFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbiBcdFx0XHRcdFx0XHRcdEdUS19QT0xJQ1lfQVVUT01BVElDLFxuQEAgLTY2NSwxNSAmIzQzOzY1OSwxMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0Z3RrX25vdGVib29rX2FwcGVuZF9wYWdlKEdUS19OT1RFQk9PSyhub3RlYm9vayksIHNjcm9sbGVkX3dpbmRvdywgdGFiX2xhYmVsKTtcbiBcdH1cbiBcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbi1cbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuIFx0dWlfaGVscGxpbmVfX3B1c2goaGVscCk7XG4gXG4tXHRndGtfbWFpbigpO1xuJiM0MztcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XG4gXG4gXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFx1MDAyNnBnY3R4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuaW5kZXggZWVhNmZjZGU1MThhOC4uNzcwZjkyNTFiNTRiNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbkBAIC0xLDQ5ICYjNDM7MSw2NSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Z3RrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9wcm9ncmVzcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7XG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdGRpYWxvZyA9IE5VTEw7XG4mIzQzO1x0cHJvZ3Jlc3MgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcbiB7XG4gXHRkb3VibGUgZnJhY3Rpb24gPSBwLVx1MDAzZXRvdGFsID8gMS4wICogcC1cdTAwM2VjdXJyIC8gcC1cdTAwM2V0b3RhbCA6IDAuMDtcbiBcdGNoYXIgYnVmWzEwMjRdO1xuIFxuIFx0aWYgKGRpYWxvZyA9PSBOVUxMKSB7XG4tXHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a192Ym94X25ldyhUUlVFLCA1KTtcbiYjNDM7XHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNSk7XG4gXHRcdEd0a1dpZGdldCAqbGFiZWwgPSBndGtfbGFiZWxfbmV3KHAtXHUwMDNldGl0bGUpO1xuIFxuLVx0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcbiYjNDM7XHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXHRcdHByb2dyZXNzID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTtcbiBcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGxhYmVsLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGxhYmVsKTtcbiYjNDM7XHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MpO1xuJiM0MztcbiYjNDM7XHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZGlhbG9nKSwgdmJveCk7XG4mIzQzO1x0XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCYjMzQ7ZGVzdHJveVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgR19DQUxMQkFDSyhndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZCksIE5VTEwpO1xuIFxuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksIFwmIzM0O3BlcmZcJiMzNDspO1xuLVx0XHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuLVx0XHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKGRpYWxvZyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbiBcbi1cdFx0Z3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xuIFx0fVxuIFxuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfZnJhY3Rpb24oR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGZyYWN0aW9uKTtcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyVcJiMzNDtQUkl1NjRcJiMzNDsgLyAlXCYjMzQ7UFJJdTY0LCBwLVx1MDAzZWN1cnIsIHAtXHUwMDNldG90YWwpO1xuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcbiBcbi1cdC8qIHdlIGRpZG4mIzM5O3QgY2FsbCBndGtfbWFpbiB5ZXQsIHNvIGRvIGl0IG1hbnVhbGx5ICovXG4tXHR3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpXG4tXHRcdGd0a19tYWluX2l0ZXJhdGlvbigpO1xuJiM0MztcdC8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqL1xuJiM0MztcdHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKVxuJiM0MztcdFx0Z19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19maW5pc2godm9pZClcbiB7XG4mIzQzO1x0aWYgKGRpYWxvZyA9PSBOVUxMKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIHRoaXMgd2lsbCBhbHNvIGRlc3Ryb3kgYWxsIG9mIGl0cyBjaGlsZHJlbiAqL1xuLVx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XG4mIzQzO1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4gXG4gXHRkaWFsb2cgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xuaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcbiBcdGd0a191aV9wcm9ncmVzc19faW5pdCgpO1xuIFx0cGVyZl9ndGtfX2luaXRfaHBwKCk7XG4gXG4tXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soTlVMTCwgTlVMTCkgPyAwIDogLTE7XG4mIzQzO1x0cmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7XG4gfVxuIFxuIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcbkBAIC0yMCw1ICYjNDM7MjAsNiBAQCB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpXG4gXHRcdHJldHVybjtcbiBcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXHUwMDI2cGVyZl9ndGtfZW9wcyk7XG4tXHRndGtfbWFpbl9xdWl0KCk7XG4mIzQzO1x0cGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKCk7XG4mIzQzO1x0cGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uOGE5MjI4NTEyNTdlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG5AQCAtMiw4ICYjNDM7MiwxMCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2d0ay5oXCYjMzQ7XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGFyZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96YWxsb2MuaFx1MDAzZVxuIFxuIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDtcbkBAIC0yOCw0MyAmIzQzOzMwLDkyIEBAIGludCBwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICoqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24mIzM5O3RcbiYjNDM7ICogbW9kYWwgYW5kIGl0cyBuZXN0ZWQgbG9vcCBzdGlsbCBwdW1wcyBldmVudHMgZm9yIHRoZSBtYWluIHdpbmRvdy5cbiYjNDM7ICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbiYjNDM7ICogbmVzdGVkIGNhbGwgY2FuJiMzOTt0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCYjMzk7cyBsb29wIGFuZCBsZWFrIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX3F1aXRfbG9vcChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Z19zbGlzdF9mb3JlYWNoKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgcGVyZl9ndGtfX3F1aXRfbG9vcCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UoR3RrRGlhbG9nICpkaWFsb2csXG4mIzQzO1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHQgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4ge1xuIFx0Y2hhciAqbXNnO1xuIFx0R3RrV2lkZ2V0ICpkaWFsb2c7XG4mIzQzO1x0R01haW5Mb29wICpsb29wO1xuJiM0MztcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuJiM0MztcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcbiBcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbiYjNDM7XHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOlxcblwmIzM0Oyk7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiYjNDM7XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcJiMzNDtcdTAwM2NiXHUwMDNlRXJyb3JcdTAwM2MvYlx1MDAzZVxcblxcbiVzXCYjMzQ7LCBtc2cpO1xuLVx0Z3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTtcbiBcbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogXCYjMzQ7cmVzcG9uc2VcJiMzNDsgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbiYjNDM7XHQgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSBcJiMzNDtkZXN0cm95XCYjMzQ7XG4mIzQzO1x0ICogaW5zdGVhZCwgd2hpY2ggZmlyZXMgZWl0aGVyIHdheSwgc28gdGhlIG5lc3RlZCBsb29wIGJlbG93IGNhbiYjMzk7dFxuJiM0MztcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcbiYjNDM7XHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCYjMzQ7cmVzcG9uc2VcJiMzNDssXG4mIzQzO1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTtcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoZGlhbG9nLCBcJiMzNDtkZXN0cm95XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBHX0NBTExCQUNLKGdfbWFpbl9sb29wX3F1aXQpLCBsb29wKTtcbiYjNDM7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xuJiM0MztcdGdfbWFpbl9sb29wX3J1bihsb29wKTtcbiYjNDM7XHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuJiM0MztcdGdfbWFpbl9sb29wX3VucmVmKGxvb3ApO1xuJiM0MztcbiBcdGZyZWUobXNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4ge1xuIFx0Y2hhciAqbXNnO1xuJiM0MztcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuJiM0MztcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcbiBcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbiYjNDM7XHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6XFxuXCYjMzQ7KTtcbiBcdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuJiM0MztcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFxuIFx0Z3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsKSwgbXNnKTtcbiBcdGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC1cdTAwM2VpbmZvX2JhciksXG5AQCAtNzQsNDAgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6XFxuXCYjMzQ7KTtcbi1cdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cdTAwM2VzdGF0YmFyKSxcbi1cdFx0XHQgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcbi1cbi1cdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXG4tXHRwID0gc3RyY2hyKG1zZywgJiMzOTtcXG4mIzM5Oyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAmIzM5O1xcMCYjMzk7O1xuLVxuLVx0Z3RrX3N0YXR1c2Jhcl9wdXNoKEdUS19TVEFUVVNCQVIocGdjdHgtXHUwMDNlc3RhdGJhciksXG4tXHRcdFx0ICAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQsIG1zZyk7XG4tXG4tXHRmcmVlKG1zZyk7XG4tXHRyZXR1cm4gMDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XG4gXHQuZXJyb3JcdFx0PSBwZXJmX2d0a19fZXJyb3IsXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdC53YXJuaW5nXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxuLSNlbHNlXG4tXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xuQEAgLTE0LDcgJiM0MzsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xuIFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFwmIzM0O2xpYnBlcmYtZ3RrLnNvXCYjMzQ7XG4gXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuQEAgLTE0NSw2ICYjNDM7MTQ1LDE3IEBAIHN0YXRpYyBpbnQgYW5ub3RhdGVkX3NvdXJjZV9fYWxsb2NfaGlzdG9ncmFtcyhzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLFxuIFx0cmV0dXJuIHNyYy1cdTAwM2VoaXN0b2dyYW1zID8gMCA6IC0xO1xuIH1cbiBcbiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbiYjNDM7YW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBlbnRyeTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4gXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5AQCAtNDA2LDE2ICYjNDM7NDA2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3QgKmFubm90YXRpb25fX2hpc3RvZ3JhbShzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMsXG4gXHRyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLVx1MDAzZXNyYywgZXZzZWwpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4tYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuLXtcbi1cdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4tXHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbi1cbi1cdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0cmV0dXJuIGVudHJ5O1xuLX1cbiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbiYjNDM7YW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE0YTExZDE0MzJmYjQ2Mjg1YTdlZmMxMDEyMDU3OWRlNmEwYzBkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDE6MDE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQppbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NAotLS0gYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGNvbXBpbGUteDMyICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXAogICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGd0azIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXAomIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgYmFiZWx0cmFjZTItY3RmLXdyaXRlciAgICAgICAgIFwKICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDMsNiAmIzQzOzE0Miw3IEBAIGVuZGlmCiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFwKICAgICAgICAgIGxpYmR3ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgZ2xpYmMgICAgICAgICAgICAgICAgICBcCiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJlbGYgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXAogICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZQppbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NAotLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUKQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZm9ydGlmeS1zb3VyY2UuYmluICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHRlc3QtZ3RrMi1pbmZvYmFyLmJpbiAgICAgICAgICAgICAgICAgIFwKJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWhlbGxvLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWxpYmJmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgICBcCiAJIHRlc3QtbGliYmZkLXRocmVhZHNhZmUuYmluICAgICAgCVwKQEAgLTI0MCwxMSAmIzQzOzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOgogJChPVVRQVVQpdGVzdC1saWJ0cmFjZWZzLmJpbjoKIAkgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMiZndDsvZGV2L251bGwpIC1sdHJhY2VmcwogCi0kKE9VVFBVVCl0ZXN0LWd0azIuYmluOgotCSQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDImZ3Q7L2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCi0KLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjoKLQkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzskKE9VVFBVVCl0ZXN0LWd0azQuYmluOgomIzQzOwkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMiZndDsvZGV2L251bGwpCiAKIGdyZXAtbGlicyAgPSAkKGZpbHRlciAtbCUsJCgxKSkKIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDAKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMTIgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgJiMzNDstV3N0cmljdC1wcm90b3R5cGVzJiMzNDsKLSNpbmNsdWRlICZsdDtndGsvZ3RrLmgmZ3Q7Ci0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JZ3RrX2luaXQoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCWd0a19pbmZvX2Jhcl9uZXcoKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYwpyZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuYwppbmRleCAyYWFmNGJmYzIwNTU2Li5iOTUyMGU3NDA4Yjk5IDEwMDY0NAotLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKQEAgLTMsOSAmIzQzOzMsOSBAQAogI2luY2x1ZGUgJmx0O2d0ay9ndGsuaCZndDsKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgJiMzNDstV3N0cmljdC1wcm90b3R5cGVzJiMzNDsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0MztpbnQgbWFpbih2b2lkKQogewotCWd0a19pbml0KCZhbXA7YXJnYywgJmFtcDthcmd2KTsKJiM0MzsJZ3RrX2luaXQoKTsKIAogICAgICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CmluZGV4IDIyZjg3ZWFhMzI3OTYuLjdhZjliM2Y4MWMwNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dApAQCAtMzUxLDcgJiM0MzszNTEsNyBAQCBPUFRJT05TCiAJcmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXIKIAljb21tYW5kcywgdGhlIHN0ZGlvIGludGVyZmFjZSBpcyB1c2VkLgogCi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuCiYjNDM7LS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLgogCiAtazo6CiAtLXZtbGludXg9Jmx0O2ZpbGUmZ3Q7OjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBjbGVhbjoKICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2UKICMKIGJ1aWxkLXRlc3Q6Ci0JQCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrMiBvdXQKJiM0MzsJQCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXQKIAogYnVpbGQtdGVzdC10YXJiYWxsOgogCUAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwppbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwpAQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFORwogICBlbmRpZgogZW5kaWYKIAotaWZkZWYgR1RLMgotICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCi0gICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azIpCi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpCi0gICAgJCh3YXJuaW5nIEdUSzIgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEsyIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azItZGV2ZWwgb3IgbGliZ3RrMi4wLWRldikKLSAgICBOT19HVEsyIDo9IDEKJiM0MztpZmRlZiBHVEs0CiYjNDM7ICBGTEFHU19HVEs0PSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQomIzQzOyAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrNCkKJiM0MzsgIGlmbmVxICgkKGZlYXR1cmUtZ3RrNCksIDEpCiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldikKJiM0MzsgICAgTk9fR1RLNCA6PSAxCiAgIGVsc2UKLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpCi0gICAgaWZlcSAoJChmZWF0dXJlLWd0azItaW5mb2JhciksIDEpCi0gICAgICBHVEtfQ0ZMQUdTIDo9IC1ESEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAotICAgIGVuZGlmCi0gICAgQ0ZMQUdTICYjNDM7PSAtREhBVkVfR1RLMl9TVVBQT1JUCi0gICAgR1RLX0NGTEFHUyAmIzQzOz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKLSAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICAgQ0ZMQUdTICYjNDM7PSAtREhBVkVfR1RLNF9TVVBQT1JUCiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQomIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMiZndDsvZGV2L251bGwpCiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbAomIzQzOyAgICAjIGxpYnBlcmYtZ3RrLnNvIGlzIGRsb3BlbigpZWQgYXQgcnVudGltZSBhbmQgY2FsbHMgYmFjayBpbnRvCiYjNDM7ICAgICMgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBwZXJmIGJpbmFyeSBpdHNlbGYgKGNhbGxjaGFpbl9wYXJhbSwKJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlCiYjNDM7ICAgICMgZHluYW1pY2FsbHkgZm9yIHRoZSBwbHVnaW4gdG8gcmVzb2x2ZSB0aGVtLgomIzQzOyAgICBMREZMQUdTICYjNDM7PSAtcmR5bmFtaWMKICAgZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgppbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCkBAIC00OSw3ICYjNDM7NDksNyBAQCBpbmNsdWRlIC4uL3NjcmlwdHMvdXRpbGl0aWVzLm1hawogIwogIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LgogIwotIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsmIzQzOyBHVUkgc3VwcG9ydC4KJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LgogIwogIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMmIzQzOyYjNDM7IHN5bWJvbCBkZW1hbmdsaW5nLgogIwpAQCAtNDczLDcgJiM0Mzs0NzMsNyBAQCBpZm5lcSAoJChPVVRQVVQpLCkKICAgQ0ZMQUdTICYjNDM7PSAtSSQoT1VUUFVUKQogZW5kaWYKIAotaWZkZWYgR1RLMgomIzQzO2lmZGVmIEdUSzQKICAgQUxMX1BST0dSQU1TICYjNDM7PSAkKE9VVFBVVClsaWJwZXJmLWd0ay5zbwogICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm8KIGVuZGlmCkBAIC04MTEsNyAmIzQzOzgxMSw3IEBAIGNoZWNrOiBwcmVwYXJlCiAKICMjIyBJbnN0YWxsYXRpb24gcnVsZXMKIAotaWZkZWYgR1RLMgomIzQzO2lmZGVmIEdUSzQKIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zbwogCSQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICYjMzk7JChERVNURElSX1NRKSQobGliZGlyX1NRKSYjMzk7OyBcCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDY5Y2I3MmIyMDgyYTYuLjE1MTYzZTA4MWE4Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBzdHJ1Y3QgcGVyZl9hbm5vdGF0ZSB7CiAJYm9vbAkgICB1c2VfdHVpOwogI2VuZGlmCiAJYm9vbAkgICB1c2Vfc3RkaW8sIHVzZV9zdGRpbzI7Ci0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlib29sCSAgIHVzZV9ndGs7CiAjZW5kaWYKIAlib29sCSAgIHNraXBfbWlzc2luZzsKQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJT1BUX0JPT0xFQU4oJiMzOTtxJiMzOTssICYjMzQ7cXVpZXQmIzM0OywgJmFtcDtxdWlldCwgJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXMmIzM0OyksCiAJT1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssICYjMzQ7ZHVtcC1yYXctdHJhY2UmIzM0OywgJmFtcDtkdW1wX3RyYWNlLAogCQkgICAgJiMzNDtkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSYjMzQ7KSwKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7YW5ub3RhdGUudXNlX2d0aywgJiMzNDtVc2UgdGhlIEdUSyBpbnRlcmZhY2UmIzM0OyksCiAjZW5kaWYKICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlQKQEAgLTgyOCw3ICYjNDM7ODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJaWYgKGFubm90YXRlX2NoZWNrX2FyZ3MoKSAmbHQ7IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzICZhbXA7JmFtcDsgYW5ub3RhdGUudXNlX2d0aykgewogCQlwcl9lcnIoJiMzNDstLXNob3ctbnItc2FtcGxlcyBpcyBub3QgYXZhaWxhYmxlIGluIC0tZ3RrIG1vZGUgYXQgdGhpcyB0aW1lXG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCWVsc2UgaWYgKGFubm90YXRlLnVzZV90dWkpCiAJCXVzZV9icm93c2VyID0gMTsKICNlbmRpZgotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aykKIAkJdXNlX2Jyb3dzZXIgPSAyOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7CiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCiAJYm9vbAkJCXVzZV90dWk7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCWJvb2wJCQl1c2VfZ3RrOwogI2VuZGlmCiAJYm9vbAkJCXVzZV9zdGRpbzsKQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCiAJT1BUX0JPT0xFQU4oMCwgJiMzNDt0dWkmIzM0OywgJmFtcDtyZXBvcnQudXNlX3R1aSwgJiMzNDtVc2UgdGhlIFRVSSBpbnRlcmZhY2UmIzM0OyksCiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAotCU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7cmVwb3J0LnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEsyIGludGVyZmFjZSYjMzQ7KSwKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKJiM0MzsJT1BUX0JPT0xFQU4oMCwgJiMzNDtndGsmIzM0OywgJmFtcDtyZXBvcnQudXNlX2d0aywgJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCiAJT1BUX0JPT0xFQU4oMCwgJiMzNDtzdGRpbyYjMzQ7LCAmYW1wO3JlcG9ydC51c2Vfc3RkaW8sCiAJCSAgICAmIzM0O1VzZSB0aGUgc3RkaW8gaW50ZXJmYWNlJiMzNDspLApAQCAtMTcxMCw3ICYjNDM7MTcxMCw3IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIAllbHNlIGlmIChyZXBvcnQudXNlX3R1aSkKIAkJdXNlX2Jyb3dzZXIgPSAxOwogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAllbHNlIGlmIChyZXBvcnQudXNlX2d0aykKIAkJdXNlX2Jyb3dzZXIgPSAyOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoIGIvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaAppbmRleCBkMDAzZTdmYWIyYmU4Li5hNjAxYTUyNjBjMTdlIDEwMDc1NQotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2gKQEAgLTE5OSw4ICYjNDM7MTk5LDggQEAgZmVkb3JhX3BrZ19mb3IoKSB7CiAJIyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmQKIAkjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LAogCSMgZGlzYXNzZW1ibGVyLSosIGNwbHVzLWRlbWFuZ2xlKSwgb25seSBsaW5rZWQgb24gQlVJTERfTk9ORElTVFJPCi0JIyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kCi0JIyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksCiYjNDM7CSMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZAomIzQzOwkjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEs0IC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSwKIAkjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC4KIAkjIGxpYmFpbyBpcyBub3QgbWFwcGVkIGVpdGhlcjogaXRzCiAJIyB0ZXN0IHVzZXMgdGhlIFBPU0lYIEFJTyBBUEkgKGFpby5oLCBhaW9fKiwgLWxydCksIHByb3ZpZGVkIGJ5CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21ha2UgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZQpAQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xCiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xCiBtYWtlX25vX3NkdAkgICAgOj0gTk9fU0RUPTEKIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xCi1tYWtlX3dpdGhfZ3RrMiAgICAgIDo9IEdUSzI9MQomIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xCiBtYWtlX3JlZmNudF9jaGVjayAgIDo9IEVYVFJBX0NGTEFHUz0mIzM0Oy1EUkVGQ05UX0NIRUNLSU5HPTEmIzM0OwogbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzCiBtYWtlX2NzY29wZSAgICAgICAgIDo9IGNzY29wZQpAQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6CiAJJChjYWxsIHRlc3QsJEApICZhbXA7JmFtcDsgXAogCXJtIC1yZiAkQCAkJFRNUF9ERVNUIHx8IChjYXQgJEAgOyBmYWxzZSkKIAotbWFrZV93aXRoX2d0azI6CiYjNDM7bWFrZV93aXRoX2d0azQ6CiAJJChjYWxsIGNsZWFuKQogCUBUTVBfREVTVD0kJChta3RlbXAgLWQpOyBcCiAJY21kPSYjMzQ7Y2QgJChQRVJGKSAmYW1wOyZhbXA7ICQoTUFLRV9GKSAkKCRAKSAkKFBBUkFMTEVMX09QVCkgJChPX09QVCkgREVTVERJUj0kJFRNUF9ERVNUJiMzNDs7IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jCmluZGV4IDg5MjBlMjk4NDIwYTguLmE5NjI5YmFhNjUwNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYwpAQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcywKIAkJCWd0a19saXN0X3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7CiAJfQogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZhbXA7bm90ZXMtJmd0O3NyYy0mZ3Q7c291cmNlLCBhbC5ub2RlKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwb3MtJmd0O2FsLm5vZGUpOwpAQCAtMjExLDM0ICYjNDM7MjExLDMwIEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLAogCQlzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7CiAJCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKIAotCQl3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKJiM0MzsJCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7CiAJCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgJiMzNDtwZXJmIGFubm90YXRlJiMzNDspOwogCi0JCWdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAmIzM0O2RlbGV0ZV9ldmVudCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTsKLQogCQlwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7CiAJCWlmICghcGdjdHgpCiAJCQlyZXR1cm4gLTE7CiAKLQkJdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7CiYjNDM7CQl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAkJbm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7CiAJCXBnY3R4LSZndDtub3RlYm9vayA9IG5vdGVib29rOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCQlpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JCWlmIChpbmZvYmFyKSB7Ci0JCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2JhciwKLQkJCQkJICAgRkFMU0UsIEZBTFNFLCAwKTsKLQkJfQomIzQzOwkJZ3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7CiAKIAkJc3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTsKLQkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTsKIAotCQlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAl9CiAKLQlzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKJiM0MzsJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAl0YWJfbGFiZWwgPSBndGtfbGFiZWxfbmV3KHN5bS0mZ3Q7bmFtZSk7CiAKIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLApAQCAtMjY3LDEyICYjNDM7MjYzLDExIEBAIHZvaWQgcGVyZl9ndGtfX3Nob3dfYW5ub3RhdGlvbnModm9pZCkKIAkJcmV0dXJuOwogCiAJd2luZG93ID0gcGdjdHgtJmd0O21haW5fd2luZG93OwotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKIAogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0JZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwlndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7CiAKLQlndGtfbWFpbigpOwomIzQzOwlwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpOwogCiAJcGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dCgmYW1wO3BnY3R4KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYwppbmRleCBkMmRhZGYzODczZmJkLi5lMWQyODY5NDU4MzI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jCkBAIC0xNiwyMSAmIzQzOzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKQogdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdykKIHsKIAlHZGtSZWN0YW5nbGUgcmVjdDsKLQlHZGtTY3JlZW4gKnNjcmVlbjsKLQlpbnQgbW9uaXRvcjsKJiM0MzsJR2RrTW9uaXRvciAqbW9uaXRvcjsKJiM0MzsJR2RrRGlzcGxheSAqZGlzcGxheTsKJiM0MzsJR0xpc3RNb2RlbCAqbW9uaXRvcnM7CiAJaW50IGhlaWdodDsKIAlpbnQgd2lkdGg7CiAKLQlzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTsKJiM0MzsJZGlzcGxheSA9IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2luZG93KTsKJiM0MzsJbW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7CiYjNDM7CW1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApOwomIzQzOwlpZiAoIW1vbml0b3IpIHsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JbW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LSZndDt3aW5kb3cpOwotCi0JZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsICZhbXA7cmVjdCk7CiYjNDM7CWdka19tb25pdG9yX2dldF9nZW9tZXRyeShtb25pdG9yLCAmYW1wO3JlY3QpOwomIzQzOwlnX29iamVjdF91bnJlZihtb25pdG9yKTsKIAogCXdpZHRoCT0gcmVjdC53aWR0aCAqIDMgLyA0OwogCWhlaWdodAk9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7CiAKLQlndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpOwomIzQzOwlndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDsKJiM0MzsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApCiYjNDM7CQlnX21haW5fbG9vcF9xdWl0KHBlcmZfZ3RrX19tYWluX2xvb3ApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsCiYjNDM7CQkJCQlncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiYjNDM7CiYjNDM7CXJldHVybiBGQUxTRTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdykKJiM0Mzt7CiYjNDM7CWdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAmIzM0O2Nsb3NlLXJlcXVlc3QmIzM0OywKJiM0MzsJCQkgR19DQUxMQkFDSyhwZXJmX2d0a19fY2xvc2VfcmVxdWVzdCksIE5VTEwpOwomIzQzOwomIzQzOwlwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTsKJiM0MzsJZ19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApOwomIzQzOwlnX2NsZWFyX3BvaW50ZXIoJmFtcDtwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7CiB9CiAKIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCkKQEAgLTQyLDIzICYjNDM7NzQsMjAgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQogCXJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCkKIHsKIAlHdGtXaWRnZXQgKmluZm9fYmFyOwogCUd0a1dpZGdldCAqbGFiZWw7Ci0JR3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7CiAKIAlpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTsKLQlndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTsKIAogCWxhYmVsID0gZ3RrX2xhYmVsX25ldygmIzM0OyYjMzQ7KTsKIAlndGtfd2lkZ2V0X3Nob3cobGFiZWwpOwogCi0JY29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEoR1RLX0lORk9fQkFSKGluZm9fYmFyKSk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7CiYjNDM7CWd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpOwogCi0JZ3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLAomIzQzOwlndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCAmIzM0O19PSyYjMzQ7LAogCQkJCUdUS19SRVNQT05TRV9PSyk7CiAJZ19zaWduYWxfY29ubmVjdChpbmZvX2JhciwgJiMzNDtyZXNwb25zZSYjMzQ7LAogCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9oaWRlKSwgTlVMTCk7CkBAIC02OCw3ICYjNDM7OTcsNiBAQCBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKQogCiAJcmV0dXJuIGluZm9fYmFyOwogfQotI2VuZGlmCiAKIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaAppbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaApAQCAtMTMsMTAgJiM0MzsxMyw4IEBAIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0IHsKIAlHdGtXaWRnZXQgKm1haW5fd2luZG93OwogCUd0a1dpZGdldCAqbm90ZWJvb2s7CiAKLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiAJR3RrV2lkZ2V0ICppbmZvX2JhcjsKIAlHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7Ci0jZW5kaWYKIAlHdGtXaWRnZXQgKnN0YXRiYXI7CiAJZ3VpbnQgc3RhdGJhcl9jdHhfaWQ7CiB9OwpAQCAtNDAsMTcgJiM0MzszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTsKIAogdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpOwogdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7CiBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpOwogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpOwotCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKQotewotCXJldHVybiBOVUxMOwotfQotI2VuZGlmCiAKIHN0cnVjdCBldnNlbDsKIHN0cnVjdCBldmxpc3Q7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwppbmRleCBiYWUyMWYzMzZhZTZkLi4wYjc4NmM1YTA0NmIyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKQEAgLTM5NSwxMSAmIzQzOzM5NSw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCQl9CiAJfQogCi0JZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTsKLQogCWdfc2lnbmFsX2Nvbm5lY3QodmlldywgJiMzNDtyb3ctYWN0aXZhdGVkJiMzNDssCiAJCQkgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLApAQCAtNTgzLDExICYjNDM7NTgxLDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCXBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsICZhbXA7aGlzdHMtJmd0O2VudHJpZXMsIHN0b3JlLAogCQkJCQlOVUxMLCAmYW1wO2hwcCwgbWluX3BjbnQpOwogCi0JZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTsKLQogCWdfc2lnbmFsX2Nvbm5lY3QodmlldywgJiMzNDtyb3ctYWN0aXZhdGVkJiMzNDssCiAJCQkgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIH0KIAogaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsCkBAIC02MDYsMzAgJiM0Mzs2MDIsMjggQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsCiAJc2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpOwogCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKIAotCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwl3aW5kb3cgPSBndGtfd2luZG93X25ldygpOwogCiAJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgcmVwb3J0JiMzNDspOwogCi0JZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJcGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpOwogCWlmICghcGdjdHgpCiAJCXJldHVybiAtMTsKIAotCXZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwomIzQzOwl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAogCW5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpOwogCi0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCWluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JaWYgKGluZm9fYmFyKQotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTsKIAogCXN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7Ci0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKJiM0MzsJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAogCWV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHsKIAkJc3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpOwpAQCAtNjQ5LDcgJiM0Mzs2NDMsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCwKIAkJCX0KIAkJfQogCi0JCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwkJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAogCQlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLAogCQkJCQkJCUdUS19QT0xJQ1lfQVVUT01BVElDLApAQCAtNjY1LDE1ICYjNDM7NjU5LDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCQlndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpOwogCX0KIAotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0KLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAogCXVpX2hlbHBsaW5lX19wdXNoKGhlbHApOwogCi0JZ3RrX21haW4oKTsKJiM0MzsJcGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTsKIAogCXBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoJmFtcDtwZ2N0eCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jCmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYwpAQCAtMSw0OSAmIzQzOzEsNjUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7aW50dHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKIAogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL3Byb2dyZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogCiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7CiBzdGF0aWMgR3RrV2lkZ2V0ICpwcm9ncmVzczsKIAomIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkJZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWRpYWxvZyA9IE5VTEw7CiYjNDM7CXByb2dyZXNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApCiB7CiAJZG91YmxlIGZyYWN0aW9uID0gcC0mZ3Q7dG90YWwgPyAxLjAgKiBwLSZndDtjdXJyIC8gcC0mZ3Q7dG90YWwgOiAwLjA7CiAJY2hhciBidWZbMTAyNF07CiAKIAlpZiAoZGlhbG9nID09IE5VTEwpIHsKLQkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpOwomIzQzOwkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTsKIAkJR3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC0mZ3Q7dGl0bGUpOwogCi0JCWRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJcHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTsKJiM0MzsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7CiAKLQkJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTsKJiM0MzsJCWdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAmIzM0O2Rlc3Ryb3kmIzM0OywKJiM0MzsJCQkJIEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTsKIAogCQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICYjMzQ7cGVyZiYjMzQ7KTsKLQkJZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTsKLQkJZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7CiAKLQkJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwogCX0KIAogCWd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslJiMzNDtQUkl1NjQmIzM0OyAvICUmIzM0O1BSSXU2NCwgcC0mZ3Q7Y3VyciwgcC0mZ3Q7dG90YWwpOwogCWd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7CiAKLQkvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqLwotCXdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLQkJZ3RrX21haW5faXRlcmF0aW9uKCk7CiYjNDM7CS8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqLwomIzQzOwl3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKJiM0MzsJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpCiB7CiYjNDM7CWlmIChkaWFsb2cgPT0gTlVMTCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi8KLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiAKIAlkaWFsb2cgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmMKaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jCkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZCkKIAlndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTsKIAlwZXJmX2d0a19faW5pdF9ocHAoKTsKIAotCXJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTsKJiM0MzsJcmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7CiB9CiAKIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKQEAgLTIwLDUgJiM0MzsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpCiAJCXJldHVybjsKIAlwZXJmX2Vycm9yX191bnJlZ2lzdGVyKCZhbXA7cGVyZl9ndGtfZW9wcyk7Ci0JZ3RrX21haW5fcXVpdCgpOwomIzQzOwlwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTsKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmMKaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uOGE5MjI4NTEyNTdlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYwpAQCAtMiw4ICYjNDM7MiwxMCBAQAogI2luY2x1ZGUgJiMzNDsuLi91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvemFsbG9jLmgmZ3Q7CiAKIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDsKQEAgLTI4LDQzICYjNDM7MzAsOTIgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbiYjMzk7dAomIzQzOyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuCiYjNDM7ICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGEKJiM0MzsgKiBuZXN0ZWQgY2FsbCBjYW4mIzM5O3QgY2xvYmJlciBhbiBvdXRlciBjYWxsJiMzOTtzIGxvb3AgYW5kIGxlYWsgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19xdWl0X2xvb3AoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJZ19tYWluX2xvb3BfcXVpdChkYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCkKJiM0Mzt7CiYjNDM7CWdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLAomIzQzOwkJCQkgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiB7CiAJY2hhciAqbXNnOwogCUd0a1dpZGdldCAqZGlhbG9nOwomIzQzOwlHTWFpbkxvb3AgKmxvb3A7CiYjNDM7CXZhX2xpc3QgYXJnc19jb3B5OwogCiYjNDM7CXZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTsKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewomIzQzOwkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgJmx0OyAwKSB7CiYjNDM7CQl2YV9lbmQoYXJnc19jb3B5KTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6XG4mIzM0Oyk7CiAJCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiYjNDM7CXZhX2VuZChhcmdzX2NvcHkpOwogCiAJZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ld193aXRoX21hcmt1cChHVEtfV0lORE9XKHBnY3R4LSZndDttYWluX3dpbmRvdyksCiAJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKIAkJCQkJR1RLX01FU1NBR0VfRVJST1IsCiAJCQkJCUdUS19CVVRUT05TX0NMT1NFLAogCQkJCQkmIzM0OyZsdDtiJmd0O0Vycm9yJmx0Oy9iJmd0O1xuXG4lcyYjMzQ7LCBtc2cpOwotCWd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CiAKLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJLyoKJiM0MzsJICogJiMzNDtyZXNwb25zZSYjMzQ7IG9ubHkgZmlyZXMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkOyBERVNUUk9ZX1dJVEhfUEFSRU5UCiYjNDM7CSAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tICYjMzQ7ZGVzdHJveSYjMzQ7CiYjNDM7CSAqIGluc3RlYWQsIHdoaWNoIGZpcmVzIGVpdGhlciB3YXksIHNvIHRoZSBuZXN0ZWQgbG9vcCBiZWxvdyBjYW4mIzM5O3QKJiM0MzsJICogb3V0bGl2ZSB0aGUgZGlhbG9nIGFuZCBoYW5nLgomIzQzOwkgKi8KJiM0MzsJbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7CiYjNDM7CXBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcHJlcGVuZChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApOwomIzQzOwlnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgJiMzNDtyZXNwb25zZSYjMzQ7LAomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTsKJiM0MzsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgJiMzNDtkZXN0cm95JiMzNDssCiYjNDM7CQkJCSBHX0NBTExCQUNLKGdfbWFpbl9sb29wX3F1aXQpLCBsb29wKTsKJiM0MzsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwomIzQzOwlnX21haW5fbG9vcF9ydW4obG9vcCk7CiYjNDM7CXBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7CiYjNDM7CWdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwomIzQzOwogCWZyZWUobXNnKTsKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiB7CiAJY2hhciAqbXNnOwomIzQzOwl2YV9saXN0IGFyZ3NfY29weTsKIAomIzQzOwl2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7CiAJaWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8Ci0JICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzKSAmbHQ7IDApIHsKJiM0MzsJICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzX2NvcHkpICZsdDsgMCkgewomIzQzOwkJdmFfZW5kKGFyZ3NfY29weSk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dhcm5pbmc6XG4mIzM0Oyk7CiAJCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiYjNDM7CXZhX2VuZChhcmdzX2NvcHkpOwogCiAJZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC0mZ3Q7bWVzc2FnZV9sYWJlbCksIG1zZyk7CiAJZ3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LSZndDtpbmZvX2JhciksCkBAIC03NCw0MCAmIzQzOzEyNSw4IEBAIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiAJZnJlZShtc2cpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotCWNoYXIgKm1zZywgKnA7Ci0KLQlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwotCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZ3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC0mZ3Q7c3RhdGJhciksCi0JCQkgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCk7Ci0KLQkvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqLwotCXAgPSBzdHJjaHIobXNnLCAmIzM5O1xuJiMzOTspOwotCWlmIChwKQotCQkqcCA9ICYjMzk7XDAmIzM5OzsKLQotCWd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LSZndDtzdGF0YmFyKSwKLQkJCSAgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCwgbXNnKTsKLQotCWZyZWUobXNnKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogCiBzdHJ1Y3QgcGVyZl9lcnJvcl9vcHMgcGVyZl9ndGtfZW9wcyA9IHsKIAkuZXJyb3IJCT0gcGVyZl9ndGtfX2Vycm9yLAotI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKIAkud2FybmluZwk9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLAotI2Vsc2UKLQkud2FybmluZwk9IHBlcmZfZ3RrX193YXJuaW5nX3N0YXR1c2JhciwKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYwppbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTsKIAogI2RlZmluZSBQRVJGX0dUS19EU08gJiMzNDtsaWJwZXJmLWd0ay5zbyYjMzQ7CiAKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCiBzdGF0aWMgaW50IHNldHVwX2d0a19icm93c2VyKHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCmluZGV4IGRmNzBlOTVhODQ3MDQuLjEyM2I2ZDVmY2VhNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCkBAIC0xNDUsNiAmIzQzOzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywKIAlyZXR1cm4gc3JjLSZndDtoaXN0b2dyYW1zID8gMCA6IC0xOwogfQogCiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICoKJiM0Mzthbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5OwomIzQzOwlsb25nIGtleSA9IG9mZnNldCAmbHQ7Jmx0OyAxNiB8IGV2c2VsLSZndDtjb3JlLmlkeDsKJiM0MzsKJiM0MzsJaWYgKCFoYXNobWFwX19maW5kKHNyYy0mZ3Q7c2FtcGxlcywga2V5LCAmYW1wO2VudHJ5KSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gZW50cnk7CiYjNDM7fQomIzQzOwogdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCkBAIC00MDYsMTYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcywKIAlyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLSZndDtzcmMsIGV2c2VsKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgotYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KQotewotCXN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7Ci0JbG9uZyBrZXkgPSBvZmZzZXQgJmx0OyZsdDsgMTYgfCBldnNlbC0mZ3Q7Y29yZS5pZHg7Ci0KLQlpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLSZndDtzYW1wbGVzLCBrZXksICZhbXA7ZW50cnkpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZW50cnk7Ci19CiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICoKJiM0Mzthbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYyOQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDczMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgVHJpYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHRvIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHVwZGF0ZXMgdG8gdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgc3BlY2lmaWNhbGx5IGJvdGggYGJ1aWxkL2AgYW5kIGBwZXJmL2AuICBJIHNlZSBjaGFuZ2VzIHRvIG1ha2VmaWxlcywgZmVhdHVyZSB0ZXN0cyByZWxhdGVkIHRvIEdUSzIsIGFuZCB3aGF0IGFwcGVhcnMgdG8gYmUgYSBtaWdyYXRpb24gb3IgdXBkYXRlIHRvIEdUSzQgc3VwcG9ydCAocmVuYW1pbmcgYHRlc3QtZ3RrMi5jYCB0byBgdGVzdC1ndGs0LmNgKS4gIFRoZSBgcGVyZi9gIGRpcmVjdG9yeSBpcyBnZXR0aW5nIGEgZmFpciBhbW91bnQgb2YgYXR0ZW50aW9uIGFzIHdlbGw6IEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGl0cyBtYWtlZmlsZXMsIGJ1aWx0LWluIGJpbmFyaWVzLCBkb2N1bWVudGF0aW9uLCBzY3JpcHRzLCBhbmQgdGhlIEdUSy1iYXNlZCBVSSBlbGVtZW50cy4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBBY2NvcmRpbmcgdG8gb3VyIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBPTkxZIGlmIGFsbCBtb2RpZmllZCBjb2RlIGZpdHMgb25lIG9yIG1vcmUgc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhOiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB1c2VyLXNwYWNlIGNvZGUuCgpJIHNlZSB0aGF0IGFsbCB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4gIE1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB0b29scy9idWlsZC9gIOKAkyB3aGljaCBob3VzZXMgYnVpbGQgc3lzdGVtIGZpbGVzIGFuZCB0ZXN0IGJpbmFyaWVzIOKAkyBhbmQgYHRvb2xzL3BlcmYvYOKAkyB3aGljaCBpcywgYXMgSSBrbm93LCBhIHVzZXItc3BhY2UgcGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbC4gVGhlIHRlc3RzIHNlZW0gdG8gYmUgZmVhdHVyZSB0ZXN0cyBhbmQgbm90IGZvciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzLCBhdCBmaXJzdCBnbGFuY2UsIGFwcGVhciB0byBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBhbnkga2VybmVsIG1vZHVsZXMuICBJdOKAmXMgcHVyZWx5IGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgdHJpYWdlIHBoaWxvc29waHksIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBmdXp6IHRoaXMuICBTaW5jZSB0aGVyZSBhcmUgbm8ga2VybmVsIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbnNpZGVyLCBib3RoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGVtcHR5IGxpc3RzIChgW11gKS4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIHN1Y2NpbmN0bHkgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBkb2luZyBub3cuICBUaGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIGZpbGVzIGxvY2F0ZWQgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeTsgc3BlY2lmaWNhbGx5IHRoZSBgcGVyZmAgdXNlci1zcGFjZSB0b29sIGFuZCBidWlsZCBmZWF0dXJlcyByZWxhdGluZyB0byBHVEs0IHN1cHBvcnQsIGFuZCB0aGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLgoKT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMuICBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYEZvY3VzU3ltYm9sc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYFJlYXNvbmluZ2A6IGNvbmNpc2UgZXhwbGFuYXRpb247IGFuZCBgV29ydGhGdXp6aW5nYDogYSBib29sZWFuLiBJIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTowMTowMy43ODAzMjk3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYzMzgwNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6MDE6MDMuNzgwMzM1NDM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2NzM4MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDE0YTExZDE0MzJmYjQ2Mjg1YTdlZmMxMDEyMDU3OWRlNmEwYzBkM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjAxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuaW5kZXggOTllYjBlYTA5NTM3NS4uNGVjOTVjMzVhNWMxOSAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxcbkBAIC0xMTMsOCArMTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXFxcXG4rICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgaGVsbG8gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgYmFiZWx0cmFjZTItY3RmLXdyaXRlciAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbGliY2Fwc3RvbmUgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5AQCAtMTQzLDYgKzE0Miw3IEBAIGVuZGlmXFxuIEZFQVRVUkVfRElTUExBWSA/PSAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJkdyAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgZ2xpYmMgICAgICAgICAgICAgICAgICBcXFxcXFxuKyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJlbGYgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbGlibnVtYSAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIG51bWFfbnVtX3Bvc3NpYmxlX2NwdXMgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiBcXHQgdGVzdC1saWJiZmQtdGhyZWFkc2FmZS5iaW4gICAgICBcXHRcXFxcXFxuQEAgLTI0MCwxMSArMjM5LDggQEAgJChPVVRQVVQpdGVzdC1saWJjcHVwb3dlci5iaW46XFxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XFxuIFxcdCAkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGlidHJhY2VmcyAyXFx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXFxuIFxcbi0kKE9VVFBVVCl0ZXN0LWd0azIuYmluOlxcbi1cXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXFxuLVxcbi0kKE9VVFBVVCl0ZXN0LWd0azItaW5mb2Jhci5iaW46XFxuLVxcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuKyQoT1VUUFVUKXRlc3QtZ3RrNC5iaW46XFxuK1xcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXFx1MDAzZS9kZXYvbnVsbClcXG4gXFxuIGdyZXAtbGlicyAgPSAkKGZpbHRlciAtbCUsJCgxKSlcXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwxMiArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4tI2luY2x1ZGUgXFx1MDAzY2d0ay9ndGsuaFxcdTAwM2VcXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4tXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLXtcXG4tXFx0Z3RrX2luaXQoXFx1MDAyNmFyZ2MsIFxcdTAwMjZhcmd2KTtcXG4tXFx0Z3RrX2luZm9fYmFyX25ldygpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxcbnJlbmFtZSBmcm9tIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2d0ay9ndGsuaFxcdTAwM2VcXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK2ludCBtYWluKHZvaWQpXFxuIHtcXG4tXFx0Z3RrX2luaXQoXFx1MDAyNmFyZ2MsIFxcdTAwMjZhcmd2KTtcXG4rXFx0Z3RrX2luaXQoKTtcXG4gXFxuICAgICAgICAgcmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG4rKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXFxuIFxcdHJlcXVpcmVzIGEgdHR5LCBpZiBvbmUgaXMgbm90IHByZXNlbnQsIGFzIHdoZW4gcGlwaW5nIHRvIG90aGVyXFxuIFxcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXFxuIFxcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXFxuKy0tZ3RrOjogVXNlIHRoZSBHVEs0IGludGVyZmFjZS5cXG4gXFxuIC1rOjpcXG4gLS12bWxpbnV4PVxcdTAwM2NmaWxlXFx1MDAzZTo6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlXFxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxcbkBAIC0xMDYsNyArMTA2LDcgQEAgY2xlYW46XFxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcXG4gI1xcbiBidWlsZC10ZXN0Olxcbi1cXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGsyIG91dFxcbitcXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxcbiBcXG4gYnVpbGQtdGVzdC10YXJiYWxsOlxcbiBcXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcXG4gICBlbmRpZlxcbiBlbmRpZlxcbiBcXG4taWZkZWYgR1RLMlxcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbi0gICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azIpXFxuLSAgaWZuZXEgKCQoZmVhdHVyZS1ndGsyKSwgMSlcXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXFxuLSAgICBOT19HVEsyIDo9IDFcXG4raWZkZWYgR1RLNFxcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuKyAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrNClcXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxcbisgICAgJCh3YXJuaW5nIEdUSzQgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEs0IHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azQtZGV2ZWwgb3IgbGliZ3RrLTQtZGV2KVxcbisgICAgTk9fR1RLNCA6PSAxXFxuICAgZWxzZVxcbi0gICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMi1pbmZvYmFyKVxcbi0gICAgaWZlcSAoJChmZWF0dXJlLWd0azItaW5mb2JhciksIDEpXFxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXFxuLSAgICBlbmRpZlxcbi0gICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEsyX1NVUFBPUlRcXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbi0gICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGsrLTIuMCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rICAgIENGTEFHUyArPSAtREhBVkVfR1RLNF9TVVBQT1JUXFxuKyAgICBHVEtfQ0ZMQUdTICs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbisgICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbiAgICAgRVhUTElCUyArPSAtbGRsXFxuKyAgICAjIGxpYnBlcmYtZ3RrLnNvIGlzIGRsb3BlbigpZWQgYXQgcnVudGltZSBhbmQgY2FsbHMgYmFjayBpbnRvXFxuKyAgICAjIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgcGVyZiBiaW5hcnkgaXRzZWxmIChjYWxsY2hhaW5fcGFyYW0sXFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcXG4rICAgICMgZHluYW1pY2FsbHkgZm9yIHRoZSBwbHVnaW4gdG8gcmVzb2x2ZSB0aGVtLlxcbisgICAgTERGTEFHUyArPSAtcmR5bmFtaWNcXG4gICBlbmRpZlxcbiBlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXFxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG5AQCAtNDksNyArNDksNyBAQCBpbmNsdWRlIC4uL3NjcmlwdHMvdXRpbGl0aWVzLm1ha1xcbiAjXFxuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cXG4gI1xcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSysgR1VJIHN1cHBvcnQuXFxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cXG4gI1xcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQysrIHN5bWJvbCBkZW1hbmdsaW5nLlxcbiAjXFxuQEAgLTQ3Myw3ICs0NzMsNyBAQCBpZm5lcSAoJChPVVRQVVQpLClcXG4gICBDRkxBR1MgKz0gLUkkKE9VVFBVVClcXG4gZW5kaWZcXG4gXFxuLWlmZGVmIEdUSzJcXG4raWZkZWYgR1RLNFxcbiAgIEFMTF9QUk9HUkFNUyArPSAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xcbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xcbiBlbmRpZlxcbkBAIC04MTEsNyArODExLDcgQEAgY2hlY2s6IHByZXBhcmVcXG4gXFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcXG4gXFxuLWlmZGVmIEdUSzJcXG4raWZkZWYgR1RLNFxcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cXG4gXFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxcXFxuIFxcdFxcdCQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJzsgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xcbiBcXHRib29sXFx0ICAgdXNlX3R1aTtcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHQgICB1c2Vfc3RkaW8sIHVzZV9zdGRpbzI7XFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0Ym9vbFxcdCAgIHVzZV9ndGs7XFxuICNlbmRpZlxcbiBcXHRib29sXFx0ICAgc2tpcF9taXNzaW5nO1xcbkBAIC03MTIsNyArNzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdE9QVF9CT09MRUFOKCdxJywgXFxcInF1aWV0XFxcIiwgXFx1MDAyNnF1aWV0LCBcXFwiZG8gbm93IHNob3cgYW55IHdhcm5pbmdzIG9yIG1lc3NhZ2VzXFxcIiksXFxuIFxcdE9QVF9CT09MRUFOKCdEJywgXFxcImR1bXAtcmF3LXRyYWNlXFxcIiwgXFx1MDAyNmR1bXBfdHJhY2UsXFxuIFxcdFxcdCAgICBcXFwiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcXFwiKSxcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwiZ3RrXFxcIiwgXFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSyBpbnRlcmZhY2VcXFwiKSxcXG4gI2VuZGlmXFxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcXG5AQCAtODI4LDcgKzgyOCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxcbiBcXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXFx1MDAyNlxcdTAwMjYgYW5ub3RhdGUudXNlX2d0aykge1xcbiBcXHRcXHRwcl9lcnIoXFxcIi0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGVsc2UgaWYgKGFubm90YXRlLnVzZV90dWkpXFxuIFxcdFxcdHVzZV9icm93c2VyID0gMTtcXG4gI2VuZGlmXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAyO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXFxuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG5AQCAtODIsNyArODIsNyBAQCBzdHJ1Y3QgcmVwb3J0IHtcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbiBcXHRib29sXFx0XFx0XFx0dXNlX3R1aTtcXG4gI2VuZGlmXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0Ym9vbFxcdFxcdFxcdHVzZV9ndGs7XFxuICNlbmRpZlxcbiBcXHRib29sXFx0XFx0XFx0dXNlX3N0ZGlvO1xcbkBAIC0xMzU5LDggKzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcXG4gXFx0T1BUX0JPT0xFQU4oMCwgXFxcInR1aVxcXCIsIFxcdTAwMjZyZXBvcnQudXNlX3R1aSwgXFxcIlVzZSB0aGUgVFVJIGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuLVxcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXFxcIiksXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbitcXHRPUFRfQk9PTEVBTigwLCBcXFwiZ3RrXFxcIiwgXFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcXFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4gXFx0T1BUX0JPT0xFQU4oMCwgXFxcInN0ZGlvXFxcIiwgXFx1MDAyNnJlcG9ydC51c2Vfc3RkaW8sXFxuIFxcdFxcdCAgICBcXFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcXFwiKSxcXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxcbiBcXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAxO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRlbHNlIGlmIChyZXBvcnQudXNlX2d0aylcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAyO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG5pbmRleCBkMDAzZTdmYWIyYmU4Li5hNjAxYTUyNjBjMTdlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXFxuQEAgLTE5OSw4ICsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcXG4gXFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcXG4gXFx0IyBkaXNhc3NlbWJsZXIgZmFtaWx5IChsaWJiZmQsIGxpYmJmZC10aHJlYWRzYWZlLCBsaWJiZmQtbGliZXJ0eSxcXG4gXFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cXG4tXFx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXFxuLVxcdCMgTElCVU5XSU5EIHN1cHBvcnQgKGlmZGVmIEdUSzIgLyBpZmRlZiBMSUJQRVJMIC8gTElCVU5XSU5EPTEpLFxcbitcXHQjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLNCwgTElCUEVSTCBhbmRcXG4rXFx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXFxuIFxcdCMgYW5kIENvcmVTaWdodCAoaWZkZWYgQ09SRVNJR0hUKSwgYXJlIGRlbGliZXJhdGVseSBub3QgbWFwcGVkLlxcbiBcXHQjIGxpYmFpbyBpcyBub3QgbWFwcGVkIGVpdGhlcjogaXRzXFxuIFxcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21ha2UgYi90b29scy9wZXJmL3Rlc3RzL21ha2VcXG5pbmRleCBkMmMyZjUyNmUxZGIwLi4yMDJhYjU1MDE5MTYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbkBAIC05NSw3ICs5NSw3IEBAIG1ha2Vfbm9fYmFiZWx0cmFjZTIgOj0gTk9fQkFCRUxUUkFDRTI9MVxcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXFxuIG1ha2Vfbm9fc2R0XFx0ICAgIDo9IE5PX1NEVD0xXFxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXFxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXFxuK21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXFxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVxcXCItRFJFRkNOVF9DSEVDS0lORz0xXFxcIlxcbiBtYWtlX3RhZ3MgICAgICAgICAgIDo9IHRhZ3NcXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcXG5AQCAtMzE4LDcgKzMxOCw3IEBAICQocnVuKTpcXG4gXFx0JChjYWxsIHRlc3QsJEApIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gXFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxcbiBcXG4tbWFrZV93aXRoX2d0azI6XFxuK21ha2Vfd2l0aF9ndGs0OlxcbiBcXHQkKGNhbGwgY2xlYW4pXFxuIFxcdEBUTVBfREVTVD0kJChta3RlbXAgLWQpOyBcXFxcXFxuIFxcdGNtZD1cXFwiY2QgJChQRVJGKSBcXHUwMDI2XFx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFxcXCI7IFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG5pbmRleCA4OTIwZTI5ODQyMGE4Li5hOTYyOWJhYTY1MDc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXFxuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcXG4gXFx0XFx0XFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgQU5OX0NPTF9fTElORSwgcywgLTEpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXFx1MDAyNm5vdGVzLVxcdTAwM2VzcmMtXFx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWFsLm5vZGUpO1xcbkBAIC0yMTEsMzQgKzIxMSwzMCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcXG4gXFx0XFx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xcbiBcXHRcXHRzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuIFxcbi1cXHRcXHR3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcXFwicGVyZiBhbm5vdGF0ZVxcXCIpO1xcbiBcXG4tXFx0XFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0XFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdFxcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXHRcXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcXG4gXFx0XFx0cGdjdHgtXFx1MDAzZW5vdGVib29rID0gbm90ZWJvb2s7XFxuIFxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0XFx0aW5mb2JhciA9IHBlcmZfZ3RrX19zZXR1cF9pbmZvX2JhcigpO1xcbi1cXHRcXHRpZiAoaW5mb2Jhcikge1xcbi1cXHRcXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2JhcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgRkFMU0UsIEZBTFNFLCAwKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTtcXG4gXFxuIFxcdFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdFxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdFxcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXHR0YWJfbGFiZWwgPSBndGtfbGFiZWxfbmV3KHN5bS1cXHUwMDNlbmFtZSk7XFxuIFxcbiBcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxcbkBAIC0yNjcsMTIgKzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHdpbmRvdyA9IHBnY3R4LVxcdTAwM2VtYWluX3dpbmRvdztcXG4tXFx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xcbiBcXG4gXFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbi1cXHRndGtfbWFpbigpO1xcbitcXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xcbiBcXG4gXFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcXHUwMDI2cGdjdHgpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbmluZGV4IGQyZGFkZjM4NzNmYmQuLmUxZDI4Njk0NTgzMjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXFxuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXFxuQEAgLTE2LDIxICsxNiw1MyBAQCB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcXG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdylcXG4ge1xcbiBcXHRHZGtSZWN0YW5nbGUgcmVjdDtcXG4tXFx0R2RrU2NyZWVuICpzY3JlZW47XFxuLVxcdGludCBtb25pdG9yO1xcbitcXHRHZGtNb25pdG9yICptb25pdG9yO1xcbitcXHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xcbitcXHRHTGlzdE1vZGVsICptb25pdG9ycztcXG4gXFx0aW50IGhlaWdodDtcXG4gXFx0aW50IHdpZHRoO1xcbiBcXG4tXFx0c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpbmRvdyk7XFxuK1xcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XFxuK1xcdG1vbml0b3JzID0gZ2RrX2Rpc3BsYXlfZ2V0X21vbml0b3JzKGRpc3BsYXkpO1xcbitcXHRtb25pdG9yID0gZ19saXN0X21vZGVsX2dldF9pdGVtKG1vbml0b3JzLCAwKTtcXG4rXFx0aWYgKCFtb25pdG9yKSB7XFxuK1xcdFxcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbi1cXHRtb25pdG9yID0gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3aW5kb3ctXFx1MDAzZXdpbmRvdyk7XFxuLVxcbi1cXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXFx1MDAyNnJlY3QpO1xcbitcXHRnZGtfbW9uaXRvcl9nZXRfZ2VvbWV0cnkobW9uaXRvciwgXFx1MDAyNnJlY3QpO1xcbitcXHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcXG4gXFxuIFxcdHdpZHRoXFx0PSByZWN0LndpZHRoICogMyAvIDQ7XFxuIFxcdGhlaWdodFxcdD0gcmVjdC5oZWlnaHQgKiAzIC8gNDtcXG4gXFxuLVxcdGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xcbit9XFxuK1xcbitzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xcbitcXG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZClcXG4re1xcbitcXHRpZiAocGVyZl9ndGtfX21haW5fbG9vcClcXG4rXFx0XFx0Z19tYWluX2xvb3BfcXVpdChwZXJmX2d0a19fbWFpbl9sb29wKTtcXG4rfVxcbitcXG4rc3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxcbitcXHRcXHRcXHRcXHRcXHRncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xcbitcXG4rXFx0cmV0dXJuIEZBTFNFO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KVxcbit7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcXFwiY2xvc2UtcmVxdWVzdFxcXCIsXFxuK1xcdFxcdFxcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XFxuK1xcbitcXHRwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcXG4rXFx0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xcbitcXHRnX2NsZWFyX3BvaW50ZXIoXFx1MDAyNnBlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTtcXG4gfVxcbiBcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxcbkBAIC00MiwyMyArNzQsMjAgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4ge1xcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKmxhYmVsO1xcbi1cXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcXG4gXFxuIFxcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xcbi1cXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcXG4gXFxuIFxcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcXFwiXFxcIik7XFxuIFxcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XFxuIFxcbi1cXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcXG4tXFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7XFxuK1xcdGd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpO1xcbiBcXG4tXFx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLFxcbitcXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcXFwiX09LXFxcIixcXG4gXFx0XFx0XFx0XFx0R1RLX1JFU1BPTlNFX09LKTtcXG4gXFx0Z19zaWduYWxfY29ubmVjdChpbmZvX2JhciwgXFxcInJlc3BvbnNlXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9oaWRlKSwgTlVMTCk7XFxuQEAgLTY4LDcgKzk3LDYgQEAgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4gXFxuIFxcdHJldHVybiBpbmZvX2JhcjtcXG4gfVxcbi0jZW5kaWZcXG4gXFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG5pbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXFxuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xcbiBcXHRHdGtXaWRnZXQgKm1haW5fd2luZG93O1xcbiBcXHRHdGtXaWRnZXQgKm5vdGVib29rO1xcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gXFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcXG4gXFx0R3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsO1xcbi0jZW5kaWZcXG4gXFx0R3RrV2lkZ2V0ICpzdGF0YmFyO1xcbiBcXHRndWludCBzdGF0YmFyX2N0eF9pZDtcXG4gfTtcXG5AQCAtNDAsMTcgKzM4LDEyIEBAIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xcbiBcXG4gdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTtcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpO1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTtcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xcbi1cXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBldnNlbDtcXG4gc3RydWN0IGV2bGlzdDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4wYjc4NmM1YTA0NmIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXFxuQEAgLTM5NSwxMSArMzk1LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcXG4tXFxuIFxcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXFxcInJvdy1hY3RpdmF0ZWRcXFwiLFxcbiBcXHRcXHRcXHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XFxuK1xcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcXG5AQCAtNTgzLDExICs1ODEsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFxcdTAwMjZoaXN0cy1cXHUwMDNlZW50cmllcywgc3RvcmUsXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZocHAsIG1pbl9wY250KTtcXG4gXFxuLVxcdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XFxuLVxcbiBcXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFxcXCJyb3ctYWN0aXZhdGVkXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiB9XFxuIFxcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcXG5AQCAtNjA2LDMwICs2MDIsMjggQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXFxuIFxcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcXG4gXFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xcbiBcXG4tXFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcbiBcXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFxcXCJwZXJmIHJlcG9ydFxcXCIpO1xcbiBcXG4tXFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXG4gXFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcbi1cXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0aWYgKGluZm9fYmFyKVxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7XFxuK1xcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcXG4gXFxuIFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcbiBcXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XFxuIFxcdFxcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcXG5AQCAtNjQ5LDcgKzY0Myw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXG4gXFx0XFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXFxuQEAgLTY2NSwxNSArNjU5LDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XFxuLVxcbiBcXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xcbi1cXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbiBcXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcXG4gXFxuLVxcdGd0a19tYWluKCk7XFxuK1xcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XFxuIFxcbiBcXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFxcdTAwMjZwZ2N0eCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcXG5AQCAtMSw0OSArMSw2NSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjaW50dHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZ3RrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9wcm9ncmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBHdGtXaWRnZXQgKmRpYWxvZztcXG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XFxuIFxcbitzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRkaWFsb2cgPSBOVUxMO1xcbitcXHRwcm9ncmVzcyA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcXG4ge1xcbiBcXHRkb3VibGUgZnJhY3Rpb24gPSBwLVxcdTAwM2V0b3RhbCA/IDEuMCAqIHAtXFx1MDAzZWN1cnIgLyBwLVxcdTAwM2V0b3RhbCA6IDAuMDtcXG4gXFx0Y2hhciBidWZbMTAyNF07XFxuIFxcbiBcXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcXG4tXFx0XFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xcbitcXHRcXHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xcbiBcXHRcXHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVxcdTAwM2V0aXRsZSk7XFxuIFxcbi1cXHRcXHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0cHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XFxuK1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xcbiBcXG4tXFx0XFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTtcXG4rXFx0XFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcXG4gXFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXFxcInBlcmZcXFwiKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4gXFxuLVxcdFxcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbiBcXHR9XFxuIFxcbiBcXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xcbiBcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJVxcXCJQUkl1NjRcXFwiIC8gJVxcXCJQUkl1NjQsIHAtXFx1MDAzZWN1cnIsIHAtXFx1MDAzZXRvdGFsKTtcXG4gXFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcXG4gXFxuLVxcdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cXG4tXFx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxcbi1cXHRcXHRndGtfbWFpbl9pdGVyYXRpb24oKTtcXG4rXFx0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cXG4rXFx0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXFxuK1xcdFxcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXFxuIHtcXG4rXFx0aWYgKGRpYWxvZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbiBcXG4gXFx0ZGlhbG9nID0gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcXG4gXFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XFxuIFxcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xcbiBcXG4tXFx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xcbitcXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxcbkBAIC0yMCw1ICsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xcbi1cXHRndGtfbWFpbl9xdWl0KCk7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcXG5pbmRleCBjNDdmNWMzODc4MzhjLi44YTkyMjg1MTI1N2U3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbkBAIC0yLDggKzIsMTAgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImd0ay5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGFyZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvemFsbG9jLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XFxuQEAgLTI4LDQzICszMCw5MiBAQCBpbnQgcGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbid0XFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXFxuKyAqIFRyYWNrIGV2ZXJ5IGN1cnJlbnRseSBydW5uaW5nIGxvb3AgaW5zdGVhZCBvZiBhIHNpbmdsZSBwb2ludGVyLCBzbyBhXFxuKyAqIG5lc3RlZCBjYWxsIGNhbid0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCdzIGxvb3AgYW5kIGxlYWsgaXQuXFxuKyAqL1xcbitzdGF0aWMgR1NMaXN0ICpwZXJmX2d0a19fZXJyb3JfbG9vcHM7XFxuK1xcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxcbit7XFxuK1xcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxcbitcXHRcXHRcXHRcXHQgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxcbitcXHRcXHRcXHRcXHQgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX19lcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcXG4ge1xcbiBcXHRjaGFyICptc2c7XFxuIFxcdEd0a1dpZGdldCAqZGlhbG9nO1xcbitcXHRHTWFpbkxvb3AgKmxvb3A7XFxuK1xcdHZhX2xpc3QgYXJnc19jb3B5O1xcbiBcXG4rXFx0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xcbiBcXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbitcXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6XFxcXG5cXFwiKTtcXG4gXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbitcXHR2YV9lbmQoYXJnc19jb3B5KTtcXG4gXFxuIFxcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cXHUwMDNlbWFpbl93aW5kb3cpLFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsXFxuIFxcdFxcdFxcdFxcdFxcdEdUS19NRVNTQUdFX0VSUk9SLFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfQlVUVE9OU19DTE9TRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcIlxcdTAwM2NiXFx1MDAzZUVycm9yXFx1MDAzYy9iXFx1MDAzZVxcXFxuXFxcXG4lc1xcXCIsIG1zZyk7XFxuLVxcdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XFxuIFxcbi1cXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcXG4rXFx0LypcXG4rXFx0ICogXFxcInJlc3BvbnNlXFxcIiBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVFxcbitcXHQgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSBcXFwiZGVzdHJveVxcXCJcXG4rXFx0ICogaW5zdGVhZCwgd2hpY2ggZmlyZXMgZWl0aGVyIHdheSwgc28gdGhlIG5lc3RlZCBsb29wIGJlbG93IGNhbid0XFxuK1xcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cXG4rXFx0ICovXFxuK1xcdGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xcbitcXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcXG4rXFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJyZXNwb25zZVxcXCIsXFxuK1xcdFxcdFxcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTtcXG4rXFx0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXFxcImRlc3Ryb3lcXFwiLFxcbitcXHRcXHRcXHRcXHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XFxuK1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XFxuK1xcdGdfbWFpbl9sb29wX3J1bihsb29wKTtcXG4rXFx0cGVyZl9ndGtfX2Vycm9yX2xvb3BzID0gZ19zbGlzdF9yZW1vdmUocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcXG4rXFx0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XFxuK1xcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbiB7XFxuIFxcdGNoYXIgKm1zZztcXG4rXFx0dmFfbGlzdCBhcmdzX2NvcHk7XFxuIFxcbitcXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XFxuIFxcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxcbi1cXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXFx1MDAzYyAwKSB7XFxuK1xcdCAgICB2YXNwcmludGYoXFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFxcdTAwM2MgMCkge1xcbitcXHRcXHR2YV9lbmQoYXJnc19jb3B5KTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXYXJuaW5nOlxcXFxuXFxcIik7XFxuIFxcdFxcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4rXFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcbiBcXHRndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKHBnY3R4LVxcdTAwM2VtZXNzYWdlX2xhYmVsKSwgbXNnKTtcXG4gXFx0Z3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LVxcdTAwM2VpbmZvX2JhciksXFxuQEAgLTc0LDQwICsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbi17XFxuLVxcdGNoYXIgKm1zZywgKnA7XFxuLVxcbi1cXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6XFxcXG5cXFwiKTtcXG4tXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbi1cXG4tXFx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cXHUwMDNlc3RhdGJhciksXFxuLVxcdFxcdFxcdCAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcXG4tXFxuLVxcdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXFxuLVxcdHAgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4tXFx0aWYgKHApXFxuLVxcdFxcdCpwID0gJ1xcXFwwJztcXG4tXFxuLVxcdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVxcdTAwM2VzdGF0YmFyKSxcXG4tXFx0XFx0XFx0ICAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xcbi1cXG4tXFx0ZnJlZShtc2cpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xcbiBcXHQuZXJyb3JcXHRcXHQ9IHBlcmZfZ3RrX19lcnJvcixcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gXFx0Lndhcm5pbmdcXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxcbi0jZWxzZVxcbi1cXHQud2FybmluZ1xcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxcbi0jZW5kaWZcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXFxuaW5kZXggZmY4MDAwNDdlNjk3Zi4uZDg4NzM0NmM3YTYzMiAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcXG4rKysgYi90b29scy9wZXJmL3VpL3NldHVwLmNcXG5AQCAtMTQsNyArMTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTtcXG4gXFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFxcXCJsaWJwZXJmLWd0ay5zb1xcXCJcXG4gXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuQEAgLTE0NSw2ICsxNDUsMTcgQEAgc3RhdGljIGludCBhbm5vdGF0ZWRfc291cmNlX19hbGxvY19oaXN0b2dyYW1zKHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsXFxuIFxcdHJldHVybiBzcmMtXFx1MDAzZWhpc3RvZ3JhbXMgPyAwIDogLTE7XFxuIH1cXG4gXFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXFxuK2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xcbitcXHRsb25nIGtleSA9IG9mZnNldCBcXHUwMDNjXFx1MDAzYyAxNiB8IGV2c2VsLVxcdTAwM2Vjb3JlLmlkeDtcXG4rXFxuK1xcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXFx1MDAzZXNhbXBsZXMsIGtleSwgXFx1MDAyNmVudHJ5KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBlbnRyeTtcXG4rfVxcbitcXG4gdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pXFxuIHtcXG4gXFx0c3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG5AQCAtNDA2LDE2ICs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyxcXG4gXFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cXHUwMDNlc3JjLCBldnNlbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4tYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxcbi17XFxuLVxcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XFxuLVxcdGxvbmcga2V5ID0gb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIDE2IHwgZXZzZWwtXFx1MDAzZWNvcmUuaWR4O1xcbi1cXG4tXFx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cXHUwMDNlc2FtcGxlcywga2V5LCBcXHUwMDI2ZW50cnkpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0cmV0dXJuIGVudHJ5O1xcbi19XFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXFxuK2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjAxOjA1LjIzNzc2ODY4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQwNTkyNjg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTRhMTFkMTQzMmZiNDYyODVhN2VmYzEwMTIwNTc5ZGU2YTBjMGQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTowMTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBudW1hX251bV9wb3NzaWJsZV9jcHVzIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG4rKysgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgKzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOlxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XG4gXHQgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMlx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXG4gXG4tJChPVVRQVVQpdGVzdC1ndGsyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1xuLVxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiskKE9VVFBVVCl0ZXN0LWd0azQuYmluOlxuK1x0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4gXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxuIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMTIgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiXG4tI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIlxuLVxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4te1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4tXHRndGtfaW5mb19iYXJfbmV3KCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbnNpbWlsYXJpdHkgaW5kZXggNzYlXG5yZW5hbWUgZnJvbSB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbkBAIC0zLDkgKzMsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2d0ay9ndGsuaFx1MDAzZVxuICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgXCItV3N0cmljdC1wcm90b3R5cGVzXCJcbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK2ludCBtYWluKHZvaWQpXG4ge1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4rXHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXG4gXHRyZXF1aXJlcyBhIHR0eSwgaWYgb25lIGlzIG5vdCBwcmVzZW50LCBhcyB3aGVuIHBpcGluZyB0byBvdGhlclxuIFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cbiBcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxuIFxuIC1rOjpcbiAtLXZtbGludXg9XHUwMDNjZmlsZVx1MDAzZTo6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4rXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxuIFxuIGJ1aWxkLXRlc3QtdGFyYmFsbDpcbiBcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcbiAgIGVuZGlmXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4tICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuK2lmZGVmIEdUSzRcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbisgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXG4rICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyArPSAtREhBVkVfR1RLMl9TVVBQT1JUXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbisgICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyArPSAtbGRsXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cbisgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXG4rICAgIExERkxBR1MgKz0gLXJkeW5hbWljXG4gICBlbmRpZlxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXG4gI1xuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cbiAjXG4tIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cbiAjXG4gIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMrKyBzeW1ib2wgZGVtYW5nbGluZy5cbiAjXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxuICAgQ0ZMQUdTICs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXG4gICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm9cbiBlbmRpZlxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xuIFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKSc7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGJvb2xcdCAgIHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHQgICBza2lwX21pc3Npbmc7XG5AQCAtNzEyLDcgKzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0T1BUX0JPT0xFQU4oJ3EnLCBcInF1aWV0XCIsIFx1MDAyNnF1aWV0LCBcImRvIG5vdyBzaG93IGFueSB3YXJuaW5ncyBvciBtZXNzYWdlc1wiKSxcbiBcdE9QVF9CT09MRUFOKCdEJywgXCJkdW1wLXJhdy10cmFjZVwiLCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVwiKSxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwiZ3RrXCIsIFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFwiVXNlIHRoZSBHVEsgaW50ZXJmYWNlXCIpLFxuICNlbmRpZlxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbiBcdGJvb2xcdFx0XHR1c2VfdHVpO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG4gXHRPUFRfQk9PTEVBTigwLCBcInR1aVwiLCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCJVc2UgdGhlIFRVSSBpbnRlcmZhY2VcIiksXG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4tXHRPUFRfQk9PTEVBTigwLCBcImd0a1wiLCBcdTAwMjZyZXBvcnQudXNlX2d0aywgXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXCIpLFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuK1x0T1BUX0JPT0xFQU4oMCwgXCJndGtcIiwgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVwiKSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwic3RkaW9cIiwgXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcbiBcdFx0ICAgIFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcIiksXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0ZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpXG4gXHRcdHVzZV9icm93c2VyID0gMTtcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xuIFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcbiBcdCMgZGlzYXNzZW1ibGVyIGZhbWlseSAobGliYmZkLCBsaWJiZmQtdGhyZWFkc2FmZSwgbGliYmZkLWxpYmVydHksXG4gXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xuLVx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXG4tXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEsyIC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcbitcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxuK1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyArOTUsNyBAQCBtYWtlX25vX2JhYmVsdHJhY2UyIDo9IE5PX0JBQkVMVFJBQ0UyPTFcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXG4gbWFrZV9ub19zZHRcdCAgICA6PSBOT19TRFQ9MVxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcbittYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MVxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVwiLURSRUZDTlRfQ0hFQ0tJTkc9MVwiXG4gbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxuIFx0JChjYWxsIHRlc3QsJEApIFx1MDAyNlx1MDAyNiBcXFxuIFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxuIFxuLW1ha2Vfd2l0aF9ndGsyOlxuK21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCJjZCAkKFBFUkYpIFx1MDAyNlx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFwiOyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5pbmRleCA4OTIwZTI5ODQyMGE4Li5hOTYyOWJhYTY1MDc4IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXHUwMDI2bm90ZXMtXHUwMDNlc3JjLVx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBvcy1cdTAwM2VhbC5ub2RlKTtcbkBAIC0yMTEsMzQgKzIxMSwzMCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xuIFx0XHRzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwicGVyZiBhbm5vdGF0ZVwiKTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0XHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XG4gXHRcdGlmICghcGdjdHgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHR2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTtcbitcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0XHRpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRcdGlmIChpbmZvYmFyKSB7XG4tXHRcdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXG4tXHRcdFx0XHRcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XG4tXHRcdH1cbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdFx0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcdH1cbiBcbi1cdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgKzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uZTFkMjg2OTQ1ODMyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtMTYsMjEgKzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKVxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXG4ge1xuIFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XG4tXHRHZGtTY3JlZW4gKnNjcmVlbjtcbi1cdGludCBtb25pdG9yO1xuK1x0R2RrTW9uaXRvciAqbW9uaXRvcjtcbitcdEdka0Rpc3BsYXkgKmRpc3BsYXk7XG4rXHRHTGlzdE1vZGVsICptb25pdG9ycztcbiBcdGludCBoZWlnaHQ7XG4gXHRpbnQgd2lkdGg7XG4gXG4tXHRzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTtcbitcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XG4rXHRtb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTtcbitcdG1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApO1xuK1x0aWYgKCFtb25pdG9yKSB7XG4rXHRcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVx1MDAzZXdpbmRvdyk7XG4tXG4tXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXHUwMDI2cmVjdCk7XG4rXHRnZGtfbW9uaXRvcl9nZXRfZ2VvbWV0cnkobW9uaXRvciwgXHUwMDI2cmVjdCk7XG4rXHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcbiBcbiBcdHdpZHRoXHQ9IHJlY3Qud2lkdGggKiAzIC8gNDtcbiBcdGhlaWdodFx0PSByZWN0LmhlaWdodCAqIDMgLyA0O1xuIFxuLVx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbitcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuK31cbitcbitzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xuK1xuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXG4re1xuK1x0aWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApXG4rXHRcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XG4rfVxuK1xuK3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbitcbitcdHJldHVybiBGQUxTRTtcbit9XG4rXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdylcbit7XG4rXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCJjbG9zZS1yZXF1ZXN0XCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QpLCBOVUxMKTtcbitcbitcdHBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuK1x0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuK1x0Z19jbGVhcl9wb2ludGVyKFx1MDAyNnBlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTtcbiB9XG4gXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxuQEAgLTQyLDIzICs3NCwyMCBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIHtcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKmxhYmVsO1xuLVx0R3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7XG4gXG4gXHRpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTtcbi1cdGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKGluZm9fYmFyLCBUUlVFKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcbiBcbiBcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcIlwiKTtcbiBcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuK1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4rXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcIl9PS1wiLFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwicmVzcG9uc2VcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbkBAIC02OCw3ICs5Nyw2IEBAIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xuIFx0R3RrV2lkZ2V0ICptYWluX3dpbmRvdztcbiBcdEd0a1dpZGdldCAqbm90ZWJvb2s7XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XG4tI2VuZGlmXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRndWludCBzdGF0YmFyX2N0eF9pZDtcbiB9O1xuQEAgLTQwLDE3ICszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTtcbiBcbiB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjBiNzg2YzVhMDQ2YjIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtMzk1LDExICszOTUsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaXN0cyhHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCJyb3ctYWN0aXZhdGVkXCIsXG4gXHRcdFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcbitcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbkBAIC01ODMsMTEgKzU4MSw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFx1MDAyNmhpc3RzLVx1MDAzZWVudHJpZXMsIHN0b3JlLFxuIFx0XHRcdFx0XHROVUxMLCBcdTAwMjZocHAsIG1pbl9wY250KTtcbiBcbi1cdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XG4tXG4gXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFwicm93LWFjdGl2YXRlZFwiLFxuIFx0XHRcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIH1cbiBcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbkBAIC02MDYsMzAgKzYwMiwyOCBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcbiBcbiBcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgXCJwZXJmIHJlcG9ydFwiKTtcbiBcbi1cdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcImRlbGV0ZV9ldmVudFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdGlmICghcGdjdHgpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuK1x0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXG4gXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcbiBcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4rXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdGluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRpZiAoaW5mb19iYXIpXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcbiBcbiBcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpO1xuIFxuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXG4gXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XG4gXHRcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcbkBAIC02NDksNyArNjQzLDcgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xuIFxuIFx0XHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxuIFx0XHRcdFx0XHRcdFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXG5AQCAtNjY1LDE1ICs2NTksMTIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdGd0a19ub3RlYm9va19hcHBlbmRfcGFnZShHVEtfTk9URUJPT0sobm90ZWJvb2spLCBzY3JvbGxlZF93aW5kb3csIHRhYl9sYWJlbCk7XG4gXHR9XG4gXG4tXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XG4tXG4gXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xuLVxuLVx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuIFx0dWlfaGVscGxpbmVfX3B1c2goaGVscCk7XG4gXG4tXHRndGtfbWFpbigpO1xuK1x0cGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTtcbiBcbiBcdHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoXHUwMDI2cGdjdHgpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5pbmRleCBlZWE2ZmNkZTUxOGE4Li43NzBmOTI1MWI1NGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuQEAgLTEsNDkgKzEsNjUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJndGsuaFwiXG4gI2luY2x1ZGUgXCIuLi9wcm9ncmVzcy5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RhdGljIEd0a1dpZGdldCAqZGlhbG9nO1xuIHN0YXRpYyBHdGtXaWRnZXQgKnByb2dyZXNzO1xuIFxuK3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuK1x0XHRcdFx0XHRncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuK3tcbitcdGRpYWxvZyA9IE5VTEw7XG4rXHRwcm9ncmVzcyA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcbiB7XG4gXHRkb3VibGUgZnJhY3Rpb24gPSBwLVx1MDAzZXRvdGFsID8gMS4wICogcC1cdTAwM2VjdXJyIC8gcC1cdTAwM2V0b3RhbCA6IDAuMDtcbiBcdGNoYXIgYnVmWzEwMjRdO1xuIFxuIFx0aWYgKGRpYWxvZyA9PSBOVUxMKSB7XG4tXHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a192Ym94X25ldyhUUlVFLCA1KTtcbitcdFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTtcbiBcdFx0R3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC1cdTAwM2V0aXRsZSk7XG4gXG4tXHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRwcm9ncmVzcyA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpO1xuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGxhYmVsLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbGFiZWwpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MpO1xuK1xuK1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xuIFxuLVx0XHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIHZib3gpO1xuK1x0XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZCksIE5VTEwpO1xuIFxuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksIFwicGVyZlwiKTtcbi1cdFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbi1cdFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuK1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbiBcbi1cdFx0Z3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4gXHR9XG4gXG4gXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xuIFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlXCJQUkl1NjRcIiAvICVcIlBSSXU2NCwgcC1cdTAwM2VjdXJyLCBwLVx1MDAzZXRvdGFsKTtcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7XG4gXG4tXHQvKiB3ZSBkaWRuJ3QgY2FsbCBndGtfbWFpbiB5ZXQsIHNvIGRvIGl0IG1hbnVhbGx5ICovXG4tXHR3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpXG4tXHRcdGd0a19tYWluX2l0ZXJhdGlvbigpO1xuK1x0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cbitcdHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKVxuK1x0XHRnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2ZpbmlzaCh2b2lkKVxuIHtcbitcdGlmIChkaWFsb2cgPT0gTlVMTClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogdGhpcyB3aWxsIGFsc28gZGVzdHJveSBhbGwgb2YgaXRzIGNoaWxkcmVuICovXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xuIFxuIFx0ZGlhbG9nID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcbiBcdGd0a191aV9wcm9ncmVzc19faW5pdCgpO1xuIFx0cGVyZl9ndGtfX2luaXRfaHBwKCk7XG4gXG4tXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soTlVMTCwgTlVMTCkgPyAwIDogLTE7XG4rXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcbiB9XG4gXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuQEAgLTIwLDUgKzIwLDYgQEAgdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxuIFx0XHRyZXR1cm47XG4gXHRwZXJmX2Vycm9yX191bnJlZ2lzdGVyKFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xuLVx0Z3RrX21haW5fcXVpdCgpO1xuK1x0cGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKCk7XG4rXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG5pbmRleCBjNDdmNWMzODc4MzhjLi44YTkyMjg1MTI1N2U3IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbkBAIC0yLDggKzIsMTAgQEBcbiAjaW5jbHVkZSBcIi4uL3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJndGsuaFwiXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96YWxsb2MuaFx1MDAzZVxuIFxuIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDtcbkBAIC0yOCw0MyArMzAsOTIgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXG4rICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxuKyAqL1xuK3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wcztcbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuK31cbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuK3tcbitcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxuK1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbiBcdEd0a1dpZGdldCAqZGlhbG9nO1xuK1x0R01haW5Mb29wICpsb29wO1xuK1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4rXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4rXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4rXHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcIlx1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcIiwgbXNnKTtcbi1cdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XG4gXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdC8qXG4rXHQgKiBcInJlc3BvbnNlXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbitcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwiZGVzdHJveVwiXG4rXHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJ3RcbitcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbitcdCAqL1xuK1x0bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbitcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcInJlc3BvbnNlXCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuK1x0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XG4rXG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4rXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuK1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4rXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbitcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuK1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuK1x0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcdTAwM2MgMCkge1xuK1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XG4gXHRndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZShHVEtfSU5GT19CQVIocGdjdHgtXHUwMDNlaW5mb19iYXIpLFxuQEAgLTc0LDQwICsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuLVx0XHRyZXR1cm4gLTE7XG4tXHR9XG4tXG4tXHRndGtfc3RhdHVzYmFyX3BvcChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQpO1xuLVxuLVx0LyogT25seSBmaXJzdCBsaW5lIGNhbiBiZSBkaXNwbGF5ZWQgKi9cbi1cdHAgPSBzdHJjaHIobXNnLCAnXFxuJyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAnXFwwJztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuLVxuLVx0ZnJlZShtc2cpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xuIFx0LmVycm9yXHRcdD0gcGVyZl9ndGtfX2Vycm9yLFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcixcbi0jZWxzZVxuLVx0Lndhcm5pbmdcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG4rKysgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbkBAIC0xNCw3ICsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xuIFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFwibGlicGVyZi1ndGsuc29cIlxuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuQEAgLTE0NSw2ICsxNDUsMTcgQEAgc3RhdGljIGludCBhbm5vdGF0ZWRfc291cmNlX19hbGxvY19oaXN0b2dyYW1zKHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsXG4gXHRyZXR1cm4gc3JjLVx1MDAzZWhpc3RvZ3JhbXMgPyAwIDogLTE7XG4gfVxuIFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4rXHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbitcbitcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGVudHJ5O1xuK31cbitcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4gXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5AQCAtNDA2LDE2ICs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyxcbiBcdHJldHVybiBhbm5vdGF0ZWRfc291cmNlX19oaXN0b2dyYW0obm90ZXMtXHUwMDNlc3JjLCBldnNlbCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXG4te1xuLVx0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbi1cdGxvbmcga2V5ID0gb2Zmc2V0IFx1MDAzY1x1MDAzYyAxNiB8IGV2c2VsLVx1MDAzZWNvcmUuaWR4O1xuLVxuLVx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gZW50cnk7XG4tfVxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjAxOjA1LjIzNzc3MDI3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MDU4OTkyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIFRyaWFnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gdXBkYXRlcyB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYm90aCBgYnVpbGQvYCBhbmQgYHBlcmYvYC4gIEkgc2VlIGNoYW5nZXMgdG8gbWFrZWZpbGVzLCBmZWF0dXJlIHRlc3RzIHJlbGF0ZWQgdG8gR1RLMiwgYW5kIHdoYXQgYXBwZWFycyB0byBiZSBhIG1pZ3JhdGlvbiBvciB1cGRhdGUgdG8gR1RLNCBzdXBwb3J0IChyZW5hbWluZyBgdGVzdC1ndGsyLmNgIHRvIGB0ZXN0LWd0azQuY2ApLiAgVGhlIGBwZXJmL2AgZGlyZWN0b3J5IGlzIGdldHRpbmcgYSBmYWlyIGFtb3VudCBvZiBhdHRlbnRpb24gYXMgd2VsbDogSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgaXRzIG1ha2VmaWxlcywgYnVpbHQtaW4gYmluYXJpZXMsIGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIGFuZCB0aGUgR1RLLWJhc2VkIFVJIGVsZW1lbnRzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBBY2NvcmRpbmcgdG8gb3VyIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBPTkxZIGlmIGFsbCBtb2RpZmllZCBjb2RlIGZpdHMgb25lIG9yIG1vcmUgc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhOiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB1c2VyLXNwYWNlIGNvZGUuXG5cbkkgc2VlIHRoYXQgYWxsIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoYXQncyBhIGdvb2QgaW5pdGlhbCBpbmRpY2F0b3IuICBNb3JlIHNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvYnVpbGQvYCDigJMgd2hpY2ggaG91c2VzIGJ1aWxkIHN5c3RlbSBmaWxlcyBhbmQgdGVzdCBiaW5hcmllcyDigJMgYW5kIGB0b29scy9wZXJmL2DigJMgd2hpY2ggaXMsIGFzIEkga25vdywgYSB1c2VyLXNwYWNlIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2wuIFRoZSB0ZXN0cyBzZWVtIHRvIGJlIGZlYXR1cmUgdGVzdHMgYW5kIG5vdCBmb3Iga2VybmVsIGZ1bmN0aW9uYWxpdHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcywgYXQgZmlyc3QgZ2xhbmNlLCBhcHBlYXIgdG8gYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKGB2bWxpbnV4YCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLiAgSXTigJlzIHB1cmVseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgdHJpYWdlIHBoaWxvc29waHksIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlcmUncyBubyBuZWVkIHRvIGZ1enogdGhpcy4gIFNpbmNlIHRoZXJlIGFyZSBubyBrZXJuZWwgc3ltYm9scyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uc2lkZXIsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgZW1wdHkgbGlzdHMgKGBbXWApLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIHN1Y2NpbmN0bHkgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHdoaWNoIGlzIHdoYXQgSSdtIGRvaW5nIG5vdy4gIFRoZSBwYXRjaCBzb2xlbHkgbW9kaWZpZXMgZmlsZXMgbG9jYXRlZCBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5OyBzcGVjaWZpY2FsbHkgdGhlIGBwZXJmYCB1c2VyLXNwYWNlIHRvb2wgYW5kIGJ1aWxkIGZlYXR1cmVzIHJlbGF0aW5nIHRvIEdUSzQgc3VwcG9ydCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMuICBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYEZvY3VzU3ltYm9sc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYFJlYXNvbmluZ2A6IGNvbmNpc2UgZXhwbGFuYXRpb247IGFuZCBgV29ydGhGdXp6aW5nYDogYSBib29sZWFuLiBJIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjksIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTowMToxMC42NDM2NzMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6MDE6MTAuNjQzNjk3NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowss86t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 00:59:48 +0000 UTC FinishedAt: 2026-09-07 01:01:12 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxNGExMWQxNDMyZmI0NjI4NWE3ZWZjMTAxMjA1NzlkZTZhMGMwZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjAxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGhlbGxvICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGJhYmVsdHJhY2UyLWN0Zi13cml0ZXIgICAgICAgICBcXFxuICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTE0Myw2ICYjNDM7MTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYmVsZiAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBsaWJudW1hICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5pbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxuQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1ldmVudGZkLmJpbiAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWZvcnRpZnktc291cmNlLmJpbiAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBcXFxuJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgJiM0MzsyMzksOCBAQCAkKE9VVFBVVCl0ZXN0LWxpYmNwdXBvd2VyLmJpbjpcbiAkKE9VVFBVVCl0ZXN0LWxpYnRyYWNlZnMuYmluOlxuIFx0ICQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJ0cmFjZWZzIDJcdTAwM2UvZGV2L251bGwpIC1sdHJhY2Vmc1xuIFxuLSQoT1VUUFVUKXRlc3QtZ3RrMi5iaW46XG4tXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXG4tXG4tJChPVVRQVVQpdGVzdC1ndGsyLWluZm9iYXIuYmluOlxuLVx0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiYjNDM7JChPVVRQVVQpdGVzdC1ndGs0LmJpbjpcbiYjNDM7XHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiBcbiBncmVwLWxpYnMgID0gJChmaWx0ZXIgLWwlLCQoMSkpXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxMiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NndGsvZ3RrLmhcdTAwM2Vcbi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yIFwmIzM0Oy1Xc3RyaWN0LXByb3RvdHlwZXNcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLXtcbi1cdGd0a19pbml0KFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YpO1xuLVx0Z3RrX2luZm9fYmFyX25ldygpO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxucmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xucmVuYW1lIHRvIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrNC5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcJiMzNDstV3N0cmljdC1wcm90b3R5cGVzXCYjMzQ7XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7aW50IG1haW4odm9pZClcbiB7XG4tXHRndGtfaW5pdChcdTAwMjZhcmdjLCBcdTAwMjZhcmd2KTtcbiYjNDM7XHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICYjNDM7MzUxLDcgQEAgT1BUSU9OU1xuIFx0cmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXJcbiBcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXG4gXG4tLS1ndGs6OiBVc2UgdGhlIEdUSzIgaW50ZXJmYWNlLlxuJiM0MzstLWd0azo6IFVzZSB0aGUgR1RLNCBpbnRlcmZhY2UuXG4gXG4gLWs6OlxuIC0tdm1saW51eD1cdTAwM2NmaWxlXHUwMDNlOjpcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4mIzQzO1x0QCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXRcbiBcbiBidWlsZC10ZXN0LXRhcmJhbGw6XG4gXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5pbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnXG5AQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFOR1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuLWlmZGVmIEdUSzJcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuJiM0MztpZmRlZiBHVEs0XG4mIzQzOyAgRkxBR1NfR1RLND0kKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MzsgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4mIzQzOyAgaWZuZXEgKCQoZmVhdHVyZS1ndGs0KSwgMSlcbiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldilcbiYjNDM7ICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyAmIzQzOz0gLURIQVZFX0dUSzJfU1VQUE9SVFxuLSAgICBHVEtfQ0ZMQUdTICYjNDM7PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrJiM0MzstMi4wIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBDRkxBR1MgJiM0Mzs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4mIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbFxuJiM0MzsgICAgIyBsaWJwZXJmLWd0ay5zbyBpcyBkbG9wZW4oKWVkIGF0IHJ1bnRpbWUgYW5kIGNhbGxzIGJhY2sgaW50b1xuJiM0MzsgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlXG4mIzQzOyAgICAjIGR5bmFtaWNhbGx5IGZvciB0aGUgcGx1Z2luIHRvIHJlc29sdmUgdGhlbS5cbiYjNDM7ICAgIExERkxBR1MgJiM0Mzs9IC1yZHluYW1pY1xuICAgZW5kaWZcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZlxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW5jbHVkZSAuLi9zY3JpcHRzL3V0aWxpdGllcy5tYWtcbiAjXG4gIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LlxuICNcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LlxuICNcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQyYjNDM7JiM0Mzsgc3ltYm9sIGRlbWFuZ2xpbmcuXG4gI1xuQEAgLTQ3Myw3ICYjNDM7NDczLDcgQEAgaWZuZXEgKCQoT1VUUFVUKSwpXG4gICBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiAgIEFMTF9QUk9HUkFNUyAmIzQzOz0gJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xuIGVuZGlmXG5AQCAtODExLDcgJiM0Mzs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4mIzQzO2lmZGVmIEdUSzRcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cbiBcdCQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAmIzM5OyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkmIzM5OzsgXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5pbmRleCA2OWNiNzJiMjA4MmE2Li4xNTE2M2UwODFhOGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRib29sXHQgICB1c2VfZ3RrO1xuICNlbmRpZlxuIFx0Ym9vbFx0ICAgc2tpcF9taXNzaW5nO1xuQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRPUFRfQk9PTEVBTigmIzM5O3EmIzM5OywgXCYjMzQ7cXVpZXRcJiMzNDssIFx1MDAyNnF1aWV0LCBcJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXNcJiMzNDspLFxuIFx0T1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssIFwmIzM0O2R1bXAtcmF3LXRyYWNlXCYjMzQ7LCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCYjMzQ7ZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcJiMzNDspLFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2YW5ub3RhdGUudXNlX2d0aywgXCYjMzQ7VXNlIHRoZSBHVEsgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG5AQCAtODI4LDcgJiM0Mzs4MjgsNyBAQCBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiBcdGlmIChhbm5vdGF0ZV9jaGVja19hcmdzKCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwmIzM0Oy0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcbiBcdFx0dXNlX2Jyb3dzZXIgPSAyO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5AQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7XG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV90dWk7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxuIFx0T1BUX0JPT0xFQU4oMCwgXCYjMzQ7dHVpXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCYjMzQ7VXNlIHRoZSBUVUkgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbi1cdE9QVF9CT09MRUFOKDAsIFwmIzM0O2d0a1wmIzM0OywgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwmIzM0O1VzZSB0aGUgR1RLMiBpbnRlcmZhY2VcJiMzNDspLFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiYjNDM7XHRPUFRfQk9PTEVBTigwLCBcJiMzNDtndGtcJiMzNDssIFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlXCYjMzQ7KSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwmIzM0O3N0ZGlvXCYjMzQ7LCBcdTAwMjZyZXBvcnQudXNlX3N0ZGlvLFxuIFx0XHQgICAgXCYjMzQ7VXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcJiMzNDspLFxuQEAgLTE3MTAsNyAmIzQzOzE3MTAsNyBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcbiBcdFx0dXNlX2Jyb3dzZXIgPSAxO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggJiM0MzsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcbiBcdCMgb3B0LWluIGZlYXR1cmVzLCB3aGljaCBhIGRlZmF1bHQgYnVpbGQgZG9lcyBub3QgZW5hYmxlOiB0aGUgbGliYmZkXG4gXHQjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LFxuIFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cbi1cdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEsyLCBMSUJQRVJMIGFuZFxuLVx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4mIzQzO1x0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzQsIExJQlBFUkwgYW5kXG4mIzQzO1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xXG4gbWFrZV93aXRoX2NvcmVzaWdodCA6PSBDT1JFU0lHSFQ9MVxuIG1ha2Vfbm9fc2R0XHQgICAgOj0gTk9fU0RUPTFcbiBtYWtlX25vX2xpYnBmbTQgICAgIDo9IE5PX0xJQlBGTTQ9MVxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXG4mIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXG4gbWFrZV9yZWZjbnRfY2hlY2sgICA6PSBFWFRSQV9DRkxBR1M9XCYjMzQ7LURSRUZDTlRfQ0hFQ0tJTkc9MVwmIzM0O1xuIG1ha2VfdGFncyAgICAgICAgICAgOj0gdGFnc1xuIG1ha2VfY3Njb3BlICAgICAgICAgOj0gY3Njb3BlXG5AQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6XG4gXHQkKGNhbGwgdGVzdCwkQCkgXHUwMDI2XHUwMDI2IFxcXG4gXHRybSAtcmYgJEAgJCRUTVBfREVTVCB8fCAoY2F0ICRAIDsgZmFsc2UpXG4gXG4tbWFrZV93aXRoX2d0azI6XG4mIzQzO21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCYjMzQ7Y2QgJChQRVJGKSBcdTAwMjZcdTAwMjYgJChNQUtFX0YpICQoJEApICQoUEFSQUxMRUxfT1BUKSAkKE9fT1BUKSBERVNURElSPSQkVE1QX0RFU1RcJiMzNDs7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcbmluZGV4IDg5MjBlMjk4NDIwYTguLmE5NjI5YmFhNjUwNzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4mIzQzO1x0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIFx1MDAyNm5vdGVzLVx1MDAzZXNyYy1cdTAwM2Vzb3VyY2UsIGFsLm5vZGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb3MtXHUwMDNlYWwubm9kZSk7XG5AQCAtMjExLDM0ICYjNDM7MjExLDMwIEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLFxuIFx0XHRzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7XG4gXHRcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XG4mIzQzO1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwmIzM0O3BlcmYgYW5ub3RhdGVcJiMzNDspO1xuIFxuLVx0XHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCYjMzQ7ZGVsZXRlX2V2ZW50XCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0XHRpZiAoIXBnY3R4KVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4mIzQzO1x0XHR2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTtcbiBcdFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XG4gXHRcdHBnY3R4LVx1MDAzZW5vdGVib29rID0gbm90ZWJvb2s7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdFx0aW5mb2JhciA9IHBlcmZfZ3RrX19zZXR1cF9pbmZvX2JhcigpO1xuLVx0XHRpZiAoaW5mb2Jhcikge1xuLVx0XHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvYmFyLFxuLVx0XHRcdFx0XHQgICBGQUxTRSwgRkFMU0UsIDApO1xuLVx0XHR9XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTtcbiBcbiBcdFx0c3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTtcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7XG4mIzQzO1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbiYjNDM7XHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXHR9XG4gXG4tXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTtcbiYjNDM7XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xuIFx0dGFiX2xhYmVsID0gZ3RrX2xhYmVsX25ldyhzeW0tXHUwMDNlbmFtZSk7XG4gXG4gXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxuQEAgLTI2NywxMiAmIzQzOzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XG4gXG4tXHRndGtfbWFpbigpO1xuJiM0MztcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XG4gXG4gXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFx1MDAyNnBnY3R4KTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5pbmRleCBkMmRhZGYzODczZmJkLi5lMWQyODY5NDU4MzI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmNcbkBAIC0xNiwyMSAmIzQzOzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKVxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXG4ge1xuIFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XG4tXHRHZGtTY3JlZW4gKnNjcmVlbjtcbi1cdGludCBtb25pdG9yO1xuJiM0MztcdEdka01vbml0b3IgKm1vbml0b3I7XG4mIzQzO1x0R2RrRGlzcGxheSAqZGlzcGxheTtcbiYjNDM7XHRHTGlzdE1vZGVsICptb25pdG9ycztcbiBcdGludCBoZWlnaHQ7XG4gXHRpbnQgd2lkdGg7XG4gXG4tXHRzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTtcbiYjNDM7XHRkaXNwbGF5ID0gZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aW5kb3cpO1xuJiM0MztcdG1vbml0b3JzID0gZ2RrX2Rpc3BsYXlfZ2V0X21vbml0b3JzKGRpc3BsYXkpO1xuJiM0MztcdG1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApO1xuJiM0MztcdGlmICghbW9uaXRvcikge1xuJiM0MztcdFx0Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgODAwLCA2MDApO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdG1vbml0b3IgPSBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdy1cdTAwM2V3aW5kb3cpO1xuLVxuLVx0Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIFx1MDAyNnJlY3QpO1xuJiM0MztcdGdka19tb25pdG9yX2dldF9nZW9tZXRyeShtb25pdG9yLCBcdTAwMjZyZWN0KTtcbiYjNDM7XHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcbiBcbiBcdHdpZHRoXHQ9IHJlY3Qud2lkdGggKiAzIC8gNDtcbiBcdGhlaWdodFx0PSByZWN0LmhlaWdodCAqIDMgLyA0O1xuIFxuLVx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbiYjNDM7XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDtcbiYjNDM7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGVyZl9ndGtfX21haW5fbG9vcClcbiYjNDM7XHRcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHRcdGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEZBTFNFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KVxuJiM0Mzt7XG4mIzQzO1x0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwmIzM0O2Nsb3NlLXJlcXVlc3RcJiMzNDssXG4mIzQzO1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuJiM0MztcdGdfbWFpbl9sb29wX3J1bihwZXJmX2d0a19fbWFpbl9sb29wKTtcbiYjNDM7XHRnX2NsZWFyX3BvaW50ZXIoXHUwMDI2cGVyZl9ndGtfX21haW5fbG9vcCwgZ19tYWluX2xvb3BfdW5yZWYpO1xuIH1cbiBcbiBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG5AQCAtNDIsMjMgJiM0Mzs3NCwyMCBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIHtcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKmxhYmVsO1xuLVx0R3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7XG4gXG4gXHRpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTtcbi1cdGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKGluZm9fYmFyLCBUUlVFKTtcbiYjNDM7XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGluZm9fYmFyLCBGQUxTRSk7XG4gXG4gXHRsYWJlbCA9IGd0a19sYWJlbF9uZXcoXCYjMzQ7XCYjMzQ7KTtcbiBcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuJiM0MztcdGd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpO1xuIFxuLVx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLFxuJiM0MztcdGd0a19pbmZvX2Jhcl9hZGRfYnV0dG9uKEdUS19JTkZPX0JBUihpbmZvX2JhciksIFwmIzM0O19PS1wmIzM0OyxcbiBcdFx0XHRcdEdUS19SRVNQT05TRV9PSyk7XG4gXHRnX3NpZ25hbF9jb25uZWN0KGluZm9fYmFyLCBcJiMzNDtyZXNwb25zZVwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbkBAIC02OCw3ICYjNDM7OTcsNiBAQCBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIFxuIFx0cmV0dXJuIGluZm9fYmFyO1xuIH1cbi0jZW5kaWZcbiBcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxuaW5kZXggYTJiNDk3ZjAzZmQ2ZS4uNWQyNjNmOTBmZTNhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaFxuQEAgLTEzLDEwICYjNDM7MTMsOCBAQCBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCB7XG4gXHRHdGtXaWRnZXQgKm1haW5fd2luZG93O1xuIFx0R3RrV2lkZ2V0ICpub3RlYm9vaztcbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuIFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcbiBcdEd0a1dpZGdldCAqbWVzc2FnZV9sYWJlbDtcbi0jZW5kaWZcbiBcdEd0a1dpZGdldCAqc3RhdGJhcjtcbiBcdGd1aW50IHN0YXRiYXJfY3R4X2lkO1xuIH07XG5AQCAtNDAsMTcgJiM0MzszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTtcbiBcbiB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4mIzQzO3ZvaWQgcGVyZl9ndGtfX3J1bl9tYWluX2xvb3AoR3RrV2lkZ2V0ICp3aW5kb3cpO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKTtcbiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjBiNzg2YzVhMDQ2YjIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtMzk1LDExICYjNDM7Mzk1LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XG4tXG4gXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFwmIzM0O3Jvdy1hY3RpdmF0ZWRcJiMzNDssXG4gXHRcdFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcbiYjNDM7XHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZXJmX2d0a19fYWRkX2hpZXJhcmNoeV9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqaGlzdHMsXG5AQCAtNTgzLDExICYjNDM7NTgxLDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLFxuIFx0cGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhoaXN0cywgXHUwMDI2aGlzdHMtXHUwMDNlZW50cmllcywgc3RvcmUsXG4gXHRcdFx0XHRcdE5VTEwsIFx1MDAyNmhwcCwgbWluX3BjbnQpO1xuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCYjMzQ7cm93LWFjdGl2YXRlZFwmIzM0OyxcbiBcdFx0XHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XG4tXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xuJiM0MztcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxuQEAgLTYwNiwzMCAmIzQzOzYwMiwyOCBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuJiM0MztcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXG4gXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwmIzM0O3BlcmYgcmVwb3J0XCYjMzQ7KTtcbiBcbi1cdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcJiMzNDtkZWxldGVfZXZlbnRcJiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0cGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpO1xuIFx0aWYgKCFwZ2N0eClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XG4mIzQzO1x0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXG4gXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcbiBcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7XG4mIzQzO1x0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcbi1cdGlmIChpbmZvX2Jhcilcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuJiM0MztcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcbiBcbiBcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcbiYjNDM7XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XG4mIzQzO1x0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcbiBcdGV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHtcbiBcdFx0c3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpO1xuQEAgLTY0OSw3ICYjNDM7NjQzLDcgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuJiM0MztcdFx0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcbiBcdFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbiBcdFx0XHRcdFx0XHRcdEdUS19QT0xJQ1lfQVVUT01BVElDLFxuQEAgLTY2NSwxNSAmIzQzOzY1OSwxMiBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdFx0Z3RrX25vdGVib29rX2FwcGVuZF9wYWdlKEdUS19OT1RFQk9PSyhub3RlYm9vayksIHNjcm9sbGVkX3dpbmRvdywgdGFiX2xhYmVsKTtcbiBcdH1cbiBcbi1cdGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTtcbi1cbiBcdHBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7XG4tXG4tXHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuIFx0dWlfaGVscGxpbmVfX3B1c2goaGVscCk7XG4gXG4tXHRndGtfbWFpbigpO1xuJiM0MztcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XG4gXG4gXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFx1MDAyNnBnY3R4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuaW5kZXggZWVhNmZjZGU1MThhOC4uNzcwZjkyNTFiNTRiNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcbkBAIC0xLDQ5ICYjNDM7MSw2NSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjaW50dHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Z3RrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9wcm9ncmVzcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7XG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuJiM0MztcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdGRpYWxvZyA9IE5VTEw7XG4mIzQzO1x0cHJvZ3Jlc3MgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcbiB7XG4gXHRkb3VibGUgZnJhY3Rpb24gPSBwLVx1MDAzZXRvdGFsID8gMS4wICogcC1cdTAwM2VjdXJyIC8gcC1cdTAwM2V0b3RhbCA6IDAuMDtcbiBcdGNoYXIgYnVmWzEwMjRdO1xuIFxuIFx0aWYgKGRpYWxvZyA9PSBOVUxMKSB7XG4tXHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a192Ym94X25ldyhUUlVFLCA1KTtcbiYjNDM7XHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNSk7XG4gXHRcdEd0a1dpZGdldCAqbGFiZWwgPSBndGtfbGFiZWxfbmV3KHAtXHUwMDNldGl0bGUpO1xuIFxuLVx0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcbiYjNDM7XHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KCk7XG4gXHRcdHByb2dyZXNzID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTtcbiBcbi1cdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XG4mIzQzO1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGxhYmVsLCBUUlVFKTtcbiYjNDM7XHRcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGxhYmVsKTtcbiYjNDM7XHRcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xuJiM0MztcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MpO1xuJiM0MztcbiYjNDM7XHRcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7XG4gXG4tXHRcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZGlhbG9nKSwgdmJveCk7XG4mIzQzO1x0XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCYjMzQ7ZGVzdHJveVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgR19DQUxMQkFDSyhndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZCksIE5VTEwpO1xuIFxuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksIFwmIzM0O3BlcmZcJiMzNDspO1xuLVx0XHRndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKGRpYWxvZyksIDMwMCwgODApO1xuLVx0XHRndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKGRpYWxvZyksIEdUS19XSU5fUE9TX0NFTlRFUik7XG4mIzQzO1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbiBcbi1cdFx0Z3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpO1xuJiM0MztcdFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xuIFx0fVxuIFxuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfZnJhY3Rpb24oR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGZyYWN0aW9uKTtcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyVcJiMzNDtQUkl1NjRcJiMzNDsgLyAlXCYjMzQ7UFJJdTY0LCBwLVx1MDAzZWN1cnIsIHAtXHUwMDNldG90YWwpO1xuIFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcbiBcbi1cdC8qIHdlIGRpZG4mIzM5O3QgY2FsbCBndGtfbWFpbiB5ZXQsIHNvIGRvIGl0IG1hbnVhbGx5ICovXG4tXHR3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpXG4tXHRcdGd0a19tYWluX2l0ZXJhdGlvbigpO1xuJiM0MztcdC8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqL1xuJiM0MztcdHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKVxuJiM0MztcdFx0Z19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3RrX3VpX3Byb2dyZXNzX19maW5pc2godm9pZClcbiB7XG4mIzQzO1x0aWYgKGRpYWxvZyA9PSBOVUxMKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIHRoaXMgd2lsbCBhbHNvIGRlc3Ryb3kgYWxsIG9mIGl0cyBjaGlsZHJlbiAqL1xuLVx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XG4mIzQzO1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4gXG4gXHRkaWFsb2cgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xuaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcbiBcdGd0a191aV9wcm9ncmVzc19faW5pdCgpO1xuIFx0cGVyZl9ndGtfX2luaXRfaHBwKCk7XG4gXG4tXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soTlVMTCwgTlVMTCkgPyAwIDogLTE7XG4mIzQzO1x0cmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7XG4gfVxuIFxuIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcbkBAIC0yMCw1ICYjNDM7MjAsNiBAQCB2b2lkIHBlcmZfZ3RrX19leGl0KGJvb2wgd2FpdF9mb3Jfb2sgX19tYXliZV91bnVzZWQpXG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpXG4gXHRcdHJldHVybjtcbiBcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXHUwMDI2cGVyZl9ndGtfZW9wcyk7XG4tXHRndGtfbWFpbl9xdWl0KCk7XG4mIzQzO1x0cGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKCk7XG4mIzQzO1x0cGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uOGE5MjI4NTEyNTdlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG5AQCAtMiw4ICYjNDM7MiwxMCBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2d0ay5oXCYjMzQ7XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGFyZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96YWxsb2MuaFx1MDAzZVxuIFxuIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDtcbkBAIC0yOCw0MyAmIzQzOzMwLDkyIEBAIGludCBwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICoqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24mIzM5O3RcbiYjNDM7ICogbW9kYWwgYW5kIGl0cyBuZXN0ZWQgbG9vcCBzdGlsbCBwdW1wcyBldmVudHMgZm9yIHRoZSBtYWluIHdpbmRvdy5cbiYjNDM7ICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbiYjNDM7ICogbmVzdGVkIGNhbGwgY2FuJiMzOTt0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCYjMzk7cyBsb29wIGFuZCBsZWFrIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGVyZl9ndGtfX3F1aXRfbG9vcChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Z19zbGlzdF9mb3JlYWNoKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgcGVyZl9ndGtfX3F1aXRfbG9vcCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UoR3RrRGlhbG9nICpkaWFsb2csXG4mIzQzO1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbiYjNDM7XHRcdFx0XHQgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzO1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4ge1xuIFx0Y2hhciAqbXNnO1xuIFx0R3RrV2lkZ2V0ICpkaWFsb2c7XG4mIzQzO1x0R01haW5Mb29wICpsb29wO1xuJiM0MztcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuJiM0MztcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcbiBcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbiYjNDM7XHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOlxcblwmIzM0Oyk7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiYjNDM7XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcJiMzNDtcdTAwM2NiXHUwMDNlRXJyb3JcdTAwM2MvYlx1MDAzZVxcblxcbiVzXCYjMzQ7LCBtc2cpO1xuLVx0Z3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTtcbiBcbi1cdGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogXCYjMzQ7cmVzcG9uc2VcJiMzNDsgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbiYjNDM7XHQgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSBcJiMzNDtkZXN0cm95XCYjMzQ7XG4mIzQzO1x0ICogaW5zdGVhZCwgd2hpY2ggZmlyZXMgZWl0aGVyIHdheSwgc28gdGhlIG5lc3RlZCBsb29wIGJlbG93IGNhbiYjMzk7dFxuJiM0MztcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcbiYjNDM7XHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCYjMzQ7cmVzcG9uc2VcJiMzNDssXG4mIzQzO1x0XHRcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTtcbiYjNDM7XHRnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoZGlhbG9nLCBcJiMzNDtkZXN0cm95XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBHX0NBTExCQUNLKGdfbWFpbl9sb29wX3F1aXQpLCBsb29wKTtcbiYjNDM7XG4mIzQzO1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xuJiM0MztcdGdfbWFpbl9sb29wX3J1bihsb29wKTtcbiYjNDM7XHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuJiM0MztcdGdfbWFpbl9sb29wX3VucmVmKGxvb3ApO1xuJiM0MztcbiBcdGZyZWUobXNnKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4ge1xuIFx0Y2hhciAqbXNnO1xuJiM0MztcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuJiM0MztcdHZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTtcbiBcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbiYjNDM7XHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6XFxuXCYjMzQ7KTtcbiBcdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuJiM0MztcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFxuIFx0Z3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC1cdTAwM2VtZXNzYWdlX2xhYmVsKSwgbXNnKTtcbiBcdGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlKEdUS19JTkZPX0JBUihwZ2N0eC1cdTAwM2VpbmZvX2JhciksXG5AQCAtNzQsNDAgJiM0MzsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6XFxuXCYjMzQ7KTtcbi1cdFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cdTAwM2VzdGF0YmFyKSxcbi1cdFx0XHQgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcbi1cbi1cdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXG4tXHRwID0gc3RyY2hyKG1zZywgJiMzOTtcXG4mIzM5Oyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAmIzM5O1xcMCYjMzk7O1xuLVxuLVx0Z3RrX3N0YXR1c2Jhcl9wdXNoKEdUS19TVEFUVVNCQVIocGdjdHgtXHUwMDNlc3RhdGJhciksXG4tXHRcdFx0ICAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQsIG1zZyk7XG4tXG4tXHRmcmVlKG1zZyk7XG4tXHRyZXR1cm4gMDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IHBlcmZfZXJyb3Jfb3BzIHBlcmZfZ3RrX2VvcHMgPSB7XG4gXHQuZXJyb3JcdFx0PSBwZXJmX2d0a19fZXJyb3IsXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdC53YXJuaW5nXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxuLSNlbHNlXG4tXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbmluZGV4IGZmODAwMDQ3ZTY5N2YuLmQ4ODczNDZjN2E2MzIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuY1xuQEAgLTE0LDcgJiM0MzsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xuIFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFwmIzM0O2xpYnBlcmYtZ3RrLnNvXCYjMzQ7XG4gXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4mIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuQEAgLTE0NSw2ICYjNDM7MTQ1LDE3IEBAIHN0YXRpYyBpbnQgYW5ub3RhdGVkX3NvdXJjZV9fYWxsb2NfaGlzdG9ncmFtcyhzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLFxuIFx0cmV0dXJuIHNyYy1cdTAwM2VoaXN0b2dyYW1zID8gMCA6IC0xO1xuIH1cbiBcbiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbiYjNDM7YW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBlbnRyeTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4gXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5AQCAtNDA2LDE2ICYjNDM7NDA2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3QgKmFubm90YXRpb25fX2hpc3RvZ3JhbShzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMsXG4gXHRyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLVx1MDAzZXNyYywgZXZzZWwpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4tYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuLXtcbi1cdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4tXHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbi1cbi1cdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0cmV0dXJuIGVudHJ5O1xuLX1cbiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbiYjNDM7YW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE0YTExZDE0MzJmYjQ2Mjg1YTdlZmMxMDEyMDU3OWRlNmEwYzBkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDE6MDE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQppbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NAotLS0gYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKQEAgLTExMyw4ICYjNDM7MTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGNvbXBpbGUteDMyICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXAogICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGd0azIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXAomIzQzOyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgYmFiZWx0cmFjZTItY3RmLXdyaXRlciAgICAgICAgIFwKICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDMsNiAmIzQzOzE0Miw3IEBAIGVuZGlmCiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFwKICAgICAgICAgIGxpYmR3ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgZ2xpYmMgICAgICAgICAgICAgICAgICBcCiYjNDM7ICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBsaWJlbGYgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXAogICAgICAgICAgbnVtYV9udW1fcG9zc2libGVfY3B1cyBcCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZQppbmRleCA3ZDE2NTAxODExNmE1Li4wMWM0OGU2ZWYwMjFkIDEwMDY0NAotLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGUKQEAgLTExLDggJiM0MzsxMSw3IEBAIEZJTEVTPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZm9ydGlmeS1zb3VyY2UuYmluICAgICAgICAgICAgICAgIFwKICAgICAgICAgIHRlc3QtZ2xpYmMuYmluICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHRlc3QtZ3RrMi1pbmZvYmFyLmJpbiAgICAgICAgICAgICAgICAgIFwKJiM0MzsgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWhlbGxvLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICB0ZXN0LWxpYmJmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgICBcCiAJIHRlc3QtbGliYmZkLXRocmVhZHNhZmUuYmluICAgICAgCVwKQEAgLTI0MCwxMSAmIzQzOzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOgogJChPVVRQVVQpdGVzdC1saWJ0cmFjZWZzLmJpbjoKIAkgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMiZndDsvZGV2L251bGwpIC1sdHJhY2VmcwogCi0kKE9VVFBVVCl0ZXN0LWd0azIuYmluOgotCSQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrJiM0MzstMi4wIDImZ3Q7L2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCi0KLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjoKLQkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzskKE9VVFBVVCl0ZXN0LWd0azQuYmluOgomIzQzOwkkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMiZndDsvZGV2L251bGwpCiAKIGdyZXAtbGlicyAgPSAkKGZpbHRlciAtbCUsJCgxKSkKIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpCmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMgYi90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi1pbmZvYmFyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDAKLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMTIgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgJiMzNDstV3N0cmljdC1wcm90b3R5cGVzJiMzNDsKLSNpbmNsdWRlICZsdDtndGsvZ3RrLmgmZ3Q7Ci0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICYjMzQ7LVdzdHJpY3QtcHJvdG90eXBlcyYjMzQ7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JZ3RrX2luaXQoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCWd0a19pbmZvX2Jhcl9uZXcoKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYwpyZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuYwppbmRleCAyYWFmNGJmYzIwNTU2Li5iOTUyMGU3NDA4Yjk5IDEwMDY0NAotLS0gYS90b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmMKQEAgLTMsOSAmIzQzOzMsOSBAQAogI2luY2x1ZGUgJmx0O2d0ay9ndGsuaCZndDsKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgJiMzNDstV3N0cmljdC1wcm90b3R5cGVzJiMzNDsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0MztpbnQgbWFpbih2b2lkKQogewotCWd0a19pbml0KCZhbXA7YXJnYywgJmFtcDthcmd2KTsKJiM0MzsJZ3RrX2luaXQoKTsKIAogICAgICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CmluZGV4IDIyZjg3ZWFhMzI3OTYuLjdhZjliM2Y4MWMwNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dApAQCAtMzUxLDcgJiM0MzszNTEsNyBAQCBPUFRJT05TCiAJcmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXIKIAljb21tYW5kcywgdGhlIHN0ZGlvIGludGVyZmFjZSBpcyB1c2VkLgogCi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuCiYjNDM7LS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLgogCiAtazo6CiAtLXZtbGludXg9Jmx0O2ZpbGUmZ3Q7OjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBjbGVhbjoKICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2UKICMKIGJ1aWxkLXRlc3Q6Ci0JQCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrMiBvdXQKJiM0MzsJQCQoTUFLRSkgU0hVRj0xIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHRhcnBrZyBtYWtlX3N0YXRpYyBtYWtlX3dpdGhfZ3RrNCBvdXQKIAogYnVpbGQtdGVzdC10YXJiYWxsOgogCUAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwppbmRleCA0ZDU5OTNkYTlmOTQ1Li40ZWU3MzkzYTM5ZjkxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwpAQCAtNzc0LDIxICYjNDM7Nzc0LDIyIEBAIGlmbmRlZiBOT19TTEFORwogICBlbmRpZgogZW5kaWYKIAotaWZkZWYgR1RLMgotICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsmIzQzOy0yLjAgMiZndDsvZGV2L251bGwpCi0gICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azIpCi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpCi0gICAgJCh3YXJuaW5nIEdUSzIgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEsyIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azItZGV2ZWwgb3IgbGliZ3RrMi4wLWRldikKLSAgICBOT19HVEsyIDo9IDEKJiM0MztpZmRlZiBHVEs0CiYjNDM7ICBGTEFHU19HVEs0PSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQomIzQzOyAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrNCkKJiM0MzsgIGlmbmVxICgkKGZlYXR1cmUtZ3RrNCksIDEpCiYjNDM7ICAgICQod2FybmluZyBHVEs0IG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLNCBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGs0LWRldmVsIG9yIGxpYmd0ay00LWRldikKJiM0MzsgICAgTk9fR1RLNCA6PSAxCiAgIGVsc2UKLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpCi0gICAgaWZlcSAoJChmZWF0dXJlLWd0azItaW5mb2JhciksIDEpCi0gICAgICBHVEtfQ0ZMQUdTIDo9IC1ESEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAotICAgIGVuZGlmCi0gICAgQ0ZMQUdTICYjNDM7PSAtREhBVkVfR1RLMl9TVVBQT1JUCi0gICAgR1RLX0NGTEFHUyAmIzQzOz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKLSAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0ayYjNDM7LTIuMCAyJmd0Oy9kZXYvbnVsbCkKJiM0MzsgICAgQ0ZMQUdTICYjNDM7PSAtREhBVkVfR1RLNF9TVVBQT1JUCiYjNDM7ICAgIEdUS19DRkxBR1MgJiM0Mzs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDImZ3Q7L2Rldi9udWxsKQomIzQzOyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMiZndDsvZGV2L251bGwpCiAgICAgRVhUTElCUyAmIzQzOz0gLWxkbAomIzQzOyAgICAjIGxpYnBlcmYtZ3RrLnNvIGlzIGRsb3BlbigpZWQgYXQgcnVudGltZSBhbmQgY2FsbHMgYmFjayBpbnRvCiYjNDM7ICAgICMgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBwZXJmIGJpbmFyeSBpdHNlbGYgKGNhbGxjaGFpbl9wYXJhbSwKJiM0MzsgICAgIyBzeW1ib2xfY29uZiwgZXZzZWxfX25hbWUsIC4uLik6IHBlcmYgbmVlZHMgdG8gZXhwb3J0IHRob3NlCiYjNDM7ICAgICMgZHluYW1pY2FsbHkgZm9yIHRoZSBwbHVnaW4gdG8gcmVzb2x2ZSB0aGVtLgomIzQzOyAgICBMREZMQUdTICYjNDM7PSAtcmR5bmFtaWMKICAgZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgppbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCkBAIC00OSw3ICYjNDM7NDksNyBAQCBpbmNsdWRlIC4uL3NjcmlwdHMvdXRpbGl0aWVzLm1hawogIwogIyBEZWZpbmUgTk9fU0xBTkcgaWYgeW91IGRvIG5vdCB3YW50IFRVSSBzdXBwb3J0LgogIwotIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsmIzQzOyBHVUkgc3VwcG9ydC4KJiM0MzsjIERlZmluZSBHVEs0IGlmIHlvdSB3YW50IEdUSyYjNDM7IEdVSSBzdXBwb3J0LgogIwogIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMmIzQzOyYjNDM7IHN5bWJvbCBkZW1hbmdsaW5nLgogIwpAQCAtNDczLDcgJiM0Mzs0NzMsNyBAQCBpZm5lcSAoJChPVVRQVVQpLCkKICAgQ0ZMQUdTICYjNDM7PSAtSSQoT1VUUFVUKQogZW5kaWYKIAotaWZkZWYgR1RLMgomIzQzO2lmZGVmIEdUSzQKICAgQUxMX1BST0dSQU1TICYjNDM7PSAkKE9VVFBVVClsaWJwZXJmLWd0ay5zbwogICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm8KIGVuZGlmCkBAIC04MTEsNyAmIzQzOzgxMSw3IEBAIGNoZWNrOiBwcmVwYXJlCiAKICMjIyBJbnN0YWxsYXRpb24gcnVsZXMKIAotaWZkZWYgR1RLMgomIzQzO2lmZGVmIEdUSzQKIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zbwogCSQoY2FsbCBRVUlFVF9JTlNUQUxMLCAmIzM5O0dUSyBVSSYjMzk7KSBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICYjMzk7JChERVNURElSX1NRKSQobGliZGlyX1NRKSYjMzk7OyBcCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDY5Y2I3MmIyMDgyYTYuLjE1MTYzZTA4MWE4Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBzdHJ1Y3QgcGVyZl9hbm5vdGF0ZSB7CiAJYm9vbAkgICB1c2VfdHVpOwogI2VuZGlmCiAJYm9vbAkgICB1c2Vfc3RkaW8sIHVzZV9zdGRpbzI7Ci0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlib29sCSAgIHVzZV9ndGs7CiAjZW5kaWYKIAlib29sCSAgIHNraXBfbWlzc2luZzsKQEAgLTcxMiw3ICYjNDM7NzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJT1BUX0JPT0xFQU4oJiMzOTtxJiMzOTssICYjMzQ7cXVpZXQmIzM0OywgJmFtcDtxdWlldCwgJiMzNDtkbyBub3cgc2hvdyBhbnkgd2FybmluZ3Mgb3IgbWVzc2FnZXMmIzM0OyksCiAJT1BUX0JPT0xFQU4oJiMzOTtEJiMzOTssICYjMzQ7ZHVtcC1yYXctdHJhY2UmIzM0OywgJmFtcDtkdW1wX3RyYWNlLAogCQkgICAgJiMzNDtkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSYjMzQ7KSwKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7YW5ub3RhdGUudXNlX2d0aywgJiMzNDtVc2UgdGhlIEdUSyBpbnRlcmZhY2UmIzM0OyksCiAjZW5kaWYKICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlQKQEAgLTgyOCw3ICYjNDM7ODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJaWYgKGFubm90YXRlX2NoZWNrX2FyZ3MoKSAmbHQ7IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzICZhbXA7JmFtcDsgYW5ub3RhdGUudXNlX2d0aykgewogCQlwcl9lcnIoJiMzNDstLXNob3ctbnItc2FtcGxlcyBpcyBub3QgYXZhaWxhYmxlIGluIC0tZ3RrIG1vZGUgYXQgdGhpcyB0aW1lXG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCWVsc2UgaWYgKGFubm90YXRlLnVzZV90dWkpCiAJCXVzZV9icm93c2VyID0gMTsKICNlbmRpZgotI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUCiYjNDM7I2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUCiAJZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aykKIAkJdXNlX2Jyb3dzZXIgPSAyOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtODIsNyAmIzQzOzgyLDcgQEAgc3RydWN0IHJlcG9ydCB7CiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCiAJYm9vbAkJCXVzZV90dWk7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCWJvb2wJCQl1c2VfZ3RrOwogI2VuZGlmCiAJYm9vbAkJCXVzZV9zdGRpbzsKQEAgLTEzNTksOCAmIzQzOzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUCiAJT1BUX0JPT0xFQU4oMCwgJiMzNDt0dWkmIzM0OywgJmFtcDtyZXBvcnQudXNlX3R1aSwgJiMzNDtVc2UgdGhlIFRVSSBpbnRlcmZhY2UmIzM0OyksCiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAotCU9QVF9CT09MRUFOKDAsICYjMzQ7Z3RrJiMzNDssICZhbXA7cmVwb3J0LnVzZV9ndGssICYjMzQ7VXNlIHRoZSBHVEsyIGludGVyZmFjZSYjMzQ7KSwKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKJiM0MzsJT1BUX0JPT0xFQU4oMCwgJiMzNDtndGsmIzM0OywgJmFtcDtyZXBvcnQudXNlX2d0aywgJiMzNDtVc2UgdGhlIEdUSzQgaW50ZXJmYWNlJiMzNDspLAogI2VuZGlmCiAJT1BUX0JPT0xFQU4oMCwgJiMzNDtzdGRpbyYjMzQ7LCAmYW1wO3JlcG9ydC51c2Vfc3RkaW8sCiAJCSAgICAmIzM0O1VzZSB0aGUgc3RkaW8gaW50ZXJmYWNlJiMzNDspLApAQCAtMTcxMCw3ICYjNDM7MTcxMCw3IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIAllbHNlIGlmIChyZXBvcnQudXNlX3R1aSkKIAkJdXNlX2Jyb3dzZXIgPSAxOwogI2VuZGlmCi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlQKJiM0MzsjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlQKIAllbHNlIGlmIChyZXBvcnQudXNlX2d0aykKIAkJdXNlX2Jyb3dzZXIgPSAyOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoIGIvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaAppbmRleCBkMDAzZTdmYWIyYmU4Li5hNjAxYTUyNjBjMTdlIDEwMDc1NQotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2gKQEAgLTE5OSw4ICYjNDM7MTk5LDggQEAgZmVkb3JhX3BrZ19mb3IoKSB7CiAJIyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmQKIAkjIGRpc2Fzc2VtYmxlciBmYW1pbHkgKGxpYmJmZCwgbGliYmZkLXRocmVhZHNhZmUsIGxpYmJmZC1saWJlcnR5LAogCSMgZGlzYXNzZW1ibGVyLSosIGNwbHVzLWRlbWFuZ2xlKSwgb25seSBsaW5rZWQgb24gQlVJTERfTk9ORElTVFJPCi0JIyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kCi0JIyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLMiAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksCiYjNDM7CSMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZAomIzQzOwkjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEs0IC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSwKIAkjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC4KIAkjIGxpYmFpbyBpcyBub3QgbWFwcGVkIGVpdGhlcjogaXRzCiAJIyB0ZXN0IHVzZXMgdGhlIFBPU0lYIEFJTyBBUEkgKGFpby5oLCBhaW9fKiwgLWxydCksIHByb3ZpZGVkIGJ5CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21ha2UgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZQpAQCAtOTUsNyAmIzQzOzk1LDcgQEAgbWFrZV9ub19iYWJlbHRyYWNlMiA6PSBOT19CQUJFTFRSQUNFMj0xCiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xCiBtYWtlX25vX3NkdAkgICAgOj0gTk9fU0RUPTEKIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xCi1tYWtlX3dpdGhfZ3RrMiAgICAgIDo9IEdUSzI9MQomIzQzO21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xCiBtYWtlX3JlZmNudF9jaGVjayAgIDo9IEVYVFJBX0NGTEFHUz0mIzM0Oy1EUkVGQ05UX0NIRUNLSU5HPTEmIzM0OwogbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzCiBtYWtlX2NzY29wZSAgICAgICAgIDo9IGNzY29wZQpAQCAtMzE4LDcgJiM0MzszMTgsNyBAQCAkKHJ1bik6CiAJJChjYWxsIHRlc3QsJEApICZhbXA7JmFtcDsgXAogCXJtIC1yZiAkQCAkJFRNUF9ERVNUIHx8IChjYXQgJEAgOyBmYWxzZSkKIAotbWFrZV93aXRoX2d0azI6CiYjNDM7bWFrZV93aXRoX2d0azQ6CiAJJChjYWxsIGNsZWFuKQogCUBUTVBfREVTVD0kJChta3RlbXAgLWQpOyBcCiAJY21kPSYjMzQ7Y2QgJChQRVJGKSAmYW1wOyZhbXA7ICQoTUFLRV9GKSAkKCRAKSAkKFBBUkFMTEVMX09QVCkgJChPX09QVCkgREVTVERJUj0kJFRNUF9ERVNUJiMzNDs7IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jCmluZGV4IDg5MjBlMjk4NDIwYTguLmE5NjI5YmFhNjUwNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYwpAQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcywKIAkJCWd0a19saXN0X3N0b3JlX3NldChzdG9yZSwgJmFtcDtpdGVyLCBBTk5fQ09MX19MSU5FLCBzLCAtMSk7CiAJfQogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZhbXA7bm90ZXMtJmd0O3NyYy0mZ3Q7c291cmNlLCBhbC5ub2RlKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwb3MtJmd0O2FsLm5vZGUpOwpAQCAtMjExLDM0ICYjNDM7MjExLDMwIEBAIHN0YXRpYyBpbnQgc3ltYm9sX19ndGtfYW5ub3RhdGUoc3RydWN0IG1hcF9zeW1ib2wgKm1zLCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLAogCQlzaWduYWwoU0lHUVVJVCwgcGVyZl9ndGtfX3NpZ25hbCk7CiAJCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKIAotCQl3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKJiM0MzsJCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7CiAJCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgJiMzNDtwZXJmIGFubm90YXRlJiMzNDspOwogCi0JCWdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAmIzM0O2RlbGV0ZV9ldmVudCYjMzQ7LCBndGtfbWFpbl9xdWl0LCBOVUxMKTsKLQogCQlwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7CiAJCWlmICghcGdjdHgpCiAJCQlyZXR1cm4gLTE7CiAKLQkJdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7CiYjNDM7CQl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAkJbm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7CiAJCXBnY3R4LSZndDtub3RlYm9vayA9IG5vdGVib29rOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCQlpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JCWlmIChpbmZvYmFyKSB7Ci0JCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2JhciwKLQkJCQkJICAgRkFMU0UsIEZBTFNFLCAwKTsKLQkJfQomIzQzOwkJZ3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7CiAKIAkJc3RhdGJhciA9IHBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIoKTsKLQkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTsKIAotCQlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAl9CiAKLQlzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKJiM0MzsJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAl0YWJfbGFiZWwgPSBndGtfbGFiZWxfbmV3KHN5bS0mZ3Q7bmFtZSk7CiAKIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLApAQCAtMjY3LDEyICYjNDM7MjYzLDExIEBAIHZvaWQgcGVyZl9ndGtfX3Nob3dfYW5ub3RhdGlvbnModm9pZCkKIAkJcmV0dXJuOwogCiAJd2luZG93ID0gcGdjdHgtJmd0O21haW5fd2luZG93OwotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKIAogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0JZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwlndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7CiAKLQlndGtfbWFpbigpOwomIzQzOwlwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpOwogCiAJcGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dCgmYW1wO3BnY3R4KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYwppbmRleCBkMmRhZGYzODczZmJkLi5lMWQyODY5NDU4MzI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9icm93c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jCkBAIC0xNiwyMSAmIzQzOzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKQogdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdykKIHsKIAlHZGtSZWN0YW5nbGUgcmVjdDsKLQlHZGtTY3JlZW4gKnNjcmVlbjsKLQlpbnQgbW9uaXRvcjsKJiM0MzsJR2RrTW9uaXRvciAqbW9uaXRvcjsKJiM0MzsJR2RrRGlzcGxheSAqZGlzcGxheTsKJiM0MzsJR0xpc3RNb2RlbCAqbW9uaXRvcnM7CiAJaW50IGhlaWdodDsKIAlpbnQgd2lkdGg7CiAKLQlzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTsKJiM0MzsJZGlzcGxheSA9IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2luZG93KTsKJiM0MzsJbW9uaXRvcnMgPSBnZGtfZGlzcGxheV9nZXRfbW9uaXRvcnMoZGlzcGxheSk7CiYjNDM7CW1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApOwomIzQzOwlpZiAoIW1vbml0b3IpIHsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JbW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LSZndDt3aW5kb3cpOwotCi0JZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsICZhbXA7cmVjdCk7CiYjNDM7CWdka19tb25pdG9yX2dldF9nZW9tZXRyeShtb25pdG9yLCAmYW1wO3JlY3QpOwomIzQzOwlnX29iamVjdF91bnJlZihtb25pdG9yKTsKIAogCXdpZHRoCT0gcmVjdC53aWR0aCAqIDMgLyA0OwogCWhlaWdodAk9IHJlY3QuaGVpZ2h0ICogMyAvIDQ7CiAKLQlndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpOwomIzQzOwlndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIEdNYWluTG9vcCAqcGVyZl9ndGtfX21haW5fbG9vcDsKJiM0MzsKJiM0Mzt2b2lkIHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApCiYjNDM7CQlnX21haW5fbG9vcF9xdWl0KHBlcmZfZ3RrX19tYWluX2xvb3ApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZ2Jvb2xlYW4gcGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QoR3RrV2lkZ2V0ICp3aWRnZXQgX19tYXliZV91bnVzZWQsCiYjNDM7CQkJCQlncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiYjNDM7CiYjNDM7CXJldHVybiBGQUxTRTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdykKJiM0Mzt7CiYjNDM7CWdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAmIzM0O2Nsb3NlLXJlcXVlc3QmIzM0OywKJiM0MzsJCQkgR19DQUxMQkFDSyhwZXJmX2d0a19fY2xvc2VfcmVxdWVzdCksIE5VTEwpOwomIzQzOwomIzQzOwlwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTsKJiM0MzsJZ19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApOwomIzQzOwlnX2NsZWFyX3BvaW50ZXIoJmFtcDtwZXJmX2d0a19fbWFpbl9sb29wLCBnX21haW5fbG9vcF91bnJlZik7CiB9CiAKIGNvbnN0IGNoYXIgKnBlcmZfZ3RrX19nZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCkKQEAgLTQyLDIzICYjNDM7NzQsMjAgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KQogCXJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCkKIHsKIAlHdGtXaWRnZXQgKmluZm9fYmFyOwogCUd0a1dpZGdldCAqbGFiZWw7Ci0JR3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7CiAKIAlpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTsKLQlndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTsKIAogCWxhYmVsID0gZ3RrX2xhYmVsX25ldygmIzM0OyYjMzQ7KTsKIAlndGtfd2lkZ2V0X3Nob3cobGFiZWwpOwogCi0JY29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEoR1RLX0lORk9fQkFSKGluZm9fYmFyKSk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7CiYjNDM7CWd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpOwogCi0JZ3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLAomIzQzOwlndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCAmIzM0O19PSyYjMzQ7LAogCQkJCUdUS19SRVNQT05TRV9PSyk7CiAJZ19zaWduYWxfY29ubmVjdChpbmZvX2JhciwgJiMzNDtyZXNwb25zZSYjMzQ7LAogCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9oaWRlKSwgTlVMTCk7CkBAIC02OCw3ICYjNDM7OTcsNiBAQCBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKQogCiAJcmV0dXJuIGluZm9fYmFyOwogfQotI2VuZGlmCiAKIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmggYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaAppbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9ndGsuaApAQCAtMTMsMTAgJiM0MzsxMyw4IEBAIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0IHsKIAlHdGtXaWRnZXQgKm1haW5fd2luZG93OwogCUd0a1dpZGdldCAqbm90ZWJvb2s7CiAKLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUCiAJR3RrV2lkZ2V0ICppbmZvX2JhcjsKIAlHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7Ci0jZW5kaWYKIAlHdGtXaWRnZXQgKnN0YXRiYXI7CiAJZ3VpbnQgc3RhdGJhcl9jdHhfaWQ7CiB9OwpAQCAtNDAsMTcgJiM0MzszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTsKIAogdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpOwogdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7CiBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpOwogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpOwotCi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVAogR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKQotewotCXJldHVybiBOVUxMOwotfQotI2VuZGlmCiAKIHN0cnVjdCBldnNlbDsKIHN0cnVjdCBldmxpc3Q7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYwppbmRleCBiYWUyMWYzMzZhZTZkLi4wYjc4NmM1YTA0NmIyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKQEAgLTM5NSwxMSAmIzQzOzM5NSw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpc3RzKEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCQl9CiAJfQogCi0JZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTsKLQogCWdfc2lnbmFsX2Nvbm5lY3QodmlldywgJiMzNDtyb3ctYWN0aXZhdGVkJiMzNDssCiAJCQkgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9ndGtfX2FkZF9oaWVyYXJjaHlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLApAQCAtNTgzLDExICYjNDM7NTgxLDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGllcmFyY2h5KEd0a1dpZGdldCAqd2luZG93LCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAogCXBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsICZhbXA7aGlzdHMtJmd0O2VudHJpZXMsIHN0b3JlLAogCQkJCQlOVUxMLCAmYW1wO2hwcCwgbWluX3BjbnQpOwogCi0JZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTsKLQogCWdfc2lnbmFsX2Nvbm5lY3QodmlldywgJiMzNDtyb3ctYWN0aXZhdGVkJiMzNDssCiAJCQkgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7Ci0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTsKJiM0MzsJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfY2hpbGQoR1RLX1NDUk9MTEVEX1dJTkRPVyh3aW5kb3cpLCB2aWV3KTsKIH0KIAogaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsCkBAIC02MDYsMzAgJiM0Mzs2MDIsMjggQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsCiAJc2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpOwogCXNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTsKIAotCXdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwl3aW5kb3cgPSBndGtfd2luZG93X25ldygpOwogCiAJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCAmIzM0O3BlcmYgcmVwb3J0JiMzNDspOwogCi0JZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICYjMzQ7ZGVsZXRlX2V2ZW50JiMzNDssIGd0a19tYWluX3F1aXQsIE5VTEwpOwotCiAJcGdjdHggPSBwZXJmX2d0a19fYWN0aXZhdGVfY29udGV4dCh3aW5kb3cpOwogCWlmICghcGdjdHgpCiAJCXJldHVybiAtMTsKIAotCXZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwomIzQzOwl2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKIAogCW5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpOwogCi0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG5vdGVib29rLCBUUlVFLCBUUlVFLCAwKTsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChub3RlYm9vaywgVFJVRSk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTsKIAogCWluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7Ci0JaWYgKGluZm9fYmFyKQotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTsKIAogCXN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7Ci0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHN0YXRiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiYjNDM7CWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpOwogCi0JZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKJiM0MzsJZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTsKIAogCWV2bGlzdF9fZm9yX2VhY2hfZW50cnkoZXZsaXN0LCBwb3MpIHsKIAkJc3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhwb3MpOwpAQCAtNjQ5LDcgJiM0Mzs2NDMsNyBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCwKIAkJCX0KIAkJfQogCi0JCXNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwomIzQzOwkJc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTsKIAogCQlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLAogCQkJCQkJCUdUS19QT0xJQ1lfQVVUT01BVElDLApAQCAtNjY1LDE1ICYjNDM7NjU5LDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLAogCQlndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpOwogCX0KIAotCWd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQogCXBlcmZfZ3RrX19yZXNpemVfd2luZG93KHdpbmRvdyk7Ci0KLQlndGtfd2luZG93X3NldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksIEdUS19XSU5fUE9TX0NFTlRFUik7CiYjNDM7CWd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTsKIAogCXVpX2hlbHBsaW5lX19wdXNoKGhlbHApOwogCi0JZ3RrX21haW4oKTsKJiM0MzsJcGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTsKIAogCXBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoJmFtcDtwZ2N0eCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jCmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuYwpAQCAtMSw0OSAmIzQzOzEsNjUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7aW50dHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKIAogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL3Byb2dyZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwogCiBzdGF0aWMgR3RrV2lkZ2V0ICpkaWFsb2c7CiBzdGF0aWMgR3RrV2lkZ2V0ICpwcm9ncmVzczsKIAomIzQzO3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkJZ3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZCkKJiM0Mzt7CiYjNDM7CWRpYWxvZyA9IE5VTEw7CiYjNDM7CXByb2dyZXNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX3VwZGF0ZShzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnApCiB7CiAJZG91YmxlIGZyYWN0aW9uID0gcC0mZ3Q7dG90YWwgPyAxLjAgKiBwLSZndDtjdXJyIC8gcC0mZ3Q7dG90YWwgOiAwLjA7CiAJY2hhciBidWZbMTAyNF07CiAKIAlpZiAoZGlhbG9nID09IE5VTEwpIHsKLQkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpOwomIzQzOwkJR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTsKIAkJR3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC0mZ3Q7dGl0bGUpOwogCi0JCWRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwomIzQzOwkJZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTsKIAkJcHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwogCi0JCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpOwotCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChsYWJlbCwgVFJVRSk7CiYjNDM7CQlndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7CiYjNDM7CQlndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTsKJiM0MzsJCWd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHByb2dyZXNzKTsKJiM0MzsKJiM0MzsJCWd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1coZGlhbG9nKSwgdmJveCk7CiAKLQkJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTsKJiM0MzsJCWdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAmIzM0O2Rlc3Ryb3kmIzM0OywKJiM0MzsJCQkJIEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTsKIAogCQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICYjMzQ7cGVyZiYjMzQ7KTsKLQkJZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTsKLQkJZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpOwomIzQzOwkJZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coZGlhbG9nKSwgMzAwLCA4MCk7CiAKLQkJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOwomIzQzOwkJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwogCX0KIAogCWd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpLCBmcmFjdGlvbik7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslJiMzNDtQUkl1NjQmIzM0OyAvICUmIzM0O1BSSXU2NCwgcC0mZ3Q7Y3VyciwgcC0mZ3Q7dG90YWwpOwogCWd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7CiAKLQkvKiB3ZSBkaWRuJiMzOTt0IGNhbGwgZ3RrX21haW4geWV0LCBzbyBkbyBpdCBtYW51YWxseSAqLwotCXdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLQkJZ3RrX21haW5faXRlcmF0aW9uKCk7CiYjNDM7CS8qIHdlIGRpZG4mIzM5O3Qgc3RhcnQgYSBtYWluIGxvb3AgeWV0LCBzbyBwdW1wIGV2ZW50cyBtYW51YWxseSAqLwomIzQzOwl3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKJiM0MzsJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpCiB7CiYjNDM7CWlmIChkaWFsb2cgPT0gTlVMTCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi8KLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiAKIAlkaWFsb2cgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmMKaW5kZXggZjVlZWU0ZDY2ODczOC4uOWI0NGYzNzE5NzQ3NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jCkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZCkKIAlndGtfdWlfcHJvZ3Jlc3NfX2luaXQoKTsKIAlwZXJmX2d0a19faW5pdF9ocHAoKTsKIAotCXJldHVybiBndGtfaW5pdF9jaGVjayhOVUxMLCBOVUxMKSA/IDAgOiAtMTsKJiM0MzsJcmV0dXJuIGd0a19pbml0X2NoZWNrKCkgPyAwIDogLTE7CiB9CiAKIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKQEAgLTIwLDUgJiM0MzsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZCkKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkpCiAJCXJldHVybjsKIAlwZXJmX2Vycm9yX191bnJlZ2lzdGVyKCZhbXA7cGVyZl9ndGtfZW9wcyk7Ci0JZ3RrX21haW5fcXVpdCgpOwomIzQzOwlwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2coKTsKJiM0MzsJcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmMKaW5kZXggYzQ3ZjVjMzg3ODM4Yy4uOGE5MjI4NTEyNTdlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuYwpAQCAtMiw4ICYjNDM7MiwxMCBAQAogI2luY2x1ZGUgJiMzNDsuLi91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtndGsuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvemFsbG9jLmgmZ3Q7CiAKIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDsKQEAgLTI4LDQzICYjNDM7MzAsOTIgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbiYjMzk7dAomIzQzOyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuCiYjNDM7ICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGEKJiM0MzsgKiBuZXN0ZWQgY2FsbCBjYW4mIzM5O3QgY2xvYmJlciBhbiBvdXRlciBjYWxsJiMzOTtzIGxvb3AgYW5kIGxlYWsgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIEdTTGlzdCAqcGVyZl9ndGtfX2Vycm9yX2xvb3BzOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBlcmZfZ3RrX19xdWl0X2xvb3AoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJZ19tYWluX2xvb3BfcXVpdChkYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCkKJiM0Mzt7CiYjNDM7CWdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLAomIzQzOwkJCQkgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLAomIzQzOwkJCQkgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsJZ3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBwZXJmX2d0a19fZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiB7CiAJY2hhciAqbXNnOwogCUd0a1dpZGdldCAqZGlhbG9nOwomIzQzOwlHTWFpbkxvb3AgKmxvb3A7CiYjNDM7CXZhX2xpc3QgYXJnc19jb3B5OwogCiYjNDM7CXZhX2NvcHkoYXJnc19jb3B5LCBhcmdzKTsKIAlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewomIzQzOwkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3NfY29weSkgJmx0OyAwKSB7CiYjNDM7CQl2YV9lbmQoYXJnc19jb3B5KTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6XG4mIzM0Oyk7CiAJCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiYjNDM7CXZhX2VuZChhcmdzX2NvcHkpOwogCiAJZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ld193aXRoX21hcmt1cChHVEtfV0lORE9XKHBnY3R4LSZndDttYWluX3dpbmRvdyksCiAJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKIAkJCQkJR1RLX01FU1NBR0VfRVJST1IsCiAJCQkJCUdUS19CVVRUT05TX0NMT1NFLAogCQkJCQkmIzM0OyZsdDtiJmd0O0Vycm9yJmx0Oy9iJmd0O1xuXG4lcyYjMzQ7LCBtc2cpOwotCWd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CiAKLQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKJiM0MzsJLyoKJiM0MzsJICogJiMzNDtyZXNwb25zZSYjMzQ7IG9ubHkgZmlyZXMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkOyBERVNUUk9ZX1dJVEhfUEFSRU5UCiYjNDM7CSAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tICYjMzQ7ZGVzdHJveSYjMzQ7CiYjNDM7CSAqIGluc3RlYWQsIHdoaWNoIGZpcmVzIGVpdGhlciB3YXksIHNvIHRoZSBuZXN0ZWQgbG9vcCBiZWxvdyBjYW4mIzM5O3QKJiM0MzsJICogb3V0bGl2ZSB0aGUgZGlhbG9nIGFuZCBoYW5nLgomIzQzOwkgKi8KJiM0MzsJbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7CiYjNDM7CXBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcHJlcGVuZChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApOwomIzQzOwlnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgJiMzNDtyZXNwb25zZSYjMzQ7LAomIzQzOwkJCSBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTsKJiM0MzsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgJiMzNDtkZXN0cm95JiMzNDssCiYjNDM7CQkJCSBHX0NBTExCQUNLKGdfbWFpbl9sb29wX3F1aXQpLCBsb29wKTsKJiM0MzsKJiM0MzsJZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpOwomIzQzOwlnX21haW5fbG9vcF9ydW4obG9vcCk7CiYjNDM7CXBlcmZfZ3RrX19lcnJvcl9sb29wcyA9IGdfc2xpc3RfcmVtb3ZlKHBlcmZfZ3RrX19lcnJvcl9sb29wcywgbG9vcCk7CiYjNDM7CWdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwomIzQzOwogCWZyZWUobXNnKTsKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiB7CiAJY2hhciAqbXNnOwomIzQzOwl2YV9saXN0IGFyZ3NfY29weTsKIAomIzQzOwl2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7CiAJaWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8Ci0JICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzKSAmbHQ7IDApIHsKJiM0MzsJICAgIHZhc3ByaW50ZigmYW1wO21zZywgZm9ybWF0LCBhcmdzX2NvcHkpICZsdDsgMCkgewomIzQzOwkJdmFfZW5kKGFyZ3NfY29weSk7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dhcm5pbmc6XG4mIzM0Oyk7CiAJCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTsKIAkJZnByaW50ZihzdGRlcnIsICYjMzQ7XG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiYjNDM7CXZhX2VuZChhcmdzX2NvcHkpOwogCiAJZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChwZ2N0eC0mZ3Q7bWVzc2FnZV9sYWJlbCksIG1zZyk7CiAJZ3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LSZndDtpbmZvX2JhciksCkBAIC03NCw0MCAmIzQzOzEyNSw4IEBAIHN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfaW5mb19iYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCiAJZnJlZShtc2cpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotCWNoYXIgKm1zZywgKnA7Ci0KLQlpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHwKLQkgICAgdmFzcHJpbnRmKCZhbXA7bXNnLCBmb3JtYXQsIGFyZ3MpICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXYXJuaW5nOlxuJiMzNDspOwotCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuJiMzNDspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZ3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC0mZ3Q7c3RhdGJhciksCi0JCQkgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCk7Ci0KLQkvKiBPbmx5IGZpcnN0IGxpbmUgY2FuIGJlIGRpc3BsYXllZCAqLwotCXAgPSBzdHJjaHIobXNnLCAmIzM5O1xuJiMzOTspOwotCWlmIChwKQotCQkqcCA9ICYjMzk7XDAmIzM5OzsKLQotCWd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LSZndDtzdGF0YmFyKSwKLQkJCSAgIHBnY3R4LSZndDtzdGF0YmFyX2N0eF9pZCwgbXNnKTsKLQotCWZyZWUobXNnKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogCiBzdHJ1Y3QgcGVyZl9lcnJvcl9vcHMgcGVyZl9ndGtfZW9wcyA9IHsKIAkuZXJyb3IJCT0gcGVyZl9ndGtfX2Vycm9yLAotI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlQKIAkud2FybmluZwk9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLAotI2Vsc2UKLQkud2FybmluZwk9IHBlcmZfZ3RrX193YXJuaW5nX3N0YXR1c2JhciwKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvc2V0dXAuYwppbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTsKIAogI2RlZmluZSBQRVJGX0dUS19EU08gJiMzNDtsaWJwZXJmLWd0ay5zbyYjMzQ7CiAKLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVAomIzQzOyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVAogCiBzdGF0aWMgaW50IHNldHVwX2d0a19icm93c2VyKHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCmluZGV4IGRmNzBlOTVhODQ3MDQuLjEyM2I2ZDVmY2VhNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCkBAIC0xNDUsNiAmIzQzOzE0NSwxNyBAQCBzdGF0aWMgaW50IGFubm90YXRlZF9zb3VyY2VfX2FsbG9jX2hpc3RvZ3JhbXMoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywKIAlyZXR1cm4gc3JjLSZndDtoaXN0b2dyYW1zID8gMCA6IC0xOwogfQogCiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICoKJiM0Mzthbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5OwomIzQzOwlsb25nIGtleSA9IG9mZnNldCAmbHQ7Jmx0OyAxNiB8IGV2c2VsLSZndDtjb3JlLmlkeDsKJiM0MzsKJiM0MzsJaWYgKCFoYXNobWFwX19maW5kKHNyYy0mZ3Q7c2FtcGxlcywga2V5LCAmYW1wO2VudHJ5KSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gZW50cnk7CiYjNDM7fQomIzQzOwogdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCmluZGV4IGZhMDhkMDliODBmNzYuLjQwMDM4YTM3NzlkNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oCkBAIC00MDYsMTYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcywKIAlyZXR1cm4gYW5ub3RhdGVkX3NvdXJjZV9faGlzdG9ncmFtKG5vdGVzLSZndDtzcmMsIGV2c2VsKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKgotYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KQotewotCXN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7Ci0JbG9uZyBrZXkgPSBvZmZzZXQgJmx0OyZsdDsgMTYgfCBldnNlbC0mZ3Q7Y29yZS5pZHg7Ci0KLQlpZiAoIWhhc2htYXBfX2ZpbmQoc3JjLSZndDtzYW1wbGVzLCBrZXksICZhbXA7ZW50cnkpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZW50cnk7Ci19CiYjNDM7c3RydWN0IHN5bV9oaXN0X2VudHJ5ICoKJiM0Mzthbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYyOQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDczMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgVHJpYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IHNlZW1zIHRvIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHVwZGF0ZXMgdG8gdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgc3BlY2lmaWNhbGx5IGJvdGggYGJ1aWxkL2AgYW5kIGBwZXJmL2AuICBJIHNlZSBjaGFuZ2VzIHRvIG1ha2VmaWxlcywgZmVhdHVyZSB0ZXN0cyByZWxhdGVkIHRvIEdUSzIsIGFuZCB3aGF0IGFwcGVhcnMgdG8gYmUgYSBtaWdyYXRpb24gb3IgdXBkYXRlIHRvIEdUSzQgc3VwcG9ydCAocmVuYW1pbmcgYHRlc3QtZ3RrMi5jYCB0byBgdGVzdC1ndGs0LmNgKS4gIFRoZSBgcGVyZi9gIGRpcmVjdG9yeSBpcyBnZXR0aW5nIGEgZmFpciBhbW91bnQgb2YgYXR0ZW50aW9uIGFzIHdlbGw6IEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGl0cyBtYWtlZmlsZXMsIGJ1aWx0LWluIGJpbmFyaWVzLCBkb2N1bWVudGF0aW9uLCBzY3JpcHRzLCBhbmQgdGhlIEdUSy1iYXNlZCBVSSBlbGVtZW50cy4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBBY2NvcmRpbmcgdG8gb3VyIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBPTkxZIGlmIGFsbCBtb2RpZmllZCBjb2RlIGZpdHMgb25lIG9yIG1vcmUgc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhOiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB1c2VyLXNwYWNlIGNvZGUuCgpJIHNlZSB0aGF0IGFsbCB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4gIE1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB0b29scy9idWlsZC9gIOKAkyB3aGljaCBob3VzZXMgYnVpbGQgc3lzdGVtIGZpbGVzIGFuZCB0ZXN0IGJpbmFyaWVzIOKAkyBhbmQgYHRvb2xzL3BlcmYvYOKAkyB3aGljaCBpcywgYXMgSSBrbm93LCBhIHVzZXItc3BhY2UgcGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbC4gVGhlIHRlc3RzIHNlZW0gdG8gYmUgZmVhdHVyZSB0ZXN0cyBhbmQgbm90IGZvciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzLCBhdCBmaXJzdCBnbGFuY2UsIGFwcGVhciB0byBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBhbnkga2VybmVsIG1vZHVsZXMuICBJdOKAmXMgcHVyZWx5IGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgdHJpYWdlIHBoaWxvc29waHksIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBmdXp6IHRoaXMuICBTaW5jZSB0aGVyZSBhcmUgbm8ga2VybmVsIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbnNpZGVyLCBib3RoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGVtcHR5IGxpc3RzIChgW11gKS4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIHN1Y2NpbmN0bHkgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBkb2luZyBub3cuICBUaGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIGZpbGVzIGxvY2F0ZWQgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeTsgc3BlY2lmaWNhbGx5IHRoZSBgcGVyZmAgdXNlci1zcGFjZSB0b29sIGFuZCBidWlsZCBmZWF0dXJlcyByZWxhdGluZyB0byBHVEs0IHN1cHBvcnQsIGFuZCB0aGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLgoKT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMuICBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYEZvY3VzU3ltYm9sc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYFJlYXNvbmluZ2A6IGNvbmNpc2UgZXhwbGFuYXRpb247IGFuZCBgV29ydGhGdXp6aW5nYDogYSBib29sZWFuLiBJIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgZmlsZXMgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgdG9vbHMvYnVpbGQgYW5kIHRvb2xzL3BlcmYgZm9yIEdUSzQgR1VJIHN1cHBvcnQgaW4gcGVyZiksIHdoaWNoIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTowMTowMy43ODAzMjk3MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYzMzgwNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6MDE6MDMuNzgwMzM1NDM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2NzM4MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDE0YTExZDE0MzJmYjQ2Mjg1YTdlZmMxMDEyMDU3OWRlNmEwYzBkM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjAxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuaW5kZXggOTllYjBlYTA5NTM3NS4uNGVjOTVjMzVhNWMxOSAxMDA2NDRcXG4tLS0gYS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXFxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxcbkBAIC0xMTMsOCArMTEzLDcgQEAgRkVBVFVSRV9URVNUU19FWFRSQSA6PSAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY29tcGlsZS14MzIgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY3BsdXMtZGVtYW5nbGUgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgY3hhLWRlbWFuZ2xlICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgZ3RrMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgZ3RrMi1pbmZvYmFyICAgICAgICAgICAgICAgICAgIFxcXFxcXG4rICAgICAgICAgZ3RrNCAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgaGVsbG8gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgYmFiZWx0cmFjZTItY3RmLXdyaXRlciAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbGliY2Fwc3RvbmUgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5AQCAtMTQzLDYgKzE0Miw3IEBAIGVuZGlmXFxuIEZFQVRVUkVfRElTUExBWSA/PSAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJkdyAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgZ2xpYmMgICAgICAgICAgICAgICAgICBcXFxcXFxuKyAgICAgICAgIGd0azQgICAgICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICBsaWJlbGYgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgbGlibnVtYSAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIG51bWFfbnVtX3Bvc3NpYmxlX2NwdXMgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiBcXHQgdGVzdC1saWJiZmQtdGhyZWFkc2FmZS5iaW4gICAgICBcXHRcXFxcXFxuQEAgLTI0MCwxMSArMjM5LDggQEAgJChPVVRQVVQpdGVzdC1saWJjcHVwb3dlci5iaW46XFxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XFxuIFxcdCAkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGlidHJhY2VmcyAyXFx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXFxuIFxcbi0kKE9VVFBVVCl0ZXN0LWd0azIuYmluOlxcbi1cXHQkKEJVSUxEKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXFxuLVxcbi0kKE9VVFBVVCl0ZXN0LWd0azItaW5mb2Jhci5iaW46XFxuLVxcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlxcdTAwM2UvZGV2L251bGwpXFxuKyQoT1VUUFVUKXRlc3QtZ3RrNC5iaW46XFxuK1xcdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAyXFx1MDAzZS9kZXYvbnVsbClcXG4gXFxuIGdyZXAtbGlicyAgPSAkKGZpbHRlciAtbCUsJCgxKSlcXG4gc3RyaXAtbGlicyA9ICQoZmlsdGVyLW91dCAtbCUsJCgxKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggYjFiNzE2ZGQ1NzMzMC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwxMiArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4tI2luY2x1ZGUgXFx1MDAzY2d0ay9ndGsuaFxcdTAwM2VcXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4tXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLXtcXG4tXFx0Z3RrX2luaXQoXFx1MDAyNmFyZ2MsIFxcdTAwMjZhcmd2KTtcXG4tXFx0Z3RrX2luZm9fYmFyX25ldygpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcXG5zaW1pbGFyaXR5IGluZGV4IDc2JVxcbnJlbmFtZSBmcm9tIHRvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xcbmluZGV4IDJhYWY0YmZjMjA1NTYuLmI5NTIwZTc0MDhiOTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuY1xcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2d0ay9ndGsuaFxcdTAwM2VcXG4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcXFwiLVdzdHJpY3QtcHJvdG90eXBlc1xcXCJcXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK2ludCBtYWluKHZvaWQpXFxuIHtcXG4tXFx0Z3RrX2luaXQoXFx1MDAyNmFyZ2MsIFxcdTAwMjZhcmd2KTtcXG4rXFx0Z3RrX2luaXQoKTtcXG4gXFxuICAgICAgICAgcmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHRcXG4rKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXFxuIFxcdHJlcXVpcmVzIGEgdHR5LCBpZiBvbmUgaXMgbm90IHByZXNlbnQsIGFzIHdoZW4gcGlwaW5nIHRvIG90aGVyXFxuIFxcdGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzIHVzZWQuXFxuIFxcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXFxuKy0tZ3RrOjogVXNlIHRoZSBHVEs0IGludGVyZmFjZS5cXG4gXFxuIC1rOjpcXG4gLS12bWxpbnV4PVxcdTAwM2NmaWxlXFx1MDAzZTo6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlXFxuaW5kZXggNWI3MTM4MzdlZWRlNy4uNTYwMTQxMDY0NzlhMyAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZVxcbkBAIC0xMDYsNyArMTA2LDcgQEAgY2xlYW46XFxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcXG4gI1xcbiBidWlsZC10ZXN0Olxcbi1cXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGsyIG91dFxcbitcXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxcbiBcXG4gYnVpbGQtdGVzdC10YXJiYWxsOlxcbiBcXHRAJChNQUtFKSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSBvdXRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcXG4gICBlbmRpZlxcbiBlbmRpZlxcbiBcXG4taWZkZWYgR1RLMlxcbi0gIEZMQUdTX0dUSzI9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbi0gICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azIpXFxuLSAgaWZuZXEgKCQoZmVhdHVyZS1ndGsyKSwgMSlcXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXFxuLSAgICBOT19HVEsyIDo9IDFcXG4raWZkZWYgR1RLNFxcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlxcdTAwM2UvZGV2L251bGwpXFxuKyAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrNClcXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxcbisgICAgJCh3YXJuaW5nIEdUSzQgbm90IGZvdW5kLCBkaXNhYmxlcyBHVEs0IHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGd0azQtZGV2ZWwgb3IgbGliZ3RrLTQtZGV2KVxcbisgICAgTk9fR1RLNCA6PSAxXFxuICAgZWxzZVxcbi0gICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMi1pbmZvYmFyKVxcbi0gICAgaWZlcSAoJChmZWF0dXJlLWd0azItaW5mb2JhciksIDEpXFxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXFxuLSAgICBlbmRpZlxcbi0gICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEsyX1NVUFBPUlRcXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcXHUwMDNlL2Rldi9udWxsKVxcbi0gICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGsrLTIuMCAyXFx1MDAzZS9kZXYvbnVsbClcXG4rICAgIENGTEFHUyArPSAtREhBVkVfR1RLNF9TVVBQT1JUXFxuKyAgICBHVEtfQ0ZMQUdTICs9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbisgICAgR1RLX0xJQlMgOj0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBndGs0IDJcXHUwMDNlL2Rldi9udWxsKVxcbiAgICAgRVhUTElCUyArPSAtbGRsXFxuKyAgICAjIGxpYnBlcmYtZ3RrLnNvIGlzIGRsb3BlbigpZWQgYXQgcnVudGltZSBhbmQgY2FsbHMgYmFjayBpbnRvXFxuKyAgICAjIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUgcGVyZiBiaW5hcnkgaXRzZWxmIChjYWxsY2hhaW5fcGFyYW0sXFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcXG4rICAgICMgZHluYW1pY2FsbHkgZm9yIHRoZSBwbHVnaW4gdG8gcmVzb2x2ZSB0aGVtLlxcbisgICAgTERGTEFHUyArPSAtcmR5bmFtaWNcXG4gICBlbmRpZlxcbiBlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXFxuaW5kZXggMjljZmQ0NGM0MjdmMy4uMjQzOGI0MGVhYWVjMSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcXG5AQCAtNDksNyArNDksNyBAQCBpbmNsdWRlIC4uL3NjcmlwdHMvdXRpbGl0aWVzLm1ha1xcbiAjXFxuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cXG4gI1xcbi0jIERlZmluZSBHVEsyIGlmIHlvdSB3YW50IEdUSysgR1VJIHN1cHBvcnQuXFxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cXG4gI1xcbiAjIERlZmluZSBOT19ERU1BTkdMRSBpZiB5b3UgZG8gbm90IHdhbnQgQysrIHN5bWJvbCBkZW1hbmdsaW5nLlxcbiAjXFxuQEAgLTQ3Myw3ICs0NzMsNyBAQCBpZm5lcSAoJChPVVRQVVQpLClcXG4gICBDRkxBR1MgKz0gLUkkKE9VVFBVVClcXG4gZW5kaWZcXG4gXFxuLWlmZGVmIEdUSzJcXG4raWZkZWYgR1RLNFxcbiAgIEFMTF9QUk9HUkFNUyArPSAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xcbiAgIEdUS19JTiA6PSAkKE9VVFBVVClndGstaW4ub1xcbiBlbmRpZlxcbkBAIC04MTEsNyArODExLDcgQEAgY2hlY2s6IHByZXBhcmVcXG4gXFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcXG4gXFxuLWlmZGVmIEdUSzJcXG4raWZkZWYgR1RLNFxcbiBpbnN0YWxsLWd0azogJChPVVRQVVQpbGlicGVyZi1ndGsuc29cXG4gXFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxcXFxuIFxcdFxcdCQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJzsgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xcbiBcXHRib29sXFx0ICAgdXNlX3R1aTtcXG4gI2VuZGlmXFxuIFxcdGJvb2xcXHQgICB1c2Vfc3RkaW8sIHVzZV9zdGRpbzI7XFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0Ym9vbFxcdCAgIHVzZV9ndGs7XFxuICNlbmRpZlxcbiBcXHRib29sXFx0ICAgc2tpcF9taXNzaW5nO1xcbkBAIC03MTIsNyArNzEyLDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdE9QVF9CT09MRUFOKCdxJywgXFxcInF1aWV0XFxcIiwgXFx1MDAyNnF1aWV0LCBcXFwiZG8gbm93IHNob3cgYW55IHdhcm5pbmdzIG9yIG1lc3NhZ2VzXFxcIiksXFxuIFxcdE9QVF9CT09MRUFOKCdEJywgXFxcImR1bXAtcmF3LXRyYWNlXFxcIiwgXFx1MDAyNmR1bXBfdHJhY2UsXFxuIFxcdFxcdCAgICBcXFwiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUlcXFwiKSxcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRPUFRfQk9PTEVBTigwLCBcXFwiZ3RrXFxcIiwgXFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSyBpbnRlcmZhY2VcXFwiKSxcXG4gI2VuZGlmXFxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcXG5AQCAtODI4LDcgKzgyOCw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxcbiBcXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXFxuIFxcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXFx1MDAyNlxcdTAwMjYgYW5ub3RhdGUudXNlX2d0aykge1xcbiBcXHRcXHRwcl9lcnIoXFxcIi0tc2hvdy1uci1zYW1wbGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gLS1ndGsgbW9kZSBhdCB0aGlzIHRpbWVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuIFxcdGVsc2UgaWYgKGFubm90YXRlLnVzZV90dWkpXFxuIFxcdFxcdHVzZV9icm93c2VyID0gMTtcXG4gI2VuZGlmXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0ZWxzZSBpZiAoYW5ub3RhdGUudXNlX2d0aylcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAyO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXFxuaW5kZXggNjBkMWYxNjY2MjllMC4uZDE0Mzg0YzU4NDY2MSAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcXG5AQCAtODIsNyArODIsNyBAQCBzdHJ1Y3QgcmVwb3J0IHtcXG4gI2lmZGVmIEhBVkVfU0xBTkdfU1VQUE9SVFxcbiBcXHRib29sXFx0XFx0XFx0dXNlX3R1aTtcXG4gI2VuZGlmXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFx0Ym9vbFxcdFxcdFxcdHVzZV9ndGs7XFxuICNlbmRpZlxcbiBcXHRib29sXFx0XFx0XFx0dXNlX3N0ZGlvO1xcbkBAIC0xMzU5LDggKzEzNTksOCBAQCBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXFxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcXG4gXFx0T1BUX0JPT0xFQU4oMCwgXFxcInR1aVxcXCIsIFxcdTAwMjZyZXBvcnQudXNlX3R1aSwgXFxcIlVzZSB0aGUgVFVJIGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuLVxcdE9QVF9CT09MRUFOKDAsIFxcXCJndGtcXFwiLCBcXHUwMDI2cmVwb3J0LnVzZV9ndGssIFxcXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXFxcIiksXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbitcXHRPUFRfQk9PTEVBTigwLCBcXFwiZ3RrXFxcIiwgXFx1MDAyNnJlcG9ydC51c2VfZ3RrLCBcXFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVxcXCIpLFxcbiAjZW5kaWZcXG4gXFx0T1BUX0JPT0xFQU4oMCwgXFxcInN0ZGlvXFxcIiwgXFx1MDAyNnJlcG9ydC51c2Vfc3RkaW8sXFxuIFxcdFxcdCAgICBcXFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcXFwiKSxcXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxcbiBcXHRlbHNlIGlmIChyZXBvcnQudXNlX3R1aSlcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAxO1xcbiAjZW5kaWZcXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxcbiBcXHRlbHNlIGlmIChyZXBvcnQudXNlX2d0aylcXG4gXFx0XFx0dXNlX2Jyb3dzZXIgPSAyO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG5pbmRleCBkMDAzZTdmYWIyYmU4Li5hNjAxYTUyNjBjMTdlIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXFxuQEAgLTE5OSw4ICsxOTksOCBAQCBmZWRvcmFfcGtnX2ZvcigpIHtcXG4gXFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcXG4gXFx0IyBkaXNhc3NlbWJsZXIgZmFtaWx5IChsaWJiZmQsIGxpYmJmZC10aHJlYWRzYWZlLCBsaWJiZmQtbGliZXJ0eSxcXG4gXFx0IyBkaXNhc3NlbWJsZXItKiwgY3BsdXMtZGVtYW5nbGUpLCBvbmx5IGxpbmtlZCBvbiBCVUlMRF9OT05ESVNUUk9cXG4tXFx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXFxuLVxcdCMgTElCVU5XSU5EIHN1cHBvcnQgKGlmZGVmIEdUSzIgLyBpZmRlZiBMSUJQRVJMIC8gTElCVU5XSU5EPTEpLFxcbitcXHQjIGJ1aWxkcyBhbmQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjYXBzdG9uZSwgR1RLNCwgTElCUEVSTCBhbmRcXG4rXFx0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXFxuIFxcdCMgYW5kIENvcmVTaWdodCAoaWZkZWYgQ09SRVNJR0hUKSwgYXJlIGRlbGliZXJhdGVseSBub3QgbWFwcGVkLlxcbiBcXHQjIGxpYmFpbyBpcyBub3QgbWFwcGVkIGVpdGhlcjogaXRzXFxuIFxcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21ha2UgYi90b29scy9wZXJmL3Rlc3RzL21ha2VcXG5pbmRleCBkMmMyZjUyNmUxZGIwLi4yMDJhYjU1MDE5MTYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxcbkBAIC05NSw3ICs5NSw3IEBAIG1ha2Vfbm9fYmFiZWx0cmFjZTIgOj0gTk9fQkFCRUxUUkFDRTI9MVxcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXFxuIG1ha2Vfbm9fc2R0XFx0ICAgIDo9IE5PX1NEVD0xXFxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXFxuLW1ha2Vfd2l0aF9ndGsyICAgICAgOj0gR1RLMj0xXFxuK21ha2Vfd2l0aF9ndGs0ICAgICAgOj0gR1RLND0xXFxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVxcXCItRFJFRkNOVF9DSEVDS0lORz0xXFxcIlxcbiBtYWtlX3RhZ3MgICAgICAgICAgIDo9IHRhZ3NcXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcXG5AQCAtMzE4LDcgKzMxOCw3IEBAICQocnVuKTpcXG4gXFx0JChjYWxsIHRlc3QsJEApIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gXFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxcbiBcXG4tbWFrZV93aXRoX2d0azI6XFxuK21ha2Vfd2l0aF9ndGs0OlxcbiBcXHQkKGNhbGwgY2xlYW4pXFxuIFxcdEBUTVBfREVTVD0kJChta3RlbXAgLWQpOyBcXFxcXFxuIFxcdGNtZD1cXFwiY2QgJChQRVJGKSBcXHUwMDI2XFx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFxcXCI7IFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG5pbmRleCA4OTIwZTI5ODQyMGE4Li5hOTYyOWJhYTY1MDc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXFxuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcXG4gXFx0XFx0XFx0Z3RrX2xpc3Rfc3RvcmVfc2V0KHN0b3JlLCBcXHUwMDI2aXRlciwgQU5OX0NPTF9fTElORSwgcywgLTEpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXFx1MDAyNm5vdGVzLVxcdTAwM2VzcmMtXFx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwb3MtXFx1MDAzZWFsLm5vZGUpO1xcbkBAIC0yMTEsMzQgKzIxMSwzMCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcXG4gXFx0XFx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xcbiBcXHRcXHRzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7XFxuIFxcbi1cXHRcXHR3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyh3aW5kb3cpLCBcXFwicGVyZiBhbm5vdGF0ZVxcXCIpO1xcbiBcXG4tXFx0XFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0XFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdFxcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXHRcXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcXG4gXFx0XFx0cGdjdHgtXFx1MDAzZW5vdGVib29rID0gbm90ZWJvb2s7XFxuIFxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0XFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0XFx0aW5mb2JhciA9IHBlcmZfZ3RrX19zZXR1cF9pbmZvX2JhcigpO1xcbi1cXHRcXHRpZiAoaW5mb2Jhcikge1xcbi1cXHRcXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb2JhcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgRkFMU0UsIEZBTFNFLCAwKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBpbmZvYmFyKTtcXG4gXFxuIFxcdFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdFxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdFxcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXHR0YWJfbGFiZWwgPSBndGtfbGFiZWxfbmV3KHN5bS1cXHUwMDNlbmFtZSk7XFxuIFxcbiBcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxcbkBAIC0yNjcsMTIgKzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHdpbmRvdyA9IHBnY3R4LVxcdTAwM2VtYWluX3dpbmRvdztcXG4tXFx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xcbiBcXG4gXFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbi1cXHRndGtfbWFpbigpO1xcbitcXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xcbiBcXG4gXFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcXHUwMDI2cGdjdHgpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xcbmluZGV4IGQyZGFkZjM4NzNmYmQuLmUxZDI4Njk0NTgzMjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXFxuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXFxuQEAgLTE2LDIxICsxNiw1MyBAQCB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZylcXG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdylcXG4ge1xcbiBcXHRHZGtSZWN0YW5nbGUgcmVjdDtcXG4tXFx0R2RrU2NyZWVuICpzY3JlZW47XFxuLVxcdGludCBtb25pdG9yO1xcbitcXHRHZGtNb25pdG9yICptb25pdG9yO1xcbitcXHRHZGtEaXNwbGF5ICpkaXNwbGF5O1xcbitcXHRHTGlzdE1vZGVsICptb25pdG9ycztcXG4gXFx0aW50IGhlaWdodDtcXG4gXFx0aW50IHdpZHRoO1xcbiBcXG4tXFx0c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpbmRvdyk7XFxuK1xcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XFxuK1xcdG1vbml0b3JzID0gZ2RrX2Rpc3BsYXlfZ2V0X21vbml0b3JzKGRpc3BsYXkpO1xcbitcXHRtb25pdG9yID0gZ19saXN0X21vZGVsX2dldF9pdGVtKG1vbml0b3JzLCAwKTtcXG4rXFx0aWYgKCFtb25pdG9yKSB7XFxuK1xcdFxcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbi1cXHRtb25pdG9yID0gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3aW5kb3ctXFx1MDAzZXdpbmRvdyk7XFxuLVxcbi1cXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXFx1MDAyNnJlY3QpO1xcbitcXHRnZGtfbW9uaXRvcl9nZXRfZ2VvbWV0cnkobW9uaXRvciwgXFx1MDAyNnJlY3QpO1xcbitcXHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcXG4gXFxuIFxcdHdpZHRoXFx0PSByZWN0LndpZHRoICogMyAvIDQ7XFxuIFxcdGhlaWdodFxcdD0gcmVjdC5oZWlnaHQgKiAzIC8gNDtcXG4gXFxuLVxcdGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93KSwgd2lkdGgsIGhlaWdodCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xcbit9XFxuK1xcbitzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xcbitcXG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZClcXG4re1xcbitcXHRpZiAocGVyZl9ndGtfX21haW5fbG9vcClcXG4rXFx0XFx0Z19tYWluX2xvb3BfcXVpdChwZXJmX2d0a19fbWFpbl9sb29wKTtcXG4rfVxcbitcXG4rc3RhdGljIGdib29sZWFuIHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxcbitcXHRcXHRcXHRcXHRcXHRncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X21haW5fbG9vcCgpO1xcbitcXG4rXFx0cmV0dXJuIEZBTFNFO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKEd0a1dpZGdldCAqd2luZG93KVxcbit7XFxuK1xcdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcXFwiY2xvc2UtcmVxdWVzdFxcXCIsXFxuK1xcdFxcdFxcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19jbG9zZV9yZXF1ZXN0KSwgTlVMTCk7XFxuK1xcbitcXHRwZXJmX2d0a19fbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIEZBTFNFKTtcXG4rXFx0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xcbitcXHRnX2NsZWFyX3BvaW50ZXIoXFx1MDAyNnBlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTtcXG4gfVxcbiBcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxcbkBAIC00MiwyMyArNzQsMjAgQEAgY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4ge1xcbiBcXHRHdGtXaWRnZXQgKmluZm9fYmFyO1xcbiBcXHRHdGtXaWRnZXQgKmxhYmVsO1xcbi1cXHRHdGtXaWRnZXQgKmNvbnRlbnRfYXJlYTtcXG4gXFxuIFxcdGluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldygpO1xcbi1cXHRndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChpbmZvX2JhciwgVFJVRSk7XFxuK1xcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcXG4gXFxuIFxcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcXFwiXFxcIik7XFxuIFxcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XFxuIFxcbi1cXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcXG4tXFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250ZW50X2FyZWEpLCBsYWJlbCk7XFxuK1xcdGd0a19pbmZvX2Jhcl9hZGRfY2hpbGQoR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgbGFiZWwpO1xcbiBcXG4tXFx0Z3RrX2luZm9fYmFyX2FkZF9idXR0b24oR1RLX0lORk9fQkFSKGluZm9fYmFyKSwgR1RLX1NUT0NLX09LLFxcbitcXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcXFwiX09LXFxcIixcXG4gXFx0XFx0XFx0XFx0R1RLX1JFU1BPTlNFX09LKTtcXG4gXFx0Z19zaWduYWxfY29ubmVjdChpbmZvX2JhciwgXFxcInJlc3BvbnNlXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9oaWRlKSwgTlVMTCk7XFxuQEAgLTY4LDcgKzk3LDYgQEAgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4gXFxuIFxcdHJldHVybiBpbmZvX2JhcjtcXG4gfVxcbi0jZW5kaWZcXG4gXFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG5pbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXFxuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xcbiBcXHRHdGtXaWRnZXQgKm1haW5fd2luZG93O1xcbiBcXHRHdGtXaWRnZXQgKm5vdGVib29rO1xcbiBcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gXFx0R3RrV2lkZ2V0ICppbmZvX2JhcjtcXG4gXFx0R3RrV2lkZ2V0ICptZXNzYWdlX2xhYmVsO1xcbi0jZW5kaWZcXG4gXFx0R3RrV2lkZ2V0ICpzdGF0YmFyO1xcbiBcXHRndWludCBzdGF0YmFyX2N0eF9pZDtcXG4gfTtcXG5AQCAtNDAsMTcgKzM4LDEyIEBAIHZvaWQgcGVyZl9ndGtfX2luaXRfaHBwKHZvaWQpO1xcbiBcXG4gdm9pZCBwZXJmX2d0a19fc2lnbmFsKGludCBzaWcpO1xcbiB2b2lkIHBlcmZfZ3RrX19yZXNpemVfd2luZG93KEd0a1dpZGdldCAqd2luZG93KTtcXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XFxuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpO1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKTtcXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKHZvaWQpO1xcbi1cXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZCk7XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBldnNlbDtcXG4gc3RydWN0IGV2bGlzdDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG5pbmRleCBiYWUyMWYzMzZhZTZkLi4wYjc4NmM1YTA0NmIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXFxuQEAgLTM5NSwxMSArMzk1LDkgQEAgc3RhdGljIHZvaWQgcGVyZl9ndGtfX3Nob3dfaGlzdHMoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcXG4tXFxuIFxcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXFxcInJvdy1hY3RpdmF0ZWRcXFwiLFxcbiBcXHRcXHRcXHQgR19DQUxMQkFDSyhvbl9yb3dfYWN0aXZhdGVkKSwgTlVMTCk7XFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XFxuK1xcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcXG5AQCAtNTgzLDExICs1ODEsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaWVyYXJjaHkoR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBoaXN0cyAqaGlzdHMsXFxuIFxcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFxcdTAwMjZoaXN0cy1cXHUwMDNlZW50cmllcywgc3RvcmUsXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZocHAsIG1pbl9wY250KTtcXG4gXFxuLVxcdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XFxuLVxcbiBcXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFxcXCJyb3ctYWN0aXZhdGVkXFxcIixcXG4gXFx0XFx0XFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xcbi1cXHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZpZXcpO1xcbitcXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xcbiB9XFxuIFxcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcXG5AQCAtNjA2LDMwICs2MDIsMjggQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXFxuIFxcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcXG4gXFx0c2lnbmFsKFNJR1RFUk0sIHBlcmZfZ3RrX19zaWduYWwpO1xcbiBcXG4tXFx0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7XFxuK1xcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KCk7XFxuIFxcbiBcXHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFxcXCJwZXJmIHJlcG9ydFxcXCIpO1xcbiBcXG4tXFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFxcXCJkZWxldGVfZXZlbnRcXFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcXG4tXFxuIFxcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcXG4gXFx0aWYgKCFwZ2N0eClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0dmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7XFxuK1xcdHZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApO1xcbiBcXG4gXFx0bm90ZWJvb2sgPSBndGtfbm90ZWJvb2tfbmV3KCk7XFxuIFxcbi1cXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xcbitcXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcXG4rXFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xcbiBcXG4gXFx0aW5mb19iYXIgPSBwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIoKTtcXG4tXFx0aWYgKGluZm9fYmFyKVxcbi1cXHRcXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7XFxuK1xcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcXG4gXFxuIFxcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XFxuLVxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xcbitcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcXG4gXFxuLVxcdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7XFxuK1xcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XFxuIFxcbiBcXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XFxuIFxcdFxcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcXG5AQCAtNjQ5LDcgKzY0Myw3IEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xcbitcXHRcXHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xcbiBcXG4gXFx0XFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXFxuQEAgLTY2NSwxNSArNjU5LDEyIEBAIGludCBldmxpc3RfX2d0a19icm93c2VfaGlzdHMoc3RydWN0IGV2bGlzdCAqZXZsaXN0LCBjb25zdCBjaGFyICpoZWxwLFxcbiBcXHRcXHRndGtfbm90ZWJvb2tfYXBwZW5kX3BhZ2UoR1RLX05PVEVCT09LKG5vdGVib29rKSwgc2Nyb2xsZWRfd2luZG93LCB0YWJfbGFiZWwpO1xcbiBcXHR9XFxuIFxcbi1cXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XFxuLVxcbiBcXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xcbi1cXG4tXFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpbmRvdywgVFJVRSk7XFxuIFxcbiBcXHR1aV9oZWxwbGluZV9fcHVzaChoZWxwKTtcXG4gXFxuLVxcdGd0a19tYWluKCk7XFxuK1xcdHBlcmZfZ3RrX19ydW5fbWFpbl9sb29wKHdpbmRvdyk7XFxuIFxcbiBcXHRwZXJmX2d0a19fZGVhY3RpdmF0ZV9jb250ZXh0KFxcdTAwMjZwZ2N0eCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbmluZGV4IGVlYTZmY2RlNTE4YTguLjc3MGY5MjUxYjU0YjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmNcXG5AQCAtMSw0OSArMSw2NSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjaW50dHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZ3RrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9wcm9ncmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBHdGtXaWRnZXQgKmRpYWxvZztcXG4gc3RhdGljIEd0a1dpZGdldCAqcHJvZ3Jlc3M7XFxuIFxcbitzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcXG4rXFx0XFx0XFx0XFx0XFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRkaWFsb2cgPSBOVUxMO1xcbitcXHRwcm9ncmVzcyA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcXG4ge1xcbiBcXHRkb3VibGUgZnJhY3Rpb24gPSBwLVxcdTAwM2V0b3RhbCA/IDEuMCAqIHAtXFx1MDAzZWN1cnIgLyBwLVxcdTAwM2V0b3RhbCA6IDAuMDtcXG4gXFx0Y2hhciBidWZbMTAyNF07XFxuIFxcbiBcXHRpZiAoZGlhbG9nID09IE5VTEwpIHtcXG4tXFx0XFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDUpO1xcbitcXHRcXHRHdGtXaWRnZXQgKnZib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDUpO1xcbiBcXHRcXHRHdGtXaWRnZXQgKmxhYmVsID0gZ3RrX2xhYmVsX25ldyhwLVxcdTAwM2V0aXRsZSk7XFxuIFxcbi1cXHRcXHRkaWFsb2cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTtcXG4rXFx0XFx0ZGlhbG9nID0gZ3RrX3dpbmRvd19uZXcoKTtcXG4gXFx0XFx0cHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpO1xcbiBcXG4tXFx0XFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGxhYmVsLCBUUlVFLCBGQUxTRSwgMyk7XFxuLVxcdFxcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcywgVFJVRSwgVFJVRSwgMyk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQobGFiZWwsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBsYWJlbCk7XFxuK1xcdFxcdGd0a193aWRnZXRfc2V0X3ZleHBhbmQocHJvZ3Jlc3MsIFRSVUUpO1xcbitcXHRcXHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBwcm9ncmVzcyk7XFxuK1xcbitcXHRcXHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xcbiBcXG4tXFx0XFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCB2Ym94KTtcXG4rXFx0XFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJkZXN0cm95XFxcIixcXG4rXFx0XFx0XFx0XFx0IEdfQ0FMTEJBQ0soZ3RrX3VpX3Byb2dyZXNzX19kZXN0cm95ZWQpLCBOVUxMKTtcXG4gXFxuIFxcdFxcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgXFxcInBlcmZcXFwiKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4tXFx0XFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xcbitcXHRcXHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcXG4gXFxuLVxcdFxcdGd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTtcXG4rXFx0XFx0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZShkaWFsb2csIFRSVUUpO1xcbiBcXHR9XFxuIFxcbiBcXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xcbiBcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJVxcXCJQUkl1NjRcXFwiIC8gJVxcXCJQUkl1NjQsIHAtXFx1MDAzZWN1cnIsIHAtXFx1MDAzZXRvdGFsKTtcXG4gXFx0Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgYnVmKTtcXG4gXFxuLVxcdC8qIHdlIGRpZG4ndCBjYWxsIGd0a19tYWluIHlldCwgc28gZG8gaXQgbWFudWFsbHkgKi9cXG4tXFx0d2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKVxcbi1cXHRcXHRndGtfbWFpbl9pdGVyYXRpb24oKTtcXG4rXFx0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cXG4rXFx0d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpXFxuK1xcdFxcdGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZmluaXNoKHZvaWQpXFxuIHtcXG4rXFx0aWYgKGRpYWxvZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiB0aGlzIHdpbGwgYWxzbyBkZXN0cm95IGFsbCBvZiBpdHMgY2hpbGRyZW4gKi9cXG4tXFx0Z3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbiBcXG4gXFx0ZGlhbG9nID0gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcXG4gXFx0Z3RrX3VpX3Byb2dyZXNzX19pbml0KCk7XFxuIFxcdHBlcmZfZ3RrX19pbml0X2hwcCgpO1xcbiBcXG4tXFx0cmV0dXJuIGd0a19pbml0X2NoZWNrKE5VTEwsIE5VTEwpID8gMCA6IC0xO1xcbitcXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcXG4gfVxcbiBcXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxcbkBAIC0yMCw1ICsyMCw2IEBAIHZvaWQgcGVyZl9ndGtfX2V4aXQoYm9vbCB3YWl0X2Zvcl9vayBfX21heWJlX3VudXNlZClcXG4gXFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHBlcmZfZXJyb3JfX3VucmVnaXN0ZXIoXFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xcbi1cXHRndGtfbWFpbl9xdWl0KCk7XFxuK1xcdHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZygpO1xcbitcXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay91dGlsLmMgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcXG5pbmRleCBjNDdmNWMzODc4MzhjLi44YTkyMjg1MTI1N2U3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3V0aWwuY1xcbkBAIC0yLDggKzIsMTAgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImd0ay5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGFyZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvemFsbG9jLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqcGdjdHg7XFxuQEAgLTI4LDQzICszMCw5MiBAQCBpbnQgcGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgcGVyZl9ndGtfY29udGV4dCAqKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIHBlcmZfZ3RrX19lcnJvcigpIGNhbiBiZSBjYWxsZWQgcmUtZW50cmFudGx5LCBzaW5jZSB0aGUgZGlhbG9nIGlzbid0XFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXFxuKyAqIFRyYWNrIGV2ZXJ5IGN1cnJlbnRseSBydW5uaW5nIGxvb3AgaW5zdGVhZCBvZiBhIHNpbmdsZSBwb2ludGVyLCBzbyBhXFxuKyAqIG5lc3RlZCBjYWxsIGNhbid0IGNsb2JiZXIgYW4gb3V0ZXIgY2FsbCdzIGxvb3AgYW5kIGxlYWsgaXQuXFxuKyAqL1xcbitzdGF0aWMgR1NMaXN0ICpwZXJmX2d0a19fZXJyb3JfbG9vcHM7XFxuK1xcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcXG4re1xcbitcXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xcbit9XFxuK1xcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxcbit7XFxuK1xcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxcbitcXHRcXHRcXHRcXHQgICAgICBnaW50IHJlc3BvbnNlX2lkIF9fbWF5YmVfdW51c2VkLFxcbitcXHRcXHRcXHRcXHQgICAgICBncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX19lcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncylcXG4ge1xcbiBcXHRjaGFyICptc2c7XFxuIFxcdEd0a1dpZGdldCAqZGlhbG9nO1xcbitcXHRHTWFpbkxvb3AgKmxvb3A7XFxuK1xcdHZhX2xpc3QgYXJnc19jb3B5O1xcbiBcXG4rXFx0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xcbiBcXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbitcXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6XFxcXG5cXFwiKTtcXG4gXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbitcXHR2YV9lbmQoYXJnc19jb3B5KTtcXG4gXFxuIFxcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cXHUwMDNlbWFpbl93aW5kb3cpLFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsXFxuIFxcdFxcdFxcdFxcdFxcdEdUS19NRVNTQUdFX0VSUk9SLFxcbiBcXHRcXHRcXHRcXHRcXHRHVEtfQlVUVE9OU19DTE9TRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcIlxcdTAwM2NiXFx1MDAzZUVycm9yXFx1MDAzYy9iXFx1MDAzZVxcXFxuXFxcXG4lc1xcXCIsIG1zZyk7XFxuLVxcdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XFxuIFxcbi1cXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcXG4rXFx0LypcXG4rXFx0ICogXFxcInJlc3BvbnNlXFxcIiBvbmx5IGZpcmVzIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZDsgREVTVFJPWV9XSVRIX1BBUkVOVFxcbitcXHQgKiBkZXN0cm95cyB0aGUgZGlhbG9nIGRpcmVjdGx5IHdpdGhvdXQgaXQuIFF1aXQgZnJvbSBcXFwiZGVzdHJveVxcXCJcXG4rXFx0ICogaW5zdGVhZCwgd2hpY2ggZmlyZXMgZWl0aGVyIHdheSwgc28gdGhlIG5lc3RlZCBsb29wIGJlbG93IGNhbid0XFxuK1xcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cXG4rXFx0ICovXFxuK1xcdGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xcbitcXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcXG4rXFx0Z19zaWduYWxfY29ubmVjdChkaWFsb2csIFxcXCJyZXNwb25zZVxcXCIsXFxuK1xcdFxcdFxcdCBHX0NBTExCQUNLKHBlcmZfZ3RrX19kaWFsb2dfcmVzcG9uc2UpLCBOVUxMKTtcXG4rXFx0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXFxcImRlc3Ryb3lcXFwiLFxcbitcXHRcXHRcXHRcXHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XFxuK1xcbitcXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XFxuK1xcdGdfbWFpbl9sb29wX3J1bihsb29wKTtcXG4rXFx0cGVyZl9ndGtfX2Vycm9yX2xvb3BzID0gZ19zbGlzdF9yZW1vdmUocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcXG4rXFx0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XFxuK1xcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaWZkZWYgSEFWRV9HVEtfSU5GT19CQVJfU1VQUE9SVFxcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbiB7XFxuIFxcdGNoYXIgKm1zZztcXG4rXFx0dmFfbGlzdCBhcmdzX2NvcHk7XFxuIFxcbitcXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XFxuIFxcdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxcbi1cXHQgICAgdmFzcHJpbnRmKFxcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXFx1MDAzYyAwKSB7XFxuK1xcdCAgICB2YXNwcmludGYoXFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFxcdTAwM2MgMCkge1xcbitcXHRcXHR2YV9lbmQoYXJnc19jb3B5KTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXYXJuaW5nOlxcXFxuXFxcIik7XFxuIFxcdFxcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcXG4gXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4rXFx0dmFfZW5kKGFyZ3NfY29weSk7XFxuIFxcbiBcXHRndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKHBnY3R4LVxcdTAwM2VtZXNzYWdlX2xhYmVsKSwgbXNnKTtcXG4gXFx0Z3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUoR1RLX0lORk9fQkFSKHBnY3R4LVxcdTAwM2VpbmZvX2JhciksXFxuQEAgLTc0LDQwICsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbiBcXHRmcmVlKG1zZyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxcbi17XFxuLVxcdGNoYXIgKm1zZywgKnA7XFxuLVxcbi1cXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcXG4tXFx0ICAgIHZhc3ByaW50ZihcXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6XFxcXG5cXFwiKTtcXG4tXFx0XFx0dmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbi1cXG4tXFx0Z3RrX3N0YXR1c2Jhcl9wb3AoR1RLX1NUQVRVU0JBUihwZ2N0eC1cXHUwMDNlc3RhdGJhciksXFxuLVxcdFxcdFxcdCAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkKTtcXG4tXFxuLVxcdC8qIE9ubHkgZmlyc3QgbGluZSBjYW4gYmUgZGlzcGxheWVkICovXFxuLVxcdHAgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4tXFx0aWYgKHApXFxuLVxcdFxcdCpwID0gJ1xcXFwwJztcXG4tXFxuLVxcdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVxcdTAwM2VzdGF0YmFyKSxcXG4tXFx0XFx0XFx0ICAgcGdjdHgtXFx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xcbi1cXG4tXFx0ZnJlZShtc2cpO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi0jZW5kaWZcXG4gXFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xcbiBcXHQuZXJyb3JcXHRcXHQ9IHBlcmZfZ3RrX19lcnJvcixcXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcXG4gXFx0Lndhcm5pbmdcXHQ9IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyLFxcbi0jZWxzZVxcbi1cXHQud2FybmluZ1xcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxcbi0jZW5kaWZcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXFxuaW5kZXggZmY4MDAwNDdlNjk3Zi4uZDg4NzM0NmM3YTYzMiAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL3VpL3NldHVwLmNcXG4rKysgYi90b29scy9wZXJmL3VpL3NldHVwLmNcXG5AQCAtMTQsNyArMTQsNyBAQCBpbnQgdXNlX2Jyb3dzZXIgPSAtMTtcXG4gXFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFxcXCJsaWJwZXJmLWd0ay5zb1xcXCJcXG4gXFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcXG4gXFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcXG4tLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXFxuQEAgLTE0NSw2ICsxNDUsMTcgQEAgc3RhdGljIGludCBhbm5vdGF0ZWRfc291cmNlX19hbGxvY19oaXN0b2dyYW1zKHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsXFxuIFxcdHJldHVybiBzcmMtXFx1MDAzZWhpc3RvZ3JhbXMgPyAwIDogLTE7XFxuIH1cXG4gXFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXFxuK2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRzdHJ1Y3Qgc3ltX2hpc3RfZW50cnkgKmVudHJ5O1xcbitcXHRsb25nIGtleSA9IG9mZnNldCBcXHUwMDNjXFx1MDAzYyAxNiB8IGV2c2VsLVxcdTAwM2Vjb3JlLmlkeDtcXG4rXFxuK1xcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXFx1MDAzZXNhbXBsZXMsIGtleSwgXFx1MDAyNmVudHJ5KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBlbnRyeTtcXG4rfVxcbitcXG4gdm9pZCBzeW1ib2xfX2Fubm90YXRlX3plcm9faGlzdG9ncmFtcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pXFxuIHtcXG4gXFx0c3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcXG5AQCAtNDA2LDE2ICs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyxcXG4gXFx0cmV0dXJuIGFubm90YXRlZF9zb3VyY2VfX2hpc3RvZ3JhbShub3Rlcy1cXHUwMDNlc3JjLCBldnNlbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcXG4tYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxcbi17XFxuLVxcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XFxuLVxcdGxvbmcga2V5ID0gb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIDE2IHwgZXZzZWwtXFx1MDAzZWNvcmUuaWR4O1xcbi1cXG4tXFx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cXHUwMDNlc2FtcGxlcywga2V5LCBcXHUwMDI2ZW50cnkpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0cmV0dXJuIGVudHJ5O1xcbi19XFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXFxuK2Fubm90YXRlZF9zb3VyY2VfX2hpc3RfZW50cnkoc3RydWN0IGFubm90YXRlZF9zb3VyY2UgKnNyYywgY29uc3Qgc3RydWN0IGV2c2VsICpldnNlbCwgdTY0IG9mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjAxOjA1LjIzNzc2ODY4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQwNTkyNjg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTRhMTFkMTQzMmZiNDYyODVhN2VmYzEwMTIwNTc5ZGU2YTBjMGQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTowMTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUgYi90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlXG5pbmRleCA5OWViMGVhMDk1Mzc1Li40ZWM5NWMzNWE1YzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuKysrIGIvdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZVxuQEAgLTExMyw4ICsxMTMsNyBAQCBGRUFUVVJFX1RFU1RTX0VYVFJBIDo9ICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjb21waWxlLXgzMiAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjcGx1cy1kZW1hbmdsZSAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBjeGEtZGVtYW5nbGUgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0gICAgICAgICBndGsyLWluZm9iYXIgICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBoZWxsbyAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBiYWJlbHRyYWNlMi1jdGYtd3JpdGVyICAgICAgICAgXFxcbiAgICAgICAgICBsaWJjYXBzdG9uZSAgICAgICAgICAgICAgICAgICAgXFxcbkBAIC0xNDMsNiArMTQyLDcgQEAgZW5kaWZcbiBGRUFUVVJFX0RJU1BMQVkgPz0gICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZHcgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGdsaWJjICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICBndGs0ICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgbGliZWxmICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIGxpYm51bWEgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICBudW1hX251bV9wb3NzaWJsZV9jcHVzIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvTWFrZWZpbGVcbmluZGV4IDdkMTY1MDE4MTE2YTUuLjAxYzQ4ZTZlZjAyMWQgMTAwNjQ0XG4tLS0gYS90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG4rKysgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlXG5AQCAtMTEsOCArMTEsNyBAQCBGSUxFUz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtZXZlbnRmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1mb3J0aWZ5LXNvdXJjZS5iaW4gICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICB0ZXN0LWdsaWJjLmJpbiAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLSAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tICAgICAgICAgdGVzdC1ndGsyLWluZm9iYXIuYmluICAgICAgICAgICAgICAgICAgXFxcbisgICAgICAgICB0ZXN0LWd0azQuYmluICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgIHRlc3QtaGVsbG8uYmluICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgdGVzdC1saWJiZmQuYmluICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiBcdCB0ZXN0LWxpYmJmZC10aHJlYWRzYWZlLmJpbiAgICAgIFx0XFxcbkBAIC0yNDAsMTEgKzIzOSw4IEBAICQoT1VUUFVUKXRlc3QtbGliY3B1cG93ZXIuYmluOlxuICQoT1VUUFVUKXRlc3QtbGlidHJhY2Vmcy5iaW46XG4gXHQgJChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnRyYWNlZnMgMlx1MDAzZS9kZXYvbnVsbCkgLWx0cmFjZWZzXG4gXG4tJChPVVRQVVQpdGVzdC1ndGsyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbCkgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uc1xuLVxuLSQoT1VUUFVUKXRlc3QtZ3RrMi1pbmZvYmFyLmJpbjpcbi1cdCQoQlVJTEQpICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbiskKE9VVFBVVCl0ZXN0LWd0azQuYmluOlxuK1x0JChCVUlMRCkgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGs0IDJcdTAwM2UvZGV2L251bGwpXG4gXG4gZ3JlcC1saWJzICA9ICQoZmlsdGVyIC1sJSwkKDEpKVxuIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azItaW5mb2Jhci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGIxYjcxNmRkNTczMzAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLWluZm9iYXIuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMTIgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiXG4tI2luY2x1ZGUgXHUwMDNjZ3RrL2d0ay5oXHUwMDNlXG4tI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBlcnJvciBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIlxuLVxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4te1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4tXHRndGtfaW5mb19iYXJfbmV3KCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azIuYyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbnNpbWlsYXJpdHkgaW5kZXggNzYlXG5yZW5hbWUgZnJvbSB0b29scy9idWlsZC9mZWF0dXJlL3Rlc3QtZ3RrMi5jXG5yZW5hbWUgdG8gdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWd0azQuY1xuaW5kZXggMmFhZjRiZmMyMDU1Ni4uYjk1MjBlNzQwOGI5OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGsyLmNcbisrKyBiL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVzdC1ndGs0LmNcbkBAIC0zLDkgKzMsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2d0ay9ndGsuaFx1MDAzZVxuICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgXCItV3N0cmljdC1wcm90b3R5cGVzXCJcbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK2ludCBtYWluKHZvaWQpXG4ge1xuLVx0Z3RrX2luaXQoXHUwMDI2YXJnYywgXHUwMDI2YXJndik7XG4rXHRndGtfaW5pdCgpO1xuIFxuICAgICAgICAgcmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0XG5pbmRleCAyMmY4N2VhYTMyNzk2Li43YWY5YjNmODFjMDY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dFxuQEAgLTM1MSw3ICszNTEsNyBAQCBPUFRJT05TXG4gXHRyZXF1aXJlcyBhIHR0eSwgaWYgb25lIGlzIG5vdCBwcmVzZW50LCBhcyB3aGVuIHBpcGluZyB0byBvdGhlclxuIFx0Y29tbWFuZHMsIHRoZSBzdGRpbyBpbnRlcmZhY2UgaXMgdXNlZC5cbiBcbi0tLWd0azo6IFVzZSB0aGUgR1RLMiBpbnRlcmZhY2UuXG4rLS1ndGs6OiBVc2UgdGhlIEdUSzQgaW50ZXJmYWNlLlxuIFxuIC1rOjpcbiAtLXZtbGludXg9XHUwMDNjZmlsZVx1MDAzZTo6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGVcbmluZGV4IDViNzEzODM3ZWVkZTcuLjU2MDE0MTA2NDc5YTMgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGNsZWFuOlxuICMgbWFrZSAtQyB0b29scy9wZXJmIC1mIHRlc3RzL21ha2VcbiAjXG4gYnVpbGQtdGVzdDpcbi1cdEAkKE1BS0UpIFNIVUY9MSAtZiB0ZXN0cy9tYWtlIFJFVVNFX0ZFQVRVUkVTX0RVTVA9MSBNSz1NYWtlZmlsZSBTRVRfUEFSQUxMRUw9MSAtLW5vLXByaW50LWRpcmVjdG9yeSB0YXJwa2cgbWFrZV9zdGF0aWMgbWFrZV93aXRoX2d0azIgb3V0XG4rXHRAJChNQUtFKSBTSFVGPTEgLWYgdGVzdHMvbWFrZSBSRVVTRV9GRUFUVVJFU19EVU1QPTEgTUs9TWFrZWZpbGUgU0VUX1BBUkFMTEVMPTEgLS1uby1wcmludC1kaXJlY3RvcnkgdGFycGtnIG1ha2Vfc3RhdGljIG1ha2Vfd2l0aF9ndGs0IG91dFxuIFxuIGJ1aWxkLXRlc3QtdGFyYmFsbDpcbiBcdEAkKE1BS0UpIC1mIHRlc3RzL21ha2UgUkVVU0VfRkVBVFVSRVNfRFVNUD0xIE1LPU1ha2VmaWxlIFNFVF9QQVJBTExFTD0xIC0tbm8tcHJpbnQtZGlyZWN0b3J5IG91dFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUuY29uZmlnIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbmluZGV4IDRkNTk5M2RhOWY5NDUuLjRlZTczOTNhMzlmOTEgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZ1xuKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWdcbkBAIC03NzQsMjEgKzc3NCwyMiBAQCBpZm5kZWYgTk9fU0xBTkdcbiAgIGVuZGlmXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4tICBGTEFHU19HVEsyPSQoQ0ZMQUdTKSAkKExERkxBR1MpICQoRVhUTElCUykgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyXHUwMDNlL2Rldi9udWxsKVxuLSAgJChjYWxsIGZlYXR1cmVfY2hlY2ssZ3RrMilcbi0gIGlmbmVxICgkKGZlYXR1cmUtZ3RrMiksIDEpXG4tICAgICQod2FybmluZyBHVEsyIG5vdCBmb3VuZCwgZGlzYWJsZXMgR1RLMiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBndGsyLWRldmVsIG9yIGxpYmd0azIuMC1kZXYpXG4tICAgIE5PX0dUSzIgOj0gMVxuK2lmZGVmIEdUSzRcbisgIEZMQUdTX0dUSzQ9JChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIC0tY2ZsYWdzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbisgICQoY2FsbCBmZWF0dXJlX2NoZWNrLGd0azQpXG4rICBpZm5lcSAoJChmZWF0dXJlLWd0azQpLCAxKVxuKyAgICAkKHdhcm5pbmcgR1RLNCBub3QgZm91bmQsIGRpc2FibGVzIEdUSzQgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgZ3RrNC1kZXZlbCBvciBsaWJndGstNC1kZXYpXG4rICAgIE5PX0dUSzQgOj0gMVxuICAgZWxzZVxuLSAgICAkKGNhbGwgZmVhdHVyZV9jaGVjayxndGsyLWluZm9iYXIpXG4tICAgIGlmZXEgKCQoZmVhdHVyZS1ndGsyLWluZm9iYXIpLCAxKVxuLSAgICAgIEdUS19DRkxBR1MgOj0gLURIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4tICAgIGVuZGlmXG4tICAgIENGTEFHUyArPSAtREhBVkVfR1RLMl9TVVBQT1JUXG4tICAgIEdUS19DRkxBR1MgKz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGd0aystMi4wIDJcdTAwM2UvZGV2L251bGwpXG4tICAgIEdUS19MSUJTIDo9ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ3RrKy0yLjAgMlx1MDAzZS9kZXYvbnVsbClcbisgICAgQ0ZMQUdTICs9IC1ESEFWRV9HVEs0X1NVUFBPUlRcbisgICAgR1RLX0NGTEFHUyArPSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ3RrNCAyXHUwMDNlL2Rldi9udWxsKVxuKyAgICBHVEtfTElCUyA6PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1saWJzIGd0azQgMlx1MDAzZS9kZXYvbnVsbClcbiAgICAgRVhUTElCUyArPSAtbGRsXG4rICAgICMgbGlicGVyZi1ndGsuc28gaXMgZGxvcGVuKCllZCBhdCBydW50aW1lIGFuZCBjYWxscyBiYWNrIGludG9cbisgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIHBlcmYgYmluYXJ5IGl0c2VsZiAoY2FsbGNoYWluX3BhcmFtLFxuKyAgICAjIHN5bWJvbF9jb25mLCBldnNlbF9fbmFtZSwgLi4uKTogcGVyZiBuZWVkcyB0byBleHBvcnQgdGhvc2VcbisgICAgIyBkeW5hbWljYWxseSBmb3IgdGhlIHBsdWdpbiB0byByZXNvbHZlIHRoZW0uXG4rICAgIExERkxBR1MgKz0gLXJkeW5hbWljXG4gICBlbmRpZlxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG5pbmRleCAyOWNmZDQ0YzQyN2YzLi4yNDM4YjQwZWFhZWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmXG4rKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmZcbkBAIC00OSw3ICs0OSw3IEBAIGluY2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrXG4gI1xuICMgRGVmaW5lIE5PX1NMQU5HIGlmIHlvdSBkbyBub3Qgd2FudCBUVUkgc3VwcG9ydC5cbiAjXG4tIyBEZWZpbmUgR1RLMiBpZiB5b3Ugd2FudCBHVEsrIEdVSSBzdXBwb3J0LlxuKyMgRGVmaW5lIEdUSzQgaWYgeW91IHdhbnQgR1RLKyBHVUkgc3VwcG9ydC5cbiAjXG4gIyBEZWZpbmUgTk9fREVNQU5HTEUgaWYgeW91IGRvIG5vdCB3YW50IEMrKyBzeW1ib2wgZGVtYW5nbGluZy5cbiAjXG5AQCAtNDczLDcgKzQ3Myw3IEBAIGlmbmVxICgkKE9VVFBVVCksKVxuICAgQ0ZMQUdTICs9IC1JJChPVVRQVVQpXG4gZW5kaWZcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuICAgQUxMX1BST0dSQU1TICs9ICQoT1VUUFVUKWxpYnBlcmYtZ3RrLnNvXG4gICBHVEtfSU4gOj0gJChPVVRQVVQpZ3RrLWluLm9cbiBlbmRpZlxuQEAgLTgxMSw3ICs4MTEsNyBAQCBjaGVjazogcHJlcGFyZVxuIFxuICMjIyBJbnN0YWxsYXRpb24gcnVsZXNcbiBcbi1pZmRlZiBHVEsyXG4raWZkZWYgR1RLNFxuIGluc3RhbGwtZ3RrOiAkKE9VVFBVVClsaWJwZXJmLWd0ay5zb1xuIFx0JChjYWxsIFFVSUVUX0lOU1RBTEwsICdHVEsgVUknKSBcXFxuIFx0XHQkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKSc7IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuaW5kZXggNjljYjcyYjIwODJhNi4uMTUxNjNlMDgxYThjZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuY1xuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IHBlcmZfYW5ub3RhdGUge1xuIFx0Ym9vbFx0ICAgdXNlX3R1aTtcbiAjZW5kaWZcbiBcdGJvb2xcdCAgIHVzZV9zdGRpbywgdXNlX3N0ZGlvMjtcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGJvb2xcdCAgIHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHQgICBza2lwX21pc3Npbmc7XG5AQCAtNzEyLDcgKzcxMiw3IEBAIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0T1BUX0JPT0xFQU4oJ3EnLCBcInF1aWV0XCIsIFx1MDAyNnF1aWV0LCBcImRvIG5vdyBzaG93IGFueSB3YXJuaW5ncyBvciBtZXNzYWdlc1wiKSxcbiBcdE9QVF9CT09MRUFOKCdEJywgXCJkdW1wLXJhdy10cmFjZVwiLCBcdTAwMjZkdW1wX3RyYWNlLFxuIFx0XHQgICAgXCJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSVwiKSxcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdE9QVF9CT09MRUFOKDAsIFwiZ3RrXCIsIFx1MDAyNmFubm90YXRlLnVzZV9ndGssIFwiVXNlIHRoZSBHVEsgaW50ZXJmYWNlXCIpLFxuICNlbmRpZlxuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbkBAIC04MjgsNyArODI4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRpZiAoYW5ub3RhdGVfY2hlY2tfYXJncygpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMgXHUwMDI2XHUwMDI2IGFubm90YXRlLnVzZV9ndGspIHtcbiBcdFx0cHJfZXJyKFwiLS1zaG93LW5yLXNhbXBsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiAtLWd0ayBtb2RlIGF0IHRoaXMgdGltZVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfdHVpKVxuIFx0XHR1c2VfYnJvd3NlciA9IDE7XG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4rI2lmZGVmIEhBVkVfR1RLNF9TVVBQT1JUXG4gXHRlbHNlIGlmIChhbm5vdGF0ZS51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG5pbmRleCA2MGQxZjE2NjYyOWUwLi5kMTQzODRjNTg0NjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jXG4rKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmNcbkBAIC04Miw3ICs4Miw3IEBAIHN0cnVjdCByZXBvcnQge1xuICNpZmRlZiBIQVZFX1NMQU5HX1NVUFBPUlRcbiBcdGJvb2xcdFx0XHR1c2VfdHVpO1xuICNlbmRpZlxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFx0Ym9vbFx0XHRcdHVzZV9ndGs7XG4gI2VuZGlmXG4gXHRib29sXHRcdFx0dXNlX3N0ZGlvO1xuQEAgLTEzNTksOCArMTM1OSw4IEBAIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilcbiAjaWZkZWYgSEFWRV9TTEFOR19TVVBQT1JUXG4gXHRPUFRfQk9PTEVBTigwLCBcInR1aVwiLCBcdTAwMjZyZXBvcnQudXNlX3R1aSwgXCJVc2UgdGhlIFRVSSBpbnRlcmZhY2VcIiksXG4gI2VuZGlmXG4tI2lmZGVmIEhBVkVfR1RLMl9TVVBQT1JUXG4tXHRPUFRfQk9PTEVBTigwLCBcImd0a1wiLCBcdTAwMjZyZXBvcnQudXNlX2d0aywgXCJVc2UgdGhlIEdUSzIgaW50ZXJmYWNlXCIpLFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuK1x0T1BUX0JPT0xFQU4oMCwgXCJndGtcIiwgXHUwMDI2cmVwb3J0LnVzZV9ndGssIFwiVXNlIHRoZSBHVEs0IGludGVyZmFjZVwiKSxcbiAjZW5kaWZcbiBcdE9QVF9CT09MRUFOKDAsIFwic3RkaW9cIiwgXHUwMDI2cmVwb3J0LnVzZV9zdGRpbyxcbiBcdFx0ICAgIFwiVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2VcIiksXG5AQCAtMTcxMCw3ICsxNzEwLDcgQEAgaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KVxuIFx0ZWxzZSBpZiAocmVwb3J0LnVzZV90dWkpXG4gXHRcdHVzZV9icm93c2VyID0gMTtcbiAjZW5kaWZcbi0jaWZkZWYgSEFWRV9HVEsyX1NVUFBPUlRcbisjaWZkZWYgSEFWRV9HVEs0X1NVUFBPUlRcbiBcdGVsc2UgaWYgKHJlcG9ydC51c2VfZ3RrKVxuIFx0XHR1c2VfYnJvd3NlciA9IDI7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL2luc3RhbGwtYnVpbGQtZGVwcy5zaCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9pbnN0YWxsLWJ1aWxkLWRlcHMuc2hcbmluZGV4IGQwMDNlN2ZhYjJiZTguLmE2MDFhNTI2MGMxN2UgMTAwNzU1XG4tLS0gYS90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG4rKysgYi90b29scy9wZXJmL3NjcmlwdHMvaW5zdGFsbC1idWlsZC1kZXBzLnNoXG5AQCAtMTk5LDggKzE5OSw4IEBAIGZlZG9yYV9wa2dfZm9yKCkge1xuIFx0IyBvcHQtaW4gZmVhdHVyZXMsIHdoaWNoIGEgZGVmYXVsdCBidWlsZCBkb2VzIG5vdCBlbmFibGU6IHRoZSBsaWJiZmRcbiBcdCMgZGlzYXNzZW1ibGVyIGZhbWlseSAobGliYmZkLCBsaWJiZmQtdGhyZWFkc2FmZSwgbGliYmZkLWxpYmVydHksXG4gXHQjIGRpc2Fzc2VtYmxlci0qLCBjcGx1cy1kZW1hbmdsZSksIG9ubHkgbGlua2VkIG9uIEJVSUxEX05PTkRJU1RST1xuLVx0IyBidWlsZHMgYW5kIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgY2Fwc3RvbmUsIEdUSzIsIExJQlBFUkwgYW5kXG4tXHQjIExJQlVOV0lORCBzdXBwb3J0IChpZmRlZiBHVEsyIC8gaWZkZWYgTElCUEVSTCAvIExJQlVOV0lORD0xKSxcbitcdCMgYnVpbGRzIGFuZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNhcHN0b25lLCBHVEs0LCBMSUJQRVJMIGFuZFxuK1x0IyBMSUJVTldJTkQgc3VwcG9ydCAoaWZkZWYgR1RLNCAvIGlmZGVmIExJQlBFUkwgLyBMSUJVTldJTkQ9MSksXG4gXHQjIGFuZCBDb3JlU2lnaHQgKGlmZGVmIENPUkVTSUdIVCksIGFyZSBkZWxpYmVyYXRlbHkgbm90IG1hcHBlZC5cbiBcdCMgbGliYWlvIGlzIG5vdCBtYXBwZWQgZWl0aGVyOiBpdHNcbiBcdCMgdGVzdCB1c2VzIHRoZSBQT1NJWCBBSU8gQVBJIChhaW8uaCwgYWlvXyosIC1scnQpLCBwcm92aWRlZCBieVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZSBiL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuaW5kZXggZDJjMmY1MjZlMWRiMC4uMjAyYWI1NTAxOTE2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZVxuKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlXG5AQCAtOTUsNyArOTUsNyBAQCBtYWtlX25vX2JhYmVsdHJhY2UyIDo9IE5PX0JBQkVMVFJBQ0UyPTFcbiBtYWtlX3dpdGhfY29yZXNpZ2h0IDo9IENPUkVTSUdIVD0xXG4gbWFrZV9ub19zZHRcdCAgICA6PSBOT19TRFQ9MVxuIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xXG4tbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTFcbittYWtlX3dpdGhfZ3RrNCAgICAgIDo9IEdUSzQ9MVxuIG1ha2VfcmVmY250X2NoZWNrICAgOj0gRVhUUkFfQ0ZMQUdTPVwiLURSRUZDTlRfQ0hFQ0tJTkc9MVwiXG4gbWFrZV90YWdzICAgICAgICAgICA6PSB0YWdzXG4gbWFrZV9jc2NvcGUgICAgICAgICA6PSBjc2NvcGVcbkBAIC0zMTgsNyArMzE4LDcgQEAgJChydW4pOlxuIFx0JChjYWxsIHRlc3QsJEApIFx1MDAyNlx1MDAyNiBcXFxuIFx0cm0gLXJmICRAICQkVE1QX0RFU1QgfHwgKGNhdCAkQCA7IGZhbHNlKVxuIFxuLW1ha2Vfd2l0aF9ndGsyOlxuK21ha2Vfd2l0aF9ndGs0OlxuIFx0JChjYWxsIGNsZWFuKVxuIFx0QFRNUF9ERVNUPSQkKG1rdGVtcCAtZCk7IFxcXG4gXHRjbWQ9XCJjZCAkKFBFUkYpIFx1MDAyNlx1MDAyNiAkKE1BS0VfRikgJCgkQCkgJChQQVJBTExFTF9PUFQpICQoT19PUFQpIERFU1RESVI9JCRUTVBfREVTVFwiOyBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2d0ay9hbm5vdGF0ZS5jXG5pbmRleCA4OTIwZTI5ODQyMGE4Li5hOTYyOWJhYTY1MDc4IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYW5ub3RhdGUuY1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX19hbm5vdGF0ZV9zeW1ib2woR3RrV2lkZ2V0ICp3aW5kb3csIHN0cnVjdCBtYXBfc3ltYm9sICptcyxcbiBcdFx0XHRndGtfbGlzdF9zdG9yZV9zZXQoc3RvcmUsIFx1MDAyNml0ZXIsIEFOTl9DT0xfX0xJTkUsIHMsIC0xKTtcbiBcdH1cbiBcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgXHUwMDI2bm90ZXMtXHUwMDNlc3JjLVx1MDAzZXNvdXJjZSwgYWwubm9kZSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBvcy1cdTAwM2VhbC5ub2RlKTtcbkBAIC0yMTEsMzQgKzIxMSwzMCBAQCBzdGF0aWMgaW50IHN5bWJvbF9fZ3RrX2Fubm90YXRlKHN0cnVjdCBtYXBfc3ltYm9sICptcywgc3RydWN0IGV2c2VsICpldnNlbCxcbiBcdFx0c2lnbmFsKFNJR1FVSVQsIHBlcmZfZ3RrX19zaWduYWwpO1xuIFx0XHRzaWduYWwoU0lHVEVSTSwgcGVyZl9ndGtfX3NpZ25hbCk7XG4gXG4tXHRcdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHR3aW5kb3cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIFwicGVyZiBhbm5vdGF0ZVwiKTtcbiBcbi1cdFx0Z19zaWduYWxfY29ubmVjdCh3aW5kb3csIFwiZGVsZXRlX2V2ZW50XCIsIGd0a19tYWluX3F1aXQsIE5VTEwpO1xuLVxuIFx0XHRwZ2N0eCA9IHBlcmZfZ3RrX19hY3RpdmF0ZV9jb250ZXh0KHdpbmRvdyk7XG4gXHRcdGlmICghcGdjdHgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHR2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTtcbitcdFx0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXHRcdG5vdGVib29rID0gZ3RrX25vdGVib29rX25ldygpO1xuIFx0XHRwZ2N0eC1cdTAwM2Vub3RlYm9vayA9IG5vdGVib29rO1xuIFxuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2ssIFRSVUUsIFRSVUUsIDApO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbm90ZWJvb2spO1xuIFxuIFx0XHRpbmZvYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRcdGlmIChpbmZvYmFyKSB7XG4tXHRcdFx0Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGluZm9iYXIsXG4tXHRcdFx0XHRcdCAgIEZBTFNFLCBGQUxTRSwgMCk7XG4tXHRcdH1cbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgaW5mb2Jhcik7XG4gXG4gXHRcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBzdGF0YmFyLCBGQUxTRSwgRkFMU0UsIDApO1xuK1x0XHRndGtfYm94X2FwcGVuZChHVEtfQk9YKHZib3gpLCBzdGF0YmFyKTtcbiBcbi1cdFx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdFx0Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyh3aW5kb3cpLCB2Ym94KTtcbiBcdH1cbiBcbi1cdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoKTtcbiBcdHRhYl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoc3ltLVx1MDAzZW5hbWUpO1xuIFxuIFx0Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSxcbkBAIC0yNjcsMTIgKzI2MywxMSBAQCB2b2lkIHBlcmZfZ3RrX19zaG93X2Fubm90YXRpb25zKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHdpbmRvdyA9IHBnY3R4LVx1MDAzZW1haW5fd2luZG93O1xuLVx0Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3cod2luZG93KTtcbi1cdGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2luZG93KSwgR1RLX1dJTl9QT1NfQ0VOVEVSKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUod2luZG93LCBUUlVFKTtcbiBcbi1cdGd0a19tYWluKCk7XG4rXHRwZXJmX2d0a19fcnVuX21haW5fbG9vcCh3aW5kb3cpO1xuIFxuIFx0cGVyZl9ndGtfX2RlYWN0aXZhdGVfY29udGV4dChcdTAwMjZwZ2N0eCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuaW5kZXggZDJkYWRmMzg3M2ZiZC4uZTFkMjg2OTQ1ODMyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdWkvZ3RrL2Jyb3dzZXIuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvYnJvd3Nlci5jXG5AQCAtMTYsMjEgKzE2LDUzIEBAIHZvaWQgcGVyZl9ndGtfX3NpZ25hbChpbnQgc2lnKVxuIHZvaWQgcGVyZl9ndGtfX3Jlc2l6ZV93aW5kb3coR3RrV2lkZ2V0ICp3aW5kb3cpXG4ge1xuIFx0R2RrUmVjdGFuZ2xlIHJlY3Q7XG4tXHRHZGtTY3JlZW4gKnNjcmVlbjtcbi1cdGludCBtb25pdG9yO1xuK1x0R2RrTW9uaXRvciAqbW9uaXRvcjtcbitcdEdka0Rpc3BsYXkgKmRpc3BsYXk7XG4rXHRHTGlzdE1vZGVsICptb25pdG9ycztcbiBcdGludCBoZWlnaHQ7XG4gXHRpbnQgd2lkdGg7XG4gXG4tXHRzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2luZG93KTtcbitcdGRpc3BsYXkgPSBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpbmRvdyk7XG4rXHRtb25pdG9ycyA9IGdka19kaXNwbGF5X2dldF9tb25pdG9ycyhkaXNwbGF5KTtcbitcdG1vbml0b3IgPSBnX2xpc3RfbW9kZWxfZ2V0X2l0ZW0obW9uaXRvcnMsIDApO1xuK1x0aWYgKCFtb25pdG9yKSB7XG4rXHRcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0bW9uaXRvciA9IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93LVx1MDAzZXdpbmRvdyk7XG4tXG4tXHRnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgXHUwMDI2cmVjdCk7XG4rXHRnZGtfbW9uaXRvcl9nZXRfZ2VvbWV0cnkobW9uaXRvciwgXHUwMDI2cmVjdCk7XG4rXHRnX29iamVjdF91bnJlZihtb25pdG9yKTtcbiBcbiBcdHdpZHRoXHQ9IHJlY3Qud2lkdGggKiAzIC8gNDtcbiBcdGhlaWdodFx0PSByZWN0LmhlaWdodCAqIDMgLyA0O1xuIFxuLVx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTtcbitcdGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHdpZHRoLCBoZWlnaHQpO1xuK31cbitcbitzdGF0aWMgR01haW5Mb29wICpwZXJmX2d0a19fbWFpbl9sb29wO1xuK1xuK3ZvaWQgcGVyZl9ndGtfX3F1aXRfbWFpbl9sb29wKHZvaWQpXG4re1xuK1x0aWYgKHBlcmZfZ3RrX19tYWluX2xvb3ApXG4rXHRcdGdfbWFpbl9sb29wX3F1aXQocGVyZl9ndGtfX21haW5fbG9vcCk7XG4rfVxuK1xuK3N0YXRpYyBnYm9vbGVhbiBwZXJmX2d0a19fY2xvc2VfcmVxdWVzdChHdGtXaWRnZXQgKndpZGdldCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdFx0Z3BvaW50ZXIgZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbitcbitcdHJldHVybiBGQUxTRTtcbit9XG4rXG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdylcbit7XG4rXHRnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgXCJjbG9zZS1yZXF1ZXN0XCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2Nsb3NlX3JlcXVlc3QpLCBOVUxMKTtcbitcbitcdHBlcmZfZ3RrX19tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpO1xuK1x0Z19tYWluX2xvb3BfcnVuKHBlcmZfZ3RrX19tYWluX2xvb3ApO1xuK1x0Z19jbGVhcl9wb2ludGVyKFx1MDAyNnBlcmZfZ3RrX19tYWluX2xvb3AsIGdfbWFpbl9sb29wX3VucmVmKTtcbiB9XG4gXG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KVxuQEAgLTQyLDIzICs3NCwyMCBAQCBjb25zdCBjaGFyICpwZXJmX2d0a19fZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKVxuIHtcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKmxhYmVsO1xuLVx0R3RrV2lkZ2V0ICpjb250ZW50X2FyZWE7XG4gXG4gXHRpbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcoKTtcbi1cdGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKGluZm9fYmFyLCBUUlVFKTtcbitcdGd0a193aWRnZXRfc2V0X3Zpc2libGUoaW5mb19iYXIsIEZBTFNFKTtcbiBcbiBcdGxhYmVsID0gZ3RrX2xhYmVsX25ldyhcIlwiKTtcbiBcdGd0a193aWRnZXRfc2hvdyhsYWJlbCk7XG4gXG4tXHRjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYShHVEtfSU5GT19CQVIoaW5mb19iYXIpKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGVudF9hcmVhKSwgbGFiZWwpO1xuK1x0Z3RrX2luZm9fYmFyX2FkZF9jaGlsZChHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBsYWJlbCk7XG4gXG4tXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBHVEtfU1RPQ0tfT0ssXG4rXHRndGtfaW5mb19iYXJfYWRkX2J1dHRvbihHVEtfSU5GT19CQVIoaW5mb19iYXIpLCBcIl9PS1wiLFxuIFx0XHRcdFx0R1RLX1JFU1BPTlNFX09LKTtcbiBcdGdfc2lnbmFsX2Nvbm5lY3QoaW5mb19iYXIsIFwicmVzcG9uc2VcIixcbiBcdFx0XHQgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2hpZGUpLCBOVUxMKTtcbkBAIC02OCw3ICs5Nyw2IEBAIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKHZvaWQpXG4gXG4gXHRyZXR1cm4gaW5mb19iYXI7XG4gfVxuLSNlbmRpZlxuIFxuIEd0a1dpZGdldCAqcGVyZl9ndGtfX3NldHVwX3N0YXR1c2Jhcih2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2d0ay9ndGsuaCBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5pbmRleCBhMmI0OTdmMDNmZDZlLi41ZDI2M2Y5MGZlM2FiIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvZ3RrLmhcbisrKyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2d0ay5oXG5AQCAtMTMsMTAgKzEzLDggQEAgc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQge1xuIFx0R3RrV2lkZ2V0ICptYWluX3dpbmRvdztcbiBcdEd0a1dpZGdldCAqbm90ZWJvb2s7XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBcdEd0a1dpZGdldCAqaW5mb19iYXI7XG4gXHRHdGtXaWRnZXQgKm1lc3NhZ2VfbGFiZWw7XG4tI2VuZGlmXG4gXHRHdGtXaWRnZXQgKnN0YXRiYXI7XG4gXHRndWludCBzdGF0YmFyX2N0eF9pZDtcbiB9O1xuQEAgLTQwLDE3ICszOCwxMiBAQCB2b2lkIHBlcmZfZ3RrX19pbml0X2hwcCh2b2lkKTtcbiBcbiB2b2lkIHBlcmZfZ3RrX19zaWduYWwoaW50IHNpZyk7XG4gdm9pZCBwZXJmX2d0a19fcmVzaXplX3dpbmRvdyhHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcnVuX21haW5fbG9vcChHdGtXaWRnZXQgKndpbmRvdyk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9tYWluX2xvb3Aodm9pZCk7XG4rdm9pZCBwZXJmX2d0a19fcXVpdF9lcnJvcl9kaWFsb2codm9pZCk7XG4gY29uc3QgY2hhciAqcGVyZl9ndGtfX2dldF9wZXJjZW50X2NvbG9yKGRvdWJsZSBwZXJjZW50KTtcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9zdGF0dXNiYXIodm9pZCk7XG4tXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBHdGtXaWRnZXQgKnBlcmZfZ3RrX19zZXR1cF9pbmZvX2Jhcih2b2lkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0ICpwZXJmX2d0a19fc2V0dXBfaW5mb19iYXIodm9pZClcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tI2VuZGlmXG4gXG4gc3RydWN0IGV2c2VsO1xuIHN0cnVjdCBldmxpc3Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmNcbmluZGV4IGJhZTIxZjMzNmFlNmQuLjBiNzg2YzVhMDQ2YjIgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jXG5AQCAtMzk1LDExICszOTUsOSBAQCBzdGF0aWMgdm9pZCBwZXJmX2d0a19fc2hvd19oaXN0cyhHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0Z3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludChHVEtfVFJFRV9WSUVXKHZpZXcpLCBUUlVFKTtcbi1cbiBcdGdfc2lnbmFsX2Nvbm5lY3QodmlldywgXCJyb3ctYWN0aXZhdGVkXCIsXG4gXHRcdFx0IEdfQ0FMTEJBQ0sob25fcm93X2FjdGl2YXRlZCksIE5VTEwpO1xuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2aWV3KTtcbitcdGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X2NoaWxkKEdUS19TQ1JPTExFRF9XSU5ET1cod2luZG93KSwgdmlldyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cyxcbkBAIC01ODMsMTEgKzU4MSw5IEBAIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19zaG93X2hpZXJhcmNoeShHdGtXaWRnZXQgKndpbmRvdywgc3RydWN0IGhpc3RzICpoaXN0cyxcbiBcdHBlcmZfZ3RrX19hZGRfaGllcmFyY2h5X2VudHJpZXMoaGlzdHMsIFx1MDAyNmhpc3RzLVx1MDAzZWVudHJpZXMsIHN0b3JlLFxuIFx0XHRcdFx0XHROVUxMLCBcdTAwMjZocHAsIG1pbl9wY250KTtcbiBcbi1cdGd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQoR1RLX1RSRUVfVklFVyh2aWV3KSwgVFJVRSk7XG4tXG4gXHRnX3NpZ25hbF9jb25uZWN0KHZpZXcsIFwicm93LWFjdGl2YXRlZFwiLFxuIFx0XHRcdCBHX0NBTExCQUNLKG9uX3Jvd19hY3RpdmF0ZWQpLCBOVUxMKTtcbi1cdGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmlldyk7XG4rXHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9jaGlsZChHVEtfU0NST0xMRURfV0lORE9XKHdpbmRvdyksIHZpZXcpO1xuIH1cbiBcbiBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbkBAIC02MDYsMzAgKzYwMiwyOCBAQCBpbnQgZXZsaXN0X19ndGtfYnJvd3NlX2hpc3RzKHN0cnVjdCBldmxpc3QgKmV2bGlzdCwgY29uc3QgY2hhciAqaGVscCxcbiBcdHNpZ25hbChTSUdRVUlULCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcdHNpZ25hbChTSUdURVJNLCBwZXJmX2d0a19fc2lnbmFsKTtcbiBcbi1cdHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoKTtcbiBcbiBcdGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgXCJwZXJmIHJlcG9ydFwiKTtcbiBcbi1cdGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCBcImRlbGV0ZV9ldmVudFwiLCBndGtfbWFpbl9xdWl0LCBOVUxMKTtcbi1cbiBcdHBnY3R4ID0gcGVyZl9ndGtfX2FjdGl2YXRlX2NvbnRleHQod2luZG93KTtcbiBcdGlmICghcGdjdHgpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApO1xuK1x0dmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7XG4gXG4gXHRub3RlYm9vayA9IGd0a19ub3RlYm9va19uZXcoKTtcbiBcbi1cdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBub3RlYm9vaywgVFJVRSwgVFJVRSwgMCk7XG4rXHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKG5vdGVib29rLCBUUlVFKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIG5vdGVib29rKTtcbiBcbiBcdGluZm9fYmFyID0gcGVyZl9ndGtfX3NldHVwX2luZm9fYmFyKCk7XG4tXHRpZiAoaW5mb19iYXIpXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBpbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIGluZm9fYmFyKTtcbiBcbiBcdHN0YXRiYXIgPSBwZXJmX2d0a19fc2V0dXBfc3RhdHVzYmFyKCk7XG4tXHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgc3RhdGJhciwgRkFMU0UsIEZBTFNFLCAwKTtcbitcdGd0a19ib3hfYXBwZW5kKEdUS19CT1godmJveCksIHN0YXRiYXIpO1xuIFxuLVx0Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTtcbitcdGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cod2luZG93KSwgdmJveCk7XG4gXG4gXHRldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgcG9zKSB7XG4gXHRcdHN0cnVjdCBoaXN0cyAqaGlzdHMgPSBldnNlbF9faGlzdHMocG9zKTtcbkBAIC02NDksNyArNjQzLDcgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpO1xuK1x0XHRzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldygpO1xuIFxuIFx0XHRndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLFxuIFx0XHRcdFx0XHRcdFx0R1RLX1BPTElDWV9BVVRPTUFUSUMsXG5AQCAtNjY1LDE1ICs2NTksMTIgQEAgaW50IGV2bGlzdF9fZ3RrX2Jyb3dzZV9oaXN0cyhzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGNvbnN0IGNoYXIgKmhlbHAsXG4gXHRcdGd0a19ub3RlYm9va19hcHBlbmRfcGFnZShHVEtfTk9URUJPT0sobm90ZWJvb2spLCBzY3JvbGxlZF93aW5kb3csIHRhYl9sYWJlbCk7XG4gXHR9XG4gXG4tXHRndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7XG4tXG4gXHRwZXJmX2d0a19fcmVzaXplX3dpbmRvdyh3aW5kb3cpO1xuLVxuLVx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuK1x0Z3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aW5kb3csIFRSVUUpO1xuIFxuIFx0dWlfaGVscGxpbmVfX3B1c2goaGVscCk7XG4gXG4tXHRndGtfbWFpbigpO1xuK1x0cGVyZl9ndGtfX3J1bl9tYWluX2xvb3Aod2luZG93KTtcbiBcbiBcdHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoXHUwMDI2cGdjdHgpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvZ3RrL3Byb2dyZXNzLmMgYi90b29scy9wZXJmL3VpL2d0ay9wcm9ncmVzcy5jXG5pbmRleCBlZWE2ZmNkZTUxOGE4Li43NzBmOTI1MWI1NGI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuKysrIGIvdG9vbHMvcGVyZi91aS9ndGsvcHJvZ3Jlc3MuY1xuQEAgLTEsNDkgKzEsNjUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2ludHR5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJndGsuaFwiXG4gI2luY2x1ZGUgXCIuLi9wcm9ncmVzcy5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RhdGljIEd0a1dpZGdldCAqZGlhbG9nO1xuIHN0YXRpYyBHdGtXaWRnZXQgKnByb2dyZXNzO1xuIFxuK3N0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fZGVzdHJveWVkKEd0a1dpZGdldCAqd2lkZ2V0IF9fbWF5YmVfdW51c2VkLFxuK1x0XHRcdFx0XHRncG9pbnRlciBkYXRhIF9fbWF5YmVfdW51c2VkKVxuK3tcbitcdGRpYWxvZyA9IE5VTEw7XG4rXHRwcm9ncmVzcyA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGd0a191aV9wcm9ncmVzc19fdXBkYXRlKHN0cnVjdCB1aV9wcm9ncmVzcyAqcClcbiB7XG4gXHRkb3VibGUgZnJhY3Rpb24gPSBwLVx1MDAzZXRvdGFsID8gMS4wICogcC1cdTAwM2VjdXJyIC8gcC1cdTAwM2V0b3RhbCA6IDAuMDtcbiBcdGNoYXIgYnVmWzEwMjRdO1xuIFxuIFx0aWYgKGRpYWxvZyA9PSBOVUxMKSB7XG4tXHRcdEd0a1dpZGdldCAqdmJveCA9IGd0a192Ym94X25ldyhUUlVFLCA1KTtcbitcdFx0R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA1KTtcbiBcdFx0R3RrV2lkZ2V0ICpsYWJlbCA9IGd0a19sYWJlbF9uZXcocC1cdTAwM2V0aXRsZSk7XG4gXG4tXHRcdGRpYWxvZyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpO1xuK1x0XHRkaWFsb2cgPSBndGtfd2luZG93X25ldygpO1xuIFx0XHRwcm9ncmVzcyA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7XG4gXG4tXHRcdGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBsYWJlbCwgVFJVRSwgRkFMU0UsIDMpO1xuLVx0XHRndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MsIFRSVUUsIFRSVUUsIDMpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGxhYmVsLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgbGFiZWwpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHByb2dyZXNzLCBUUlVFKTtcbitcdFx0Z3RrX2JveF9hcHBlbmQoR1RLX0JPWCh2Ym94KSwgcHJvZ3Jlc3MpO1xuK1xuK1x0XHRndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKGRpYWxvZyksIHZib3gpO1xuIFxuLVx0XHRndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIHZib3gpO1xuK1x0XHRnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhndGtfdWlfcHJvZ3Jlc3NfX2Rlc3Ryb3llZCksIE5VTEwpO1xuIFxuIFx0XHRndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksIFwicGVyZlwiKTtcbi1cdFx0Z3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbi1cdFx0Z3RrX3dpbmRvd19zZXRfcG9zaXRpb24oR1RLX1dJTkRPVyhkaWFsb2cpLCBHVEtfV0lOX1BPU19DRU5URVIpO1xuK1x0XHRndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkaWFsb2cpLCAzMDAsIDgwKTtcbiBcbi1cdFx0Z3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpO1xuK1x0XHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4gXHR9XG4gXG4gXHRndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwgZnJhY3Rpb24pO1xuIFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlXCJQUkl1NjRcIiAvICVcIlBSSXU2NCwgcC1cdTAwM2VjdXJyLCBwLVx1MDAzZXRvdGFsKTtcbiBcdGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIGJ1Zik7XG4gXG4tXHQvKiB3ZSBkaWRuJ3QgY2FsbCBndGtfbWFpbiB5ZXQsIHNvIGRvIGl0IG1hbnVhbGx5ICovXG4tXHR3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpXG4tXHRcdGd0a19tYWluX2l0ZXJhdGlvbigpO1xuK1x0Lyogd2UgZGlkbid0IHN0YXJ0IGEgbWFpbiBsb29wIHlldCwgc28gcHVtcCBldmVudHMgbWFudWFsbHkgKi9cbitcdHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKVxuK1x0XHRnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndGtfdWlfcHJvZ3Jlc3NfX2ZpbmlzaCh2b2lkKVxuIHtcbitcdGlmIChkaWFsb2cgPT0gTlVMTClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogdGhpcyB3aWxsIGFsc28gZGVzdHJveSBhbGwgb2YgaXRzIGNoaWxkcmVuICovXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdGd0a193aW5kb3dfZGVzdHJveShHVEtfV0lORE9XKGRpYWxvZykpO1xuIFxuIFx0ZGlhbG9nID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvc2V0dXAuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL3NldHVwLmNcbmluZGV4IGY1ZWVlNGQ2Njg3MzguLjliNDRmMzcxOTc0NzcgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay9zZXR1cC5jXG5AQCAtMTIsNyArMTIsNyBAQCBpbnQgcGVyZl9ndGtfX2luaXQodm9pZClcbiBcdGd0a191aV9wcm9ncmVzc19faW5pdCgpO1xuIFx0cGVyZl9ndGtfX2luaXRfaHBwKCk7XG4gXG4tXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soTlVMTCwgTlVMTCkgPyAwIDogLTE7XG4rXHRyZXR1cm4gZ3RrX2luaXRfY2hlY2soKSA/IDAgOiAtMTtcbiB9XG4gXG4gdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuQEAgLTIwLDUgKzIwLDYgQEAgdm9pZCBwZXJmX2d0a19fZXhpdChib29sIHdhaXRfZm9yX29rIF9fbWF5YmVfdW51c2VkKVxuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpKVxuIFx0XHRyZXR1cm47XG4gXHRwZXJmX2Vycm9yX191bnJlZ2lzdGVyKFx1MDAyNnBlcmZfZ3RrX2VvcHMpO1xuLVx0Z3RrX21haW5fcXVpdCgpO1xuK1x0cGVyZl9ndGtfX3F1aXRfZXJyb3JfZGlhbG9nKCk7XG4rXHRwZXJmX2d0a19fcXVpdF9tYWluX2xvb3AoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jIGIvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG5pbmRleCBjNDdmNWMzODc4MzhjLi44YTkyMjg1MTI1N2U3IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvdXRpbC5jXG4rKysgYi90b29scy9wZXJmL3VpL2d0ay91dGlsLmNcbkBAIC0yLDggKzIsMTAgQEBcbiAjaW5jbHVkZSBcIi4uL3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJndGsuaFwiXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96YWxsb2MuaFx1MDAzZVxuIFxuIHN0cnVjdCBwZXJmX2d0a19jb250ZXh0ICpwZ2N0eDtcbkBAIC0yOCw0MyArMzAsOTIgQEAgaW50IHBlcmZfZ3RrX19kZWFjdGl2YXRlX2NvbnRleHQoc3RydWN0IHBlcmZfZ3RrX2NvbnRleHQgKipjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBwZXJmX2d0a19fZXJyb3IoKSBjYW4gYmUgY2FsbGVkIHJlLWVudHJhbnRseSwgc2luY2UgdGhlIGRpYWxvZyBpc24ndFxuKyAqIG1vZGFsIGFuZCBpdHMgbmVzdGVkIGxvb3Agc3RpbGwgcHVtcHMgZXZlbnRzIGZvciB0aGUgbWFpbiB3aW5kb3cuXG4rICogVHJhY2sgZXZlcnkgY3VycmVudGx5IHJ1bm5pbmcgbG9vcCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHBvaW50ZXIsIHNvIGFcbisgKiBuZXN0ZWQgY2FsbCBjYW4ndCBjbG9iYmVyIGFuIG91dGVyIGNhbGwncyBsb29wIGFuZCBsZWFrIGl0LlxuKyAqL1xuK3N0YXRpYyBHU0xpc3QgKnBlcmZfZ3RrX19lcnJvcl9sb29wcztcbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fcXVpdF9sb29wKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRnX21haW5fbG9vcF9xdWl0KGRhdGEpO1xuK31cbitcbit2b2lkIHBlcmZfZ3RrX19xdWl0X2Vycm9yX2RpYWxvZyh2b2lkKVxuK3tcbitcdGdfc2xpc3RfZm9yZWFjaChwZXJmX2d0a19fZXJyb3JfbG9vcHMsIHBlcmZfZ3RrX19xdWl0X2xvb3AsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwZXJmX2d0a19fZGlhbG9nX3Jlc3BvbnNlKEd0a0RpYWxvZyAqZGlhbG9nLFxuK1x0XHRcdFx0ICAgICAgZ2ludCByZXNwb25zZV9pZCBfX21heWJlX3VudXNlZCxcbitcdFx0XHRcdCAgICAgIGdwb2ludGVyIGRhdGEgX19tYXliZV91bnVzZWQpXG4re1xuK1x0Z3RrX3dpbmRvd19kZXN0cm95KEdUS19XSU5ET1coZGlhbG9nKSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGVyZl9ndGtfX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbiBcdEd0a1dpZGdldCAqZGlhbG9nO1xuK1x0R01haW5Mb29wICpsb29wO1xuK1x0dmFfbGlzdCBhcmdzX2NvcHk7XG4gXG4rXHR2YV9jb3B5KGFyZ3NfY29weSwgYXJncyk7XG4gXHRpZiAoIXBlcmZfZ3RrX19pc19hY3RpdmVfY29udGV4dChwZ2N0eCkgfHxcbi1cdCAgICB2YXNwcmludGYoXHUwMDI2bXNnLCBmb3JtYXQsIGFyZ3MpIFx1MDAzYyAwKSB7XG4rXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzX2NvcHkpIFx1MDAzYyAwKSB7XG4rXHRcdHZhX2VuZChhcmdzX2NvcHkpO1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXdfd2l0aF9tYXJrdXAoR1RLX1dJTkRPVyhwZ2N0eC1cdTAwM2VtYWluX3dpbmRvdyksXG4gXHRcdFx0XHRcdEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCxcbiBcdFx0XHRcdFx0R1RLX01FU1NBR0VfRVJST1IsXG4gXHRcdFx0XHRcdEdUS19CVVRUT05TX0NMT1NFLFxuIFx0XHRcdFx0XHRcIlx1MDAzY2JcdTAwM2VFcnJvclx1MDAzYy9iXHUwMDNlXFxuXFxuJXNcIiwgbXNnKTtcbi1cdGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7XG4gXG4tXHRndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTtcbitcdC8qXG4rXHQgKiBcInJlc3BvbnNlXCIgb25seSBmaXJlcyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQ7IERFU1RST1lfV0lUSF9QQVJFTlRcbitcdCAqIGRlc3Ryb3lzIHRoZSBkaWFsb2cgZGlyZWN0bHkgd2l0aG91dCBpdC4gUXVpdCBmcm9tIFwiZGVzdHJveVwiXG4rXHQgKiBpbnN0ZWFkLCB3aGljaCBmaXJlcyBlaXRoZXIgd2F5LCBzbyB0aGUgbmVzdGVkIGxvb3AgYmVsb3cgY2FuJ3RcbitcdCAqIG91dGxpdmUgdGhlIGRpYWxvZyBhbmQgaGFuZy5cbitcdCAqL1xuK1x0bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3ByZXBlbmQocGVyZl9ndGtfX2Vycm9yX2xvb3BzLCBsb29wKTtcbitcdGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCBcInJlc3BvbnNlXCIsXG4rXHRcdFx0IEdfQ0FMTEJBQ0socGVyZl9ndGtfX2RpYWxvZ19yZXNwb25zZSksIE5VTEwpO1xuK1x0Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRpYWxvZywgXCJkZXN0cm95XCIsXG4rXHRcdFx0XHQgR19DQUxMQkFDSyhnX21haW5fbG9vcF9xdWl0KSwgbG9vcCk7XG4rXG4rXHRndGtfd2lkZ2V0X3NldF92aXNpYmxlKGRpYWxvZywgVFJVRSk7XG4rXHRnX21haW5fbG9vcF9ydW4obG9vcCk7XG4rXHRwZXJmX2d0a19fZXJyb3JfbG9vcHMgPSBnX3NsaXN0X3JlbW92ZShwZXJmX2d0a19fZXJyb3JfbG9vcHMsIGxvb3ApO1xuK1x0Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7XG4rXG4gXHRmcmVlKG1zZyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tI2lmZGVmIEhBVkVfR1RLX0lORk9fQkFSX1NVUFBPUlRcbiBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIHtcbiBcdGNoYXIgKm1zZztcbitcdHZhX2xpc3QgYXJnc19jb3B5O1xuIFxuK1x0dmFfY29weShhcmdzX2NvcHksIGFyZ3MpO1xuIFx0aWYgKCFwZXJmX2d0a19faXNfYWN0aXZlX2NvbnRleHQocGdjdHgpIHx8XG4tXHQgICAgdmFzcHJpbnRmKFx1MDAyNm1zZywgZm9ybWF0LCBhcmdzKSBcdTAwM2MgMCkge1xuK1x0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJnc19jb3B5KSBcdTAwM2MgMCkge1xuK1x0XHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4gXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4rXHR2YV9lbmQoYXJnc19jb3B5KTtcbiBcbiBcdGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwocGdjdHgtXHUwMDNlbWVzc2FnZV9sYWJlbCksIG1zZyk7XG4gXHRndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZShHVEtfSU5GT19CQVIocGdjdHgtXHUwMDNlaW5mb19iYXIpLFxuQEAgLTc0LDQwICsxMjUsOCBAQCBzdGF0aWMgaW50IHBlcmZfZ3RrX193YXJuaW5nX2luZm9fYmFyKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKVxuIFx0ZnJlZShtc2cpO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGludCBwZXJmX2d0a19fd2FybmluZ19zdGF0dXNiYXIoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpXG4te1xuLVx0Y2hhciAqbXNnLCAqcDtcbi1cbi1cdGlmICghcGVyZl9ndGtfX2lzX2FjdGl2ZV9jb250ZXh0KHBnY3R4KSB8fFxuLVx0ICAgIHZhc3ByaW50ZihcdTAwMjZtc2csIGZvcm1hdCwgYXJncykgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiV2FybmluZzpcXG5cIik7XG4tXHRcdHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXCIpO1xuLVx0XHRyZXR1cm4gLTE7XG4tXHR9XG4tXG4tXHRndGtfc3RhdHVzYmFyX3BvcChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgcGdjdHgtXHUwMDNlc3RhdGJhcl9jdHhfaWQpO1xuLVxuLVx0LyogT25seSBmaXJzdCBsaW5lIGNhbiBiZSBkaXNwbGF5ZWQgKi9cbi1cdHAgPSBzdHJjaHIobXNnLCAnXFxuJyk7XG4tXHRpZiAocClcbi1cdFx0KnAgPSAnXFwwJztcbi1cbi1cdGd0a19zdGF0dXNiYXJfcHVzaChHVEtfU1RBVFVTQkFSKHBnY3R4LVx1MDAzZXN0YXRiYXIpLFxuLVx0XHRcdCAgIHBnY3R4LVx1MDAzZXN0YXRiYXJfY3R4X2lkLCBtc2cpO1xuLVxuLVx0ZnJlZShtc2cpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCBwZXJmX2Vycm9yX29wcyBwZXJmX2d0a19lb3BzID0ge1xuIFx0LmVycm9yXHRcdD0gcGVyZl9ndGtfX2Vycm9yLFxuLSNpZmRlZiBIQVZFX0dUS19JTkZPX0JBUl9TVVBQT1JUXG4gXHQud2FybmluZ1x0PSBwZXJmX2d0a19fd2FybmluZ19pbmZvX2Jhcixcbi0jZWxzZVxuLVx0Lndhcm5pbmdcdD0gcGVyZl9ndGtfX3dhcm5pbmdfc3RhdHVzYmFyLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG5pbmRleCBmZjgwMDA0N2U2OTdmLi5kODg3MzQ2YzdhNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91aS9zZXR1cC5jXG4rKysgYi90b29scy9wZXJmL3VpL3NldHVwLmNcbkBAIC0xNCw3ICsxNCw3IEBAIGludCB1c2VfYnJvd3NlciA9IC0xO1xuIFxuICNkZWZpbmUgUEVSRl9HVEtfRFNPIFwibGlicGVyZi1ndGsuc29cIlxuIFxuLSNpZmRlZiBIQVZFX0dUSzJfU1VQUE9SVFxuKyNpZmRlZiBIQVZFX0dUSzRfU1VQUE9SVFxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfZ3RrX2Jyb3dzZXIodm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuaW5kZXggZGY3MGU5NWE4NDcwNC4uMTIzYjZkNWZjZWE3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jXG4rKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuY1xuQEAgLTE0NSw2ICsxNDUsMTcgQEAgc3RhdGljIGludCBhbm5vdGF0ZWRfc291cmNlX19hbGxvY19oaXN0b2dyYW1zKHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsXG4gXHRyZXR1cm4gc3JjLVx1MDAzZWhpc3RvZ3JhbXMgPyAwIDogLTE7XG4gfVxuIFxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCBzeW1faGlzdF9lbnRyeSAqZW50cnk7XG4rXHRsb25nIGtleSA9IG9mZnNldCBcdTAwM2NcdTAwM2MgMTYgfCBldnNlbC1cdTAwM2Vjb3JlLmlkeDtcbitcbitcdGlmICghaGFzaG1hcF9fZmluZChzcmMtXHUwMDNlc2FtcGxlcywga2V5LCBcdTAwMjZlbnRyeSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGVudHJ5O1xuK31cbitcbiB2b2lkIHN5bWJvbF9fYW5ub3RhdGVfemVyb19oaXN0b2dyYW1zKHN0cnVjdCBzeW1ib2wgKnN5bSlcbiB7XG4gXHRzdHJ1Y3QgYW5ub3RhdGlvbiAqbm90ZXMgPSBzeW1ib2xfX2Fubm90YXRpb24oc3ltKTtcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5pbmRleCBmYTA4ZDA5YjgwZjc2Li40MDAzOGEzNzc5ZDQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmhcbisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5oXG5AQCAtNDA2LDE2ICs0MDYsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1faGlzdCAqYW5ub3RhdGlvbl9faGlzdG9ncmFtKHN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyxcbiBcdHJldHVybiBhbm5vdGF0ZWRfc291cmNlX19oaXN0b2dyYW0obm90ZXMtXHUwMDNlc3JjLCBldnNlbCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0X2VudHJ5ICpcbi1hbm5vdGF0ZWRfc291cmNlX19oaXN0X2VudHJ5KHN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmMsIGNvbnN0IHN0cnVjdCBldnNlbCAqZXZzZWwsIHU2NCBvZmZzZXQpXG4te1xuLVx0c3RydWN0IHN5bV9oaXN0X2VudHJ5ICplbnRyeTtcbi1cdGxvbmcga2V5ID0gb2Zmc2V0IFx1MDAzY1x1MDAzYyAxNiB8IGV2c2VsLVx1MDAzZWNvcmUuaWR4O1xuLVxuLVx0aWYgKCFoYXNobWFwX19maW5kKHNyYy1cdTAwM2VzYW1wbGVzLCBrZXksIFx1MDAyNmVudHJ5KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gZW50cnk7XG4tfVxuK3N0cnVjdCBzeW1faGlzdF9lbnRyeSAqXG4rYW5ub3RhdGVkX3NvdXJjZV9faGlzdF9lbnRyeShzdHJ1Y3QgYW5ub3RhdGVkX3NvdXJjZSAqc3JjLCBjb25zdCBzdHJ1Y3QgZXZzZWwgKmV2c2VsLCB1NjQgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjAxOjA1LjIzNzc3MDI3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MDU4OTkyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIFRyaWFnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gdXBkYXRlcyB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYm90aCBgYnVpbGQvYCBhbmQgYHBlcmYvYC4gIEkgc2VlIGNoYW5nZXMgdG8gbWFrZWZpbGVzLCBmZWF0dXJlIHRlc3RzIHJlbGF0ZWQgdG8gR1RLMiwgYW5kIHdoYXQgYXBwZWFycyB0byBiZSBhIG1pZ3JhdGlvbiBvciB1cGRhdGUgdG8gR1RLNCBzdXBwb3J0IChyZW5hbWluZyBgdGVzdC1ndGsyLmNgIHRvIGB0ZXN0LWd0azQuY2ApLiAgVGhlIGBwZXJmL2AgZGlyZWN0b3J5IGlzIGdldHRpbmcgYSBmYWlyIGFtb3VudCBvZiBhdHRlbnRpb24gYXMgd2VsbDogSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgaXRzIG1ha2VmaWxlcywgYnVpbHQtaW4gYmluYXJpZXMsIGRvY3VtZW50YXRpb24sIHNjcmlwdHMsIGFuZCB0aGUgR1RLLWJhc2VkIFVJIGVsZW1lbnRzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBBY2NvcmRpbmcgdG8gb3VyIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBPTkxZIGlmIGFsbCBtb2RpZmllZCBjb2RlIGZpdHMgb25lIG9yIG1vcmUgc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRob3NlIG5lZ2F0aXZlIGNyaXRlcmlhOiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB1c2VyLXNwYWNlIGNvZGUuXG5cbkkgc2VlIHRoYXQgYWxsIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoYXQncyBhIGdvb2QgaW5pdGlhbCBpbmRpY2F0b3IuICBNb3JlIHNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvYnVpbGQvYCDigJMgd2hpY2ggaG91c2VzIGJ1aWxkIHN5c3RlbSBmaWxlcyBhbmQgdGVzdCBiaW5hcmllcyDigJMgYW5kIGB0b29scy9wZXJmL2DigJMgd2hpY2ggaXMsIGFzIEkga25vdywgYSB1c2VyLXNwYWNlIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2wuIFRoZSB0ZXN0cyBzZWVtIHRvIGJlIGZlYXR1cmUgdGVzdHMgYW5kIG5vdCBmb3Iga2VybmVsIGZ1bmN0aW9uYWxpdHkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcywgYXQgZmlyc3QgZ2xhbmNlLCBhcHBlYXIgdG8gYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKGB2bWxpbnV4YCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLiAgSXTigJlzIHB1cmVseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgdHJpYWdlIHBoaWxvc29waHksIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiAgVGhlcmUncyBubyBuZWVkIHRvIGZ1enogdGhpcy4gIFNpbmNlIHRoZXJlIGFyZSBubyBrZXJuZWwgc3ltYm9scyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uc2lkZXIsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgZW1wdHkgbGlzdHMgKGBbXWApLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIHN1Y2NpbmN0bHkgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHdoaWNoIGlzIHdoYXQgSSdtIGRvaW5nIG5vdy4gIFRoZSBwYXRjaCBzb2xlbHkgbW9kaWZpZXMgZmlsZXMgbG9jYXRlZCBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5OyBzcGVjaWZpY2FsbHkgdGhlIGBwZXJmYCB1c2VyLXNwYWNlIHRvb2wgYW5kIGJ1aWxkIGZlYXR1cmVzIHJlbGF0aW5nIHRvIEdUSzQgc3VwcG9ydCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMuICBgRW5hYmxlQ29uZmlnc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYEZvY3VzU3ltYm9sc2A6IGVtcHR5IGxpc3Qgb3IgbnVsbDsgYFJlYXNvbmluZ2A6IGNvbmNpc2UgZXhwbGFuYXRpb247IGFuZCBgV29ydGhGdXp6aW5nYDogYSBib29sZWFuLiBJIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjksIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTowMToxMC42NDM2NzMwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGZpbGVzIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IHRvb2xzL2J1aWxkIGFuZCB0b29scy9wZXJmIGZvciBHVEs0IEdVSSBzdXBwb3J0IGluIHBlcmYpLCB3aGljaCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6MDE6MTAuNjQzNjk3NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowss86t[1] Phase: Running StartedAt: 2026-09-07 01:01:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowss86t[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 01:01:21 +0000 UTC FinishedAt: 2026-09-07 01:01:25 +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,}