ZGlmZiAtLWdpdCBhL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy9zdHJpbmcvc3RydmVyc2NtcC5jIGIvYXAvbGliYy9nbGliYy9nbGliYy0yLjIzL3N0cmluZy9zdHJ2ZXJzY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkNDIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYmMvZ2xpYmMvZ2xpYmMtMi4yMy9zdHJpbmcvc3RydmVyc2NtcC5jCkBAIC0wLDAgKzEsMTA3IEBACisvKiBDb21wYXJlIHN0cmluZ3Mgd2hpbGUgdHJlYXRpbmcgZGlnaXRzIGNoYXJhY3RlcnMgbnVtZXJpY2FsbHkuCisgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSmVhbi1GcmFu529pcyBCaWdub2xsZXMgPGJpZ25vbGxlQGVjb2xlZG9jLmlicC5mcj4sIDE5OTcuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKy8qIHN0YXRlczogU19OOiBub3JtYWwsIFNfSTogY29tcGFyaW5nIGludGVncmFsIHBhcnQsIFNfRjogY29tcGFyaW5nCisgICAgICAgICAgIGZyYWN0aW9ubmFsIHBhcnRzLCBTX1o6IGlkZW0gYnV0IHdpdGggbGVhZGluZyBaZXJvZXMgb25seSAqLworI2RlZmluZSAgU19OICAgIDB4MAorI2RlZmluZSAgU19JICAgIDB4MworI2RlZmluZSAgU19GICAgIDB4NgorI2RlZmluZSAgU19aICAgIDB4OQorCisvKiByZXN1bHRfdHlwZTogQ01QOiByZXR1cm4gZGlmZjsgTEVOOiBjb21wYXJlIHVzaW5nIGxlbl9kaWZmL2RpZmYgKi8KKyNkZWZpbmUgIENNUCAgICAyCisjZGVmaW5lICBMRU4gICAgMworCisKKy8qIENvbXBhcmUgUzEgYW5kIFMyIGFzIHN0cmluZ3MgaG9sZGluZyBpbmRpY2VzL3ZlcnNpb24gbnVtYmVycywKKyAgIHJldHVybmluZyBsZXNzIHRoYW4sIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIFMxIGlzIGxlc3MgdGhhbiwKKyAgIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBTMiAoZm9yIG1vcmUgaW5mbywgc2VlIHRoZSB0ZXhpbmZvIGRvYykuCisqLworCitpbnQKK19fc3RydmVyc2NtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMxOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMyOworCisgIC8qIFN5bWJvbChzKSAgICAwICAgICAgIFsxLTldICAgb3RoZXJzCisgICAgIFRyYW5zaXRpb24gICAoMTApIDAgICgwMSkgZCAgKDAwKSB4ICAgKi8KKyAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbmV4dF9zdGF0ZVtdID0KKyAgeworICAgICAgLyogc3RhdGUgICAgeCAgICBkICAgIDAgICovCisgICAgICAvKiBTX04gKi8gIFNfTiwgU19JLCBTX1osCisgICAgICAvKiBTX0kgKi8gIFNfTiwgU19JLCBTX0ksCisgICAgICAvKiBTX0YgKi8gIFNfTiwgU19GLCBTX0YsCisgICAgICAvKiBTX1ogKi8gIFNfTiwgU19GLCBTX1oKKyAgfTsKKworICBzdGF0aWMgY29uc3QgaW50OF90IHJlc3VsdF90eXBlW10gPQorICB7CisgICAgICAvKiBzdGF0ZSAgIHgveCAgeC9kICB4LzAgIGQveCAgZC9kICBkLzAgIDAveCAgMC9kICAwLzAgICovCisKKyAgICAgIC8qIFNfTiAqLyAgQ01QLCBDTVAsIENNUCwgQ01QLCBMRU4sIENNUCwgQ01QLCBDTVAsIENNUCwKKyAgICAgIC8qIFNfSSAqLyAgQ01QLCAtMSwgIC0xLCAgKzEsICBMRU4sIExFTiwgKzEsICBMRU4sIExFTiwKKyAgICAgIC8qIFNfRiAqLyAgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwKKyAgICAgIC8qIFNfWiAqLyAgQ01QLCArMSwgICsxLCAgLTEsICBDTVAsIENNUCwgLTEsICBDTVAsIENNUAorICB9OworCisgIGlmIChwMSA9PSBwMikKKyAgICByZXR1cm4gMDsKKworICB1bnNpZ25lZCBjaGFyIGMxID0gKnAxKys7CisgIHVuc2lnbmVkIGNoYXIgYzIgPSAqcDIrKzsKKyAgLyogSGludDogJzAnIGlzIGEgZGlnaXQgdG9vLiAgKi8KKyAgaW50IHN0YXRlID0gU19OICsgKChjMSA9PSAnMCcpICsgKGlzZGlnaXQgKGMxKSAhPSAwKSk7CisKKyAgaW50IGRpZmY7CisgIHdoaWxlICgoZGlmZiA9IGMxIC0gYzIpID09IDApCisgICAgeworICAgICAgaWYgKGMxID09ICdcMCcpCisJcmV0dXJuIGRpZmY7CisKKyAgICAgIHN0YXRlID0gbmV4dF9zdGF0ZVtzdGF0ZV07CisgICAgICBjMSA9ICpwMSsrOworICAgICAgYzIgPSAqcDIrKzsKKyAgICAgIHN0YXRlICs9IChjMSA9PSAnMCcpICsgKGlzZGlnaXQgKGMxKSAhPSAwKTsKKyAgICB9CisKKyAgc3RhdGUgPSByZXN1bHRfdHlwZVtzdGF0ZSAqIDMgKyAoKChjMiA9PSAnMCcpICsgKGlzZGlnaXQgKGMyKSAhPSAwKSkpXTsKKworICBzd2l0Y2ggKHN0YXRlKQorICB7CisgICAgY2FzZSBDTVA6CisgICAgICByZXR1cm4gZGlmZjsKKworICAgIGNhc2UgTEVOOgorICAgICAgd2hpbGUgKGlzZGlnaXQgKCpwMSsrKSkKKwlpZiAoIWlzZGlnaXQgKCpwMisrKSkKKwkgIHJldHVybiAxOworCisgICAgICByZXR1cm4gaXNkaWdpdCAoKnAyKSA/IC0xIDogZGlmZjsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gc3RhdGU7CisgIH0KK30KK2xpYmNfaGlkZGVuX2RlZiAoX19zdHJ2ZXJzY21wKQord2Vha19hbGlhcyAoX19zdHJ2ZXJzY21wLCBzdHJ2ZXJzY21wKQo=