ZGlmZiAtLWdpdCBhL2ZvbnRjb25maWcvZmNwcml2YXRlLmggYi9mb250Y29uZmlnL2ZjcHJpdmF0ZS5oCmluZGV4IDE2ZWE1NDMuLjM3NTRlZmEgMTAwNjQ0Ci0tLSBhL2ZvbnRjb25maWcvZmNwcml2YXRlLmgKKysrIGIvZm9udGNvbmZpZy9mY3ByaXZhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvZm9udGNvbmZpZy9mY3ByaXZhdGUuaCx2IDEuMiAyMDAyLzAyLzE1IDA2OjAxOjI3IGtlaXRocCBFeHAgJAorICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL2ZvbnRjb25maWcvZmNwcml2YXRlLmgsdiAxLjMgMjAwMi8wNS8zMSAyMzoyMToyNCBrZWl0aHAgRXhwICQKICAqCiAgKiBDb3B5cmlnaHQgqSAyMDAxIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAgKgpAQCAtNzIsNiArNzIsOSBAQAogCSAgICBicmVhazsJCQkJCQkgICAgXAogCWNhc2UgRmNUeXBlRlRGYWNlOgkJCQkJICAgIFwKIAkgICAgX192X18udS5mID0gdmFfYXJnICh2YSwgRlRfRmFjZSk7CQkJICAgIFwKKwkgICAgYnJlYWs7CQkJCQkJICAgIFwKKwljYXNlIEZjVHlwZVBhdHRlcm46CQkJCQkgICAgXAorCSAgICBfX3ZfXy51LnAgPSB2YV9hcmcgKHZhLCBGY1BhdHRlcm4gKik7CQkgICAgXAogCX0JCQkJCQkJICAgIFwKIAlpZiAoIUZjUGF0dGVybkFkZCAoX19wX18sIF9fb19fLCBfX3ZfXywgRmNUcnVlKSkJICAgIFwKIAkgICAgZ290byBfRmNQYXR0ZXJuVmFwQnVpbGRfYmFpbDE7CQkJICAgIFwKZGlmZiAtLWdpdCBhL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oIGIvZm9udGNvbmZpZy9mb250Y29uZmlnLmgKaW5kZXggZmFhMDU1NC4uYjVmYzFmNiAxMDA2NDQKLS0tIGEvZm9udGNvbmZpZy9mb250Y29uZmlnLmgKKysrIGIvZm9udGNvbmZpZy9mb250Y29uZmlnLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgRkNfU09VUkNFCSAgICAic291cmNlIgkJLyogU3RyaW5nIChYMTEsIGZyZWV0eXBlKSAqLwogI2RlZmluZSBGQ19DSEFSU0VUCSAgICAiY2hhcnNldCIJCS8qIENoYXJTZXQgKi8KICNkZWZpbmUgRkNfTEFORwkJICAgICJsYW5nIgkJLyogU3RyaW5nIE9TLzIgQ29kZVBhZ2VSYW5nZSAqLworI2RlZmluZSBGQ19QQVRURVJOCSAgICAicGF0dGVybiIJCS8qIEZjUGF0dGVybiAqLwogCiAjZGVmaW5lIEZDX0RJUl9DQUNIRV9GSUxFCSAgICAiZm9udHMuY2FjaGUiCiAjZGVmaW5lIEZDX1VTRVJfQ0FDSEVfRklMRQkgICAgIi5mb250cy5jYWNoZSIKQEAgLTEwOSw3ICsxMTAsOCBAQAogICAgIEZjVHlwZUJvb2wsCiAgICAgRmNUeXBlTWF0cml4LAogICAgIEZjVHlwZUNoYXJTZXQsCi0gICAgRmNUeXBlRlRGYWNlCisgICAgRmNUeXBlRlRGYWNlLAorICAgIEZjVHlwZVBhdHRlcm4KIH0gRmNUeXBlOwogCiB0eXBlZGVmIHN0cnVjdCBfRmNNYXRyaXggewpAQCAtMTQxLDYgKzE0Myw4IEBACiAgICAgRmNSZXN1bHRNYXRjaCwgRmNSZXN1bHROb01hdGNoLCBGY1Jlc3VsdFR5cGVNaXNtYXRjaCwgRmNSZXN1bHROb0lkCiB9IEZjUmVzdWx0OwogCit0eXBlZGVmIHN0cnVjdCBfRmNQYXR0ZXJuICAgRmNQYXR0ZXJuOworCiB0eXBlZGVmIHN0cnVjdCBfRmNWYWx1ZSB7CiAgICAgRmNUeXBlCXR5cGU7CiAgICAgdW5pb24gewpAQCAtMTUxLDExICsxNTUsMTAgQEAKIAljb25zdCBGY01hdHJpeAkqbTsKIAljb25zdCBGY0NoYXJTZXQJKmM7CiAJdm9pZAkJKmY7CisJY29uc3QgRmNQYXR0ZXJuCSpwOwogICAgIH0gdTsKIH0gRmNWYWx1ZTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0ZjUGF0dGVybiAgIEZjUGF0dGVybjsKLQogdHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCB7CiAgICAgaW50CQluZm9udDsKICAgICBpbnQJCXNmb250OwpAQCAtMTY5LDcgKzE3Miw3IEBACiB9IEZjT2JqZWN0U2V0OwogICAgIAogdHlwZWRlZiBlbnVtIF9GY01hdGNoS2luZCB7Ci0gICAgRmNNYXRjaFBhdHRlcm4sIEZjTWF0Y2hGb250IAorICAgIEZjTWF0Y2hQYXR0ZXJuLCBGY01hdGNoRm9udAogfSBGY01hdGNoS2luZDsKIAogdHlwZWRlZiBlbnVtIF9GY1NldE5hbWUgewpAQCAtMzM2LDEzICszMzksMTMgQEAKIAogLyogZmNkYmcuYyAqLwogdm9pZAotRmNWYWx1ZVByaW50IChGY1ZhbHVlIHYpOworRmNWYWx1ZVByaW50IChjb25zdCBGY1ZhbHVlIHYpOwogCiB2b2lkCi1GY1BhdHRlcm5QcmludCAoRmNQYXR0ZXJuICpwKTsKK0ZjUGF0dGVyblByaW50IChjb25zdCBGY1BhdHRlcm4gKnApOwogCiB2b2lkCi1GY0ZvbnRTZXRQcmludCAoRmNGb250U2V0ICpzKTsKK0ZjRm9udFNldFByaW50IChjb25zdCBGY0ZvbnRTZXQgKnMpOwogCiAvKiBmY2RlZmF1bHQuYyAqLwogdm9pZApAQCAtNjAyLDYgKzYwNSw5IEBACiBGY0Jvb2wKIEZjUGF0dGVybkFkZEJvb2wgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBGY0Jvb2wgYik7CiAKK0ZjQm9vbAorRmNQYXR0ZXJuQWRkUGF0dGVybiAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGNvbnN0IEZjUGF0dGVybiAqcHApOworCiBGY1Jlc3VsdAogRmNQYXR0ZXJuR2V0SW50ZWdlciAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGludCBuLCBpbnQgKmkpOwogCkBAIC02MjAsNiArNjI2LDkgQEAKIEZjUmVzdWx0CiBGY1BhdHRlcm5HZXRCb29sIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IG4sIEZjQm9vbCAqYik7CiAKK0ZjUmVzdWx0CitGY1BhdHRlcm5HZXRQYXR0ZXJuIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IG4sIEZjUGF0dGVybiAqKnBwKTsKKwogRmNQYXR0ZXJuICoKIEZjUGF0dGVyblZhQnVpbGQgKEZjUGF0dGVybiAqb3JpZywgdmFfbGlzdCB2YSk7CiAgICAgCmRpZmYgLS1naXQgYS9mb250cy5jb25mLmluIGIvZm9udHMuY29uZi5pbgppbmRleCBiYWNjYzhhLi40ODA2NTYwIDEwMDY0NAotLS0gYS9mb250cy5jb25mLmluCisrKyBiL2ZvbnRzLmNvbmYuaW4KQEAgLTEyOCw2ICsxMjgsMTEgQEAKIAk8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5+Ly5mb250cy5jb25mPC9pbmNsdWRlPgogCiA8IS0tCisgIExvYWQgbG9jYWwgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZQorLS0+CisJPGluY2x1ZGUgaWdub3JlX21pc3Npbmc9InllcyI+bG9jYWwuY29uZjwvaW5jbHVkZT4KKworPCEtLQogICBBbGlhcyB3ZWxsIGtub3duIGZvbnQgbmFtZXMgdG8gYXZhaWxhYmxlIFRydWVUeXBlIGZvbnRzCiAtLT4KIAk8YWxpYXM+CkBAIC0xOTcsMTEgKzIwMiwxMSBAQAogIAogCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPgogCQk8IS0tIGNoZWNrIHRvIHNlZSBpZiB0aGUgZm9udCBpcyByb21hbiAtLT4KLQkJPHRlc3QgcXVhbD0iZmlyc3QiIG5hbWU9InNsYW50Ij4KKwkJPHRlc3QgbmFtZT0ic2xhbnQiPgogCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4KIAkJPC90ZXN0PgogCQk8IS0tIGNoZWNrIHRvIHNlZSBpZiB0aGUgcGF0dGVybiByZXF1ZXN0ZWQgbm9uLXJvbWFuIC0tPgotCQk8dGVzdCBxdWFsPSJub3RfZmlyc3QiIG5hbWU9InNsYW50IiBjb21wYXJlPSJub3RfZXEiPgorCQk8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9InNsYW50IiBjb21wYXJlPSJub3RfZXEiPgogCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4KIAkJPC90ZXN0PgogCQk8IS0tIG11bHRpcGx5IHRoZSBtYXRyaXggdG8gc2xhbnQgdGhlIGZvbnQgLS0+CmRpZmYgLS1naXQgYS9mb250cy5kdGQgYi9mb250cy5kdGQKaW5kZXggYTZhZWRiYi4uOWNiZmY0YiAxMDA2NDQKLS0tIGEvZm9udHMuZHRkCisrKyBiL2ZvbnRzLmR0ZApAQCAtMTEyLDExICsxMTIsMTUgQEAKICAgICBpZiAncXVhbCcgaXMgJ2ZpcnN0JywgdGhlbiB0aGUgbWF0Y2ggc3VjY2VlZHMgb25seSBpZiB0aGUgZmlyc3QgdmFsdWUgbWF0Y2hlcy4KICAgICBpZiAncXVhbCcgaXMgJ25vdF9maXJzdCcsIHRoZW4gdGhlIG1hdGNoIHN1Y2NlZWRzIG9ubHkgaWYgYW55IHZhbHVlIG90aGVyIHRoYW4KICAgICAJdGhlIGZpcnN0IG1hdGNoZXMuCisgICAgRm9yIG1hdGNoIGVsZW1lbnRzIHdpdGggdGFyZ2V0PWZvbnQsIGlmIHRlc3QgJ3RhcmdldCcgaXMgJ3BhdHRlcm4nLAorICAgIHRoZW4gdGhlIHRlc3QgaXMgYXBwbGllZCB0byB0aGUgcGF0dGVybiB1c2VkIGluIG1hdGNoaW5nIHJhdGhlciB0aGFuCisgICAgdG8gdGhlIHJlc3VsdGluZyBmb250LgogLS0+CiA8IUVMRU1FTlQgdGVzdCAoJWV4cHI7KSo+CiA8IUFUVExJU1QgdGVzdCAKIAkgIHF1YWwgKGFueXxhbGx8Zmlyc3R8bm90X2ZpcnN0KSAgICAiYW55IgogCSAgbmFtZSBDREFUQQkgICAgI1JFUVVJUkVECisJICB0YXJnZXQgKHBhdHRlcm58Zm9udHxkZWZhdWx0KQkJImRlZmF1bHQiCiAJICBjb21wYXJlIChlcXxub3RfZXF8bGVzc3xsZXNzX2VxfG1vcmV8bW9yZV9lcSkJImVxIj4KIAogPCEtLQpkaWZmIC0tZ2l0IGEvc3JjL2ZjY2ZnLmMgYi9zcmMvZmNjZmcuYwppbmRleCA0NzhmNWE2Li4zMjhiMWFjIDEwMDY0NAotLS0gYS9zcmMvZmNjZmcuYworKysgYi9zcmMvZmNjZmcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjY2ZnLmMsdiAxLjE1IDIwMDIvMDYvMjEgMDY6MTQ6NDUga2VpdGhwIEV4cCAkCisgKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjY2ZnLmMsdiAxLjE4IDIwMDIvMDcvMzEgMDE6MzY6Mzcga2VpdGhwIEV4cCAkCiAgKgogICogQ29weXJpZ2h0IKkgMjAwMCBLZWl0aCBQYWNrYXJkLCBtZW1iZXIgb2YgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgogICoKQEAgLTQzOCwxNiArNDM4LDIwIEBACiAgICAgc3Vic3QtPm5leHQgPSAwOwogICAgIHN1YnN0LT50ZXN0ID0gdGVzdDsKICAgICBzdWJzdC0+ZWRpdCA9IGVkaXQ7CisgICAgbnVtID0gMDsKKyAgICBmb3IgKHQgPSB0ZXN0OyB0OyB0ID0gdC0+bmV4dCkKKyAgICB7CisJaWYgKHQtPmtpbmQgPT0gRmNNYXRjaERlZmF1bHQpCisJICAgIHQtPmtpbmQgPSBraW5kOworCW51bSsrOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5tYXhPYmplY3RzIDwgbnVtKQorCWNvbmZpZy0+bWF4T2JqZWN0cyA9IG51bTsKICAgICBpZiAoRmNEZWJ1ZyAoKSAmIEZDX0RCR19FRElUKQogICAgIHsKIAlwcmludGYgKCJBZGQgU3Vic3QgIik7CiAJRmNTdWJzdFByaW50IChzdWJzdCk7CiAgICAgfQotICAgIG51bSA9IDA7Ci0gICAgZm9yICh0ID0gdGVzdDsgdDsgdCA9IHQtPm5leHQpCi0JbnVtKys7Ci0gICAgaWYgKGNvbmZpZy0+bWF4T2JqZWN0cyA8IG51bSkKLQljb25maWctPm1heE9iamVjdHMgPSBudW07CiAgICAgcmV0dXJuIEZjVHJ1ZTsKIH0KIApAQCAtNDgzLDcgKzQ4Nyw2IEBACiAgICAgdiA9IEZjQ29uZmlnUHJvbW90ZSAodiwgbSk7CiAgICAgaWYgKG0udHlwZSA9PSB2LnR5cGUpIAogICAgIHsKLQlyZXQgPSBGY0ZhbHNlOwogCXN3aXRjaCAobS50eXBlKSB7CiAJY2FzZSBGY1R5cGVJbnRlZ2VyOgogCSAgICBicmVhazsJLyogRmNDb25maWdQcm9tb3RlIHByZXZlbnRzIHRoaXMgZnJvbSBoYXBwZW5pbmcgKi8KQEAgLTU4OCw2ICs1OTEsMTkgQEAKIAkgICAgZGVmYXVsdDoKIAkJYnJlYWs7CiAJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBGY1R5cGVQYXR0ZXJuOgorCSAgICBzd2l0Y2ggKG9wKSB7CisJICAgIGNhc2UgRmNPcEVxdWFsOgorCQlyZXQgPSBGY1BhdHRlcm5FcXVhbCAobS51LnAsIHYudS5wKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgRmNPcE5vdEVxdWFsOgorCQlyZXQgPSAhRmNQYXR0ZXJuRXF1YWwgKG0udS5wLCB2LnUucCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKQEAgLTY1OCwxNSArNjc0LDIyIEBACiAJICAgIHYudHlwZSA9IEZjVHlwZVZvaWQ7CiAJRmNWYWx1ZURlc3Ryb3kgKHZsKTsKIAlicmVhazsKLSAgICBjYXNlIEZjT3BPcjoKLSAgICBjYXNlIEZjT3BBbmQ6Ci0gICAgY2FzZSBGY09wRXF1YWw6CiAgICAgY2FzZSBGY09wQ29udGFpbnM6CiAgICAgY2FzZSBGY09wTm90RXF1YWw6CiAgICAgY2FzZSBGY09wTGVzczoKICAgICBjYXNlIEZjT3BMZXNzRXF1YWw6CiAgICAgY2FzZSBGY09wTW9yZToKICAgICBjYXNlIEZjT3BNb3JlRXF1YWw6CisJdmwgPSBGY0NvbmZpZ0V2YWx1YXRlIChwLCBlLT51LnRyZWUubGVmdCk7CisJdnIgPSBGY0NvbmZpZ0V2YWx1YXRlIChwLCBlLT51LnRyZWUucmlnaHQpOworCXYudHlwZSA9IEZjVHlwZUJvb2w7CisJdi51LmIgPSBGY0NvbmZpZ0NvbXBhcmVWYWx1ZSAodmwsIGUtPm9wLCB2cik7CisJRmNWYWx1ZURlc3Ryb3kgKHZsKTsKKwlGY1ZhbHVlRGVzdHJveSAodnIpOworCWJyZWFrOwkKKyAgICBjYXNlIEZjT3BPcjoKKyAgICBjYXNlIEZjT3BBbmQ6CisgICAgY2FzZSBGY09wRXF1YWw6CiAgICAgY2FzZSBGY09wUGx1czoKICAgICBjYXNlIEZjT3BNaW51czoKICAgICBjYXNlIEZjT3BUaW1lczoKQEAgLTY5NiwzMSArNzE5LDYgQEAKIAkJICAgIHYudHlwZSA9IEZjVHlwZURvdWJsZTsKIAkJICAgIHYudS5kID0gdmwudS5kIC8gdnIudS5kOyAKIAkJICAgIGJyZWFrOwotCQljYXNlIEZjT3BFcXVhbDoKLQkJY2FzZSBGY09wQ29udGFpbnM6Ci0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOyAKLQkJICAgIHYudS5iID0gdmwudS5kID09IHZyLnUuZDsKLQkJICAgIGJyZWFrOwotCQljYXNlIEZjT3BOb3RFcXVhbDogICAgCi0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOyAKLQkJICAgIHYudS5iID0gdmwudS5kICE9IHZyLnUuZDsKLQkJICAgIGJyZWFrOwotCQljYXNlIEZjT3BMZXNzOiAgICAKLQkJICAgIHYudHlwZSA9IEZjVHlwZUJvb2w7IAotCQkgICAgdi51LmIgPSB2bC51LmQgPCB2ci51LmQ7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBGY09wTGVzc0VxdWFsOiAgICAKLQkJICAgIHYudHlwZSA9IEZjVHlwZUJvb2w7IAotCQkgICAgdi51LmIgPSB2bC51LmQgPD0gdnIudS5kOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgRmNPcE1vcmU6ICAgIAotCQkgICAgdi50eXBlID0gRmNUeXBlQm9vbDsgCi0JCSAgICB2LnUuYiA9IHZsLnUuZCA+IHZyLnUuZDsKLQkJICAgIGJyZWFrOwotCQljYXNlIEZjT3BNb3JlRXF1YWw6ICAgIAotCQkgICAgdi50eXBlID0gRmNUeXBlQm9vbDsgCi0JCSAgICB2LnUuYiA9IHZsLnUuZCA+PSB2ci51LmQ7Ci0JCSAgICBicmVhazsKIAkJZGVmYXVsdDoKIAkJICAgIHYudHlwZSA9IEZjVHlwZVZvaWQ7IAogCQkgICAgYnJlYWs7CkBAIC03NDIsMTUgKzc0MCw2IEBACiAJCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOwogCQkgICAgdi51LmIgPSB2bC51LmIgJiYgdnIudS5iOwogCQkgICAgYnJlYWs7Ci0JCWNhc2UgRmNPcEVxdWFsOgotCQljYXNlIEZjT3BDb250YWluczoKLQkJICAgIHYudHlwZSA9IEZjVHlwZUJvb2w7Ci0JCSAgICB2LnUuYiA9IHZsLnUuYiA9PSB2ci51LmI7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBGY09wTm90RXF1YWw6Ci0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOwotCQkgICAgdi51LmIgPSB2bC51LmIgIT0gdnIudS5iOwotCQkgICAgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCSAgICB2LnR5cGUgPSBGY1R5cGVWb2lkOyAKIAkJICAgIGJyZWFrOwpAQCAtNzU4LDE1ICs3NDcsNiBAQAogCQlicmVhazsKIAkgICAgY2FzZSBGY1R5cGVTdHJpbmc6CiAJCXN3aXRjaCAoZS0+b3ApIHsKLQkJY2FzZSBGY09wRXF1YWw6Ci0JCWNhc2UgRmNPcENvbnRhaW5zOgotCQkgICAgdi50eXBlID0gRmNUeXBlQm9vbDsKLQkJICAgIHYudS5iID0gRmNTdHJDbXBJZ25vcmVDYXNlICh2bC51LnMsIHZyLnUucykgPT0gMDsKLQkJICAgIGJyZWFrOwotCQljYXNlIEZjT3BOb3RFcXVhbDoKLQkJICAgIHYudHlwZSA9IEZjVHlwZUJvb2w7Ci0JCSAgICB2LnUuYiA9IEZjU3RyQ21wSWdub3JlQ2FzZSAodmwudS5zLCB2ci51LnMpICE9IDA7Ci0JCSAgICBicmVhazsKIAkJY2FzZSBGY09wUGx1czoKIAkJICAgIHYudHlwZSA9IEZjVHlwZVN0cmluZzsKIAkJICAgIHYudS5zID0gRmNTdHJQbHVzICh2bC51LnMsIHZyLnUucyk7CkBAIC03ODAsMTUgKzc2MCw2IEBACiAJCWJyZWFrOwogCSAgICBjYXNlIEZjVHlwZU1hdHJpeDoKIAkJc3dpdGNoIChlLT5vcCkgewotCQljYXNlIEZjT3BFcXVhbDoKLQkJY2FzZSBGY09wQ29udGFpbnM6Ci0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOwotCQkgICAgdi51LmIgPSBGY01hdHJpeEVxdWFsICh2bC51Lm0sIHZyLnUubSk7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBGY09wTm90RXF1YWw6Ci0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOwotCQkgICAgdi51LmIgPSBGY01hdHJpeEVxdWFsICh2bC51Lm0sIHZyLnUubSk7Ci0JCSAgICBicmVhazsKIAkJY2FzZSBGY09wVGltZXM6CiAJCSAgICB2LnR5cGUgPSBGY1R5cGVNYXRyaXg7CiAJCSAgICBtID0gbWFsbG9jIChzaXplb2YgKEZjTWF0cml4KSk7CkBAIC04MDgsMjYgKzc3OSw2IEBACiAJCSAgICBicmVhazsKIAkJfQogCQlicmVhazsKLQkgICAgY2FzZSBGY1R5cGVDaGFyU2V0OgotCQlzd2l0Y2ggKGUtPm9wKSB7Ci0JCWNhc2UgRmNPcENvbnRhaW5zOgotCQkgICAgLyogdmwgY29udGFpbnMgdnIgaWYgdnIgaXMgYSBzdWJzZXQgb2YgdmwgKi8KLQkJICAgIHYudHlwZSA9IEZjVHlwZUJvb2w7Ci0JCSAgICB2LnUuYiA9IEZjQ2hhclNldElzU3Vic2V0ICh2ci51LmMsIHZsLnUuYyk7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBGY09wRXF1YWw6Ci0JCSAgICB2LnR5cGUgPSBGY1R5cGVCb29sOwotCQkgICAgdi51LmIgPSBGY0NoYXJTZXRFcXVhbCAodmwudS5jLCB2ci51LmMpOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgRmNPcE5vdEVxdWFsOgotCQkgICAgdi50eXBlID0gRmNUeXBlQm9vbDsKLQkJICAgIHYudS5iID0gIUZjQ2hhclNldEVxdWFsICh2bC51LmMsIHZyLnUuYyk7Ci0JCSAgICBicmVhazsKLQkJZGVmYXVsdDoKLQkJICAgIHYudHlwZSA9IEZjVHlwZVZvaWQ7Ci0JCSAgICBicmVhazsKLQkJfQotCQlicmVhazsKIAkgICAgZGVmYXVsdDoKIAkJdi50eXBlID0gRmNUeXBlVm9pZDsKIAkJYnJlYWs7CkBAIC0xMDY4LDYgKzEwMTksOCBAQAogICAgIEZjVGVzdAkgICAgKnQ7CiAgICAgRmNFZGl0CSAgICAqZTsKICAgICBGY1ZhbHVlTGlzdAkgICAgKmw7CisgICAgRmNQYXR0ZXJuCSAgICAqcF9wYXQgPSAwOworICAgIEZjUGF0dGVybgkgICAgKm07CiAKICAgICBpZiAoIWNvbmZpZykKICAgICB7CkBAIC0xMDg5LDcgKzEwNDIsMTAgQEAKICAgICBpZiAoa2luZCA9PSBGY01hdGNoUGF0dGVybikKIAlzID0gY29uZmlnLT5zdWJzdFBhdHRlcm47CiAgICAgZWxzZQorICAgIHsKIAlzID0gY29uZmlnLT5zdWJzdEZvbnQ7CisJKHZvaWQpIEZjUGF0dGVybkdldFBhdHRlcm4gKHAsIEZDX1BBVFRFUk4sIDAsICZwX3BhdCk7CisgICAgfQogICAgIGZvciAoOyBzOyBzID0gcy0+bmV4dCkKICAgICB7CiAJLyoKQEAgLTExMDMsNyArMTA1OSwxNSBAQAogCQlwcmludGYgKCJGY0NvbmZpZ1N1YnN0aXR1dGUgdGVzdCAiKTsKIAkJRmNUZXN0UHJpbnQgKHQpOwogCSAgICB9Ci0JICAgIHN0W2ldLmVsdCA9IEZjUGF0dGVybkZpbmRFbHQgKHAsIHQtPmZpZWxkKTsKKwkgICAgc3RbaV0uZWx0ID0gMDsKKwkgICAgaWYgKGtpbmQgPT0gRmNNYXRjaEZvbnQgJiYgdC0+a2luZCA9PSBGY01hdGNoUGF0dGVybikKKwkJbSA9IHBfcGF0OworCSAgICBlbHNlCisJCW0gPSBwOworCSAgICBpZiAobSkKKwkJc3RbaV0uZWx0ID0gRmNQYXR0ZXJuRmluZEVsdCAobSwgdC0+ZmllbGQpOworCSAgICBlbHNlCisJCXN0W2ldLmVsdCA9IDA7CiAJICAgIC8qCiAJICAgICAqIElmIHRoZXJlJ3Mgbm8gc3VjaCBmaWVsZCBpbiB0aGUgZm9udCwKIAkgICAgICogdGhlbiBGY1F1YWxBbGwgbWF0Y2hlcyB3aGlsZSBGY1F1YWxBbnkgZG9lcyBub3QKQEAgLTExMjIsNyArMTA4Niw3IEBACiAJICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoLCBtYXJrIHRoZSBsb2NhdGlvbgogCSAgICAgKiB0byBhcHBseSBtYXRjaC1yZWxhdGl2ZSBlZGl0cwogCSAgICAgKi8KLQkgICAgc3RbaV0udmFsdWUgPSBGY0NvbmZpZ01hdGNoVmFsdWVMaXN0IChwLCB0LCBzdFtpXS5lbHQtPnZhbHVlcyk7CisJICAgIHN0W2ldLnZhbHVlID0gRmNDb25maWdNYXRjaFZhbHVlTGlzdCAobSwgdCwgc3RbaV0uZWx0LT52YWx1ZXMpOwogCSAgICBpZiAoIXN0W2ldLnZhbHVlKQogCQlicmVhazsKIAkgICAgaWYgKHQtPnF1YWwgPT0gRmNRdWFsRmlyc3QgJiYgc3RbaV0udmFsdWUgIT0gc3RbaV0uZWx0LT52YWx1ZXMpCkBAIC0xMTQ4LDExICsxMTEyLDE3IEBACiAJICAgICAqLwogCSAgICBsID0gRmNDb25maWdWYWx1ZXMgKHAsIGUtPmV4cHIsIGUtPmJpbmRpbmcpOwogCSAgICAvKgotCSAgICAgKiBMb2NhdGUgYW55IHRlc3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmllbGQKKwkgICAgICogTG9jYXRlIGFueSB0ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLCBza2lwcGluZworCSAgICAgKiB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhdHRlcm4gd2hlbiBzdWJzdGl0dXRpbmcgaW4KKwkgICAgICogdGhlIGZvbnQKIAkgICAgICovCiAJICAgIGZvciAodCA9IHMtPnRlc3QsIGkgPSAwOyB0OyB0ID0gdC0+bmV4dCwgaSsrKQotCQlpZiAoIUZjU3RyQ21wSWdub3JlQ2FzZSAoKEZjQ2hhcjggKikgdC0+ZmllbGQsIChGY0NoYXI4ICopIGUtPmZpZWxkKSkKKwkgICAgeworCQlpZiAoKHQtPmtpbmQgPT0gRmNNYXRjaEZvbnQgfHwga2luZCA9PSBGY01hdGNoUGF0dGVybikgJiYKKwkJICAgICFGY1N0ckNtcElnbm9yZUNhc2UgKChGY0NoYXI4ICopIHQtPmZpZWxkLCAKKwkJCQkJIChGY0NoYXI4ICopIGUtPmZpZWxkKSkKIAkJICAgIGJyZWFrOworCSAgICB9CiAJICAgIHN3aXRjaCAoZS0+b3ApIHsKIAkgICAgY2FzZSBGY09wQXNzaWduOgogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2ZjZGJnLmMgYi9zcmMvZmNkYmcuYwppbmRleCBkN2MyMmJjLi45ZjdjZWM5IDEwMDY0NAotLS0gYS9zcmMvZmNkYmcuYworKysgYi9zcmMvZmNkYmcuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImZjaW50LmgiCiAKIHZvaWQKLUZjVmFsdWVQcmludCAoRmNWYWx1ZSB2KQorRmNWYWx1ZVByaW50IChjb25zdCBGY1ZhbHVlIHYpCiB7CiAgICAgc3dpdGNoICh2LnR5cGUpIHsKICAgICBjYXNlIEZjVHlwZVZvaWQ6CkBAIC01NCwxOCArNTQsMjMgQEAKICAgICBjYXNlIEZjVHlwZUZURmFjZToKIAlwcmludGYgKCIgZmFjZSIpOwogCWJyZWFrOworICAgIGNhc2UgRmNUeXBlUGF0dGVybjoKKwlwcmludGYgKCIgcGF0dGVybiB7Iik7CisJRmNQYXR0ZXJuUHJpbnQgKHYudS5wKTsKKwlwcmludGYgKCIgfSAiKTsKKwlicmVhazsKICAgICB9CiB9CiAKIHZvaWQKLUZjVmFsdWVMaXN0UHJpbnQgKEZjVmFsdWVMaXN0ICpsKQorRmNWYWx1ZUxpc3RQcmludCAoY29uc3QgRmNWYWx1ZUxpc3QgKmwpCiB7CiAgICAgZm9yICg7IGw7IGwgPSBsLT5uZXh0KQogCUZjVmFsdWVQcmludCAobC0+dmFsdWUpOwogfQogCiB2b2lkCi1GY1BhdHRlcm5QcmludCAoRmNQYXR0ZXJuICpwKQorRmNQYXR0ZXJuUHJpbnQgKGNvbnN0IEZjUGF0dGVybiAqcCkKIHsKICAgICBpbnQJCSAgICBpOwogICAgIEZjUGF0dGVybkVsdCAgICplOwpAQCAtMTI2LDcgKzEzMSw3IEBACiB9CiAKIHZvaWQKLUZjRXhwclByaW50IChGY0V4cHIgKmV4cHIpCitGY0V4cHJQcmludCAoY29uc3QgRmNFeHByICpleHByKQogewogICAgIHN3aXRjaCAoZXhwci0+b3ApIHsKICAgICBjYXNlIEZjT3BJbnRlZ2VyOiBwcmludGYgKCIlZCIsIGV4cHItPnUuaXZhbCk7IGJyZWFrOwpAQCAtMjA2LDggKzIxMSwxNiBAQAogfQogCiB2b2lkCi1GY1Rlc3RQcmludCAoRmNUZXN0ICp0ZXN0KQorRmNUZXN0UHJpbnQgKGNvbnN0IEZjVGVzdCAqdGVzdCkKIHsKKyAgICBzd2l0Y2ggKHRlc3QtPmtpbmQpIHsKKyAgICBjYXNlIEZjTWF0Y2hQYXR0ZXJuOgorCXByaW50ZiAoInBhdHRlcm4gIik7CisJYnJlYWs7CisgICAgY2FzZSBGY01hdGNoRm9udDoKKwlwcmludGYgKCJmb250ICIpOworCWJyZWFrOworICAgIH0KICAgICBzd2l0Y2ggKHRlc3QtPnF1YWwpIHsKICAgICBjYXNlIEZjUXVhbEFueToKIAlwcmludGYgKCJhbnkgIik7CkBAIC0yMzAsNyArMjQzLDcgQEAKIH0KIAogdm9pZAotRmNFZGl0UHJpbnQgKEZjRWRpdCAqZWRpdCkKK0ZjRWRpdFByaW50IChjb25zdCBGY0VkaXQgKmVkaXQpCiB7CiAgICAgcHJpbnRmICgiRWRpdCAlcyAiLCBlZGl0LT5maWVsZCk7CiAgICAgRmNPcFByaW50IChlZGl0LT5vcCk7CkBAIC0yMzksNyArMjUyLDcgQEAKIH0KIAogdm9pZAotRmNTdWJzdFByaW50IChGY1N1YnN0ICpzdWJzdCkKK0ZjU3Vic3RQcmludCAoY29uc3QgRmNTdWJzdCAqc3Vic3QpCiB7CiAgICAgRmNFZGl0CSplOwogICAgIEZjVGVzdAkqdDsKQEAgLTI2MSw3ICsyNzQsNyBAQAogfQogCiB2b2lkCi1GY0ZvbnRTZXRQcmludCAoRmNGb250U2V0ICpzKQorRmNGb250U2V0UHJpbnQgKGNvbnN0IEZjRm9udFNldCAqcykKIHsKICAgICBpbnQJICAgIGk7CiAKZGlmZiAtLWdpdCBhL3NyYy9mY2ludC5oIGIvc3JjL2ZjaW50LmgKaW5kZXggOTgyMjhlOC4uYjg2MWRjMSAxMDA2NDQKLS0tIGEvc3JjL2ZjaW50LmgKKysrIGIvc3JjL2ZjaW50LmgKQEAgLTEzOCw4ICsxMzgsMTEgQEAKICAgICBGY1F1YWxBbnksIEZjUXVhbEFsbCwgRmNRdWFsRmlyc3QsIEZjUXVhbE5vdEZpcnN0CiB9IEZjUXVhbDsKIAorI2RlZmluZSBGY01hdGNoRGVmYXVsdAkoKEZjTWF0Y2hLaW5kKSAtMSkKKwogdHlwZWRlZiBzdHJ1Y3QgX0ZjVGVzdCB7CiAgICAgc3RydWN0IF9GY1Rlc3QJKm5leHQ7CisgICAgRmNNYXRjaEtpbmQJCWtpbmQ7CiAgICAgRmNRdWFsCQlxdWFsOwogICAgIGNvbnN0IGNoYXIJCSpmaWVsZDsKICAgICBGY09wCQlvcDsKQEAgLTQyOSwyMiArNDMyLDIyIEBACiAgICAgCiAvKiBmY2RiZy5jICovCiB2b2lkCi1GY1ZhbHVlTGlzdFByaW50IChGY1ZhbHVlTGlzdCAqbCk7CitGY1ZhbHVlTGlzdFByaW50IChjb25zdCBGY1ZhbHVlTGlzdCAqbCk7CiAKIHZvaWQKIEZjT3BQcmludCAoRmNPcCBvcCk7CiAKIHZvaWQKLUZjVGVzdFByaW50IChGY1Rlc3QgKnRlc3QpOworRmNUZXN0UHJpbnQgKGNvbnN0IEZjVGVzdCAqdGVzdCk7CiAKIHZvaWQKLUZjRXhwclByaW50IChGY0V4cHIgKmV4cHIpOworRmNFeHByUHJpbnQgKGNvbnN0IEZjRXhwciAqZXhwcik7CiAKIHZvaWQKLUZjRWRpdFByaW50IChGY0VkaXQgKmVkaXQpOworRmNFZGl0UHJpbnQgKGNvbnN0IEZjRWRpdCAqZWRpdCk7CiAKIHZvaWQKLUZjU3Vic3RQcmludCAoRmNTdWJzdCAqc3Vic3QpOworRmNTdWJzdFByaW50IChjb25zdCBGY1N1YnN0ICpzdWJzdCk7CiAKIGludAogRmNEZWJ1ZyAodm9pZCk7CkBAIC00NzcsNyArNDgwLDExIEBACiBGY0NvbmZpZ1NhdmVGaWVsZCAoY29uc3QgY2hhciAqZmllbGQpOwogCiBGY1Rlc3QgKgotRmNUZXN0Q3JlYXRlIChGY1F1YWwgcXVhbCwgY29uc3QgRmNDaGFyOCAqZmllbGQsIEZjT3AgY29tcGFyZSwgRmNFeHByICpleHByKTsKK0ZjVGVzdENyZWF0ZSAoRmNNYXRjaEtpbmQgICBraW5kLAorCSAgICAgIEZjUXVhbAkgICAgcXVhbCwKKwkgICAgICBjb25zdCBGY0NoYXI4ICpmaWVsZCwKKwkgICAgICBGY09wCSAgICBjb21wYXJlLAorCSAgICAgIEZjRXhwcgkgICAgKmV4cHIpOwogCiB2b2lkCiBGY1Rlc3REZXN0cm95IChGY1Rlc3QgKnRlc3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2ZjbGlzdC5jIGIvc3JjL2ZjbGlzdC5jCmluZGV4IGI4N2U5MmYuLmU1N2YyYmQgMTAwNjQ0Ci0tLSBhL3NyYy9mY2xpc3QuYworKysgYi9zcmMvZmNsaXN0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL3NyYy9mY2xpc3QuYyx2IDEuNSAyMDAyLzA2LzAzIDA4OjMxOjE1IGtlaXRocCBFeHAgJAorICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL3NyYy9mY2xpc3QuYyx2IDEuNyAyMDAyLzA2LzE5IDIwOjA4OjIyIGtlaXRocCBFeHAgJAogICoKICAqIENvcHlyaWdodCCpIDIwMDAgS2VpdGggUGFja2FyZCwgbWVtYmVyIG9mIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KICAqCkBAIC0yNDcsNiArMjQ3LDggQEAKIAlyZXR1cm4gRmNDaGFyU2V0Q291bnQgKHYudS5jKTsKICAgICBjYXNlIEZjVHlwZUZURmFjZToKIAlyZXR1cm4gKEZjQ2hhcjMyKSB2LnUuZjsKKyAgICBjYXNlIEZjVHlwZVBhdHRlcm46CisJcmV0dXJuIChGY0NoYXIzMikgdi51LnAtPm51bTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvZmNtYXRjaC5jIGIvc3JjL2ZjbWF0Y2guYwppbmRleCAwMmI3MzljLi45OWU5ZmQxIDEwMDY0NAotLS0gYS9zcmMvZmNtYXRjaC5jCisrKyBiL3NyYy9mY21hdGNoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL3NyYy9mY21hdGNoLmMsdiAxLjE1IDIwMDIvMDYvMjkgMjA6MzE6MDIga2VpdGhwIEV4cCAkCisgKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjbWF0Y2guYyx2IDEuMTYgMjAwMi8wNy8wNiAyMzo0Nzo0NCBrZWl0aHAgRXhwICQKICAqCiAgKiBDb3B5cmlnaHQgqSAyMDAwIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAgKgpAQCAtMzg0LDI2ICszODQsMTIgQEAKIAlwZSA9IEZjUGF0dGVybkZpbmRFbHQgKHBhdCwgZmUtPm9iamVjdCk7CiAJaWYgKHBlKQogCXsKLQkgICAgaW50CSAgICBqOwotCSAgICBkb3VibGUgIHNjb3JlW05VTV9NQVRDSF9WQUxVRVNdOwotCi0JICAgIGZvciAoaiA9IDA7IGogPCBOVU1fTUFUQ0hfVkFMVUVTOyBqKyspCi0JCXNjb3JlW2pdID0gMDsKIAkgICAgaWYgKCFGY0NvbXBhcmVWYWx1ZUxpc3QgKHBlLT5vYmplY3QsIHBlLT52YWx1ZXMsIAotCQkJCSAgICAgZmUtPnZhbHVlcywgJnYsIHNjb3JlLCAmcmVzdWx0KSkKKwkJCQkgICAgIGZlLT52YWx1ZXMsICZ2LCAwLCAmcmVzdWx0KSkKIAkgICAgewogCQlGY1BhdHRlcm5EZXN0cm95IChuZXcpOwogCQlyZXR1cm4gMDsKIAkgICAgfQotCSAgICBmb3IgKGogPSAwOyBqIDwgTlVNX01BVENIX1ZBTFVFUzsgaisrKQotCQlpZiAoc2NvcmVbal0gPj0gMTAwLjApCi0JCXsKLQkJICAgIEZjVmFsdWVMaXN0CSpwdjsKLQotCQkgICAgZm9yIChwdiA9IHBlLT52YWx1ZXM7IHB2OyBwdiA9IHB2LT5uZXh0KQotCQkJRmNQYXR0ZXJuQWRkIChuZXcsIGZlLT5vYmplY3QsIHB2LT52YWx1ZSwgRmNUcnVlKTsKLQkJICAgIGJyZWFrOwotCQl9CiAJfQogCWVsc2UKIAkgICAgdiA9IGZlLT52YWx1ZXMtPnZhbHVlOwpAQCAtNDE2LDYgKzQwMiw3IEBACiAJaWYgKCFmZSkKIAkgICAgRmNQYXR0ZXJuQWRkIChuZXcsIHBlLT5vYmplY3QsIHBlLT52YWx1ZXMtPnZhbHVlLCBGY1RydWUpOwogICAgIH0KKyAgICBGY1BhdHRlcm5BZGRQYXR0ZXJuIChuZXcsIEZDX1BBVFRFUk4sIHBhdCk7CiAgICAgRmNDb25maWdTdWJzdGl0dXRlIChjb25maWcsIG5ldywgRmNNYXRjaEZvbnQpOwogICAgIHJldHVybiBuZXc7CiB9CmRpZmYgLS1naXQgYS9zcmMvZmNuYW1lLmMgYi9zcmMvZmNuYW1lLmMKaW5kZXggZTZjMDc1OC4uZmM4YzNhNCAxMDA2NDQKLS0tIGEvc3JjL2ZjbmFtZS5jCisrKyBiL3NyYy9mY25hbWUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjbmFtZS5jLHYgMS45IDIwMDIvMDYvMjYgMjI6MTQ6MDgga2VpdGhwIEV4cCAkCisgKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjbmFtZS5jLHYgMS4xMCAyMDAyLzA2LzI5IDIwOjMxOjAyIGtlaXRocCBFeHAgJAogICoKICAqIENvcHlyaWdodCCpIDIwMDAgS2VpdGggUGFja2FyZCwgbWVtYmVyIG9mIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KICAqCkBAIC00NzIsNiArNDcyLDggQEAKIAlyZXR1cm4gRmNOYW1lVW5wYXJzZUNoYXJTZXQgKGJ1Ziwgdi51LmMpOwogICAgIGNhc2UgRmNUeXBlRlRGYWNlOgogCXJldHVybiBGY1RydWU7CisgICAgY2FzZSBGY1R5cGVQYXR0ZXJuOgorCXJldHVybiBGY1RydWU7CiAgICAgfQogICAgIHJldHVybiBGY0ZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2ZjcGF0LmMgYi9zcmMvZmNwYXQuYwppbmRleCA2MmQ3NzliLi5hMTI0MTRiIDEwMDY0NAotLS0gYS9zcmMvZmNwYXQuYworKysgYi9zcmMvZmNwYXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjcGF0LmMsdiAxLjExIDIwMDIvMDcvMDYgMjM6NDc6NDQga2VpdGhwIEV4cCAkCisgKiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZjcGF0LmMsdiAxLjEyIDIwMDIvMDgvMDcgMDE6NDU6NTkga2VpdGhwIEV4cCAkCiAgKgogICogQ29weXJpZ2h0IKkgMjAwMCBLZWl0aCBQYWNrYXJkLCBtZW1iZXIgb2YgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgogICoKQEAgLTU1LDYgKzU1LDkgQEAKICAgICBjYXNlIEZjVHlwZUNoYXJTZXQ6CiAJRmNDaGFyU2V0RGVzdHJveSAoKEZjQ2hhclNldCAqKSB2LnUuYyk7CiAJYnJlYWs7CisgICAgY2FzZSBGY1R5cGVQYXR0ZXJuOgorCUZjUGF0dGVybkRlc3Ryb3kgKChGY1BhdHRlcm4gKikgdi51LnApOworCWJyZWFrOwogICAgIGRlZmF1bHQ6CiAJYnJlYWs7CiAgICAgfQpAQCAtNzksNiArODIsOSBAQAogCWlmICghdi51LmMpCiAJICAgIHYudHlwZSA9IEZjVHlwZVZvaWQ7CiAJYnJlYWs7CisgICAgY2FzZSBGY1R5cGVQYXR0ZXJuOgorCUZjUGF0dGVyblJlZmVyZW5jZSAoKEZjUGF0dGVybiAqKSB2LnUucCk7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKIAlicmVhazsKICAgICB9CkBAIC0xMDEsNiArMTA3LDkgQEAKIAljYXNlIEZjVHlwZUNoYXJTZXQ6CiAJICAgIEZjQ2hhclNldERlc3Ryb3kgKChGY0NoYXJTZXQgKikgbC0+dmFsdWUudS5jKTsKIAkgICAgYnJlYWs7CisJY2FzZSBGY1R5cGVQYXR0ZXJuOgorCSAgICBGY1BhdHRlcm5EZXN0cm95ICgoRmNQYXR0ZXJuICopIGwtPnZhbHVlLnUucCk7CisJICAgIGJyZWFrOwogCWRlZmF1bHQ6CiAJICAgIGJyZWFrOwogCX0KQEAgLTE0NSw2ICsxNTQsOCBAQAogCXJldHVybiBGY0NoYXJTZXRFcXVhbCAodmEudS5jLCB2Yi51LmMpOwogICAgIGNhc2UgRmNUeXBlRlRGYWNlOgogCXJldHVybiB2YS51LmYgPT0gdmIudS5mOworICAgIGNhc2UgRmNUeXBlUGF0dGVybjoKKwlyZXR1cm4gRmNQYXR0ZXJuRXF1YWwgKHZhLnUucCwgdmIudS5wKTsKICAgICB9CiAgICAgcmV0dXJuIEZjRmFsc2U7CiB9CkBAIC0xOTUsNiArMjA2LDggQEAKICAgICBjYXNlIEZjVHlwZUZURmFjZToKIAlyZXR1cm4gRmNTdHJpbmdIYXNoICgoY29uc3QgRmNDaGFyOCAqKSAoKEZUX0ZhY2UpIHYudS5mKS0+ZmFtaWx5X25hbWUpIF4KIAkgICAgICAgRmNTdHJpbmdIYXNoICgoY29uc3QgRmNDaGFyOCAqKSAoKEZUX0ZhY2UpIHYudS5mKS0+c3R5bGVfbmFtZSk7CisgICAgY2FzZSBGY1R5cGVQYXR0ZXJuOgorCXJldHVybiAoRmNDaGFyMzIpIHYudS5wLT5udW07CiAgICAgfQogICAgIHJldHVybiBGY0ZhbHNlOwogfQpAQCAtNDQ2LDYgKzQ1OSw5IEBACiAgICAgY2FzZSBGY1R5cGVDaGFyU2V0OgogCUZjQ2hhclNldERlc3Ryb3kgKChGY0NoYXJTZXQgKikgdmFsdWUudS5jKTsKIAlicmVhazsKKyAgICBjYXNlIEZjVHlwZVBhdHRlcm46CisJRmNQYXR0ZXJuRGVzdHJveSAoKEZjUGF0dGVybiAqKSB2YWx1ZS51LnApOworCWJyZWFrOwogICAgIGRlZmF1bHQ6CiAJYnJlYWs7CiAgICAgfQpAQCAtNTYzLDYgKzU3OSwxNiBAQAogICAgIHJldHVybiBGY1BhdHRlcm5BZGQgKHAsIG9iamVjdCwgdiwgRmNUcnVlKTsKIH0KIAorRmNCb29sCitGY1BhdHRlcm5BZGRQYXR0ZXJuIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgY29uc3QgRmNQYXR0ZXJuICpwcCkKK3sKKyAgICBGY1ZhbHVlCXY7CisKKyAgICB2LnR5cGUgPSBGY1R5cGVQYXR0ZXJuOworICAgIHYudS5wID0gcHA7CisgICAgcmV0dXJuIEZjUGF0dGVybkFkZCAocCwgb2JqZWN0LCB2LCBGY1RydWUpOworfQorCiBGY1Jlc3VsdAogRmNQYXR0ZXJuR2V0IChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IGlkLCBGY1ZhbHVlICp2KQogewpAQCAtNzA0LDYgKzczMCwyMSBAQAogICAgIHJldHVybiBGY1Jlc3VsdE1hdGNoOwogfQogCitGY1Jlc3VsdAorRmNQYXR0ZXJuR2V0UGF0dGVybiAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGludCBpZCwgRmNQYXR0ZXJuICoqcHApCit7CisgICAgRmNWYWx1ZQl2OworICAgIEZjUmVzdWx0CXI7CisKKyAgICByID0gRmNQYXR0ZXJuR2V0IChwLCBvYmplY3QsIGlkLCAmdik7CisgICAgaWYgKHIgIT0gRmNSZXN1bHRNYXRjaCkKKwlyZXR1cm4gcjsKKyAgICBpZiAodi50eXBlICE9IEZjVHlwZVBhdHRlcm4pCisgICAgICAgIHJldHVybiBGY1Jlc3VsdFR5cGVNaXNtYXRjaDsKKyAgICAqcHAgPSAoRmNQYXR0ZXJuICopIHYudS5wOworICAgIHJldHVybiBGY1Jlc3VsdE1hdGNoOworfQorCiBGY1BhdHRlcm4gKgogRmNQYXR0ZXJuRHVwbGljYXRlIChGY1BhdHRlcm4gKm9yaWcpCiB7CmRpZmYgLS1naXQgYS9zcmMvZmN4bWwuYyBiL3NyYy9mY3htbC5jCmluZGV4IDVmZWEwN2MuLmUyNjVmYTUgMTAwNjQ0Ci0tLSBhL3NyYy9mY3htbC5jCisrKyBiL3NyYy9mY3htbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRYRnJlZTg2OiB4Yy9saWIvZm9udGNvbmZpZy9zcmMvZmN4bWwuYyx2IDEuMTYgMjAwMi8wNy8xMiAxOToxOToxNiBrZWl0aHAgRXhwICQKKyAqICRYRnJlZTg2OiB4Yy9saWIvZm9udGNvbmZpZy9zcmMvZmN4bWwuYyx2IDEuMTcgMjAwMi8wNy8zMSAwMTozNjozNyBrZWl0aHAgRXhwICQKICAqCiAgKiBDb3B5cmlnaHQgqSAyMDAyIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAgKgpAQCAtNDksMTMgKzQ5LDE4IEBACiAjZW5kaWYKIAogRmNUZXN0ICoKLUZjVGVzdENyZWF0ZSAoRmNRdWFsIHF1YWwsIGNvbnN0IEZjQ2hhcjggKmZpZWxkLCBGY09wIGNvbXBhcmUsIEZjRXhwciAqZXhwcikKK0ZjVGVzdENyZWF0ZSAoRmNNYXRjaEtpbmQgICBraW5kLCAKKwkgICAgICBGY1F1YWwJICAgIHF1YWwsCisJICAgICAgY29uc3QgRmNDaGFyOCAqZmllbGQsCisJICAgICAgRmNPcAkgICAgY29tcGFyZSwKKwkgICAgICBGY0V4cHIJICAgICpleHByKQogewogICAgIEZjVGVzdAkqdGVzdCA9IChGY1Rlc3QgKikgbWFsbG9jIChzaXplb2YgKEZjVGVzdCkpOwogCiAgICAgaWYgKHRlc3QpCiAgICAgewogCXRlc3QtPm5leHQgPSAwOworCXRlc3QtPmtpbmQgPSBraW5kOwogCXRlc3QtPnF1YWwgPSBxdWFsOwogCXRlc3QtPmZpZWxkID0gKGNoYXIgKikgRmNTdHJDb3B5IChmaWVsZCk7CiAJdGVzdC0+b3AgPSBjb21wYXJlOwpAQCAtMTIwNCw3ICsxMjA5LDggQEAKICAgICB9CiAgICAgaWYgKGVkaXQpCiAgICAgewotCXRlc3QgPSBGY1Rlc3RDcmVhdGUgKEZjUXVhbEFueSwKKwl0ZXN0ID0gRmNUZXN0Q3JlYXRlIChGY01hdGNoUGF0dGVybiwKKwkJCSAgICAgRmNRdWFsQW55LAogCQkJICAgICAoRmNDaGFyOCAqKSBGQ19GQU1JTFksCiAJCQkgICAgIEZjT3BFcXVhbCwKIAkJCSAgICAgZmFtaWx5KTsKQEAgLTEzNTgsNiArMTM2NCw4IEBACiBzdGF0aWMgdm9pZAogRmNQYXJzZVRlc3QgKEZjQ29uZmlnUGFyc2UgKnBhcnNlKQogeworICAgIGNvbnN0IEZjQ2hhcjggICAqa2luZF9zdHJpbmc7CisgICAgRmNNYXRjaEtpbmQJICAgIGtpbmQ7CiAgICAgY29uc3QgRmNDaGFyOCAgICpxdWFsX3N0cmluZzsKICAgICBGY1F1YWwJICAgIHF1YWw7CiAgICAgY29uc3QgRmNDaGFyOCAgICpuYW1lOwpAQCAtMTM2Niw2ICsxMzc0LDIzIEBACiAgICAgRmNFeHByCSAgICAqZXhwcjsKICAgICBGY1Rlc3QJICAgICp0ZXN0OwogCisgICAga2luZF9zdHJpbmcgPSBGY0NvbmZpZ0dldEF0dHJpYnV0ZSAocGFyc2UsICJ0YXJnZXQiKTsKKyAgICBpZiAoIWtpbmRfc3RyaW5nKQorCWtpbmQgPSBGY01hdGNoRGVmYXVsdDsKKyAgICBlbHNlCisgICAgeworCWlmICghc3RyY21wICgoY2hhciAqKSBraW5kX3N0cmluZywgInBhdHRlcm4iKSkKKwkgICAga2luZCA9IEZjTWF0Y2hQYXR0ZXJuOworCWVsc2UgaWYgKCFzdHJjbXAgKChjaGFyICopIGtpbmRfc3RyaW5nLCAiZm9udCIpKQorCSAgICBraW5kID0gRmNNYXRjaEZvbnQ7CisJZWxzZSBpZiAoIXN0cmNtcCAoKGNoYXIgKikga2luZF9zdHJpbmcsICJkZWZhdWx0IikpCisJICAgIGtpbmQgPSBGY01hdGNoRGVmYXVsdDsKKwllbHNlCisJeworCSAgICBGY0NvbmZpZ01lc3NhZ2UgKHBhcnNlLCBGY1NldmVyZVdhcm5pbmcsICJpbnZhbGlkIHRlc3QgdGFyZ2V0IFwiJXNcIiIsIGtpbmRfc3RyaW5nKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CiAgICAgcXVhbF9zdHJpbmcgPSBGY0NvbmZpZ0dldEF0dHJpYnV0ZSAocGFyc2UsICJxdWFsIik7CiAgICAgaWYgKCFxdWFsX3N0cmluZykKIAlxdWFsID0gRmNRdWFsQW55OwpAQCAtMTQwOSw3ICsxNDM0LDcgQEAKIAlGY0NvbmZpZ01lc3NhZ2UgKHBhcnNlLCBGY1NldmVyZVdhcm5pbmcsICJtaXNzaW5nIHRlc3QgZXhwcmVzc2lvbiIpOwogCXJldHVybjsKICAgICB9Ci0gICAgdGVzdCA9IEZjVGVzdENyZWF0ZSAocXVhbCwgbmFtZSwgY29tcGFyZSwgZXhwcik7CisgICAgdGVzdCA9IEZjVGVzdENyZWF0ZSAoa2luZCwgcXVhbCwgbmFtZSwgY29tcGFyZSwgZXhwcik7CiAgICAgaWYgKCF0ZXN0KQogICAgIHsKIAlGY0NvbmZpZ01lc3NhZ2UgKHBhcnNlLCBGY1NldmVyZUVycm9yLCAib3V0IG9mIG1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvc3JjL2ZvbnRjb25maWcubWFuIGIvc3JjL2ZvbnRjb25maWcubWFuCmluZGV4IDM0OTZmOWMuLmFlZGI3MTQgMTAwNjQ0Ci0tLSBhL3NyYy9mb250Y29uZmlnLm1hbgorKysgYi9zcmMvZm9udGNvbmZpZy5tYW4KQEAgLTEsNSArMSw1IEBACiAuXCIKLS5cIiAkWEZyZWU4NjogZm9udGNvbmZpZy5tYW4sdiAxLjIgMjAwMC8xMS8zMCAwNjo1OTo0NSBrZWl0aHAgRXhwICQKKy5cIiAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvc3JjL2ZvbnRjb25maWcubWFuLHYgMS4yIDIwMDIvMDgvMDYgMTk6NTQ6MTAga2VpdGhwIEV4cCAkCiAuXCIKIC5cIiBDb3B5cmlnaHQgqSAyMDAyIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAuXCIKQEAgLTE2Niw2ICsxNjYsMjIgQEAKIHN1aXRhYmxlIGRlZmF1bHRzLiAgVGhlIHNlY29uZCBpcyB0byBtb2RpZnkgaG93IHRoZSBzZWxlY3RlZCBmb250cyBhcmUKIHJhc3Rlcml6ZWQuICBUaG9zZSBtdXN0IGFwcGx5IHRvIHRoZSBzZWxlY3RlZCBmb250LCBub3QgdGhlIG9yaWdpbmFsIHBhdHRlcm4KIGFzIGZhbHNlIG1hdGNoZXMgd2lsbCBvZnRlbiBvY2N1ci4KKy5TUyBGT05UIExJU1QgTUFUQ0hJTkcKKy5QCitXaGlsZSBtYW55IGFwcGxpY2F0aW9ucyB3YW50IHRvIGxvY2F0ZSBhIHNpbmdsZSBmb250IGJlc3QgbWF0Y2hpbmcgdGhlaXIKK3NlYXJjaCBjcml0ZXJpYSwgb3RoZXIgYXBwbGljYXRpb25zIG5lZWQgdG8gYnVpbGQgYSBzZXQgb2YgZm9udHMgd2hpY2ggY2FuCitiZSB1c2VkIHRvIHByZXNlbnQgYW55IFVuaWNvZGUgZGF0YS4gIEZvbnRjb25maWcgcHJvdmlkZXMgYW4gQVBJIHRvIGdlbmVyYXRlCithIGxpc3Qgc29ydGVkIGJ5IHRoZSBuZWFybmVzcyBvZiBlYWNoIGZvbnQgdG8gdGhlIHBhdHRlcm4uICBFdmVyeSBmb250IGluCit0aGUgc3lzdGVtIGlzIGNvbnNpZGVyZWQsIHRoZSBiZXN0IG1hdGNoaW5nIGZvbnRzIGFyZSBwbGFjZWQgZmlyc3QuICBUaGUKK2FwcGxpY2F0aW9uIHRoZW4gY2FuIHNlbGVjdCB3aGV0aGVyIHRoZSByZW1haW5pbmcgZm9udHMgYXJlIHVuY29uZGl0aW9uYWxseSAKK2luY2x1ZGVkIGluIHRoZSBsaXN0LCBvciB3aGV0aGVyIHRoZXkgYXJlIGluY2x1ZGVkIG9ubHkgaWYgdGhleSBjb3ZlcgorcG9ydGlvbnMgb2YgVW5pY29kZSBub3QgY292ZXJlZCBieSBhbnkgb2YgdGhlIHByZWNlZWRpbmcgZm9udHMuCisuUAorVGhlIGxpc3QgcmVzdWx0aW5nIGZyb20gdGhpcyBtYXRjaCBpcyByZXByZXNlbnRlZCBieSByZWZlcmVuY2VzIHRvIHRoZQorb3JpZ2luYWwgZm9udCBwYXR0ZXJucyBhbmQgc28gY29uc3VtZXMgdmVyeSBsaXR0bGUgbWVtb3J5LiAgVXNpbmcgYSBsaXN0CitlbnRyeSBpbnZvbHZlcyBjcmVhdGluZyBhIHBhdHRlcm4gd2hpY2ggY29tYmluZXMgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlCitmb250IHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIHBhdHRlcm4gYW5kIGV4ZWN1dGluZyB0aGUgZm9udAorc3Vic3RpdHV0aW9ucy4KIC5TUyBGT05UIE5BTUVTCiBGb250Y29uZmlnIHByb3ZpZGVzIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBmb3IgcGF0dGVybnMgdGhhdCB0aGUgbGlicmFyeQogY2FuIGJvdGggYWNjZXB0IGFuZCBnZW5lcmF0ZS4gIFRoZSByZXByZXNlbnRhdGlvbiBpcyBpbiB0aHJlZSBwYXJ0cywgZmlyc3QgYQpAQCAtMjAwLDggKzIxNiw4IEBACiAuUAogRm9udGNvbmZpZyBoYXMgb3J0aG9ncmFwaGllcyBmb3Igc2V2ZXJhbCBsYW5ndWFnZXMgYnVpbHQgaW50byB0aGUgbGlicmFyeS4KIE5vIHByb3Zpc2lvbiBoYXMgYmVlbiBtYWRlIGZvciBhZGRpbmcgbmV3IG9uZXMgYXNpZGUgZnJvbSByZWJ1aWxkaW5nIHRoZQotbGlicmFyeS4gIEl0IGN1cnJlbnRseSBzdXBwb3J0cyAxMDQgb2YgdGhlIDEzOSBsYW5ndWFnZXMgbmFtZWQgaW4gSVNPIDYzOS0xLAotMTE3IG9mIHRoZSBsYW5ndWFnZXMgd2l0aCB0d28tbGV0dGVyIGNvZGVzIGZyb20gSVNPIDYzOS0yIGFuZCBhbm90aGVyIDI0CitsaWJyYXJ5LiAgSXQgY3VycmVudGx5IHN1cHBvcnRzIDEyMiBvZiB0aGUgMTM5IGxhbmd1YWdlcyBuYW1lZCBpbiBJU08gNjM5LTEsCisxNDEgb2YgdGhlIGxhbmd1YWdlcyB3aXRoIHR3by1sZXR0ZXIgY29kZXMgZnJvbSBJU08gNjM5LTIgYW5kIGFub3RoZXIgMzAKIGxhbmd1YWdlcyB3aXRoIG9ubHkgdGhyZWUtbGV0dGVyIGNvZGVzLgogCiAuU0ggREFUQVRZUEVTCkBAIC0yOTYsNiArMzEyLDE1IEBACiBhcnJheS4KIAogLlRQCisuQiBGY1N0clNldAorLkIgRmNTdHJMaXN0CitGY1N0clNldCBob2xkcyBhIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGNhbiBiZSBhcHBlbmRlZCB0byBhbmQgZW51bWVyYXRlZC4KK0l0cyB1bmlxdWUgY2hhcmFjdGVyaXN0aWMgaXMgdGhhdCB0aGUgZW51bWVyYXRpb24gd29ya3MgZXZlbiB3aGlsZSBzdHJpbmdzCithcmUgYXBwZW5kZWQgZHVyaW5nIGVudW1lcmF0aW9uLiAgRmNTdHJMaXN0IGlzIHVzZWQgZHVyaW5nIGVudW1lcmF0aW9uIHRvCitzYWZlbHkgYW5kIGNvcnJlY3RseSB3YWxrIHRoZSBsaXN0IG9mIHN0cmluZ3MgZXZlbiB3aGlsZSB0aGF0IGxpc3QgaXMgZWRpdGVkCitpbiB0aGUgbWlkZGxlIG9mIGVudW1lcmF0aW9uLgorCisuVFAKIC5CIEZjT2JqZWN0U2V0CiAuc3AKIC5uZgpAQCAtMzA1LDEwICszMzAsMzUgQEAKIAkJY29uc3QgY2hhciAqKm9iamVjdHM7CiAJfSBGY09iamVjdFNldDsKIC5maQorLnNwCiBob2xkcyBhIHNldCBvZiBuYW1lcyBhbmQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGZpZWxkcyBmcm9tIGZvbnRzIGFyZQogcGxhY2VkIGluIHRoZSB0aGUgbGlzdCBvZiByZXR1cm5lZCBwYXR0ZXJucyB3aGVuIGxpc3RpbmcgZm9udHMuCiAKIC5UUAorLkIgRmNPYmplY3RUeXBlCisuc3AKKwl0eXBlZGVmIHN0cnVjdCBfRmNPYmplY3RUeXBlIHsKKwkJY29uc3QgY2hhciAqb2JqZWN0OworCQlGY1R5cGUgdHlwZTsKKwl9IEZjT2JqZWN0VHlwZTsKKy5maQorbWFya3MgdGhlIHR5cGUgb2YgYSBwYXR0ZXJuIGVsZW1lbnQgZ2VuZXJhdGVkIHdoZW4gcGFyc2luZyBmb250IG5hbWVzLgorQXBwbGljYXRpb25zIGNhbiBhZGQgbmV3IG9iamVjdCB0eXBlcyBzbyB0aGF0IGZvbnQgbmFtZXMgbWF5IGNvbnRhaW4gdGhlIG5ldworZWxlbWVudHMuCisKKy5UUAorLkIgRmNDb25zdGFudAorLnNwCisJdHlwZWRlZiBzdHJ1Y3QgX0ZjQ29uc3RhbnQgeworCSAgICBjb25zdCBGY0NoYXI4ICpuYW1lOworCSAgICBjb25zdCBjaGFyICpvYmplY3Q7CisJICAgIGludCB2YWx1ZTsKKwl9IEZjQ29uc3RhbnQ7CisuZmkKK1Byb3ZpZGVzIGZvciBzeW1ib2xpYyBjb25zdGFudHMgZm9yIG5ldyBwYXR0ZXJuIGVsZW1lbnRzLiAgV2hlbiAnbmFtZScgaXMKK3NlZW4gaW4gYSBmb250IG5hbWUsIGFuICdvYmplY3QnIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHZhbHVlICd2YWx1ZScuCisKKy5UUAogLkIgRmNCbGFua3MKIGhvbGRzIGEgbGlzdCBvZiBVbmljb2RlIGNoYXJzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBibGFuazsgdW5leHBlY3RlZGx5CiBibGFuayBjaGFycyBhcmUgYXNzdW1lZCB0byBiZSBpbnZhbGlkIGFuZCBhcmUgZWxpZGVkIGZyb20gdGhlIGNoYXJzZXQKQEAgLTM1Nyw2ICs0MDcsMTEgQEAKIC5icgogLkRUCiAKKy5UUAorLkIgRmNBdG9taWMKK1VzZWQgZm9yIGxvY2tpbmcgYWNjZXNzIHRvIGNvbmZpZyBmaWxlcy4gIFByb3ZpZGVzIGEgc2FmZSB3YXkgdG8gdXBkYXRlCitjb25maWd1cmF0aW9uIGZpbGVzLgorCiAuU0ggRlVOQ1RJT05TCiAKIC5TUyBGY01hdHJpeApAQCAtNDUwLDYgKzUwNSwxOCBAQAogRmNDaGFyMzIgRmNDaGFyU2V0U3VidHJhY3RDb3VudCAoY29uc3QgRmNDaGFyU2V0ICphLCBjb25zdCBGY0NoYXJTZXQgKmIpCiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgdGhhdCBhcmUgaW4gJ2EnIGJ1dCBub3QgaW4gJ2InLgogCisuVFAKK0ZjQm9vbCBGY0NoYXJTZXRJc1N1YnNldCAoY29uc3QgRmNDaGFyU2V0ICphLCBjb25zdCBGY0NoYXJTZXQgKmIpCitSZXR1cm5zIHdoZXRoZXIgJ2EnIGlzIGEgc3Vic2V0IG9mICdiJy4KKworLlRQIEZjQ2hhcjMyIEZjQ2hhclNldEZpcnN0UGFnZSAoY29uc3QgRmNDaGFyU2V0ICphLCBGY0NoYXIzMiBbRkNfQ0hBUlNFVF9NQVBfU0laRV0sIEZjQ2hhcjMyICpuZXh0KQorQnVpbGRzIGFuIGFycmF5IG9mIGJpdHMgbWFya2luZyB0aGUgZmlyc3QgcGFnZSBvZiBVbmljb2RlIGNvdmVyYWdlIG9mICdhJy4KK1JldHVybnMgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAgJ25leHQnIGNvbnRhaW5zIHRoZSBuZXh0IHBhZ2UgaW4gdGhlIGZvbnQuCisKKy5UUCBGY0NoYXIzMiBGY0NoYXJTZXROZXh0UGFnZSAoY29uc3QgRmNDaGFyU2V0ICphLCBGY0NoYXIzMiBbRkNfQ0hBUlNFVF9NQVBfU0laRV0sIEZjQ2hhcjMyICpuZXh0KQorQnVpbGRzIGFuIGFycmF5IG9mIGJpdHMgbWFya2luZyB0aGUgVW5pY29kZSBjb3ZlcmFnZSBvZiAnYScgZm9yIHBhZ2UgJypuZXh0Jy4KK1JldHVybnMgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAgJ25leHQnIGNvbnRhaW5zIHRoZSBuZXh0IHBhZ2UgaW4gdGhlIGZvbnQuCisKIC5TUyBGY1ZhbHVlCiBGY1ZhbHVlIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSB0eXBlIHRhZyBhbmQgYSB1bmlvbiBvZiBhbGwgcG9zc2libGUKIGRhdGF0eXBlcy4gIFRoZSB0YWcgaXMgYW4gZW51bSBvZiB0eXBlIApAQCAtNDgwLDYgKzU0NywyMCBAQAogRGVzdHJveXMgYSBwYXR0ZXJuLCBpbiB0aGUgcHJvY2VzcyBkZXN0cm95aW5nIGFsbCByZWxhdGVkIHZhbHVlcy4KIAogLlRQCitGY0Jvb2wgRmNQYXR0ZXJuRXF1YWwgKGNvbnN0IEZjUGF0dGVybiAqcGEsIGNvbnN0IEZjUGF0dGVybiAqcGIpOworUmV0dXJucyB3aGV0aGVyICdwYScgYW5kICdwYicgYXJlIGV4YWN0bHkgYWxpa2UuCisKKy5UUAorRmNCb29sIEZjUGF0dGVybkVxdWFsU3Vic2V0IChjb25zdCBGY1BhdHRlcm4gKnBhLCBjb25zdCBGY1BhdHRlcm4gKnBiLCBjb25zdCBGY09iamVjdFNldCAqb3MpCitSZXR1cm5zIHdoZXRoZXIgJ3BhJyBhbmQgJ3BiJyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdmFsdWVzIGZvciBhbGwgb2YgdGhlCitvYmplY3RzIGluICdvcycuCisKKy5UUAorRmNDaGFyMzIgRmNQYXR0ZXJuSGFzaCAoY29uc3QgRmNQYXR0ZXJuICpwKQorUmV0dXJucyBhIDMyLWJpdCBudW1iZXIgd2hpY2ggaXMgdGhlIHNhbWUgZm9yIGFueSB0d28gcGF0dGVybnMgd2hpY2ggYXJlCitleGFjdGx5IGFsaWtlLgorCisuVFAKIEZjQm9vbCBGY1BhdHRlcm5BZGQgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBGY1ZhbHVlIHZhbHVlLCBGY0Jvb2wgYXBwZW5kKQogQWRkcyBhIHNpbmdsZSB2YWx1ZSB0byB0aGUgbGlzdCBvZiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lZAogYG9iamVjdCcuICBJZiBgYXBwZW5kJyBpcyBGY1RydWUsIHRoZSB2YWx1ZSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGFueQpAQCAtNTY1LDcgKzY0Niw3IEBACiB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBleGlzdGVkIG9yIG5vdC4KIAogLlRQCi12b2lkIEZjUGF0dGVyblByaW50IChGY1BhdHRlcm4gKnApCit2b2lkIEZjUGF0dGVyblByaW50IChjb25zdCBGY1BhdHRlcm4gKnApCiBQcmludHMgYW4gZWFzaWx5IHJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIHBhdHRlcm4gdG8gc3Rkb3V0LiAgVGhlcmUgaXMKIG5vIHByb3Zpc2lvbiBmb3IgcmVwYXJzaW5nIGRhdGEgaW4gdGhpcyBmb3JtYXQsIGl0J3MganVzdCBmb3IgZGlhZ25vc3RpY3MKIGFuZCBkZWJ1Z2dpbmcuCkBAIC02MzUsNiArNzE2LDQxIEBACiBGY09iamVjdFNldCAqRmNPYmplY3RTZXRWYUJ1aWxkIChjb25zdCBjaGFyICpmaXJzdCwgdmFfbGlzdCB2YSkKIFRoZXNlIGJ1aWxkIGFuIG9iamVjdCBzZXQgZnJvbSBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzLgogCisuU1MgRmNPYmplY3RUeXBlCitQcm92aWRlcyBmb3IgYXBwbGNhdGlvbi1zcGVjaWZpZWQgZm9udCBuYW1lIG9iamVjdCB0eXBlcyBzbyB0aGF0IG5ldworcGF0dGVybiBlbGVtZW50cyBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gZm9udCBuYW1lcy4KKworLlRQIEZjQm9vbCBGY05hbWVSZWdpc3Rlck9iamVjdFR5cGVzIChjb25zdCBGY09iamVjdFR5cGUgKnR5cGVzLCBpbnQgbnR5cGUpCitSZWdpc3RlciAnbnR5cGUnIG5ldyBvYmplY3QgdHlwZXMuCisKKy5UUAorRmNCb29sIEZjTmFtZVVucmVnaXN0ZXJPYmplY3RUeXBlcyAoY29uc3QgRmNPYmplY3RUeXBlICp0eXBlcywgaW50IG50eXBlKQorVW5yZWdpc3RlciAnbnR5cGUnIG9iamVjdCB0eXBlcy4KKyAgICAKKy5UUAorY29uc3QgRmNPYmplY3RUeXBlICpGY05hbWVHZXRPYmplY3RUeXBlIChjb25zdCBjaGFyICpvYmplY3QpCitSZXR1cm4gdGhlIG9iamVjdCB0eXBlIGZvciB0aGUgcGF0dGVybiBlbGVtZW50IG5hbWVkICdvYmplY3QnLgorCisuU1MgRmNDb25zdGFudAorUHJvdmlkZXMgZm9yIGFwcGxpY2F0aW9uLXNwZWNpZmllZCBzeW1ib2xpYyBjb25zdGFudHMgZm9yIGZvbnQgbmFtZXMuCisKKy5UUAorRmNCb29sIEZjTmFtZVJlZ2lzdGVyQ29uc3RhbnRzIChjb25zdCBGY0NvbnN0YW50ICpjb25zdHMsIGludCBuY29uc3RzKQorUmVnaXN0ZXIgJ25jb25zdHMnIG5ldyBzeW1ib2xpYyBjb25zdGFudHMuCisKKy5UUAorRmNCb29sIEZjTmFtZVVucmVnaXN0ZXJDb25zdGFudHMgKGNvbnN0IEZjQ29uc3RhbnQgKmNvbnN0cywgaW50IG5jb25zdHMpCitVbnJlZ2lzdGVyICduY29uc3RzJyBzeW1ib2xpYyBjb25zdGFudHMuCisgICAgCisuVFAKK2NvbnN0IEZjQ29uc3RhbnQgKkZjTmFtZUdldENvbnN0YW50IChGY0NoYXI4ICpzdHJpbmcpCitSZXR1cm4gdGhlIEZjQ29uc3RhbnQgc3RydWN0dXJlIHJlbGF0ZWQgdG8gc3ltYm9saWMgY29uc3RhbnQgJ3N0cmluZycuCisKKy5UUAorRmNCb29sIEZjTmFtZUNvbnN0YW50IChGY0NoYXI4ICpzdHJpbmcsIGludCAqcmVzdWx0KTsKK1JldHVybnMgd2hldGhlciBhIHN5bWJvbGljIGNvbnN0YW50IHdpdGggbmFtZSAnc3RyaW5nJyBpcyByZWdpc3RlcmVkLAorcGxhY2luZyB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50IGluICdyZXN1bHQnIGlmIHByZXNlbnQuCisKIC5TUyBGY0JsYW5rcwogQW4gRmNCbGFua3Mgb2JqZWN0IGhvbGRzIGEgbGlzdCBvZiBVbmljb2RlIGNoYXJzIHdoaWNoIGFyZSBleHBlY3RlZCB0bwogYmUgYmxhbmsgd2hlbiBkcmF3bi4gIFdoZW4gc2Nhbm5pbmcgbmV3IGZvbnRzLCBhbnkgZ2x5cGhzIHdoaWNoIGFyZQpAQCAtNjg1LDE3ICs4MDEsMjkgQEAKIFJldHVybnMgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb25maWd1cmF0aW9uLgogCiAuVFAKK0ZjQm9vbCBGY0NvbmZpZ1VwdG9EYXRlIChGY0NvbmZpZyAqY29uZmlnKQorQ2hlY2tzIGFsbCBvZiB0aGUgZmlsZXMgcmVsYXRlZCB0byAnY29uZmlnJyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZQoraW4tbWVtb3J5IHZlcnNpb24gaXMgaW4gc3luYyB3aXRoIHRoZSBkaXNrIHZlcnNpb24uCisKKy5UUAogRmNCb29sIEZjQ29uZmlnQnVpbGRGb250cyAoRmNDb25maWcgKmNvbmZpZykKIEJ1aWxkcyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmb250cyBmb3IgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uICBOb3RlIHRoYXQKIGFueSBjaGFuZ2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIGFmdGVyIHRoaXMgY2FsbCBoYXZlIGluZGV0ZXJtaW5hdGUgZWZmZWN0cy4KIFJldHVybnMgRmNGYWxzZSBpZiB0aGlzIG9wZXJhdGlvbiBydW5zIG91dCBvZiBtZW1vcnkuCiAKIC5UUAotY2hhciAqKkZjQ29uZmlnR2V0RGlycyAoRmNDb25maWcgKmNvbmZpZykKLVJldHVybnMgdGhlIGxpc3Qgb2YgZm9udCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gJ2NvbmZpZycuCitGY1N0ckxpc3QgKkZjQ29uZmlnR2V0Q29uZmlnRGlycyAoRmNDb25maWcgKmNvbmZpZykKK1JldHVybnMgdGhlIGxpc3Qgb2YgZm9udCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2ZvciAnY29uZmlnJy4gIERvZXMgbm90IGluY2x1ZGUgYW55IHN1YmRpcmVjdG9yaWVzLgorCisuVFAKK0ZjU3RyTGlzdCAqRmNDb25maWdHZXRGb250RGlycyAoRmNDb25maWcgKmNvbmZpZykKK1JldHVybnMgdGhlIGxpc3Qgb2YgZm9udCBkaXJlY3RvcmllcyBpbiAnY29uZmlnJy4gVGhpcyBpbmNsdWRlcyB0aGUKK2NvbmZpZ3VyZWQgZm9udCBkaXJlY3RvcmllcyBhbG9uZyB3aXRoIGFueSBkaXJlY3RvcmllcyBiZWxvdyB0aG9zZSBpbiB0aGUKK2ZpbGVzeXN0ZW0uCiAKIC5UUCAKLWNoYXIgKipGY0NvbmZpZ0dldENvbmZpZ0ZpbGVzIChGY0NvbmZpZyAqY29uZmlnKQorRmNTdHJMaXN0ICpGY0NvbmZpZ0dldENvbmZpZ0ZpbGVzIChGY0NvbmZpZyAqY29uZmlnKQogUmV0dXJucyB0aGUgbGlzdCBvZiBrbm93biBjb25maWd1cmF0aW9uIGZpbGVzIHVzZWQgdG8gZ2VuZXJhdGUgJ2NvbmZpZycuCiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBpbmNsdWRlIGFueSBjb25maWd1cmF0aW9uIGRvbmUgd2l0aCBGY0NvbmZpZ1BhcnNlLgogCkBAIC03MTQsNiArODQyLDE2IEBACiBibGFua3Mgd2VyZSBwcmVzZW50IGluIHRoZSBjb25maWd1cmF0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAuCiAKIC5UUAoraW50IEZjQ29uZmlnR2V0UmVzY2FuSW52ZXJ2YWwgKEZjQ29uZmlnICpjb25maWcpCitSZXR1cm5zIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIGF1dG9tYXRpYyBjaGVja3Mgb2YgdGhlIGNvbmZpZ3VyYXRpb24gKGluCitzZWNvbmRzKSBzcGVjaWZpZWQgaW4gJ2NvbmZpZycuICBUaGUgY29uZmlndXJhdGlvbiBpcyBjaGVja2VkIGR1cmluZworYSBjYWxsIHRvIEZjRm9udExpc3Qgd2hlbiB0aGlzIGludGVydmFsIGhhcyBwYXNzZWQgc2luY2UgdGhlIGxhc3QgY2hlY2suCisKKy5UUAorRmNCb29sIEZjQ29uZmlnU2V0UmVzY2FuSW52ZXJ2YWwgKEZjQ29uZmlnICpjb25maWcsIGludCByZXNjYW5JbnRlcnZhbCkKK1NldHMgdGhlIHJlc2NhbiBpbnRlcnZhbDsgcmV0dXJucyBGY0ZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkLgorCisuVFAKIEZjQm9vbCBGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlIChGY0NvbmZpZyAqY29uZmlnLCBjb25zdCBjaGFyICpmaWxlKQogQWRkcyBhbiBhcHBsaWNhdGlvbi1zcGVjaWZpYyBmb250IHRvIHRoZSBjb25maWd1cmF0aW9uLgogCkBAIC03MzYsNyArODc0LDMwIEBACiBGY1BhdHRlcm4gKkZjRm9udE1hdGNoIChGY0NvbmZpZyAqY29uZmlnLCBGY1BhdHRlcm4gKnAsIEZjUmVzdWx0ICpyZXN1bHQpCiBSZXR1cm5zIHRoZSBmb250IGluICdjb25maWcnIG1vc3QgY2xvc2UgbWF0Y2hpbmcgJ3AnLiAgVGhpcyBmdW5jdGlvbgogc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIEZjQ29uZmlnU3Vic3RpdHV0ZSBhbmQgRmNEZWZhdWx0U3Vic3RpdHV0ZSBoYXZlCi1iZWVuIGNhbGxlZDsgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIHdpbGwgYmUgbGVzcyB1c2VmdWwuCitiZWVuIGNhbGxlZCBmb3IgJ3AnOyBvdGhlcndpc2UgdGhlIHJlc3VsdHMgd2lsbCBub3QgYmUgY29ycmVjdC4KKworLlRQCitGY0ZvbnRTZXQgKkZjRm9udFNvcnQgKEZjQ29uZmlnICpjb25maWcsIEZjUGF0dGVybiAqcCwgRmNCb29sIHRyaW0sIEZjQ2hhclNldCAqKmNzcCwgRmNSZXN1bHQgKnJlc3VsdCkgUmV0dXJucyB0aGUgbGlzdCBvZiBmb250cyBzb3J0ZWQgYnkKK2Nsb3NlbmVzcyB0byAncCcuICBJZiAndHJpbScgaXMgRmNUcnVlLCBlbGVtZW50cyBpbiB0aGUgbGlzdCB3aGljaCBkb24ndAoraW5jbHVkZSBVbmljb2RlIGNvdmVyYWdlIG5vdCBwcm92aWRlZCBieSBlYXJsaWVyIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZQorZWxpZGVkLiAgVGhlIHVuaW9uIG9mIFVuaWNvZGUgY292ZXJhZ2Ugb2YgYWxsIG9mIHRoZSBmb250cyBpcyByZXR1cm5lZCBpbgorJ2NzcCcsIGlmICdjc3AnIGlzIG5vdCBOVUxMLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIKK0ZjQ29uZmlnU3Vic3RpdHV0ZSBhbmQgRmNEZWZhdWx0U3Vic3RpdHV0ZSBoYXZlIGJlZW4gY2FsbGVkIGZvciAncCc7CitvdGhlcndpc2UgdGhlIHJlc3VsdHMgd2lsbCBub3QgYmUgY29ycmVjdC4KKy5QCitUaGUgcmV0dXJuZWQgRmNGb250U2V0IHJlZmVyZW5jZXMgRmNQYXR0ZXJuIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGJlIHNoYXJlZAorYnkgdGhlIHJldHVybiB2YWx1ZSBmcm9tIG11bHRpcGxlIEZjRm9udFNvcnQgY2FsbHMsIGFwcGxpY2F0aW9ucyBtdXN0IG5vdAorbW9kaWZ5IHRoZXNlIHBhdHRlcm5zLiAgSW5zdGVhZCwgdGhleSBzaG91bGQgYmUgcGFzc2VkLCBhbG9uZyB3aXRoICdwJyB0bworRmNGb250UmVuZGVyUHJlcGFyZSB3aGljaCBjb21iaW5lcyB0aGVtIGludG8gYSBjb21wbGV0ZSBwYXR0ZXJuLgorLlAKK1RoZSBGY0ZvbnRTZXQgcmV0dXJuZWQgYnkgRmNGb250U29ydCBpcyBkZXN0cm95ZWQgYnkgY2FsaW5nIEZjRm9udFNldERlc3Ryb3kuCisKKy5UUAorRmNQYXR0ZXJuICpGY0ZvbnRSZW5kZXJQcmVwYXJlIChGY0NvbmZpZyAqY29uZmlnLCBGY1BhdHRlcm4gKnBhdCwgRmNQYXR0ZXJuICpmb250KQorQ3JlYXRlcyBhIG5ldyBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2YgZWxlbWVudHMgb2YgJ2ZvbnQnIG5vdCBhcHBlYXJpbmcgaW4KKydwYXQnLCBlbGVtZW50cyBvZiAncGF0JyBub3QgYXBwZWFyaW5nIGluICdmb250JyBhbmQgdGhlIGJlc3QgbWF0Y2hpbmcgdmFsdWUKK2Zyb20gJ3BhdCcgZm9yIGVsZW1lbnRzIGFwcGVhcmluZyBpbiBib3RoLiAgVGhlIHJlc3VsdCBpcyBwYXNzZWQgdG8KK0ZjQ29uZmlnU3Vic3RpdHV0ZSB3aXRoICdraW5kJyBGY01hdGNoRm9udCBhbmQgdGhlbiByZXR1cm5lZC4KIAogLlRQCiBGY0ZvbnRTZXQgKkZjRm9udExpc3QgKEZjQ29uZmlnICpjb25maWcsIEZjUGF0dGVybiAqcCwgRmNPYmplY3RTZXQgKm9zKQpAQCAtNzYxLDE4ICs5MjIsODAgQEAKIFRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHNvbWUgY29udHJvbCBvdmVyIGhvdyB0aGUgbGlicmFyeSBpcyBpbml0aWFsaXplZC4KIAogLlRQCi1GY0Jvb2wgRmNJbml0Q29uZmlnICh2b2lkKQotSW5pdGlhbGl6ZXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUKK0ZjQ29uZmlnICpGY0luaXRMb2FkQ29uZmlnICh2b2lkKQorTG9hZHMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgY29uZmlndXJhdGlvbi4KK0RvZXMgbm90IGxvYWQgYW55IGZvbnQgaW5mb3JtYXRpb24uCiAKIC5UUAotRmNCb29sIEZjSW5pdEZvbnRzICh2b2lkKQotSW5pdGlhbGl6ZXMgdGhlIHNldCBvZiBmb250cyBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgorRmNDb25maWcgKkZjSW5pdExvYWRDb25maWdBbmRGb250cyAodm9pZCkKK0xvYWRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgYnVpbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYXZhaWxhYmxlIGZvbnRzLiAgUmV0dXJucyB0aGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24uCiAKIC5UUAogRmNCb29sIEZjSW5pdCAodm9pZCkKLUNhbGxzIEZjSW5pdENvbmZpZyBhbmQgRmNJbml0Rm9udHMgdG8gY29tcGxldGVseSBpbml0aWFsaXplIHRoZSBkZWZhdWx0CitMb2FkcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRoZSBmb250cyByZWZlcmVuY2VkIHRoZXJlaW4gYW5kCitzZXRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gdGhhdCByZXN1bHQuICBSZXR1cm5zIHdoZXRoZXIgdGhpcworcHJvY2VzcyBzdWNjZWVkZWQgb3Igbm90LiAgSWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBoYXMgYWxyZWFkeQorYmVlbiBsb2FkZWQsIHRoaXMgcm91dGluZSBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgRmNUcnVlLgorCisuVFAKK2ludCBGY0dldFZlcnNpb24gKHZvaWQpCitSZXR1cm5zIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGlicmFyeS4KKworLlRQCitGY0Jvb2wgRmNJbml0UmVpbml0aWFsaXplICh2b2lkKQorRm9yY2VzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBiZSByZWxvYWRlZCBhbmQgcmVzZXRzIHRoZSBkZWZhdWx0CiBjb25maWd1cmF0aW9uLgogCisuVFAKK0ZjQm9vbCBGY0luaXRCcmluZ1VwdG9EYXRlICh2b2lkKQorQ2hlY2tzIHRoZSByZXNjYW4gaW50ZXJ2YWwgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgY2hlY2tpbmcgdGhlCitjb25maWd1cmF0aW9uIGlmIHRoZSBpbnRlcnZhbCBoYXMgcGFzc2VkIGFuZCByZWxvYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaWYKK3doZW4gYW55IGNoYW5nZXMgYXJlIGRldGVjdGVkLgorCisuU1MgRmNBdG9taWMKK1RoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGEgc2FmZSB3YXkgdG8gdXBkYXRlIGNvbmZpZyBmaWxlcywgYWxsb3dpbmcgb25nb2luZworcmVhZGluZyBvZiB0aGUgb2xkIGNvbmZpZyBmaWxlIHdoaWxlIGxvY2tlZCBmb3Igd3JpdGluZyBhbmQgZW5zdXJpbmcgdGhhdCBhCitjb25zaXN0ZW50IGFuZCBjb21wbGV0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgZmlsZSBpcyBhbHdheXMgYXZhaWxhYmxlLgorCisuVFAKK0ZjQXRvbWljICogRmNBdG9taWNDcmVhdGUgKGNvbnN0IEZjQ2hhcjggICAqZmlsZSkKK0NyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIGRhdGEgbmVlZGVkIHRvIGNvbnRyb2wgYWNjZXNzIHRvICdmaWxlJy4KK1dyaXRpbmcgaXMgZG9uZSB0byBhIHNlcGFyYXRlIGZpbGUuICBPbmNlIHRoYXQgZmlsZSBpcyBjb21wbGV0ZSwgdGhlIG9yaWdpbmFsCitjb25maWd1cmF0aW9uIGZpbGUgaXMgYXRvbWljYWxseSByZXBsYWNlZCBzbyB0aGF0IHJlYWRpbmcgcHJvY2VzcyBhbHdheXMgc2VlCithIGNvbnNpc3RlbnQgYW5kIGNvbXBsZXRlIGZpbGUgd2l0aG91dCB0aGUgbmVlZCB0byBsb2NrIGZvciByZWFkaW5nLgorCisuVFAKK0ZjQm9vbCBGY0F0b21pY0xvY2sgKEZjQXRvbWljICphdG9taWMpCitBdHRlbXB0cyB0byBsb2NrIHRoZSBmaWxlIHJlZmVyZW5jZWQgYnkgJ2F0b21pYycuICBSZXR1cm5zIEZjRmFsc2UgaWYgdGhlCitmaWxlIGlzIGxvY2tlZCBieSBhbm90aGVyIHByb2Nlc3MsIGVsc2UgcmV0dXJucyBGY1RydWUgYW5kIGxlYXZlcyB0aGUgZmlsZQorbG9ja2VkLgorCisuVFAKK0ZjQ2hhcjggKkZjQXRvbWljTmV3RmlsZSAoRmNBdG9taWMgKmF0b21pYykKK1JldHVybnMgdGhlIGZpbGVuYW1lIGZvciB3cml0aW5nIGEgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUgcmVmZXJuY2VkIGJ5CisnYXRvbWljJy4KKworLlRQCitGY0NoYXI4ICpGY0F0b21pY09yaWdGaWxlIChGY0F0b21pYyAqYXRvbWljKQorUmV0dXJucyB0aGUgZmlsZSByZWZlcm5jZWQgYnkgJ2F0b21pYycuCisKKy5UUAorRmNCb29sIEZjQXRvbWljUmVwbGFjZU9yaWcgKEZjQXRvbWljICphdG9taWMpCitSZXBsYWNlcyB0aGUgb3JpZ2luYWwgZmlsZSByZWZlcmVuY2VkIGJ5ICdhdG9taWMnIHdpdGggdGhlIG5ldyBmaWxlLgorCisuVFAKK3ZvaWQgRmNBdG9taWNEZWxldGVOZXcgKEZjQXRvbWljICphdG9taWMpCitEZWxldGVzIHRoZSBuZXcgZmlsZS4KKworLlRQCit2b2lkIEZjQXRvbWljVW5sb2NrIChGY0F0b21pYyAqYXRvbWljKQorVW5sb2NrcyB0aGUgZmlsZS4KKworLlRQCit2b2lkIEZjQXRvbWljRGVzdHJveSAoRmNBdG9taWMgKmF0b21pYykKK0Rlc3Ryb3lzICdhdG9taWMnLgorCiAuU1MgRnJlZVR5cGUgc3BlY2lmaWMgZnVuY3Rpb25zCiAubmYKIC5CICNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KQEAgLTgxNCwyOCArMTAzNyw3OCBAQAogaW5jbHVkZSBmaWxlcyByZWZlcmVuY2VkIGZyb20gJ2ZpbGUnIHdpbGwgbm90IGJlIGxvYWRlZC4KIAogLlRQCi1GY0Jvb2wgRmNDb25maWdQYXJzZSAoRmNDb25maWcgKmNvbmZpZywgeG1sRG9jUHRyIGRvYykKLVdhbGtzIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGFuZCBjb25zdHJ1Y3RzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpbgotJ2NvbmZpZycuICBBbnkgaW5jbHVkZSBmaWxlcyByZWZlcmVuY2VkIGZyb20gd2l0aGluICdkb2MnIHdpbGwgYmUgbG9hZGVkCi13aXRoIEZjQ29uZmlnTG9hZCBhbmQgYWxzbyBwYXJzZWQuCitGY0Jvb2wgRmNDb25maWdQYXJzZUFuZExvYWQgKEZjQ29uZmlnICpjb25maWcsIGNvbnN0IEZjQ2hhcjggKmZpbGUsIEZjQm9vbCBjb21wbGFpbikKK1dhbGtzIHRoZSBjb25maWd1cmF0aW9uIGluICdmaWxlJyBhbmQgY29uc3RydWN0cyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaW4KKydjb25maWcnLiAgQW55IGluY2x1ZGUgZmlsZXMgcmVmZXJlbmNlZCBmcm9tIHdpdGhpbiAnZmlsZScgd2lsbCBiZSBsb2FkZWQKK3dpdGggRmNDb25maWdMb2FkIGFuZCBhbHNvIHBhcnNlZC4gIElmICdjb21wbGFpbicgaXMgRmNGYWxzZSwgbm8gd2FybmluZword2lsbCBiZSBkaXNwbGF5ZWQgaWYgJ2ZpbGUnIGRvZXMgbm90IGV4aXN0LgogCiAuU1MgRmlsZSBhbmQgRGlyZWN0b3J5IHJvdXRpbmVzCiAKIC5UUAotRmNCb29sIEZjRmlsZVNjYW4gKEZjRm9udFNldCAqc2V0LCBGY0ZpbGVDYWNoZSAqY2FjaGUsIEZjQmxhbmtzICpibGFua3MsIGNvbnN0IGNoYXIgKmZpbGUsIEZjQm9vbCBmb3JjZSkKK0ZjQm9vbCBGY0ZpbGVTY2FuIChGY0ZvbnRTZXQgKnNldCwgRmNTdHJTZXQgKmRpcnMsIEZjRmlsZUNhY2hlICpjYWNoZSwgRmNCbGFua3MgKmJsYW5rcywgY29uc3QgY2hhciAqZmlsZSwgRmNCb29sIGZvcmNlKQogU2NhbnMgYSBzaW5nbGUgZmlsZSBhbmQgYWRkcyBhbGwgZm9udHMgZm91bmQgdG8gJ3NldCcuICBJZiAnZm9yY2UnIGlzIEZjVHJ1ZSwKIHRoZW4gdGhlIGZpbGUgaXMgc2Nhbm5lZCBldmVuIGlmIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gaXMgZm91bmQgaW4gJ2NhY2hlJy4KK0lmICdmaWxlJyBpcyBhIGRpcmVjdG9yeSwgaXQgaXMgYWRkZWQgdG8gJ2RpcnMnLgogCiAuVFAKLUZjQm9vbCBGY0RpclNjYW4gKEZjRm9udFNldCAqc2V0LCBGY0ZpbGVDYWNoZSAqY2FjaGUsIEZjQmxhbmtzICpibGFua3MsIGNvbnN0IGNoYXIgKmRpciwgRmNCb29sIGZvcmNlKQorRmNCb29sIEZjRGlyU2NhbiAoRmNGb250U2V0ICpzZXQsIEZjU3RyU2V0ICpkaXJzLCBGY0ZpbGVDYWNoZSAqY2FjaGUsIEZjQmxhbmtzICpibGFua3MsIGNvbnN0IGNoYXIgKmRpciwgRmNCb29sIGZvcmNlKQogU2NhbnMgYW4gZW50aXJlIGRpcmVjdG9yeSBhbmQgYWRkcyBhbGwgZm9udHMgZm91bmQgdG8gJ3NldCcuICBJZiAnZm9yY2UnIGlzCiBGY1RydWUsIHRoZW4gdGhlIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIHdpdGhpbiBpdCBhcmUgc2Nhbm5lZCBldmVuIGlmCi1pbmZvcm1hdGlvbiBpcyBwcmVzZW50IGluIHRoZSBwZXItZGlyZWN0b3J5IGNhY2hlIGZpbGUgb3IgJ2NhY2hlJy4KK2luZm9ybWF0aW9uIGlzIHByZXNlbnQgaW4gdGhlIHBlci1kaXJlY3RvcnkgY2FjaGUgZmlsZSBvciAnY2FjaGUnLiAgQW55CitzdWJkaXJlY3RvcmllcyBmb3VuZCBhcmUgYWRkZWQgdG8gJ2RpcnMnLgogCiAuVFAKLUZjQm9vbCBGY0RpclNhdmUgKEZjRm9udFNldCAqc2V0LCBjb25zdCBjaGFyICpkaXIpCitGY0Jvb2wgRmNEaXJTYXZlIChGY0ZvbnRTZXQgKnNldCwgRmNTdHJTZXQgKmRpcnMsIGNvbnN0IGNoYXIgKmRpcikKIENyZWF0ZXMgdGhlIHBlci1kaXJlY3RvcnkgY2FjaGUgZmlsZSBmb3IgJ2RpcicgYW5kIHBvcHVsYXRlcyBpdCB3aXRoIHRoZQotZm9udHMgaW4gJ3NldCcuCitmb250cyBpbiAnc2V0JyBhbmQgc3ViZGlyZWN0b3JpZXMgaW4gJ2RpcnMnLgorCisuVFAKK0ZjQm9vbCBGY0RpckNhY2hlVmFsaWQgKGNvbnN0IEZjQ2hhcjggKmNhY2hlX2ZpbGUpCitSZXR1cm5zIEZjVHJ1ZSBpZiAnY2FjaGVfZmlsZScgaXMgbm8gb2xkZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaXQsCitlbHNlIEZjRmFsc2UuCisKKy5TUyBGY1N0clNldCBhbmQgRmNTdHJMaXN0CitBIGRhdGEgc3RydWN0dXJlIGZvciBlbnVtZXJhdGluZyBzdHJpbmdzLCB1c2VkIHRvIGxpc3QgZGlyZWN0b3JpZXMgd2hpbGUKK3NjYW5uaW5nIHRoZSBjb25maWd1cmF0aW9uIGFzIGRpcmVjdG9yaWVzIGFyZSBhZGRlZCB3aGlsZSBzY2FubmluZy4KKworLlRQCitGY1N0clNldCAqRmNTdHJTZXRDcmVhdGUgKHZvaWQpCitDcmVhdGUgYW4gZW1wdHkgc2V0LgorCisuVFAKK0ZjQm9vbCBGY1N0clNldE1lbWJlciAoRmNTdHJTZXQgKnNldCwgY29uc3QgRmNDaGFyOCAqcykKK1JldHVybnMgd2hldGhlciAncycgaXMgYSBtZW1iZXIgb2YgJ3NldCcuCisKKy5UUAorRmNCb29sIEZjU3RyU2V0QWRkIChGY1N0clNldCAqc2V0LCBjb25zdCBGY0NoYXI4ICpzKQorQWRkcyBhIGNvcHkgb2YgJ3MnIHRvICdzZXQnLgorCisuVFAKK0ZjQm9vbCBGY1N0clNldEFkZEZpbGVuYW1lIChGY1N0clNldCAqc2V0LCBjb25zdCBGY0NoYXI4ICpzKQorQWRkcyBhIGNvcHkgJ3MnIHRvICdzZXQnLCBUaGUgY29weSBpcyBjcmVhdGVkIHdpdGggRmNTdHJDb3B5RmlsZW5hbWUKK3NvIHRoYXQgbGVhZGluZyAnficgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgSE9NRQorZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKy5UUAorRmNCb29sIEZjU3RyU2V0RGVsIChGY1N0clNldCAqc2V0LCBjb25zdCBGY0NoYXI4ICpzKQorUmVtb3ZlcyAncycgZnJvbSAnc2V0JywgcmV0dXJuaW5nIEZjVHJ1ZSBpZiAncycgd2FzIGEgbWVtYmVyIGVsc2UgRmNGYWxzZS4KKworLlRQCit2b2lkIEZjU3RyU2V0RGVzdHJveSAoRmNTdHJTZXQgKnNldCkKK0Rlc3Ryb3lzICdzZXQnLgorCisuVFAKK0ZjU3RyTGlzdCAqRmNTdHJMaXN0Q3JlYXRlIChGY1N0clNldCAqc2V0KQorQ3JlYXRlcyBhbiBlbnVtZXJhdG9yIHRvIGxpc3QgdGhlIHN0cmluZ3MgaW4gJ3NldCcuCisKKy5UUAorRmNDaGFyOCAqRmNTdHJMaXN0TmV4dCAoRmNTdHJMaXN0ICpsaXN0KQorUmV0dXJucyB0aGUgbmV4dCBzdHJpbmcgaW4gJ3NldCcuCisKKy5UUAordm9pZCBGY1N0ckxpc3REb25lIChGY1N0ckxpc3QgKmxpc3QpCitEZXN0cm95cyB0aGUgZW51bWVyYXRvciAnbGlzdCcuCiAKIC5TUyBTdHJpbmcgdXRpbGl0aWVzCiAKQEAgLTg3MSwxNiArMTE0NCwyOSBAQAogaW5kaWNhdGVzIHdoZXRoZXIgJ3N0cmluZycgaXMgYSB3ZWxsLWZvcm1lZCBVVEYxNiBzdHJpbmcuCiAKIC5UUAotY2hhciAqRmNTdHJDb3B5IChjb25zdCBjaGFyICpzKQorRmNDaGFyOCAqRmNTdHJDb3B5IChjb25zdCBGY0NoYXI4ICpzKQogQWxsb2NhdGVzIG1lbW9yeSwgY29waWVzICdzJyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIGJ1ZmZlci4gIFllcywgdGhpcyBpcwogJ3N0cmR1cCcsIGJ1dCB0aGF0IGZ1bmN0aW9uIGlzbid0IGF2YWlsYWJsZSBvbiBldmVyeSBwbGF0Zm9ybS4KIAogLlRQCitGY0NoYXI4ICpGY1N0ckNvcHlGaWxlbmFtZSAoY29uc3QgRmNDaGFyOCAqcykKK0p1c3QgbGlrZSBGY1N0ckNvcHkgZXhjZXB0IHRoYXQgaXQgY29udmVydHMgYW55IGxlYWRpbmcgJ34nIGNoYXJhY3RlcnMgaW4KKydzJyB0byB0aGUgdmFsdWUgb2YgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgCisuVFAKIGludCBGY1N0ckNtcElnbm9yZUNhc2UgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKIFJldHVybnMgdGhlIHVzdWFsIDwwLCAwLCA+MCByZXN1bHQgb2YgY29tcGFyaW5nICdzMScgYW5kICdzMicuICBUaGlzIHRlc3QKIGlzIGNhc2UtaW5zZW5zaXRpdmUgaW4gdGhlIEFTQ0lJIHJhbmdlIGFuZCB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBVVEY4CiBlbmNvZGVkIHN0cmluZ3MsIGFsdGhvdWdoIGl0IGRvZXMgbm90IGNoZWNrIGZvciB3ZWxsIGZvcm1lZCBzdHJpbmdzLgogCisuVFAKK0ZjQ2hhcjggKkZjU3RyRGlybmFtZSAoY29uc3QgRmNDaGFyOCAqZmlsZSkKK1JldHVybnMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nICdmaWxlJy4KKworLlRQCitGY0NoYXI4ICpGY1N0ckJhc2VuYW1lIChjb25zdCBGY0NoYXI4ICpmaWxlKQorUmV0dXJucyB0aGUgZmlsZW5hbWUgb2YgJ2ZpbGUnIHN0cmlwcGVkIG9mIGFueSBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lcy4KKwogLlNIIENPTkZJR1VSQVRJT04gRklMRSBGT1JNQVQKIENvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGZvbnRjb25maWcgYXJlIHN0b3JlZCBpbiBYTUwgZm9ybWF0OyB0aGlzCiBmb3JtYXQgbWFrZXMgZXh0ZXJuYWwgY29uZmlndXJhdGlvbiB0b29scyBlYXNpZXIgdG8gd3JpdGUgYW5kIGVuc3VyZXMgdGhhdAo=