ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggMDIxYzdmYS4uNTM2NGY2MCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgRmViIDAzCisqZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDYgRmViIDEwCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zMjEwLDYgKzMyMTAsOCBAQAogCQkgICAgJAkgICAgdGhlIGxhc3QgbGluZSBpbiB0aGUgY3VycmVudCBidWZmZXIKIAkJICAgICd4CSAgICBwb3NpdGlvbiBvZiBtYXJrIHggKGlmIHRoZSBtYXJrIGlzIG5vdCBzZXQsIDAgaXMKIAkJCSAgICByZXR1cm5lZCkKKwkJICAgIHcwCSAgICBmaXJzdCBsaW5lIHZpc2libGUgaW4gY3VycmVudCB3aW5kb3cKKwkJICAgIHckCSAgICBsYXN0IGxpbmUgdmlzaWJsZSBpbiBjdXJyZW50IHdpbmRvdwogCQlOb3RlIHRoYXQgb25seSBtYXJrcyBpbiB0aGUgY3VycmVudCBmaWxlIGNhbiBiZSB1c2VkLgogCQlFeGFtcGxlczogPgogCQkJbGluZSgiLiIpCQlsaW5lIG51bWJlciBvZiB0aGUgY3Vyc29yCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9oZWxwLnR4dCBiL3J1bnRpbWUvZG9jL2hlbHAudHh0CmluZGV4IGMyZDRhZmUuLjk5OWE1MDcgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2hlbHAudHh0CisrKyBiL3J1bnRpbWUvZG9jL2hlbHAudHh0CkBAIC0xOTEsMTMgKzE5MSw2IEBACiB8cGlfZXhwbC50eHR8CUZpbGUgZXhwbG9yZXIKIAogTE9DQUwgQURESVRJT05TOgkJCQkqbG9jYWwtYWRkaXRpb25zKgotfGNlY3V0aWwudHh0fAlEckNoaXAncyBVdGlsaXRpZXMJCQkJSnVuIDExLCAyMDA0Ci18ZW5nc3BjaGsudHh0fAlFbmdsaXNoIFNwZWxsaW5nIENoZWNrZXIgICAodjYxKQlNYXIgMTQsIDIwMDUKLXxleGFtcGxlLnR4dHwJRXhhbXBsZSBmb3IgYSBsb2NhbGx5IGFkZGVkIGhlbHAgZmlsZQotfG1hdGNoaXQudHh0fCAgIEV4dGVuZGVkICIlIiBtYXRjaGluZwotfHRlc3QudHh0fAlUZXN0aW5nIHRoZSBo6WxwIGP2bW3lbmQgbvR3Ci18dHlwZWNvcnIudHh0fAlQbHVnaW4gZm9yIGNvcnJlY3RpbmcgdHlwaW5nIG1pc3Rha2VzCi18aGVscHAudHh0fAlEdW1teSBsaW5lIHRvIGF2b2lkIGFuIGVycm9yIG1lc3NhZ2UKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqYmFycyoJCUJhcnMgZXhhbXBsZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfY3Njb3AudHh0IGIvcnVudGltZS9kb2MvaWZfY3Njb3AudHh0CmluZGV4IDMyYmM4NGYuLjE4M2NhMzAgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2lmX2NzY29wLnR4dAorKysgYi9ydW50aW1lL2RvYy9pZl9jc2NvcC50eHQKQEAgLTIwOCw2ICsyMDgsMTEgQEAKIAogCSAgICBVU0FHRSAgIDpjcyBzaG93CiAKKwkJCQkJCQkqOmxjc2NvcGUqICo6bGNzKgorVGhpcyBjb21tYW5kIGlzIHNhbWUgYXMgdGhlICI6Y3Njb3BlIiBjb21tYW5kLCBleGNlcHQgd2hlbiB0aGUKKydjc2NvcGVxdWlja2ZpeCcgb3B0aW9uIGlzIHNldCwgdGhlIGxvY2F0aW9uIGxpc3QgZm9yIHRoZSBjdXJyZW50IHdpbmRvdyBpcwordXNlZCBpbnN0ZWFkIG9mIHRoZSBxdWlja2ZpeCBsaXN0IHRvIHNob3cgdGhlIGNzY29wZSByZXN1bHRzLgorCiAJCQkJCQkJKjpjc3RhZyogKkUyNTcqICpFNTYyKgogSWYgeW91IHVzZSBjc2NvcGUgYXMgd2VsbCBhcyBjdGFncywgfDpjc3RhZ3wgYWxsb3dzIHlvdSB0byBzZWFyY2ggb25lIG9yCiB0aGUgb3RoZXIgYmVmb3JlIG1ha2luZyBhIGp1bXAuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjaG9vc2UgdG8gZmlyc3QKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2luc2VydC50eHQgYi9ydW50aW1lL2RvYy9pbnNlcnQudHh0CmluZGV4IGQxZTAxMDQuLjc0YzJjNTggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL2luc2VydC50eHQKKysrIGIvcnVudGltZS9kb2MvaW5zZXJ0LnR4dApAQCAtMSw0ICsxLDQgQEAKLSppbnNlcnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBGZWIgMDcKKyppbnNlcnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBGZWIgMTAKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTEwNzIsMTYgKzEwNzIsMjQgQEAKIC0gVGhlcmUgYXJlIGF0IGxlYXN0IHR3byBtYXRjaGVzLgogCiBXaGlsZSB0aGUgbWVudSBpcyBkaXNwbGF5ZWQgdGhlc2Uga2V5cyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nOgotPENSPiBhbmQgPEVudGVyPiBBY2NlcHQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXRjaAotPFVwPgkJICBTZWxlY3QgdGhlIHByZXZpb3VzIG1hdGNoLCBhcyBpZiBDVFJMLVAgd2FzIHVzZWQKLTxEb3duPgkJICBTZWxlY3QgdGhlIG5leHQgbWF0Y2gsIGFzIGlmIENUUkwtTiB3YXMgdXNlZAorPENSPiBhbmQgPEVudGVyPiAgQWNjZXB0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbWF0Y2gKKwogPFBhZ2VVcD4JICBTZWxlY3QgYSBtYXRjaCBzZXZlcmFsIGVudHJpZXMgYmFjawogPFBhZ2VEb3duPgkgIFNlbGVjdCBhIG1hdGNoIHNldmVyYWwgZW50cmllcyBmdXJ0aGVyCisKIDxCUz4gYW5kIENUUkwtSCAgIERlbGV0ZSBvbmUgY2hhcmFjdGVyLCBmaW5kIHRoZSBtYXRjaGVzIGZvciB0aGUgc2hvcnRlciB3b3JkCiAJCSAgYmVmb3JlIHRoZSBjdXJzb3IuICBUaGlzIG1heSBmaW5kIG1vcmUgbWF0Y2hlcy4KIENUUkwtTAkJICBBZGQgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBjdXJyZW50IG1hdGNoLCBtYXkgcmVkdWNlIHRoZQogCQkgIG51bWJlciBvZiBtYXRjaGVzLiAgRG9lcyBub3Qgd29yayBhZnRlciBzZWxlY3Rpbmcgb25lIG9mIHRoZQogCQkgIG1hdGNoZXMgd2l0aCBDVFJMLU4sIDxVcD4sIGV0Yy4KKzxVcD4JCSAgU2VsZWN0IHRoZSBwcmV2aW91cyBtYXRjaCwgYXMgaWYgQ1RSTC1QIHdhcyB1c2VkLCBidXQgZG9uJ3QKKwkJICBpbnNlcnQgaXQgd2hlbiBlZGl0aW5nIHRoZSBzZWxlY3Rpb24uCis8RG93bj4JCSAgU2VsZWN0IHRoZSBuZXh0IG1hdGNoLCBhcyBpZiBDVFJMLU4gd2FzIHVzZWQsIGJ1dCBkb24ndAorCQkgIGluc2VydCBpdCB3aGVuIGVkaXRpbmcgdGhlIHNlbGVjdGlvbi4KKworVGhlIHNlbGVjdGlvbiBpcyBiZWluZyBlZGl0ZWQgYWZ0ZXIgdHlwaW5nIDxCUz4sIENUUkwtTCBvciB3aGVuIHVzaW5nIHRoZQorbG9uZ2VzdCBjb21tb24gbWF0Y2guICBUaGlzIHN0b3BzIHdoZW4gYSBtYXRjaCBpcyBpbnNlcnRlZCwgYXMgd2l0aCBDVFJMLU4gb3IKK0NUUkwtUC4KIAogVGhlIGNvbG9ycyBvZiB0aGUgbWVudSBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZXNlIGhpZ2hsaWdodCBncm91cHM6CiBQbWVudQkJbm9ybWFsIGl0ZW0gIHxobC1QbWVudXwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0IGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKaW5kZXggMjU5Mjg1MC4uNGNmMGQzMyAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKysrIGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKQEAgLTEsNCArMSw0IEBACi0qb3B0aW9ucy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IEZlYiAwMgorKm9wdGlvbnMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNiBGZWIgMTAKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMTYyMSwxMyArMTYyMSwxNiBAQAogJ2NvbXBsZXRlb3B0JyAnY290JwlzdHJpbmcJKGRlZmF1bHQ6ICJtZW51IikKIAkJCWdsb2JhbAogCQkJe25vdCBpbiBWaX0KLQlPcHRpb25zIGZvciBJbnNlcnQgbW9kZSBjb21wbGV0aW9uIHxpbnMtY29tcGxldGlvbnwuCi0JQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZSBpczoKKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG9wdGlvbnMgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb24KKwl8aW5zLWNvbXBsZXRpb258LiAgVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogCiAJICAgbWVudQkgICAgVXNlIGEgcG9wdXAgbWVudSB0byBzaG93IHRoZSBwb3NzaWJsZSBjb21wbGV0aW9ucy4gIFRoZQogCQkgICAgbWVudSBpcyBvbmx5IHNob3duIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtYXRjaCBhbmQKIAkJICAgIHN1ZmZpY2llbnQgY29sb3JzIGFyZSBhdmFpbGFibGUuICB8aW5zLWNvbXBsZXRpb24tbWVudXwKIAorCSAgIGxvbmdlc3QgIE9ubHkgaW5zZXJ0IHRoZSBsb25nZXN0IGNvbW1vbiB0ZXh0IG9mIHRoZSBtYXRjaGVzLiAgVXNlCisJICAgICAgICAgICAgQ1RSTC1MIHRvIGFkZCBtb3JlIGNoYXJhY3RlcnMuCisKIAogCQkJCSonY29uZmlybScqIConY2YnKiAqJ25vY29uZmlybScqIConbm9jZicqCiAnY29uZmlybScgJ2NmJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90YWdzIGIvcnVudGltZS9kb2MvdGFncwppbmRleCA1NGNkOWRkLi5kMmFiMjBiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90YWdzCisrKyBiL3J1bnRpbWUvZG9jL3RhZ3MKQEAgLTIxMjQsNiArMjEyNCw4IEBACiA6bGNoZGlyCWVkaXRpbmcudHh0CS8qOmxjaGRpcioKIDpsY2wJcXVpY2tmaXgudHh0CS8qOmxjbCoKIDpsY2xvc2UJcXVpY2tmaXgudHh0CS8qOmxjbG9zZSoKKzpsY3MJaWZfY3Njb3AudHh0CS8qOmxjcyoKKzpsY3Njb3BlCWlmX2NzY29wLnR4dAkvKjpsY3Njb3BlKgogOmxlCWNoYW5nZS50eHQJLyo6bGUqCiA6bGVmdAljaGFuZ2UudHh0CS8qOmxlZnQqCiA6bGVmdGEJd2luZG93cy50eHQJLyo6bGVmdGEqCkBAIC0zMTE0LDcgKzMxMTYsMTAgQEAKIENzY29wZQlpZl9jc2NvcC50eHQJLypDc2NvcGUqCiBDdXJzb3JIb2xkCWF1dG9jbWQudHh0CS8qQ3Vyc29ySG9sZCoKIEN1cnNvckhvbGQtZXhhbXBsZQl3aW5kb3dzLnR4dAkvKkN1cnNvckhvbGQtZXhhbXBsZSoKK0N1cnNvckhvbGRJCWF1dG9jbWQudHh0CS8qQ3Vyc29ySG9sZEkqCiBDdXJzb3JJTQltYnl0ZS50eHQJLypDdXJzb3JJTSoKK0N1cnNvck1vdmVkCWF1dG9jbWQudHh0CS8qQ3Vyc29yTW92ZWQqCitDdXJzb3JNb3ZlZEkJYXV0b2NtZC50eHQJLypDdXJzb3JNb3ZlZEkqCiBECWNoYW5nZS50eHQJLypEKgogRE9TCW9zX2Rvcy50eHQJLypET1MqCiBET1MtZm9ybWF0CWVkaXRpbmcudHh0CS8qRE9TLWZvcm1hdCoKQEAgLTU0MjIsNiArNTQyNyw3IEBACiBoZWJyZXcudHh0CWhlYnJldy50eHQJLypoZWJyZXcudHh0KgogaGVscAl2YXJpb3VzLnR4dAkvKmhlbHAqCiBoZWxwLWNvbnRleHQJaGVscC50eHQJLypoZWxwLWNvbnRleHQqCitoZWxwLXRhZ3MJdGFncwkxCiBoZWxwLXRyYW5zbGF0ZWQJdmFyaW91cy50eHQJLypoZWxwLXRyYW5zbGF0ZWQqCiBoZWxwLXh0ZXJtLXdpbmRvdwl2YXJpb3VzLnR4dAkvKmhlbHAteHRlcm0td2luZG93KgogaGVscC50eHQJaGVscC50eHQJLypoZWxwLnR4dCoKQEAgLTU4NTAsNiArNTg1NiwxNCBAQAogbWFwbGUudmltCXN5bnRheC50eHQJLyptYXBsZS52aW0qCiBtYXBsZWFkZXIJbWFwLnR4dAkvKm1hcGxlYWRlcioKIG1hcGxvY2FsbGVhZGVyCW1hcC50eHQJLyptYXBsb2NhbGxlYWRlcioKK21hcG1vZGUtYwltYXAudHh0CS8qbWFwbW9kZS1jKgorbWFwbW9kZS1pCW1hcC50eHQJLyptYXBtb2RlLWkqCittYXBtb2RlLWljCW1hcC50eHQJLyptYXBtb2RlLWljKgorbWFwbW9kZS1sCW1hcC50eHQJLyptYXBtb2RlLWwqCittYXBtb2RlLW4JbWFwLnR4dAkvKm1hcG1vZGUtbioKK21hcG1vZGUtbnZvCW1hcC50eHQJLyptYXBtb2RlLW52byoKK21hcG1vZGUtbwltYXAudHh0CS8qbWFwbW9kZS1vKgorbWFwbW9kZS12CW1hcC50eHQJLyptYXBtb2RlLXYqCiBtYXBwaW5nCW1hcC50eHQJLyptYXBwaW5nKgogbWFyawltb3Rpb24udHh0CS8qbWFyayoKIG1hcmstbW90aW9ucwltb3Rpb24udHh0CS8qbWFyay1tb3Rpb25zKgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG8vY29uZmlndXJlIGIvc3JjL2F1dG8vY29uZmlndXJlCmluZGV4IDhjNDJlNjYuLjc5NGZkOGYgMTAwNzU1Ci0tLSBhL3NyYy9hdXRvL2NvbmZpZ3VyZQorKysgYi9zcmMvYXV0by9jb25maWd1cmUKQEAgLTEwMDksNyArMTAwOSw3IEBACiBfQUNFT0YKICAgZXhpdCAwCiBmaQotZXhlYyA1PmNvbmZpZy5sb2cKK2V4ZWMgNT5hdXRvL2NvbmZpZy5sb2cKIGNhdCA+JjUgPDxfQUNFT0YKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgpAQCAtMTU0NTUsNyArMTU0NTUsNyBAQAogIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCi1leGVjIDU+PmNvbmZpZy5sb2cKK2V4ZWMgNT4+YXV0by9jb25maWcubG9nCiB7CiAgIGVjaG8KICAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKQEAgLTE2Mjg1LDcgKzE2Mjg1LDcgQEAKICAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKICAgZXhlYyA1Pi9kZXYvbnVsbAogICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCi0gIGV4ZWMgNT4+Y29uZmlnLmxvZworICBleGVjIDU+PmF1dG8vY29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KICAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CmRpZmYgLS1naXQgYS9zcmMvZWRpdC5jIGIvc3JjL2VkaXQuYwppbmRleCBiN2U0MTYwLi4xOGExY2YxIDEwMDY0NAotLS0gYS9zcmMvZWRpdC5jCisrKyBiL3NyYy9lZGl0LmMKQEAgLTk1LDYgKzk1LDkgQEAKICAqIGFyZSB1c2VkLiAqLwogc3RhdGljIGNoYXJfdQkgICpjb21wbF9sZWFkZXIgPSBOVUxMOwogCitzdGF0aWMgaW50CSAgY29tcGxfZ2V0X2xvbmdlc3QgPSBGQUxTRTsJLyogcHV0IGxvbmdlc3QgY29tbW9uIHN0cmluZworCQkJCQkJICAgaW4gY29tcGxfbGVhZGVyICovCisKIHN0YXRpYyBpbnQJICBjb21wbF91c2VkX21hdGNoOwkvKiBTZWxlY3RlZCBvbmUgb2YgdGhlIG1hdGNoZXMuICBXaGVuCiAJCQkJCSAgIEZBTFNFIHRoZSBtYXRjaCB3YXMgZWRpdGVkIG9yIHVzaW5nCiAJCQkJCSAgIHRoZSBsb25nZXN0IGNvbW1vbiBzdHJpbmcuICovCkBAIC0xMTksNiArMTIyLDcgQEAKIAogc3RhdGljIHZvaWQgaW5zX2N0cmxfeCBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyBpbnQgIGhhc19jb21wbF9vcHRpb24gX19BUkdTKChpbnQgZGljdF9vcHQpKTsKK3N0YXRpYyB2b2lkIGluc19jb21wbF9sb25nZXN0X21hdGNoIF9fQVJHUygoY29tcGxfVCAqbWF0Y2gpKTsKIHN0YXRpYyB2b2lkIGluc19jb21wbF9hZGRfbWF0Y2hlcyBfX0FSR1MoKGludCBudW1fbWF0Y2hlcywgY2hhcl91ICoqbWF0Y2hlcykpOwogc3RhdGljIGludCAgaW5zX2NvbXBsX21ha2VfY3ljbGljIF9fQVJHUygodm9pZCkpOwogc3RhdGljIHZvaWQgaW5zX2NvbXBsX3VwZF9wdW0gX19BUkdTKCh2b2lkKSk7CkBAIC0xMzYsNyArMTQwLDcgQEAKIHN0YXRpYyBpbnQgIGluc19jb21wbF9nZXRfZXhwIF9fQVJHUygocG9zX1QgKmluaSkpOwogc3RhdGljIHZvaWQgaW5zX2NvbXBsX2RlbGV0ZSBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyB2b2lkIGluc19jb21wbF9pbnNlcnQgX19BUkdTKCh2b2lkKSk7Ci1zdGF0aWMgaW50ICBpbnNfY29tcGxfbmV4dCBfX0FSR1MoKGludCBhbGxvd19nZXRfZXhwYW5zaW9uLCBpbnQgY291bnQpKTsKK3N0YXRpYyBpbnQgIGluc19jb21wbF9uZXh0IF9fQVJHUygoaW50IGFsbG93X2dldF9leHBhbnNpb24sIGludCBjb3VudCwgaW50IGluc2VydF9tYXRjaCkpOwogc3RhdGljIGludCAgaW5zX2NvbXBsX2tleTJkaXIgX19BUkdTKChpbnQgYykpOwogc3RhdGljIGludCAgaW5zX2NvbXBsX3B1bV9rZXkgX19BUkdTKChpbnQgYykpOwogc3RhdGljIGludCAgaW5zX2NvbXBsX2tleTJjb3VudCBfX0FSR1MoKGludCBjKSk7CkBAIC02ODMsMTIgKzY4Nyw2IEBACiAjZW5kaWYKIAogI2lmZGVmIEZFQVRfSU5TX0VYUEFORAotCS8qIFdoZW4gdGhlIHBvcHVwIG1lbnUgaXMgdmlzaWJsZSBjdXJzb3Iga2V5cyBjaGFuZ2UgdGhlIHNlbGVjdGlvbi4gKi8KLQlpZiAoYyA9PSBLX1VQICYmIHB1bV92aXNpYmxlKCkpCi0JICAgIGMgPSBDdHJsX1A7Ci0JaWYgKGMgPT0gS19ET1dOICYmIHB1bV92aXNpYmxlKCkpCi0JICAgIGMgPSBDdHJsX047Ci0KIAkvKgogCSAqIFNwZWNpYWwgaGFuZGxpbmcgb2Yga2V5cyB3aGlsZSB0aGUgcG9wdXAgbWVudSBpcyB2aXNpYmxlIG9yIHdhbnRlZAogCSAqIGFuZCB0aGUgY3Vyc29yIGlzIHN0aWxsIGluIHRoZSBjb21wbGV0ZWQgd29yZC4KQEAgLTcxNywxMSArNzE1LDE5IEBACiAJCSAgICBpbnNfY29tcGxfYWRkbGVhZGVyKGMpOwogCQkgICAgY29udGludWU7CiAJCX0KKworCQkvKiBQcmVzc2luZyBFbnRlciBzZWxlY3RzIHRoZSBjdXJyZW50IG1hdGNoLiAqLworCQlpZiAoYyA9PSBDQVIgfHwgYyA9PSBLX0tFTlRFUiB8fCBjID09IE5MKQorCQl7CisJCSAgICBpbnNfY29tcGxfZGVsZXRlKCk7CisJCSAgICBpbnNfY29tcGxfaW5zZXJ0KCk7CisJCX0KIAkgICAgfQogCX0KIAogCS8qIFByZXBhcmUgZm9yIG9yIHN0b3AgQ1RSTC1YIG1vZGUuICBUaGlzIGRvZXNuJ3QgZG8gY29tcGxldGlvbiwgYnV0CiAJICogaXQgZG9lcyBmaXggdXAgdGhlIHRleHQgd2hlbiBmaW5pc2hpbmcgY29tcGxldGlvbi4gKi8KKwljb21wbF9nZXRfbG9uZ2VzdCA9IEZBTFNFOwogCWlmIChjICE9IEtfSUdOT1JFICYmIGluc19jb21wbF9wcmVwKGMpKQogCSAgICBjb250aW51ZTsKICNlbmRpZgpAQCAtMTEwMyw2ICsxMTA5LDEwIEBACiAJICAgIGJyZWFrOwogCiAJY2FzZSBLX1VQOgkvKiA8VXA+ICovCisjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECisJICAgIGlmIChwdW1fdmlzaWJsZSgpKQorCQlnb3RvIGRvY29tcGxldGU7CisjZW5kaWYKIAkgICAgaWYgKG1vZF9tYXNrICYgTU9EX01BU0tfU0hJRlQpCiAJCWluc19wYWdldXAoKTsKIAkgICAgZWxzZQpAQCAtMTEyMCw2ICsxMTMwLDEwIEBACiAJICAgIGJyZWFrOwogCiAJY2FzZSBLX0RPV046CS8qIDxEb3duPiAqLworI2lmZGVmIEZFQVRfSU5TX0VYUEFORAorCSAgICBpZiAocHVtX3Zpc2libGUoKSkKKwkJZ290byBkb2NvbXBsZXRlOworI2VuZGlmCiAJICAgIGlmIChtb2RfbWFzayAmIE1PRF9NQVNLX1NISUZUKQogCQlpbnNfcGFnZWRvd24oKTsKIAkgICAgZWxzZQpAQCAtMTg2MCw3ICsxODc0LDcgQEAKIAkvKiBpZiB0aGUgbmV4dCBeWDw+IHdvbid0IEFERCBub3RoaW5nLCB0aGVuIHJlc2V0CiAJICogY29tcGxfY29udF9zdGF0dXMgKi8KIAlpZiAoY29tcGxfY29udF9zdGF0dXMgJiBDT05UX05fQUREUykKLQkgICAgY29tcGxfY29udF9zdGF0dXMgPSAoY29tcGxfY29udF9zdGF0dXMgfCBDT05UX0lOVFJQVCk7CisJICAgIGNvbXBsX2NvbnRfc3RhdHVzIHw9IENPTlRfSU5UUlBUOwogCWVsc2UKIAkgICAgY29tcGxfY29udF9zdGF0dXMgPSAwOwogCS8qIFdlJ3JlIG5vdCBzdXJlIHdoaWNoIENUUkwtWCBtb2RlIGl0IHdpbGwgYmUgeWV0ICovCkBAIC0yMTM4LDEwICsyMTUyLDcwIEBACiAJY29tcGxfZmlyc3RfbWF0Y2ggPSBtYXRjaDsKICAgICBjb21wbF9jdXJyX21hdGNoID0gbWF0Y2g7CiAKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHN0cmluZyBpZiBzdGlsbCBkb2luZyB0aGF0LgorICAgICAqLworICAgIGlmIChjb21wbF9nZXRfbG9uZ2VzdCAmJiAoZmxhZ3MgJiBPUklHSU5BTF9URVhUKSA9PSAwKQorCWluc19jb21wbF9sb25nZXN0X21hdGNoKG1hdGNoKTsKKwogICAgIHJldHVybiBPSzsKIH0KIAogLyoKKyAqIFJlZHVjZSB0aGUgbG9uZ2VzdCBjb21tb24gc3RyaW5nIGZvciBtYXRjaCAibWF0Y2giLgorICovCisgICAgc3RhdGljIHZvaWQKK2luc19jb21wbF9sb25nZXN0X21hdGNoKG1hdGNoKQorICAgIGNvbXBsX1QJKm1hdGNoOworeworICAgIGNoYXJfdQkqcCwgKnM7CisgICAgaW50CQlsOworICAgIGludAkJaGFkX21hdGNoOworCisgICAgaWYgKGNvbXBsX2xlYWRlciA9PSBOVUxMKQorCS8qIEZpcnN0IG1hdGNoLCB1c2UgaXQgYXMgYSB3aG9sZS4gKi8KKwljb21wbF9sZWFkZXIgPSB2aW1fc3Ryc2F2ZShtYXRjaC0+Y3Bfc3RyKTsKKyAgICBlbHNlCisgICAgeworCS8qIFJlZHVjZSB0aGUgdGV4dCBpZiB0aGlzIG1hdGNoIGRpZmZlcnMgZnJvbSBjb21wbF9sZWFkZXIuICovCisJZm9yIChwID0gY29tcGxfbGVhZGVyLCBzID0gbWF0Y2gtPmNwX3N0cjsgKnAgIT0gTlVMOyBwICs9IGwsIHMgKz0gbCkKKwl7CisjaWZkZWYgRkVBVF9NQllURQorCSAgICBpZiAoaGFzX21ieXRlKQorCSAgICB7CisJCWwgPSBtYl9wdHIybGVuKHApOworCQlpZiAoU1RSTkNNUChwLCBzLCBsKSAhPSAwKQorCQkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkJaWYgKCpwICE9ICpzKQorCQkgICAgYnJlYWs7CisJCWwgPSAxOworCSAgICB9CisJfQorCisJaWYgKCpwICE9IE5VTCkKKwl7CisJICAgIC8qIExlYWRlciB3YXMgc2hvcnRlbmVkLCBuZWVkIHRvIGNoYW5nZSB0aGUgaW5zZXJ0ZWQgdGV4dC4gKi8KKwkgICAgKnAgPSBOVUw7CisJICAgIGhhZF9tYXRjaCA9IChjdXJ3aW4tPndfY3Vyc29yLmNvbCA+IGNvbXBsX2NvbCk7CisJICAgIGluc19jb21wbF9kZWxldGUoKTsKKwkgICAgaW5zX2J5dGVzKGNvbXBsX2xlYWRlciArIGN1cndpbi0+d19jdXJzb3IuY29sIC0gY29tcGxfY29sKTsKKwkgICAgaW5zX3JlZHJhdyhGQUxTRSk7CisKKwkgICAgLyogV2hlbiB0aGUgbWF0Y2ggaXNuJ3QgdGhlcmUgKHRvIGF2b2lkIG1hdGNoaW5nIGl0c2VsZikgcmVtb3ZlIGl0CisJICAgICAqIGFnYWluIGFmdGVyIHJlZHJhd2luZy4gKi8KKwkgICAgaWYgKCFoYWRfbWF0Y2gpCisJCWluc19jb21wbF9kZWxldGUoKTsKKwl9CisKKwljb21wbF91c2VkX21hdGNoID0gRkFMU0U7CisgICAgfQorfQorCisvKgogICogQWRkIGFuIGFycmF5IG9mIG1hdGNoZXMgdG8gdGhlIGxpc3Qgb2YgbWF0Y2hlcy4KICAqIEZyZWVzIG1hdGNoZXNbXS4KICAqLwpAQCAtMjIzMSw3ICsyMzA1LDcgQEAKIHB1bV93YW50ZWQoKQogewogICAgIC8qICdjb21wbGV0ZW9wdCcgbXVzdCBjb250YWluICJtZW51IiAqLwotICAgIGlmICgqcF9jb3QgPT0gTlVMKQorICAgIGlmICh2aW1fc3RyY2hyKHBfY290LCAnbScpID09IE5VTEwpCiAJcmV0dXJuIEZBTFNFOwogCiAgICAgLyogVGhlIGRpc3BsYXkgbG9va3MgYmFkIG9uIGEgQiZXIGRpc3BsYXkuICovCkBAIC0yNzYyLDYgKzI4MzYsMTQgQEAKICAgICBpZiAoYyA9PSBLX1NFTEVDVCkKIAlyZXR1cm4gcmV0dmFsOwogCisgICAgLyogU2V0ICJjb21wbF9nZXRfbG9uZ2VzdCIgd2hlbiBmaW5kaW5nIHRoZSBmaXJzdCBtYXRjaGVzLiAqLworICAgIGlmIChjdHJsX3hfbW9kZSA9PSBDVFJMX1hfTk9UX0RFRklORURfWUVUCisJCQkJICAgICAgfHwgKGN0cmxfeF9tb2RlID09IDAgJiYgIWNvbXBsX3N0YXJ0ZWQpKQorICAgIHsKKwljb21wbF9nZXRfbG9uZ2VzdCA9ICh2aW1fc3RyY2hyKHBfY290LCAnbCcpICE9IE5VTEwpOworCWNvbXBsX3VzZWRfbWF0Y2ggPSBUUlVFOworICAgIH0KKwogICAgIGlmIChjdHJsX3hfbW9kZSA9PSBDVFJMX1hfTk9UX0RFRklORURfWUVUKQogICAgIHsKIAkvKgpAQCAtMzM1Niw3ICszNDM4LDcgQEAKIAkJICAgIGxhc3RfbWF0Y2hfcG9zID0gKnBvczsKIAkJfQogCQllbHNlIGlmIChmaXJzdF9tYXRjaF9wb3MubG51bSA9PSBsYXN0X21hdGNoX3Bvcy5sbnVtCi0JCQkgJiYgZmlyc3RfbWF0Y2hfcG9zLmNvbCA9PSBsYXN0X21hdGNoX3Bvcy5jb2wpCisJCQkJICYmIGZpcnN0X21hdGNoX3Bvcy5jb2wgPT0gbGFzdF9tYXRjaF9wb3MuY29sKQogCQkgICAgZm91bmRfbmV3X21hdGNoID0gRkFJTDsKIAkJaWYgKGZvdW5kX25ld19tYXRjaCA9PSBGQUlMKQogCQl7CkBAIC0zNDcwLDkgKzM1NTIsMTAgQEAKIAl7CiAJICAgIGlmIChnb3RfaW50KQogCQlicmVhazsKKwkgICAgLyogRmlsbCB0aGUgcG9wdXAgbWVudSBhcyBzb29uIGFzIHBvc3NpYmxlLiAqLwogCSAgICBpZiAocHVtX3dhbnRlZCgpICYmIHR5cGUgIT0gLTEpCi0JCS8qIEZpbGwgdGhlIHBvcHVwIG1lbnUgYXMgc29vbiBhcyBwb3NzaWJsZS4gKi8KIAkJaW5zX2NvbXBsX2NoZWNrX2tleXMoMCk7CisKIAkgICAgaWYgKChjdHJsX3hfbW9kZSAhPSAwICYmIGN0cmxfeF9tb2RlICE9IENUUkxfWF9XSE9MRV9MSU5FKQogCQkJCQkJCSB8fCBjb21wbF9pbnRlcnJ1cHRlZCkKIAkJYnJlYWs7CkBAIC0zNTQ3LDEwICszNjMwLDExIEBACiAgKiBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggImFsbG93X2dldF9leHBhbnNpb24iIEZBTFNFLgogICovCiAgICAgc3RhdGljIGludAotaW5zX2NvbXBsX25leHQoYWxsb3dfZ2V0X2V4cGFuc2lvbiwgY291bnQpCitpbnNfY29tcGxfbmV4dChhbGxvd19nZXRfZXhwYW5zaW9uLCBjb3VudCwgaW5zZXJ0X21hdGNoKQogICAgIGludAkgICAgYWxsb3dfZ2V0X2V4cGFuc2lvbjsKICAgICBpbnQJICAgIGNvdW50OwkJLyogcmVwZWF0IGNvbXBsZXRpb24gdGhpcyBtYW55IHRpbWVzOyBzaG91bGQKIAkJCQkgICBiZSBhdCBsZWFzdCAxICovCisgICAgaW50CSAgICBpbnNlcnRfbWF0Y2g7CS8qIEluc2VydCB0aGUgbmV3bHkgc2VsZWN0ZWQgbWF0Y2ggKi8KIHsKICAgICBpbnQJICAgIG51bV9tYXRjaGVzID0gLTE7CiAgICAgaW50CSAgICBpOwpAQCAtMzU1OCwxMSArMzY0MiwyMyBAQAogICAgIGNvbXBsX1QgKmZvdW5kX2NvbXBsID0gTlVMTDsKICAgICBpbnQJICAgIGZvdW5kX2VuZCA9IEZBTFNFOwogCi0gICAgaWYgKGFsbG93X2dldF9leHBhbnNpb24pCisgICAgaWYgKGNvbXBsX2xlYWRlciAhPSBOVUxMCisJCQkmJiAoY29tcGxfc2hvd25fbWF0Y2gtPmNwX2ZsYWdzICYgT1JJR0lOQUxfVEVYVCkgPT0gMCkKICAgICB7CisJLyogU2V0ICJjb21wbF9zaG93bl9tYXRjaCIgdG8gdGhlIGFjdHVhbGx5IHNob3duIG1hdGNoLCBpdCBtYXkgZGlmZmVyCisJICogd2hlbiAiY29tcGxfbGVhZGVyIiBpcyB1c2VkIHRvIG9taXQgc29tZSBvZiB0aGUgbWF0Y2hlcy4gKi8KKwl3aGlsZSAoU1RSTkNNUChjb21wbF9zaG93bl9tYXRjaC0+Y3Bfc3RyLAorCQkJCSAgICAgY29tcGxfbGVhZGVyLCBTVFJMRU4oY29tcGxfbGVhZGVyKSkgIT0gMAorCQkmJiBjb21wbF9zaG93bl9tYXRjaC0+Y3BfbmV4dCAhPSBOVUxMCisJCSYmIGNvbXBsX3Nob3duX21hdGNoLT5jcF9uZXh0ICE9IGNvbXBsX2ZpcnN0X21hdGNoKQorCSAgICBjb21wbF9zaG93bl9tYXRjaCA9IGNvbXBsX3Nob3duX21hdGNoLT5jcF9uZXh0OworICAgIH0KKworICAgIGlmIChhbGxvd19nZXRfZXhwYW5zaW9uICYmIGluc2VydF9tYXRjaAorCQkJCSAgJiYgKCFjb21wbF9nZXRfbG9uZ2VzdCB8fCBjb21wbF91c2VkX21hdGNoKSkKIAkvKiBEZWxldGUgb2xkIHRleHQgdG8gYmUgcmVwbGFjZWQgKi8KIAlpbnNfY29tcGxfZGVsZXRlKCk7Ci0gICAgfQorCiAgICAgY29tcGxfcGVuZGluZyA9IEZBTFNFOwogCiAgICAgLyogUmVwZWF0IHRoaXMgZm9yIHdoZW4gPFBhZ2VVcD4gb3IgPFBhZ2VEb3duPiBpcyB0eXBlZC4gIEJ1dCBkb24ndCB3cmFwCkBAIC0zNjE1LDE0ICszNzExLDI1IEBACiAJfQogICAgIH0KIAotICAgIC8qIEluc2VydCB0aGUgdGV4dCBvZiB0aGUgbmV3IGNvbXBsZXRpb24gKi8KLSAgICBpbnNfY29tcGxfaW5zZXJ0KCk7CisgICAgLyogSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBuZXcgY29tcGxldGlvbiwgb3IgdGhlIGNvbXBsX2xlYWRlci4gKi8KKyAgICBpZiAoaW5zZXJ0X21hdGNoKQorICAgIHsKKwlpZiAoIWNvbXBsX2dldF9sb25nZXN0IHx8IGNvbXBsX3VzZWRfbWF0Y2gpCisJICAgIGluc19jb21wbF9pbnNlcnQoKTsKKwllbHNlCisJICAgIGluc19ieXRlcyhjb21wbF9sZWFkZXIgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGNvbXBsX2NvbCk7CisgICAgfQorICAgIGVsc2UKKwljb21wbF91c2VkX21hdGNoID0gRkFMU0U7CiAKICAgICBpZiAoIWFsbG93X2dldF9leHBhbnNpb24pCiAgICAgewogCS8qIG1heSB1bmRpc3BsYXkgdGhlIHBvcHVwIG1lbnUgZmlyc3QgKi8KIAlpbnNfY29tcGxfdXBkX3B1bSgpOwogCisJLyogcmVkcmF3IHRvIHNob3cgdGhlIHVzZXIgd2hhdCB3YXMgaW5zZXJ0ZWQgKi8KKwl1cGRhdGVfc2NyZWVuKDApOworCiAJLyogZGlzcGxheSB0aGUgdXBkYXRlZCBwb3B1cCBtZW51ICovCiAJaW5zX2NvbXBsX3Nob3dfcHVtKCk7CiAKQEAgLTM2ODUsMTMgKzM3OTIsMTQgQEAKIAl7CiAJICAgIGMgPSBzYWZlX3ZnZXRjKCk7CS8qIEVhdCB0aGUgY2hhcmFjdGVyICovCiAJICAgIGNvbXBsX3Nob3dzX2RpciA9IGluc19jb21wbF9rZXkyZGlyKGMpOwotCSAgICAodm9pZClpbnNfY29tcGxfbmV4dChGQUxTRSwgaW5zX2NvbXBsX2tleTJjb3VudChjKSk7CisJICAgICh2b2lkKWluc19jb21wbF9uZXh0KEZBTFNFLCBpbnNfY29tcGxfa2V5MmNvdW50KGMpLAorCQkJCQkJICAgIGMgIT0gS19VUCAmJiBjICE9IEtfRE9XTik7CiAJfQogCWVsc2UgaWYgKGMgIT0gQ3RybF9SKQogCSAgICBjb21wbF9pbnRlcnJ1cHRlZCA9IFRSVUU7CiAgICAgfQogICAgIGlmIChjb21wbF9wZW5kaW5nICYmICFnb3RfaW50KQotCSh2b2lkKWluc19jb21wbF9uZXh0KEZBTFNFLCAxKTsKKwkodm9pZClpbnNfY29tcGxfbmV4dChGQUxTRSwgMSwgVFJVRSk7CiB9CiAKIC8qCkBAIC0zNzAyLDggKzM4MTAsOSBAQAogaW5zX2NvbXBsX2tleTJkaXIoYykKICAgICBpbnQJCWM7CiB7Ci0gICAgaWYgKGMgPT0gQ3RybF9QIHx8IGMgPT0gQ3RybF9MIHx8IChwdW1fdmlzaWJsZSgpCi0JCQkgJiYgKGMgPT0gS19QQUdFVVAgfHwgYyA9PSBLX0tQQUdFVVAgfHwgYyA9PSBLX1NfVVApKSkKKyAgICBpZiAoYyA9PSBDdHJsX1AgfHwgYyA9PSBDdHJsX0wKKwkgICAgfHwgKHB1bV92aXNpYmxlKCkgJiYgKGMgPT0gS19QQUdFVVAgfHwgYyA9PSBLX0tQQUdFVVAKKwkJCQkJCXx8IGMgPT0gS19TX1VQIHx8IGMgPT0gS19VUCkpKQogCXJldHVybiBCQUNLV0FSRDsKICAgICByZXR1cm4gRk9SV0FSRDsKIH0KQEAgLTM3MTcsNyArMzgyNiw4IEBACiAgICAgaW50CQljOwogewogICAgIHJldHVybiBwdW1fdmlzaWJsZSgpICYmIChjID09IEtfUEFHRVVQIHx8IGMgPT0gS19LUEFHRVVQIHx8IGMgPT0gS19TX1VQCi0JCSAgICAgfHwgYyA9PSBLX1BBR0VET1dOIHx8IGMgPT0gS19LUEFHRURPV04gfHwgYyA9PSBLX1NfRE9XTik7CisJCSAgICAgfHwgYyA9PSBLX1BBR0VET1dOIHx8IGMgPT0gS19LUEFHRURPV04gfHwgYyA9PSBLX1NfRE9XTgorCQkgICAgIHx8IGMgPT0gS19VUCB8fCBjID09IEtfRE9XTik7CiB9CiAKIC8qCkBAIC0zNzMwLDcgKzM4NDAsNyBAQAogewogICAgIGludAkJaDsKIAotICAgIGlmIChpbnNfY29tcGxfcHVtX2tleShjKSkKKyAgICBpZiAoaW5zX2NvbXBsX3B1bV9rZXkoYykgJiYgYyAhPSBLX1VQICYmIGMgIT0gS19ET1dOKQogICAgIHsKIAloID0gcHVtX2dldF9oZWlnaHQoKTsKIAlpZiAoaCA+IDMpCkBAIC0zNzgzLDcgKzM4OTMsOCBAQAogCSAqIGJlZW4gc3BsaXQgYmVjYXVzZSBpdCB3YXMgbG9uZ2VyIHRoYW4gJ3R3JykuICBpZiBTT0wgaXMgc2V0IHRoZW4KIAkgKiBza2lwIHRoZSBwcmV2aW91cyBwYXR0ZXJuLCBhIHdvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBoYXMKIAkgKiBiZWVuIGluc2VydGVkLCB3ZSdsbCBsb29rIGZvciB0aGF0ICAtLSBBY2V2ZWRvLiAqLwotCWlmICgoY29tcGxfY29udF9zdGF0dXMgJiBDT05UX0lOVFJQVCkgJiYgY29tcGxfY29udF9tb2RlID09IGN0cmxfeF9tb2RlKQorCWlmICgoY29tcGxfY29udF9zdGF0dXMgJiBDT05UX0lOVFJQVCkgPT0gQ09OVF9JTlRSUFQKKwkJCQkJICAgICYmIGNvbXBsX2NvbnRfbW9kZSA9PSBjdHJsX3hfbW9kZSkKIAl7CiAJICAgIC8qCiAJICAgICAqIGl0IGlzIGEgY29udGludWVkIHNlYXJjaApAQCAtNDEyOSw5ICs0MjQwLDEwIEBACiAgICAgY29tcGxfc2hvd3NfZGlyID0gY29tcGxfZGlyZWN0aW9uOwogCiAgICAgLyoKLSAgICAgKiBGaW5kIG5leHQgbWF0Y2guCisgICAgICogRmluZCBuZXh0IG1hdGNoIChhbmQgZm9sbG93aW5nIG1hdGNoZXMpLgogICAgICAqLwotICAgIG4gPSBpbnNfY29tcGxfbmV4dChUUlVFLCBpbnNfY29tcGxfa2V5MmNvdW50KGMpKTsKKyAgICBuID0gaW5zX2NvbXBsX25leHQoVFJVRSwgaW5zX2NvbXBsX2tleTJjb3VudChjKSwKKwkJCQkJCWMgIT0gS19VUCAmJiBjICE9IEtfRE9XTik7CiAKICAgICAvKiBtYXkgdW5kaXNwbGF5IHRoZSBwb3B1cCBtZW51ICovCiAgICAgaW5zX2NvbXBsX3VwZF9wdW0oKTsKZGlmZiAtLWdpdCBhL3NyYy9pZl9jc2NvcGUuYyBiL3NyYy9pZl9jc2NvcGUuYwppbmRleCA3YTQ0MjUzLi5mOTIxOTY1IDEwMDY0NAotLS0gYS9zcmMvaWZfY3Njb3BlLmMKKysrIGIvc3JjL2lmX2NzY29wZS5jCkBAIC01MCw3ICs1MCw3IEBACiBzdGF0aWMgdm9pZAkgICAgY3NfZmlsbF9yZXN1bHRzIF9fQVJHUygoY2hhciAqLCBpbnQgLCBpbnQgKiwgY2hhciAqKiosCiAJCQljaGFyICoqKiwgaW50ICopKTsKIHN0YXRpYyBpbnQJICAgIGNzX2ZpbmQgX19BUkdTKChleGFyZ19UICplYXApKTsKLXN0YXRpYyBpbnQJICAgIGNzX2ZpbmRfY29tbW9uIF9fQVJHUygoY2hhciAqb3B0LCBjaGFyICpwYXQsIGludCwgaW50ICkpOworc3RhdGljIGludAkgICAgY3NfZmluZF9jb21tb24gX19BUkdTKChjaGFyICpvcHQsIGNoYXIgKnBhdCwgaW50LCBpbnQsIGludCkpOwogc3RhdGljIGludAkgICAgY3NfaGVscCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJICAgIGNzX2luaXQgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgdm9pZAkgICAgY2xlYXJfY3NpbmZvIF9fQVJHUygoaW50IGkpKTsKQEAgLTE4Myw3ICsxODMsOCBAQAogICAgIGNhc2UgMCA6CiAJaWYgKGNzX2NoZWNrX2Zvcl9jb25uZWN0aW9ucygpKQogCXsKLQkgICAgcmV0ID0gY3NfZmluZF9jb21tb24oImciLCAoY2hhciAqKShlYXAtPmFyZyksIGVhcC0+Zm9yY2VpdCwgRkFMU0UpOworCSAgICByZXQgPSBjc19maW5kX2NvbW1vbigiZyIsIChjaGFyICopKGVhcC0+YXJnKSwgZWFwLT5mb3JjZWl0LCBGQUxTRSwKKwkJCQkgRkFMU0UpOwogCSAgICBpZiAocmV0ID09IEZBTFNFKQogCSAgICB7CiAJCWNzX2ZyZWVfdGFncygpOwpAQCAtMjExLDcgKzIxMiw3IEBACiAJCWlmIChjc19jaGVja19mb3JfY29ubmVjdGlvbnMoKSkKIAkJewogCQkgICAgcmV0ID0gY3NfZmluZF9jb21tb24oImciLCAoY2hhciAqKShlYXAtPmFyZyksIGVhcC0+Zm9yY2VpdCwKLQkJCQkJIEZBTFNFKTsKKwkJCQkJIEZBTFNFLCBGQUxTRSk7CiAJCSAgICBpZiAocmV0ID09IEZBTFNFKQogCQkJY3NfZnJlZV90YWdzKCk7CiAJCX0KQEAgLTIxOSw3ICsyMjAsOCBAQAogCX0KIAllbHNlIGlmIChjc19jaGVja19mb3JfY29ubmVjdGlvbnMoKSkKIAl7Ci0JICAgIHJldCA9IGNzX2ZpbmRfY29tbW9uKCJnIiwgKGNoYXIgKikoZWFwLT5hcmcpLCBlYXAtPmZvcmNlaXQsIEZBTFNFKTsKKwkgICAgcmV0ID0gY3NfZmluZF9jb21tb24oImciLCAoY2hhciAqKShlYXAtPmFyZyksIGVhcC0+Zm9yY2VpdCwgRkFMU0UsCisJCQkJIEZBTFNFKTsKIAkgICAgaWYgKHJldCA9PSBGQUxTRSkKIAkJY3NfZnJlZV90YWdzKCk7CiAJfQpAQCAtOTY3LDcgKzk2OSw4IEBACiAJcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIHJldHVybiBjc19maW5kX2NvbW1vbihvcHQsIHBhdCwgZWFwLT5mb3JjZWl0LCBUUlVFKTsKKyAgICByZXR1cm4gY3NfZmluZF9jb21tb24ob3B0LCBwYXQsIGVhcC0+Zm9yY2VpdCwgVFJVRSwKKwkJCSAgZWFwLT5jbWRpZHggPT0gQ01EX2xjc2NvcGUpOwogfSAvKiBjc19maW5kICovCiAKIApAQCAtOTc3LDExICs5ODAsMTIgQEAKICAqIGNvbW1vbiBjb2RlIGZvciBjc2NvcGUgZmluZCwgc2hhcmVkIGJ5IGNzX2ZpbmQoKSBhbmQgZG9fY3N0YWcoKQogICovCiAgICAgc3RhdGljIGludAotY3NfZmluZF9jb21tb24ob3B0LCBwYXQsIGZvcmNlaXQsIHZlcmJvc2UpCitjc19maW5kX2NvbW1vbihvcHQsIHBhdCwgZm9yY2VpdCwgdmVyYm9zZSwgdXNlX2xsKQogICAgIGNoYXIgKm9wdDsKICAgICBjaGFyICpwYXQ7CiAgICAgaW50IGZvcmNlaXQ7CiAgICAgaW50IHZlcmJvc2U7CisgICAgaW50CXVzZV9sbDsKIHsKICAgICBpbnQgaTsKICAgICBjaGFyICpjbWQ7CkBAIC0xMDk5LDEyICsxMTAzLDE2IEBACiAJLyogZmlsbCBlcnJvciBsaXN0ICovCiAJRklMRSAqZjsKIAljaGFyX3UgKnRtcCA9IHZpbV90ZW1wbmFtZSgnYycpOworCXFmX2luZm9fVCAgICpxaSA9IE5VTEw7CisJd2luX1QJICAgICp3cCA9IE5VTEw7CiAKIAlmID0gbWNoX2ZvcGVuKChjaGFyICopdG1wLCAidyIpOwogCWNzX2ZpbGVfcmVzdWx0cyhmLCBudW1tYXRjaGVzKTsKIAlmY2xvc2UoZik7CisJaWYgKHVzZV9sbCkJICAgIC8qIFVzZSBsb2NhdGlvbiBsaXN0ICovCisJICAgIHdwID0gY3Vyd2luOwogCS8qICctJyBzdGFydHMgYSBuZXcgZXJyb3IgbGlzdCAqLwotCWlmIChxZl9pbml0KE5VTEwsIHRtcCwgKGNoYXJfdSAqKSIlZiUqXFx0JWwlKlxcdCVtIiwgKnFmcG9zID09ICctJykgPiAwKQorCWlmIChxZl9pbml0KHdwLCB0bXAsIChjaGFyX3UgKikiJWYlKlxcdCVsJSpcXHQlbSIsICpxZnBvcyA9PSAnLScpID4gMCkKIAl7CiAjIGlmZGVmIEZFQVRfV0lORE9XUwogCSAgICBpZiAocG9zdHBvbmVkX3NwbGl0ICE9IDApCkBAIC0xMTE3LDcgKzExMjUsMTQgQEAKIAkJcG9zdHBvbmVkX3NwbGl0ID0gMDsKIAkgICAgfQogIyBlbmRpZgotCSAgICBxZl9qdW1wKE5VTEwsIDAsIDAsIGZvcmNlaXQpOworCSAgICBpZiAodXNlX2xsKQorCQkvKgorCQkgKiBJbiB0aGUgbG9jYXRpb24gbGlzdCB3aW5kb3csIHVzZSB0aGUgZGlzcGxheWVkIGxvY2F0aW9uCisJCSAqIGxpc3QuIE90aGVyd2lzZSwgdXNlIHRoZSBsb2NhdGlvbiBsaXN0IGZvciB0aGUgd2luZG93LgorCQkgKi8KKwkJcWkgPSAoYnRfcXVpY2tmaXgod3AtPndfYnVmZmVyKSAmJiB3cC0+d19sbGlzdF9yZWYgIT0gTlVMTCkgPworCQkJCSAgICB3cC0+d19sbGlzdF9yZWYgOiB3cC0+d19sbGlzdDsKKwkgICAgcWZfanVtcChxaSwgMCwgMCwgZm9yY2VpdCk7CiAJfQogCW1jaF9yZW1vdmUodG1wKTsKIAl2aW1fZnJlZSh0bXApOwpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5jIGIvc3JjL29wdGlvbi5jCmluZGV4IDA3OWU0NzIuLjYyY2QwZTcgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uYworKysgYi9zcmMvb3B0aW9uLmMKQEAgLTI2MjgsNyArMjYyOCw3IEBACiBzdGF0aWMgY2hhciAqKHBfZmNsX3ZhbHVlc1tdKSA9IHsiYWxsIiwgTlVMTH07CiAjZW5kaWYKICNpZmRlZiBGRUFUX0lOU19FWFBBTkQKLXN0YXRpYyBjaGFyICoocF9jb3RfdmFsdWVzW10pID0geyJtZW51IiwgTlVMTH07CitzdGF0aWMgY2hhciAqKHBfY290X3ZhbHVlc1tdKSA9IHsibWVudSIsICJsb25nZXN0IiwgTlVMTH07CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgc2V0X29wdGlvbl9kZWZhdWx0IF9fQVJHUygoaW50LCBpbnQgb3B0X2ZsYWdzLCBpbnQgY29tcGF0aWJsZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5oIGIvc3JjL29wdGlvbi5oCmluZGV4IGFkYTBjMGIuLmYxNzE0YWUgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uaAorKysgYi9zcmMvb3B0aW9uLmgKQEAgLTMwMiw3ICszMDIsNyBAQAogI2RlZmluZSBMSVNQV09SRF9WQUxVRQkiZGVmdW4sZGVmaW5lLGRlZm1hY3JvLHNldCEsbGFtYmRhLGlmLGNhc2UsbGV0LGZsZXQsbGV0KixsZXRyZWMsZG8sZG8qLGRlZmluZS1zeW50YXgsbGV0LXN5bnRheCxsZXRyZWMtc3ludGF4LGRlc3RydWN0dXJpbmctYmluZCxkZWZwYWNrYWdlLGRlZnBhcmFtZXRlcixkZWZzdHJ1Y3QsZGVmdHlwZSxkZWZ2YXIsZG8tYWxsLXN5bWJvbHMsZG8tZXh0ZXJuYWwtc3ltYm9scyxkby1zeW1ib2xzLGRvbGlzdCxkb3RpbWVzLGVjYXNlLGV0eXBlY2FzZSxldmFsLXdoZW4sbGFiZWxzLG1hY3JvbGV0LG11bHRpcGxlLXZhbHVlLWJpbmQsbXVsdGlwbGUtdmFsdWUtY2FsbCxtdWx0aXBsZS12YWx1ZS1wcm9nMSxtdWx0aXBsZS12YWx1ZS1zZXRxLHByb2cxLHByb2d2LHR5cGVjYXNlLHVubGVzcyx1bndpbmQtcHJvdGVjdCx3aGVuLHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcsd2l0aC1vcGVuLWZpbGUsd2l0aC1vcGVuLXN0cmVhbSx3aXRoLW91dHB1dC10by1zdHJpbmcsd2l0aC1wYWNrYWdlLWl0ZXJhdG9yLGRlZmluZS1jb25kaXRpb24saGFuZGxlci1iaW5kLGhhbmRsZXItY2FzZSxyZXN0YXJ0LWJpbmQscmVzdGFydC1jYXNlLHdpdGgtc2ltcGxlLXJlc3RhcnQsc3RvcmUtdmFsdWUsdXNlLXZhbHVlLG11ZmZsZS13YXJuaW5nLGFib3J0LGNvbnRpbnVlLHdpdGgtc2xvdHMsd2l0aC1zbG90cyosd2l0aC1hY2Nlc3NvcnMsd2l0aC1hY2Nlc3NvcnMqLGRlZmNsYXNzLGRlZm1ldGhvZCxwcmludC11bnJlYWRhYmxlLW9iamVjdCIKIAogLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIGFjdHVhbCB2YXJpYWJhYmxlcyBmb3IgdGhlIG9wdGlvbnMKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGFjdHVhbCB2YXJpYWJsZXMgZm9yIHRoZSBvcHRpb25zCiAgKi8KIAogI2lmZGVmIEZFQVRfUklHSFRMRUZUCmRpZmYgLS1naXQgYS9zcmMvcXVpY2tmaXguYyBiL3NyYy9xdWlja2ZpeC5jCmluZGV4IGJhNmJjZjAuLjcyNDNlMWIgMTAwNjQ0Ci0tLSBhL3NyYy9xdWlja2ZpeC5jCisrKyBiL3NyYy9xdWlja2ZpeC5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIHN0YXRpYyBidWZfVAkqbG9hZF9kdW1teV9idWZmZXIgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CiBzdGF0aWMgdm9pZAl3aXBlX2R1bW15X2J1ZmZlciBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKIHN0YXRpYyB2b2lkCXVubG9hZF9kdW1teV9idWZmZXIgX19BUkdTKChidWZfVCAqYnVmKSk7CitzdGF0aWMgcWZfaW5mb19UICpsbF9nZXRfb3JfYWxsb2NfbGlzdCBfX0FSR1MoKHdpbl9UICopKTsKIAogLyogUXVpY2tmaXggd2luZG93IGNoZWNrIGhlbHBlciBtYWNybyAqLwogI2RlZmluZSBJU19RRl9XSU5ET1cod3ApIChidF9xdWlja2ZpeCh3cC0+d19idWZmZXIpICYmIHdwLT53X2xsaXN0X3JlZiA9PSBOVUxMKQpAQCAtMTU0LDcgKzE1NSwxMSBAQAogCXJldHVybiBGQUlMOwogCiAgICAgaWYgKHdwICE9IE5VTEwpCi0JcWkgPSBHRVRfTE9DX0xJU1Qod3ApOworICAgIHsKKwlxaSA9IGxsX2dldF9vcl9hbGxvY19saXN0KHdwKTsKKwlpZiAocWkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEZBSUw7CisgICAgfQogCiAgICAgcmV0dXJuIHFmX2luaXRfZXh0KHFpLCBlZmlsZSwgY3VyYnVmLCBOVUxMLCBlcnJvcmZvcm1hdCwgbmV3bGlzdCwKIAkJCQkJCSAgICAobGluZW5yX1QpMCwgKGxpbmVucl9UKTApOwpAQCAtMjYyOCwxMiArMjYzMyw3IEBACiAKICAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2xtYWtlIHx8IGVhcC0+Y21kaWR4ID09IENNRF9sZ3JlcAogCXx8IGVhcC0+Y21kaWR4ID09IENNRF9sZ3JlcGFkZCkKLSAgICB7Ci0JcWkgPSBsbF9nZXRfb3JfYWxsb2NfbGlzdChjdXJ3aW4pOwotCWlmIChxaSA9PSBOVUxMKQotCSAgICByZXR1cm47CiAJd3AgPSBjdXJ3aW47Ci0gICAgfQogCiAgICAgYXV0b3dyaXRlX2FsbCgpOwogICAgIGZuYW1lID0gZ2V0X21lZl9uYW1lKCk7CkBAIC0yNjc4LDcgKzI2NzgsMTEgQEAKIAkJCQkJICAgKGVhcC0+Y21kaWR4ICE9IENNRF9ncmVwYWRkCiAJCQkJCSAgICAmJiBlYXAtPmNtZGlkeCAhPSBDTURfbGdyZXBhZGQpKSA+IDAKIAkgICAgJiYgIWVhcC0+Zm9yY2VpdCkKKyAgICB7CisJaWYgKHdwICE9IE5VTEwpCisJICAgIHFpID0gR0VUX0xPQ19MSVNUKHdwKTsKIAlxZl9qdW1wKHFpLCAwLCAwLCBGQUxTRSk7CQkvKiBkaXNwbGF5IGZpcnN0IGVycm9yICovCisgICAgfQogCiAgICAgbWNoX3JlbW92ZShmbmFtZSk7CiAgICAgdmltX2ZyZWUoZm5hbWUpOwpAQCAtMjgzMiwxMiArMjgzNiw3IEBACiAKICAgICBpZiAoZWFwLT5jbWRpZHggPT0gQ01EX2xmaWxlIHx8IGVhcC0+Y21kaWR4ID09IENNRF9sZ2V0ZmlsZQogCXx8IGVhcC0+Y21kaWR4ID09IENNRF9sYWRkZmlsZSkKLSAgICB7Ci0JcWkgPSBsbF9nZXRfb3JfYWxsb2NfbGlzdChjdXJ3aW4pOwotCWlmIChxaSA9PSBOVUxMKQotCSAgICByZXR1cm47CiAJd3AgPSBjdXJ3aW47Ci0gICAgfQogCiAgICAgaWYgKCplYXAtPmFyZyAhPSBOVUwpCiAJc2V0X3N0cmluZ19vcHRpb25fZGlyZWN0KChjaGFyX3UgKikiZWYiLCAtMSwgZWFwLT5hcmcsIE9QVF9GUkVFKTsKQEAgLTI4NTYsNyArMjg1NSwxMSBAQAogCQkJCSAgJiYgZWFwLT5jbWRpZHggIT0gQ01EX2xhZGRmaWxlKSkgPiAwCiAJCQkJICAmJiAoZWFwLT5jbWRpZHggPT0gQ01EX2NmaWxlCiAJCQkJCSAgICAgfHwgZWFwLT5jbWRpZHggPT0gQ01EX2xmaWxlKSkKKyAgICB7CisJaWYgKHdwICE9IE5VTEwpCisJICAgIHFpID0gR0VUX0xPQ19MSVNUKHdwKTsKIAlxZl9qdW1wKHFpLCAwLCAwLCBlYXAtPmZvcmNlaXQpOwkvKiBkaXNwbGF5IGZpcnN0IGVycm9yICovCisgICAgfQogfQogCiAvKgpAQCAtMzUxNywxMSArMzUyMCwxMSBAQAogCWlmICgodHYtPnZfdHlwZSA9PSBWQVJfU1RSSU5HICYmIHR2LT52dmFsLnZfc3RyaW5nICE9IE5VTEwpCiAJCXx8ICh0di0+dl90eXBlID09IFZBUl9MSVNUICYmIHR2LT52dmFsLnZfbGlzdCAhPSBOVUxMKSkKIAl7Ci0JICAgIGlmIChxZl9pbml0X2V4dChxaSwgTlVMTCwgTlVMTCwgdHYsIHBfZWZtLAotCQkJICAgIChlYXAtPmNtZGlkeCA9PSBDTURfY2V4cHIKLQkJCSAgICAgfHwgZWFwLT5jbWRpZHggPT0gQ01EX2xleHByKSwKKwkgICAgaW50CSAgICBleHByX2NtZCA9IChlYXAtPmNtZGlkeCA9PSBDTURfY2V4cHIKKwkJCQl8fCBlYXAtPmNtZGlkeCA9PSBDTURfbGV4cHIpOworCSAgICBpZiAocWZfaW5pdF9leHQocWksIE5VTEwsIE5VTEwsIHR2LCBwX2VmbSwgZXhwcl9jbWQsCiAJCQkJCQkgKGxpbmVucl9UKTAsIChsaW5lbnJfVCkwKSA+IDAKLQkJICAgICYmIChlYXAtPmNtZGlkeCA9PSBDTURfY2V4cHIgfHwgZWFwLT5jbWRpZHggPT0gQ01EX2xleHByKSkKKwkJICAgICYmIGV4cHJfY21kKQogCQlxZl9qdW1wKHFpLCAwLCAwLCBlYXAtPmZvcmNlaXQpOyAgLyogZGlzcGxheSBmaXJzdCBlcnJvciAqLwogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbi5oIGIvc3JjL3ZlcnNpb24uaAppbmRleCA5OTAxNjhhLi44MzI0YzMzIDEwMDY0NAotLS0gYS9zcmMvdmVyc2lvbi5oCisrKyBiL3NyYy92ZXJzaW9uLmgKQEAgLTM2LDUgKzM2LDUgQEAKICNkZWZpbmUgVklNX1ZFUlNJT05fTk9ET1QJInZpbTcwYWEiCiAjZGVmaW5lIFZJTV9WRVJTSU9OX1NIT1JUCSI3LjBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fTUVESVVNCSI3LjBhYSBBTFBIQSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9ORwkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDYgRmViIDkpIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IEZlYiA5LCBjb21waWxlZCAiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA2IEZlYiAxMCkiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wYWEgQUxQSEEgKDIwMDYgRmViIDEwLCBjb21waWxlZCAiCg==