ZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2NzX2N6Lmlzb184ODU5LTIudmltIGIvcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMi52aW0KaW5kZXggOGQ2NGQ5NS4uM2FlZmFjNiAxMDA2NDQKLS0tIGEvcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMi52aW0KKysrIGIvcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMi52aW0KQEAgLTg4LDYgKzg4LDIzIEBACiBtZW51dHJhbnMgSnVtcFwgJmJhY2s8VGFiPl5UCQlTa2/oaXRcICZ6cOx0PFRhYj5eVAogbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJJlZ5dHZv+Gl0XCBzb3Vib3JcIHRhZ/kKIAorbWVudXRyYW5zICZTcGVsbGluZwkJCSZLb250cm9sYVwgcHJhdm9waXN1CittZW51dHJhbnMgJlNwZWxsXCBDaGVja1wgT24JCUtvbnRyb2xhXCBwcmF2b3Bpc3VcICZ6YXBudXRhCittZW51dHJhbnMgU3BlbGxcIENoZWNrXCAmT2ZmCQlLb250cm9sYVwgcHJhdm9waXN1XCAmdnlwbnV0YQorbWVudXRyYW5zIFRvXCBOZXh0XCBlcnJvcjxUYWI+XXMJJkRhbLntXCBjaHliYTxUYWI+XXMKK21lbnV0cmFucyBUb1wgUHJldmlvdXNcIGVycm9yPFRhYj5bcwkmUPhlZGNob3rtXCBjaHliYTxUYWI+W3MKK21lbnV0cmFucyBTdWdnZXN0XCBDb3JyZWN0aW9uczxUYWI+ej8JJk7hdnJoXCBvcHJhdjxUYWI+ej8KK21lbnV0cmFucyBSZXBlYXRcIGNvcnJlY3Rpb248VGFiPjpzcGVsbHJlcGFsbAlab3Bha292YXRcICZvcHJhdnU8VGFiPjpzcGVsbHJlcGFsbAorbWVudXRyYW5zIFNldFwgbGFuZ3VhZ2VcIHRvXCAiZW4iCU5hc3RhdlwgamF6eWtcIG5hXCAiZW4iCittZW51dHJhbnMgU2V0XCBsYW5ndWFnZVwgdG9cICJlbl9hdSIJTmFzdGF2XCBqYXp5a1wgbmFcICJlbl9hdSIKK21lbnV0cmFucyBTZXRcIGxhbmd1YWdlXCB0b1wgImVuX2NhIglOYXN0YXZcIGphenlrXCBuYVwgImVuX2NhIgorbWVudXRyYW5zIFNldFwgbGFuZ3VhZ2VcIHRvXCAiZW5fZ2IiCU5hc3RhdlwgamF6eWtcIG5hXCAiZW5fZ2IiCittZW51dHJhbnMgU2V0XCBsYW5ndWFnZVwgdG9cICJlbl9ueiIJTmFzdGF2XCBqYXp5a1wgbmFcICJlbl9ueiIKK21lbnV0cmFucyBTZXRcIGxhbmd1YWdlXCB0b1wgImVuX3VzIglOYXN0YXZcIGphenlrXCBuYVwgImVuX3VzIgorbWVudXRyYW5zIFNldFwgbGFuZ3VhZ2VcIHRvXCAiY3oiCU5hc3RhdlwgamF6eWtcIG5hXCAiY3oiCittZW51dHJhbnMgU2V0XCBsYW5ndWFnZVwgdG9cICJjc19jeiIJTmFzdGF2XCBqYXp5a1wgbmFcICJjc19jeiIKK21lbnV0cmFucyAmRmluZFwgTW9yZVwgTGFuZ3VhZ2VzCU5hbOl6dFwgZGFsue1cICZqYXp5a3kKKwogbWVudXRyYW5zICZGb2xkaW5nCQkJJkZvbGR5CiBtZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkgJkFuby9OZTxUYWI+emkKIG1lbnV0cmFucyAmVmlld1wgQ3Vyc29yXCBMaW5lPFRhYj56dgkmWm9icmF6aXRcIPjhZGVrXCBrdXJ6b3J1PFRhYj56dgpAQCAtMTE5LDYgKzEzNiw3IEBACiBtZW51dHJhbnMgJk9sZGVyXCBMaXN0PFRhYj46Y29sZAlTdGEmcrntXCBzZXpuYW08VGFiPjpjb2xkCiBtZW51dHJhbnMgTiZld2VyXCBMaXN0PFRhYj46Y25ldwlOJm927Gq57Vwgc2V6bmFtPFRhYj46Y25ldwogbWVudXRyYW5zIEVycm9yXCAmV2luZG93CQlDaHlib3bpXCBvJmtubworbWVudXRyYW5zIFNlVFwgQ29tcGlsZXIJCQlOYXMmdGF2ZW7tXCBrb21waWzhdG9ydQogbWVudXRyYW5zICZVcGRhdGU8VGFiPjpjd2luCQlPJmJub3ZpdDxUYWI+OmN3aW4KIG1lbnV0cmFucyAmT3BlbjxUYWI+OmNvcGVuCQkmT3RldvjtdDxUYWI+OmNvcGVuCiBtZW51dHJhbnMgJkNsb3NlPFRhYj46Y2Nsb3NlCQkmWmF2+O10PFRhYj46Y2Nsb3NlCmRpZmYgLS1naXQgYS9zcmMvZmlsZWlvLmMgYi9zcmMvZmlsZWlvLmMKaW5kZXggNWIwODNmOS4uMmY5M2Y1MyAxMDA2NDQKLS0tIGEvc3JjL2ZpbGVpby5jCisrKyBiL3NyYy9maWxlaW8uYwpAQCAtNzYxLDcgKzc2MSwxMyBAQAogI2lmZGVmIEZFQVRfTUJZVEUKICAgICAvKiAiKytiYWQ9IiBhcmd1bWVudC4gKi8KICAgICBpZiAoZWFwICE9IE5VTEwgJiYgZWFwLT5iYWRfY2hhciAhPSAwKQorICAgIHsKIAliYWRfY2hhcl9iZWhhdmlvciA9IGVhcC0+YmFkX2NoYXI7CisJaWYgKG5ld2ZpbGUpCisJICAgIGN1cmJ1Zi0+Yl9iYWRfY2hhciA9IGVhcC0+YmFkX2NoYXI7CisgICAgfQorICAgIGVsc2UKKwljdXJidWYtPmJfYmFkX2NoYXIgPSAwOwogCiAgICAgLyoKICAgICAgKiBEZWNpZGUgd2hpY2ggJ2VuY29kaW5nJyB0byB1c2Ugb3IgdXNlIGZpcnN0LgpAQCAtMjQyOSw4ICsyNDM1LDggQEAKICNlbmRpZgogCiAvKgotICogRmlsbCAiKmVhcCIgdG8gZm9yY2UgdGhlICdmaWxlZW5jb2RpbmcnIGFuZCAnZmlsZWZvcm1hdCcgdG8gYmUgZXF1YWwgdG8gdGhlCi0gKiBidWZmZXIgImJ1ZiIuICBVc2VkIGZvciBjYWxsaW5nIHJlYWRmaWxlKCkuCisgKiBGaWxsICIqZWFwIiB0byBmb3JjZSB0aGUgJ2ZpbGVlbmNvZGluZycsICdmaWxlZm9ybWF0JyBhbmQgJ2JpbmFyeSB0byBiZQorICogZXF1YWwgdG8gdGhlIGJ1ZmZlciAiYnVmIi4gIFVzZWQgZm9yIGNhbGxpbmcgcmVhZGZpbGUoKS4KICAqIFJldHVybnMgT0sgb3IgRkFJTC4KICAqLwogICAgIGludApAQCAtMjQ0OSwxMCArMjQ1NSwxNCBAQAogI2lmZGVmIEZFQVRfTUJZVEUKICAgICBzcHJpbnRmKChjaGFyICopZWFwLT5jbWQsICJlICsrZmY9JXMgKytlbmM9JXMiLCBidWYtPmJfcF9mZiwgYnVmLT5iX3BfZmVuYyk7CiAgICAgZWFwLT5mb3JjZV9lbmMgPSAxNCArIChpbnQpU1RSTEVOKGJ1Zi0+Yl9wX2ZmKTsKKyAgICBlYXAtPmJhZF9jaGFyID0gYnVmLT5iX2JhZF9jaGFyOwogI2Vsc2UKICAgICBzcHJpbnRmKChjaGFyICopZWFwLT5jbWQsICJlICsrZmY9JXMiLCBidWYtPmJfcF9mZik7CiAjZW5kaWYKICAgICBlYXAtPmZvcmNlX2ZmID0gNzsKKworICAgIGVhcC0+Zm9yY2VfYmluID0gYnVmLT5iX3BfYmluID8gRk9SQ0VfQklOIDogRk9SQ0VfTk9CSU47CisgICAgZWFwLT5mb3JjZWl0ID0gRkFMU0U7CiAgICAgcmV0dXJuIE9LOwogfQogCkBAIC04ODE3LDQyICs4ODI3LDgzIEBACiAjZW5kaWYJLyogRkVBVF9DTURMX0NPTVBMICovCiAKIC8qCi0gKiBSZXR1cm4gVFJVRSBpZiBhbiBhdXRvY29tbWFuZCBpcyBkZWZpbmVkIGZvciAiZXZlbnQiIGFuZCAicGF0dGVybiIuCi0gKiAicGF0dGVybiIgY2FuIGJlIE5VTEwgdG8gYWNjZXB0IGFueSBwYXR0ZXJuLiBCdWZmZXItbG9jYWwgcGF0dGVybnMKLSAqIDxidWZmZXI+IG9yIDxidWZmZXI9Tj4gYXJlIGFjY2VwdGVkLgotICogVXNlZCBmb3IgZXhpc3RzKCIjRXZlbnQjcGF0IikKKyAqIFJldHVybiBUUlVFIGlmIGFuIGF1dG9jb21tYW5kIGlzIGRlZmluZWQgZm9yIGEgZ3JvdXAsIGV2ZW50IGFuZAorICogcGF0dGVybjogIFRoZSBncm91cCBjYW4gYmUgb21pdHRlZCB0byBhY2NlcHQgYW55IGdyb3VwLiAiZXZlbnQiIGFuZCAicGF0dGVybiIKKyAqIGNhbiBiZSBOVUxMIHRvIGFjY2VwdCBhbnkgZXZlbnQgYW5kIHBhdHRlcm4uICJwYXR0ZXJuIiBjYW4gYmUgTlVMTCB0byBhY2NlcHQKKyAqIGFueSBwYXR0ZXJuLiBCdWZmZXItbG9jYWwgcGF0dGVybnMgPGJ1ZmZlcj4gb3IgPGJ1ZmZlcj1OPiBhcmUgYWNjZXB0ZWQuCisgKiBVc2VkIGZvcjoKKyAqCWV4aXN0cygiI0dyb3VwIikgb3IKKyAqCWV4aXN0cygiI0dyb3VwI0V2ZW50Iikgb3IKKyAqCWV4aXN0cygiI0dyb3VwI0V2ZW50I3BhdCIpIG9yCisgKglleGlzdHMoIiNFdmVudCIpIG9yCisgKglleGlzdHMoIiNFdmVudCNwYXQiKQogICovCiAgICAgaW50Ci1hdV9leGlzdHMobmFtZSwgbmFtZV9lbmQsIHBhdHRlcm4pCi0gICAgY2hhcl91CSpuYW1lOwotICAgIGNoYXJfdQkqbmFtZV9lbmQ7Ci0gICAgY2hhcl91CSpwYXR0ZXJuOworYXVfZXhpc3RzKGFyZykKKyAgICBjaGFyX3UJKmFyZzsKIHsKKyAgICBjaGFyX3UJKmFyZ19zYXZlOworICAgIGNoYXJfdQkqcGF0dGVybiA9IE5VTEw7CiAgICAgY2hhcl91CSpldmVudF9uYW1lOwogICAgIGNoYXJfdQkqcDsKICAgICBFVkVOVF9UCWV2ZW50OwogICAgIEF1dG9QYXQJKmFwOwogICAgIGJ1Zl9UCSpidWZsb2NhbF9idWYgPSBOVUxMOworICAgIGludAkJZ3JvdXA7CisgICAgaW50CQlyZXR2YWwgPSBGQUxTRTsKKworICAgIC8qIE1ha2UgYSBjb3B5IHNvIHRoYXQgd2UgY2FuIGNoYW5nZSB0aGUgJyMnIHRvIGEgTlVMLiAqLworICAgIGFyZ19zYXZlID0gdmltX3N0cnNhdmUoYXJnKTsKKyAgICBpZiAoYXJnX3NhdmUgPT0gTlVMTCkKKwlyZXR1cm4gRkFMU0U7CisgICAgcCA9IHZpbV9zdHJjaHIoYXJnLCAnIycpOworICAgIGlmIChwICE9IE5VTEwpCisJKnArKyA9IE5VTDsKKworICAgIC8qIEZpcnN0LCBsb29rIGZvciBhbiBhdXRvY21kIGdyb3VwIG5hbWUgKi8KKyAgICBncm91cCA9IGF1X2ZpbmRfZ3JvdXAoYXJnX3NhdmUpOworICAgIGlmIChncm91cCA9PSBBVUdST1VQX0VSUk9SKQorICAgIHsKKwkvKiBEaWRuJ3QgbWF0Y2ggYSBncm91cCBuYW1lLCBhc3N1bWUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGV2ZW50LiAqLworCWdyb3VwID0gQVVHUk9VUF9BTEw7CisJZXZlbnRfbmFtZSA9IGFyZ19zYXZlOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWlmIChwID09IE5VTEwpCisJeworCSAgICAvKiAiR3JvdXAiOiBncm91cCBuYW1lIGlzIHByZXNlbnQgYW5kIGl0J3MgcmVjb2duaXplZCAqLworCSAgICByZXR2YWwgPSBUUlVFOworCSAgICBnb3RvIHRoZWVuZDsKKwl9CisKKwkvKiBNdXN0IGJlICJHcm91cCNFdmVudCIgb3IgIkdyb3VwI0V2ZW50I3BhdCIuICovCisJZXZlbnRfbmFtZSA9IHA7CisJcCA9IHZpbV9zdHJjaHIoZXZlbnRfbmFtZSwgJyMnKTsKKwlpZiAocCAhPSBOVUxMKQorCSAgICAqcCsrID0gTlVMOwkgICAgLyogIkdyb3VwI0V2ZW50I3BhdCIgKi8KKyAgICB9CisKKyAgICBwYXR0ZXJuID0gcDsJICAgIC8qICJwYXR0ZXJuIiBpcyBOVUxMIHdoZW4gdGhlcmUgaXMgbm8gcGF0dGVybiAqLwogCiAgICAgLyogZmluZCB0aGUgaW5kZXggKGVudW0pIGZvciB0aGUgZXZlbnQgbmFtZSAqLwotICAgIGV2ZW50X25hbWUgPSB2aW1fc3RybnNhdmUobmFtZSwgKGludCkobmFtZV9lbmQgLSBuYW1lKSk7Ci0gICAgaWYgKGV2ZW50X25hbWUgPT0gTlVMTCkKLQlyZXR1cm4gRkFMU0U7CiAgICAgZXZlbnQgPSBldmVudF9uYW1lMm5yKGV2ZW50X25hbWUsICZwKTsKLSAgICB2aW1fZnJlZShldmVudF9uYW1lKTsKIAogICAgIC8qIHJldHVybiBGQUxTRSBpZiB0aGUgZXZlbnQgbmFtZSBpcyBub3QgcmVjb2duaXplZCAqLwotICAgIGlmIChldmVudCA9PSBOVU1fRVZFTlRTKQkgICAgLyogdW5rbm93biBldmVudCBuYW1lICovCi0JcmV0dXJuIEZBTFNFOworICAgIGlmIChldmVudCA9PSBOVU1fRVZFTlRTKQorCWdvdG8gdGhlZW5kOwogCiAgICAgLyogRmluZCB0aGUgZmlyc3QgYXV0b2NvbW1hbmQgZm9yIHRoaXMgZXZlbnQuCiAgICAgICogSWYgdGhlcmUgaXNuJ3QgYW55LCByZXR1cm4gRkFMU0U7CiAgICAgICogSWYgdGhlcmUgaXMgb25lIGFuZCBubyBwYXR0ZXJuIGdpdmVuLCByZXR1cm4gVFJVRTsgKi8KICAgICBhcCA9IGZpcnN0X2F1dG9wYXRbKGludClldmVudF07CiAgICAgaWYgKGFwID09IE5VTEwpCi0JcmV0dXJuIEZBTFNFOworCWdvdG8gdGhlZW5kOwogICAgIGlmIChwYXR0ZXJuID09IE5VTEwpCi0JcmV0dXJuIFRSVUU7CisgICAgeworCXJldHZhbCA9IFRSVUU7CisJZ290byB0aGVlbmQ7CisgICAgfQogCiAgICAgLyogaWYgcGF0dGVybiBpcyAiPGJ1ZmZlcj4iLCBzcGVjaWFsIGhhbmRsaW5nIGlzIG5lZWRlZCB3aGljaCB1c2VzIGN1cmJ1ZiAqLwogICAgIC8qIGZvciBwYXR0ZXJuICI8YnVmZmVyPU4+LCBmbmFtZWNtcCgpIHdpbGwgd29yayBmaW5lICovCkBAIC04ODY0LDEyICs4OTE1LDE4IEBACiAJLyogb25seSB1c2UgYSBwYXR0ZXJuIHdoZW4gaXQgaGFzIG5vdCBiZWVuIHJlbW92ZWQgYW5kIGhhcyBjb21tYW5kcy4gKi8KIAkvKiBGb3IgYnVmZmVyLWxvY2FsIGF1dG9jb21tYW5kcywgZm5hbWVjbXAoKSB3b3JrcyBmaW5lLiAqLwogCWlmIChhcC0+cGF0ICE9IE5VTEwgJiYgYXAtPmNtZHMgIT0gTlVMTAorCSAgICAmJiAoZ3JvdXAgPT0gQVVHUk9VUF9BTEwgfHwgYXAtPmdyb3VwID09IGdyb3VwKQogCSAgICAmJiAoYnVmbG9jYWxfYnVmID09IE5VTEwKIAkJID8gZm5hbWVjbXAoYXAtPnBhdCwgcGF0dGVybikgPT0gMAogCQkgOiBhcC0+YnVmbG9jYWxfbnIgPT0gYnVmbG9jYWxfYnVmLT5iX2ZudW0pKQotCSAgICByZXR1cm4gVFJVRTsKKwl7CisJICAgIHJldHZhbCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KIAotICAgIHJldHVybiBGQUxTRTsKK3RoZWVuZDoKKyAgICB2aW1fZnJlZShhcmdfc2F2ZSk7CisgICAgcmV0dXJuIHJldHZhbDsKIH0KIAogI2VuZGlmCS8qIEZFQVRfQVVUT0NNRCAqLwo=