ZGlmZiAtLWdpdCBhL2NvbmYva29pLXdpbiBiL2NvbmYva29pLXdpbgppbmRleCAyYjEyYjhkLi45OWVkYjFiIDEwMDY0NAotLS0gYS9jb25mL2tvaS13aW4KKysrIGIvY29uZi9rb2ktd2luCkBAIC0xLDEyICsxLDEyIEBACiAKIGNoYXJzZXRfbWFwICBrb2k4LXIgIHdpbmRvd3MtMTI1MSB7CiAKKyAgICA4MCAgODggOyAjIGV1cm8KKwogICAgIDk1ICA5NSA7ICMgYnVsbGV0CiAKICAgICA5QSAgQTAgOyAjICZuYnNwOwogCi0gICAgOUMgIEIwIDsgIyAmZGVnOwotCiAgICAgOUUgIEI3IDsgIyAmbWlkZG90OwogCiAgICAgQTMgIEI4IDsgIyBzbWFsbCB5bwpAQCAtMTgsMTIgKzE4LDE2IEBACiAgICAgQUQgIEI0IDsgIyBzbWFsbCBVa3JhaW5pYW4gc29mdCBnCiAgICAgQUUgIEEyIDsgIyBzbWFsbCBCeWVsb3J1c3NpYW4gc2hvcnQgdQogCisgICAgQjAgIEIwIDsgIyAmZGVnOworCiAgICAgQjMgIEE4IDsgIyBjYXBpdGFsIFlPCiAgICAgQjQgIEFBIDsgIyBjYXBpdGFsIFVrcmFpbmlhbiBZRQogCiAgICAgQjYgIEIyIDsgIyBjYXBpdGFsIFVrcmFpbmlhbiBJCiAgICAgQjcgIEFGIDsgIyBjYXBpdGFsIFVrcmFpbmlhbiBKCiAKKyAgICBCOSAgQjkgOyAjIE5vCisKICAgICBCRCAgQTUgOyAjIGNhcGl0YWwgVWtyYWluaWFuIHNvZnQgRwogICAgIEJFICBBMSA7ICMgY2FwaXRhbCBCeWVsb3J1c3NpYW4gc2hvcnQgVQogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDkyZmVmYTQuLjc2NTdhNWMgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksNjEgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMy40NSIgZGF0ZT0iMDYuMDUuMjAwNiI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ19kgc3NsX3ZlcmlmeV9jbGllbnQsIHNzbF92ZXJpZnlfZGVwdGggySBzc2xfY2xpZW50X2NlcnRpZmljYXRlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJzc2xfdmVyaWZ5X2NsaWVudCIsICJzc2xfdmVyaWZ5X2RlcHRoIiwgYW5kICJzc2xfY2xpZW50X2NlcnRpZmljYXRlIgorZGlyZWN0aXZlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivUxdDF0tgg0MXSxc3Fzs7B0SAkcmVxdWVzdF9tZXRob2Qg18/a19LB3cHF1CDNxdTPxCDUz8zYy88gz9POz9fOz8fPINrB0NLP08EuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgJHJlcXVlc3RfbWV0aG9kIHZhcmlhYmxlIG5vdyByZXR1cm5zIHRoZSBtYWluIHJlcXVlc3QgbWV0aG9kLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9cg1MHCzMnDxSDQxdLFy8/EydLP18vJIGtvaS13aW4gydrNxc7Fztkgy8/E2SDTyc3Xz8zBICZhbXA7ZGVnOy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAmYW1wO2RlZzsgc3ltYm9sIGNvZGVzIHdlcmUgY2hhbmdlZCBpbiBrb2ktd2luIGNvbnZlcnNpb24gdGFibGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9cg1MHCzMnD1SDQxdLFy8/EydLP18vJIGtvaS13aW4gxM/CwdfMxc7ZINPJzdfPzNkgxdfSzyDJIM7PzcXSwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBldXJvIMkgTiBzeW1ib2xzIHdlcmUgYWRkZWQgdG8ga29pLXdpbiBjb252ZXJzaW9uIHRhYmxlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkgbmdpbngg0sHT0NLFxMXM0cwg2sHQ0s/T2SDOwSDOxdPLz8zYy88gzcHbyc4sINTPINDSySDQwcTFzsnJCivPxM7PyiDJ2iDOycgg2sHQ0s/T2Swg0NLFxM7B2s7B3sXOztnFIMTM0SDc1M/KIM3B28nO2Swg0MXSxc7B0NLB18zRzMnT2CDUz8zYy88KK87BIM/EztUgzcHbyc7VINfNxdPUzyDUz8fPLCDe1M/C2SDSwdfOz83F0s7PINLB09DSxcTFzNHU2NPRIM3F1sTVIM/T1MHM2M7ZzckuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiBuZ2lueCBkaXN0cmlidXRlZCB0aGUgcmVxdWVzdHMgYW1vbmcgc2V2ZXJhbCBiYWNrZW5kcyBhbmQgc29tZSBiYWNrZW5kCitmYWlsZWQsIHRoZW4gcmVxdWVzdHMgaW50ZW5kZWQgZm9yIHRoaXMgYmFja2VuZCB3YXMgZGlyZWN0ZWQgdG8gb25lIGxpdmUKK2JhY2tlbmQgb25seSBpbnN0ZWFkIG9mIGJlaW5nIGRpc3RyaWJ1dGVkIGFtb25nIHRoZSByZXN0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy40NCIgZGF0ZT0iMDQuMDUuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCA3ZmQ5ZDcyLi5lNDliOTFjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNDQiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjQ1IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKaW5kZXggZTRjYTIzOC4uMTU3YzQ4MCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKQEAgLTYxLDU0ICs2MSw3NSBAQAogCiAgICAgICAgICAgICAvKiBpdCdzIGEgZmlyc3QgdHJ5IC0gZ2V0IGEgY3VycmVudCBwZWVyICovCiAKLSAgICAgICAgICAgIHBjLT5jdXJfcGVlciA9IHBjLT5wZWVycy0+Y3VycmVudDsKKyAgICAgICAgICAgIGZvciAoIDs7ICkgeworICAgICAgICAgICAgICAgIHBjLT5jdXJfcGVlciA9IHBjLT5wZWVycy0+Y3VycmVudDsKKworICAgICAgICAgICAgICAgIHBlZXIgPSAmcGMtPnBlZXJzLT5wZWVyW3BjLT5jdXJfcGVlcl07CisKKyAgICAgICAgICAgICAgICBpZiAocGVlci0+bWF4X2ZhaWxzID09IDAgfHwgcGVlci0+ZmFpbHMgPD0gcGVlci0+bWF4X2ZhaWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChub3cgLSBwZWVyLT5hY2Nlc3NlZCA+IHBlZXItPmZhaWxfdGltZW91dCkgeworICAgICAgICAgICAgICAgICAgICBwZWVyLT5mYWlscyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+Y3VycmVudCsrOworCisgICAgICAgICAgICAgICAgaWYgKHBjLT5wZWVycy0+Y3VycmVudCA+PSBwYy0+cGVlcnMtPm51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBwYy0+cGVlcnMtPmN1cnJlbnQgPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+d2VpZ2h0ID0gcGMtPnBlZXJzLT5wZWVyW3BjLT5wZWVycy0+Y3VycmVudF0ud2VpZ2h0OworCisgICAgICAgICAgICAgICAgcGMtPnRyaWVzLS07CisKKyAgICAgICAgICAgICAgICBpZiAocGMtPnRyaWVzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYy0+cGVlcnMtPndlaWdodC0tOwogCiAgICAgICAgICAgICBpZiAocGMtPnBlZXJzLT53ZWlnaHQgPT0gMCkgewogICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+Y3VycmVudCsrOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocGMtPnBlZXJzLT5jdXJyZW50ID49IHBjLT5wZWVycy0+bnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgcGMtPnBlZXJzLT5jdXJyZW50ID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBjLT5wZWVycy0+d2VpZ2h0ID09IDApIHsKLSAgICAgICAgICAgICAgICBwYy0+cGVlcnMtPndlaWdodCA9IHBjLT5wZWVycy0+cGVlcltwYy0+cGVlcnMtPmN1cnJlbnRdLndlaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIDs7ICkgewotICAgICAgICAgICAgcGVlciA9ICZwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXTsKLQotICAgICAgICAgICAgaWYgKHBlZXItPm1heF9mYWlscyA9PSAwIHx8IHBlZXItPmZhaWxzIDw9IHBlZXItPm1heF9mYWlscykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobm93IC0gcGVlci0+YWNjZXNzZWQgPiBwZWVyLT5mYWlsX3RpbWVvdXQpIHsKLSAgICAgICAgICAgICAgICBwZWVyLT5mYWlscyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBjLT5jdXJfcGVlcisrOwotCi0gICAgICAgICAgICBpZiAocGMtPmN1cl9wZWVyID49IHBjLT5wZWVycy0+bnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgcGMtPmN1cl9wZWVyID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGMtPnRyaWVzLS07Ci0KLSAgICAgICAgICAgIGlmIChwYy0+dHJpZXMgPT0gMCkgewotCi0gICAgICAgICAgICAgICAgLyogYWxsIHBlZXJzIGZhaWxlZCwgbWFyayB0aGVtIGFzIGxpdmUgZm9yIHF1aWNrIHJlY292ZXJ5ICovCi0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGMtPnBlZXJzLT5udW1iZXI7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBwYy0+cGVlcnMtPnBlZXJbaV0uZmFpbHMgPSAwOworICAgICAgICAgICAgICAgIGlmIChwYy0+cGVlcnMtPmN1cnJlbnQgPj0gcGMtPnBlZXJzLT5udW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGMtPnBlZXJzLT5jdXJyZW50ID0gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvKiBuZ3hfdW5sb2NrX211dGV4KHBjLT5wZWVycy0+bXV0ZXgpOyAqLworICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+d2VpZ2h0ID0gcGMtPnBlZXJzLT5wZWVyW3BjLT5wZWVycy0+Y3VycmVudF0ud2VpZ2h0OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9CVVNZOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICggOzsgKSB7CisgICAgICAgICAgICAgICAgcGVlciA9ICZwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXTsKKworICAgICAgICAgICAgICAgIGlmIChwZWVyLT5tYXhfZmFpbHMgPT0gMCB8fCBwZWVyLT5mYWlscyA8PSBwZWVyLT5tYXhfZmFpbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG5vdyAtIHBlZXItPmFjY2Vzc2VkID4gcGVlci0+ZmFpbF90aW1lb3V0KSB7CisgICAgICAgICAgICAgICAgICAgIHBlZXItPmZhaWxzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcGMtPmN1cl9wZWVyKys7CisKKyAgICAgICAgICAgICAgICBpZiAocGMtPmN1cl9wZWVyID49IHBjLT5wZWVycy0+bnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHBjLT5jdXJfcGVlciA9IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcGMtPnRyaWVzLS07CisKKyAgICAgICAgICAgICAgICBpZiAocGMtPnRyaWVzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE5LDYgKzM0MCwxOCBAQAogICAgIHdldi0+cmVhZHkgPSAxOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKKworZmFpbGVkOgorCisgICAgLyogYWxsIHBlZXJzIGZhaWxlZCwgbWFyayB0aGVtIGFzIGxpdmUgZm9yIHF1aWNrIHJlY292ZXJ5ICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcGMtPnBlZXJzLT5udW1iZXI7IGkrKykgeworICAgICAgICBwYy0+cGVlcnMtPnBlZXJbaV0uZmFpbHMgPSAwOworICAgIH0KKworICAgIC8qIG5neF91bmxvY2tfbXV0ZXgocGMtPnBlZXJzLT5tdXRleCk7ICovCisKKyAgICByZXR1cm4gTkdYX0JVU1k7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwppbmRleCAzYTc4MzVlLi4wYjIxN2NmIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwpAQCAtMTY0LDcgKzE2NCw4IEBACiAgICAgfQogCiAgICAgaWYgKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShzc2wtPmN0eCwgKGNoYXIgKikga2V5LT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVUWVBFX1BFTSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pCisgICAgICAgID09IDApCiAgICAgewogICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfRU1FUkcsIHNzbC0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoXCIlc1wiKSBmYWlsZWQiLCBrZXktPmRhdGEpOwpAQCAtMTc2LDYgKzE3NywyNiBAQAogCiAKIG5neF9pbnRfdAorbmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUobmd4X2NvbmZfdCAqY2YsIG5neF9zc2xfdCAqc3NsLCBuZ3hfc3RyX3QgKmNlcnQpCit7CisgICAgaWYgKG5neF9jb25mX2Z1bGxfbmFtZShjZi0+Y3ljbGUsIGNlcnQpID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2wtPmN0eCwgKGNoYXIgKikgY2VydC0+ZGF0YSwgTlVMTCkKKyAgICAgICAgPT0gMCkKKyAgICB7CisgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgc3NsLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKFwiJXNcIikgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5kYXRhKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK25neF9pbnRfdAogbmd4X3NzbF9nZW5lcmF0ZV9yc2E1MTJfa2V5KG5neF9zc2xfdCAqc3NsKQogewogICAgIGlmIChTU0xfQ1RYX25lZWRfdG1wX1JTQShzc2wtPmN0eCkgPT0gMCkgewpAQCAtMTAyMyw2ICsxMDQ0LDg4IEBACiB9CiAKIAorbmd4X2ludF90CituZ3hfc3NsX2dldF9zdWJqZWN0X2RuKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsIG5neF9zdHJfdCAqcykKK3sKKyAgICBjaGFyICAgICAgICpwOworICAgIHNpemVfdCAgICAgIGxlbjsKKyAgICBYNTA5ICAgICAgICpjZXJ0OworICAgIFg1MDlfTkFNRSAgKm5hbWU7CisKKyAgICBzLT5sZW4gPSAwOworCisgICAgY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShjLT5zc2wtPmNvbm5lY3Rpb24pOworCisgICAgaWYgKGNlcnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIG5hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUoY2VydCk7CisKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgcCA9IFg1MDlfTkFNRV9vbmVsaW5lKG5hbWUsIE5VTEwsIDApOworCisgICAgZm9yIChsZW4gPSAwOyBwW2xlbl07IGxlbisrKSB7IC8qIHZvaWQgKi8gfQorCisgICAgcy0+bGVuID0gbGVuOworICAgIHMtPmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGxlbik7CisgICAgaWYgKHMtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICBPUEVOU1NMX2ZyZWUocCk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgbmd4X21lbWNweShzLT5kYXRhLCBwLCBsZW4pOworCisgICAgT1BFTlNTTF9mcmVlKHApOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCituZ3hfaW50X3QKK25neF9zc2xfZ2V0X2lzc3Vlcl9kbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfcG9vbF90ICpwb29sLCBuZ3hfc3RyX3QgKnMpCit7CisgICAgY2hhciAgICAgICAqcDsKKyAgICBzaXplX3QgICAgICBsZW47CisgICAgWDUwOSAgICAgICAqY2VydDsKKyAgICBYNTA5X05BTUUgICpuYW1lOworCisgICAgcy0+bGVuID0gMDsKKworICAgIGNlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoYy0+c3NsLT5jb25uZWN0aW9uKTsKKworICAgIGlmIChjZXJ0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBuYW1lID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoY2VydCk7CisKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgcCA9IFg1MDlfTkFNRV9vbmVsaW5lKG5hbWUsIE5VTEwsIDApOworCisgICAgZm9yIChsZW4gPSAwOyBwW2xlbl07IGxlbisrKSB7IC8qIHZvaWQgKi8gfQorCisgICAgcy0+bGVuID0gbGVuOworICAgIHMtPmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGxlbik7CisgICAgaWYgKHMtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICBPUEVOU1NMX2ZyZWUocCk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgbmd4X21lbWNweShzLT5kYXRhLCBwLCBsZW4pOworCisgICAgT1BFTlNTTF9mcmVlKHApOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgdm9pZCAqCiBuZ3hfb3BlbnNzbF9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCmluZGV4IDgyYmZhMTMuLjRhZjQyMTkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCkBAIC0zMSw2ICszMSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBTU0wgICAgICAgICAgICAgICAgICAgICAgICAqY29ubmVjdGlvbjsKKwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICpidWY7CiAKQEAgLTYwLDEwICs2MSwxNSBAQAogI2RlZmluZSBOR1hfU1NMX0JVRlNJWkUgIDE2Mzg0CiAKIAorI2RlZmluZSBOR1hfU1NMX1ZFUklGWSAgIFNTTF9WRVJJRllfUEVFUgorCisKIG5neF9pbnRfdCBuZ3hfc3NsX2luaXQobmd4X2xvZ190ICpsb2cpOwogbmd4X2ludF90IG5neF9zc2xfY3JlYXRlKG5neF9zc2xfdCAqc3NsLCBuZ3hfdWludF90IHByb3RvY29scyk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9jZXJ0aWZpY2F0ZShuZ3hfY29uZl90ICpjZiwgbmd4X3NzbF90ICpzc2wsCiAgICAgbmd4X3N0cl90ICpjZXJ0LCBuZ3hfc3RyX3QgKmtleSk7CituZ3hfaW50X3Qgbmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUobmd4X2NvbmZfdCAqY2YsIG5neF9zc2xfdCAqc3NsLAorICAgIG5neF9zdHJfdCAqY2VydCk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9nZW5lcmF0ZV9yc2E1MTJfa2V5KG5neF9zc2xfdCAqc3NsKTsKIG5neF9pbnRfdCBuZ3hfc3NsX2NyZWF0ZV9jb25uZWN0aW9uKG5neF9zc2xfdCAqc3NsLCBuZ3hfY29ubmVjdGlvbl90ICpjLAogICAgIG5neF91aW50X3QgZmxhZ3MpOwpAQCAtNzUsNiArODEsMTEgQEAKIAogdV9jaGFyICpuZ3hfc3NsX2dldF9wcm90b2NvbChuZ3hfY29ubmVjdGlvbl90ICpjKTsKIHVfY2hhciAqbmd4X3NzbF9nZXRfY2lwaGVyX25hbWUobmd4X2Nvbm5lY3Rpb25fdCAqYyk7CituZ3hfaW50X3Qgbmd4X3NzbF9nZXRfc3ViamVjdF9kbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfcG9vbF90ICpwb29sLAorICAgIG5neF9zdHJfdCAqcyk7CituZ3hfaW50X3Qgbmd4X3NzbF9nZXRfaXNzdWVyX2RuKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsCisgICAgbmd4X3N0cl90ICpzKTsKKwogCiAKIG5neF9pbnRfdCBuZ3hfc3NsX2hhbmRzaGFrZShuZ3hfY29ubmVjdGlvbl90ICpjKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKaW5kZXggZTIxOTFlZi4uYTU3ZmJmYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKQEAgLTE5LDYgKzE5LDEwIEBACiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NsX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzbF9jbGllbnRfc19kbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfY2xpZW50X2lfZG4obmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfYWRkX3ZhcmlhYmxlcyhuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NsX2NyZWF0ZV9zcnZfY29uZihuZ3hfY29uZl90ICpjZik7CkBAIC00Myw3ICs0Nyw2IEBACiB9OwogCiAKLQogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX3NzbF9jb21tYW5kc1tdID0gewogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2wiKSwKQEAgLTgxLDYgKzg0LDI3IEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2xfc3J2X2NvbmZfdCwgY2lwaGVycyksCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInNzbF92ZXJpZnlfY2xpZW50IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCisgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAorICAgICAgTkdYX0hUVFBfU1JWX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfc3NsX3Nydl9jb25mX3QsIHZlcmlmeSksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNzbF92ZXJpZnlfZGVwdGgiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl8xTU9SRSwKKyAgICAgIG5neF9jb25mX3NldF9udW1fc2xvdCwKKyAgICAgIE5HWF9IVFRQX1NSVl9DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3NzbF9zcnZfY29uZl90LCB2ZXJpZnlfZGVwdGgpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2xpZW50X2NlcnRpZmljYXRlIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSFRUUF9TUlZfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2xfc3J2X2NvbmZfdCwgY2xpZW50X2NlcnRpZmljYXRlKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygic3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GX0ZMQUcsCiAjaWZkZWYgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQpAQCAtMTQyLDYgKzE2NiwxMiBAQAogICAgIHsgbmd4X3N0cmluZygic3NsX2NpcGhlciIpLCBOVUxMLCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUsCiAgICAgICAodWludHB0cl90KSBuZ3hfc3NsX2dldF9jaXBoZXJfbmFtZSwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2xpZW50X3NfZG4iKSwgTlVMTCwgbmd4X2h0dHBfc3NsX2NsaWVudF9zX2RuLAorICAgICAgMCwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2xpZW50X2lfZG4iKSwgTlVMTCwgbmd4X2h0dHBfc3NsX2NsaWVudF9pX2RuLAorICAgICAgMCwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAorCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfQogfTsKIApAQCAtMTgwLDYgKzIxMCw1OCBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3NzbF9jbGllbnRfc19kbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsCisgICAgdWludHB0cl90IGRhdGEpCit7CisgICAgaWYgKHItPmNvbm5lY3Rpb24tPnNzbCkgeworICAgICAgICBpZiAobmd4X3NzbF9nZXRfc3ViamVjdF9kbihyLT5jb25uZWN0aW9uLCByLT5wb29sLCAobmd4X3N0cl90ICopIHYpCisgICAgICAgICAgICAhPSBOR1hfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi0+bGVuKSB7CisgICAgICAgICAgICB2LT52YWxpZCA9IDE7CisgICAgICAgICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgICAgICAgICB2LT5ub3RfZm91bmQgPSAwOworCisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisgICAgfQorCisgICAgdi0+bm90X2ZvdW5kID0gMTsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfc3NsX2NsaWVudF9pX2RuKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwKKyAgICB1aW50cHRyX3QgZGF0YSkKK3sKKyAgICBpZiAoci0+Y29ubmVjdGlvbi0+c3NsKSB7CisgICAgICAgIGlmIChuZ3hfc3NsX2dldF9pc3N1ZXJfZG4oci0+Y29ubmVjdGlvbiwgci0+cG9vbCwgKG5neF9zdHJfdCAqKSB2KQorICAgICAgICAgICAgIT0gTkdYX09LKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHYtPmxlbikgeworICAgICAgICAgICAgdi0+dmFsaWQgPSAxOworICAgICAgICAgICAgdi0+bm9fY2FjaGFibGUgPSAwOworICAgICAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHYtPm5vdF9mb3VuZCA9IDE7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3NzbF9hZGRfdmFyaWFibGVzKG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICp2YXIsICp2OwpAQCAtMjE3LDEyICsyOTksMTYgQEAKICAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZS5kYXRhID0gTlVMTDsKICAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZV9rZXkubGVuID0gMDsKICAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZV9rZXkuZGF0YSA9IE5VTEw7CisgICAgICogICAgIHNjZi0+Y2xpZW50X2NlcnRpZmljYXRlLmxlbiA9IDA7CisgICAgICogICAgIHNjZi0+Y2xpZW50X2NlcnRpZmljYXRlLmRhdGEgPSBOVUxMOwogICAgICAqICAgICBzY2YtPmNpcGhlcnMubGVuID0gMDsKICAgICAgKiAgICAgc2NmLT5jaXBoZXJzLmRhdGEgPSBOVUxMOwogICAgICAqLwogCiAgICAgc2NmLT5lbmFibGUgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBzY2YtPnNlc3Npb25fdGltZW91dCA9IE5HWF9DT05GX1VOU0VUOworICAgIHNjZi0+dmVyaWZ5ID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgc2NmLT52ZXJpZnlfZGVwdGggPSBOR1hfQ09ORl9VTlNFVDsKICAgICBzY2YtPnByZWZlcl9zZXJ2ZXJfY2lwaGVycyA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgcmV0dXJuIHNjZjsKQEAgLTI1MywxMiArMzM5LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKE5HWF9DT05GX0JJVE1BU0tfU0VUCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfU1NMX1NTTHYyfE5HWF9TU0xfU1NMdjN8TkdYX1NTTF9UTFN2MSkpOwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dmVyaWZ5LCBwcmV2LT52ZXJpZnksIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnZlcmlmeV9kZXB0aCwgcHJldi0+dmVyaWZ5X2RlcHRoLCAxKTsKKwogICAgIG5neF9jb25mX21lcmdlX3N0cl92YWx1ZShjb25mLT5jZXJ0aWZpY2F0ZSwgcHJldi0+Y2VydGlmaWNhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0RFRkxBVVRfQ0VSVElGSUNBVEUpOwogCiAgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmNlcnRpZmljYXRlX2tleSwgcHJldi0+Y2VydGlmaWNhdGVfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9ERUZMQVVUX0NFUlRJRklDQVRFX0tFWSk7CiAKKyAgICBuZ3hfY29uZl9tZXJnZV9zdHJfdmFsdWUoY29uZi0+Y2xpZW50X2NlcnRpZmljYXRlLCBwcmV2LT5jbGllbnRfY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworCiAgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmNpcGhlcnMsIHByZXYtPmNpcGhlcnMsIE5HWF9ERUZMQVVUX0NJUEhFUlMpOwogCiAKQEAgLTI5MSw2ICszODMsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAmY29uZi0+Y2lwaGVycyk7CiAgICAgfQogCisgICAgaWYgKGNvbmYtPnZlcmlmeSkgeworICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY29uZi0+c3NsLmN0eCwgTkdYX1NTTF9WRVJJRlksIE5VTEwpOworCisgICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aChjb25mLT5zc2wuY3R4LCBjb25mLT52ZXJpZnlfZGVwdGgpOworCisgICAgICAgIGlmIChjb25mLT5jbGllbnRfY2VydGlmaWNhdGUubGVuKSB7CisgICAgICAgICAgICBpZiAobmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUoY2YsICZjb25mLT5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmYtPmNsaWVudF9jZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgICAgICAhPSBOR1hfT0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAjaWZkZWYgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQogCiAgICAgaWYgKGNvbmYtPnByZWZlcl9zZXJ2ZXJfY2lwaGVycykgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmggYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuaAppbmRleCA0MjA3Y2RmLi44NTgwMzA5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuaApAQCAtMjIsMTAgKzIyLDE0IEBACiAKICAgICBuZ3hfdWludF90ICAgICAgcHJvdG9jb2xzOwogCisgICAgbmd4X2ludF90ICAgICAgIHZlcmlmeTsKKyAgICBuZ3hfaW50X3QgICAgICAgdmVyaWZ5X2RlcHRoOworCiAgICAgdGltZV90ICAgICAgICAgIHNlc3Npb25fdGltZW91dDsKIAogICAgIG5neF9zdHJfdCAgICAgICBjZXJ0aWZpY2F0ZTsKICAgICBuZ3hfc3RyX3QgICAgICAgY2VydGlmaWNhdGVfa2V5OworICAgIG5neF9zdHJfdCAgICAgICBjbGllbnRfY2VydGlmaWNhdGU7CiAKICAgICBuZ3hfc3RyX3QgICAgICAgY2lwaGVyczsKIH0gbmd4X2h0dHBfc3NsX3Nydl9jb25mX3Q7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNjgwYjNiZC4uNTIwN2ZhMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTE3Miw4ICsxMTcyLDEyIEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9wcm9jZXNzX3JlcXVlc3RfaGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICBzaXplX3QgICBsZW47Ci0gICAgdV9jaGFyICAqdWEsICp1c2VyX2FnZW50LCBjaDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgKnVhLCAqdXNlcl9hZ2VudCwgY2g7CisjaWYgKE5HWF9IVFRQX1NTTCkKKyAgICBsb25nICAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9odHRwX3NzbF9zcnZfY29uZl90ICAqc3NjZjsKKyNlbmRpZgogCiAgICAgaWYgKHItPmhlYWRlcnNfaW4uaG9zdCkgewogICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUubGVuOyBsZW4rKykgewpAQCAtMTI0Myw2ICsxMjQ3LDM0IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCisjaWYgKE5HWF9IVFRQX1NTTCkKKworICAgIGlmIChyLT5jb25uZWN0aW9uLT5zc2wpIHsKKyAgICAgICAgc3NjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfc3J2X2NvbmYociwgbmd4X2h0dHBfc3NsX21vZHVsZSk7CisKKyAgICAgICAgaWYgKHNzY2YtPnZlcmlmeSkgeworICAgICAgICAgICAgcmMgPSBTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoci0+Y29ubmVjdGlvbi0+c3NsLT5jb25uZWN0aW9uKTsKKworICAgICAgICAgICAgaWYgKHJjICE9IFg1MDlfVl9PSykgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZXJyb3I6ICVsICIsIHJjKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQU19DRVJUX0VSUk9SKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHItPmNvbm5lY3Rpb24tPnNzbC0+Y29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgbm8gcmVxdWlyZWQgU1NMIGNlcnRpZmljYXRlIik7CisgICAgICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUFNfTk9fQ0VSVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCisKICAgICBpZiAoci0+aGVhZGVyc19pbi5jb25uZWN0aW9uKSB7CiAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbm5lY3Rpb24tPnZhbHVlLmxlbiA9PSA1CiAgICAgICAgICAgICAmJiBuZ3hfc3RyY2FzZWNtcChyLT5oZWFkZXJzX2luLmNvbm5lY3Rpb24tPnZhbHVlLmRhdGEsICJjbG9zZSIpCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggY2M0MGY0NC4uZTQ2N2RkZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtNzUsNyArNzUsMTAgQEAKIC8qIFRoZSBzcGVjaWFsIGNvZGUgdG8gY2xvc2UgY29ubmVjdGlvbiB3aXRob3V0IGFueSByZXNwb25zZSAqLwogI2RlZmluZSBOR1hfSFRUUF9DTE9TRSAgICAgICAgICAgICAgICAgICAgIDQ0NAogCi0jZGVmaW5lIE5HWF9IVFRQX09XTl9DT0RFUyAgICAgICAgICAgICAgICAgTkdYX0hUVFBfVE9fSFRUUFMKKyNkZWZpbmUgTkdYX0hUVFBfT1dOX0NPREVTICAgICAgICAgICAgICAgICA0OTUKKworI2RlZmluZSBOR1hfSFRUUFNfQ0VSVF9FUlJPUiAgICAgICAgICAgICAgIDQ5NQorI2RlZmluZSBOR1hfSFRUUFNfTk9fQ0VSVCAgICAgICAgICAgICAgICAgIDQ5NgogCiAvKgogICogV2UgdXNlIHRoZSBzcGVjaWFsIGNvZGUgZm9yIHRoZSBwbGFpbiBIVFRQIHJlcXVlc3RzIHRoYXQgYXJlIHNlbnQgdG8KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwppbmRleCBkMTA3MmE5Li43MzRhZDY5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCkBAIC0xNjMsNiArMTYzLDI2IEBACiA7CiAKIAorc3RhdGljIGNoYXIgZXJyb3JfNDk1X3BhZ2VbXSA9CisiPGh0bWw+IiBDUkxGCisiPGhlYWQ+PHRpdGxlPjQwMCBUaGUgU1NMIGNlcnRpZmljYXRlIGVycm9yPC90aXRsZT48L2hlYWQ+IgorQ1JMRgorIjxib2R5IGJnY29sb3I9XCJ3aGl0ZVwiPiIgQ1JMRgorIjxjZW50ZXI+PGgxPjQwMCBCYWQgUmVxdWVzdDwvaDE+PC9jZW50ZXI+IiBDUkxGCisiPGNlbnRlcj5UaGUgU1NMIGNlcnRpZmljYXRlIGVycm9yPC9jZW50ZXI+IiBDUkxGCis7CisKKworc3RhdGljIGNoYXIgZXJyb3JfNDk2X3BhZ2VbXSA9CisiPGh0bWw+IiBDUkxGCisiPGhlYWQ+PHRpdGxlPjQwMCBObyByZXF1aXJlZCBTU0wgY2VydGlmaWNhdGUgd2FzIHNlbnQ8L3RpdGxlPjwvaGVhZD4iCitDUkxGCisiPGJvZHkgYmdjb2xvcj1cIndoaXRlXCI+IiBDUkxGCisiPGNlbnRlcj48aDE+NDAwIEJhZCBSZXF1ZXN0PC9oMT48L2NlbnRlcj4iIENSTEYKKyI8Y2VudGVyPk5vIHJlcXVpcmVkIFNTTCBjZXJ0aWZpY2F0ZSB3YXMgc2VudDwvY2VudGVyPiIgQ1JMRgorOworCisKIHN0YXRpYyBjaGFyIGVycm9yXzQ5N19wYWdlW10gPQogIjxodG1sPiIgQ1JMRgogIjxoZWFkPjx0aXRsZT40MDAgVGhlIHBsYWluIEhUVFAgcmVxdWVzdCB3YXMgc2VudCB0byBIVFRQUyBwb3J0PC90aXRsZT48L2hlYWQ+IgpAQCAtMjU0LDYgKzI3NCw4IEBACiAKICNkZWZpbmUgTkdYX0hUVFBfTEVWRUxfNDAwICAxNwogCisgICAgbmd4X3N0cmluZyhlcnJvcl80OTVfcGFnZSksICAvKiA0OTUsIGh0dHBzIGNlcnRpZmljYXRlIGVycm9yICovCisgICAgbmd4X3N0cmluZyhlcnJvcl80OTZfcGFnZSksICAvKiA0OTYsIGh0dHBzIG5vIGNlcnRpZmljYXRlICovCiAgICAgbmd4X3N0cmluZyhlcnJvcl80OTdfcGFnZSksICAvKiA0OTcsIGh0dHAgdG8gaHR0cHMgKi8KICAgICBuZ3hfc3RyaW5nKGVycm9yXzQwNF9wYWdlKSwgIC8qIDQ5OCwgaW52YWxpZCBob3N0IG5hbWUgKi8KICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgIC8qIDQ5OSwgY2xpZW50IGhhZCBjbG9zZWQgY29ubmVjdGlvbiAqLwpAQCAtMjk2LDYgKzMxOCw4IEBACiAgICAgICAgICAgICBjYXNlIE5HWF9IVFRQX1JFUVVFU1RfRU5USVRZX1RPT19MQVJHRToKICAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBfUkVRVUVTVF9VUklfVE9PX0xBUkdFOgogICAgICAgICAgICAgY2FzZSBOR1hfSFRUUF9UT19IVFRQUzoKKyAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBTX0NFUlRfRVJST1I6CisgICAgICAgICAgICBjYXNlIE5HWF9IVFRQU19OT19DRVJUOgogICAgICAgICAgICAgY2FzZSBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I6CiAgICAgICAgICAgICAgICAgci0+a2VlcGFsaXZlID0gMDsKICAgICAgICAgfQpAQCAtMzA1LDYgKzMyOSw4IEBACiAgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBfQkFEX1JFUVVFU1Q6CiAgICAgICAgICAgICBjYXNlIE5HWF9IVFRQX1RPX0hUVFBTOgorICAgICAgICAgICAgY2FzZSBOR1hfSFRUUFNfQ0VSVF9FUlJPUjoKKyAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBTX05PX0NFUlQ6CiAgICAgICAgICAgICAgICAgci0+bGluZ2VyaW5nX2Nsb3NlID0gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTM3Miw2ICszOTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE5HWF9IVFRQX0xFVkVMXzQwMDsKICAgICAgICAgc3dpdGNoIChlcnJvcikgewogICAgICAgICAgICAgY2FzZSBOR1hfSFRUUF9UT19IVFRQUzoKKyAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBTX0NFUlRfRVJST1I6CisgICAgICAgICAgICBjYXNlIE5HWF9IVFRQU19OT19DRVJUOgogICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX0JBRF9SRVFVRVNUOwogICAgICAgICAgICAgICAgIGVycm9yID0gTkdYX0hUVFBfQkFEX1JFUVVFU1Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IDBmMTYyYTcuLjgzZjJhZGMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC04MTAsMTkgKzgxMCwxMiBAQAogbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9tZXRob2Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQogewotICAgIGlmIChyLT5tZXRob2RfbmFtZS5kYXRhKSB7Ci0gICAgICAgIGlmIChyLT51cHN0cmVhbSAmJiByLT51cHN0cmVhbS0+bWV0aG9kLmxlbikgewotICAgICAgICAgICAgdi0+bGVuID0gci0+dXBzdHJlYW0tPm1ldGhvZC5sZW47Ci0gICAgICAgICAgICB2LT5kYXRhID0gci0+dXBzdHJlYW0tPm1ldGhvZC5kYXRhOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2LT5sZW4gPSByLT5tZXRob2RfbmFtZS5sZW47Ci0gICAgICAgICAgICB2LT5kYXRhID0gci0+bWV0aG9kX25hbWUuZGF0YTsKLSAgICAgICAgfQotCisgICAgaWYgKHItPm1haW4tPm1ldGhvZF9uYW1lLmRhdGEpIHsKKyAgICAgICAgdi0+bGVuID0gci0+bWFpbi0+bWV0aG9kX25hbWUubGVuOwogICAgICAgICB2LT52YWxpZCA9IDE7CiAgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKICAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICAgICAgdi0+ZGF0YSA9IHItPm1haW4tPm1ldGhvZF9uYW1lLmRhdGE7CiAKICAgICB9IGVsc2UgewogICAgICAgICB2LT5ub3RfZm91bmQgPSAxOwo=