ZGlmZiAtLWdpdCBhL2F1dG8vb3B0aW9ucyBiL2F1dG8vb3B0aW9ucwppbmRleCBhNTZiYzQyLi5hZDI1Y2MyIDEwMDY0NAotLS0gYS9hdXRvL29wdGlvbnMKKysrIGIvYXV0by9vcHRpb25zCkBAIC0yMjUsNiArMjI1LDEwIEBACiAgIC0taHR0cC1mYXN0Y2dpLXRlbXAtcGF0aD1QQVRIICAgICAgc2V0IHBhdGggdG8gdGhlIGh0dHAgZmFzdGNnaSB0ZW1wb3JhcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBwYXRoCiAKKyAgLS13aXRob3V0LWh0dHAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIEhUVFAgc2VydmVyCisKKyAgLS13aXRoLWltYXAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgSU1BUDQvUE9QMyBwcm94eSBtb2R1bGUKKwogICAtLXdpdGgtY2M9UEFUSCAgICAgICAgICAgICAgICAgICAgIHNldCBwYXRoIHRvIEMgY29tcGlsZXIKICAgLS13aXRoLWNwcD1QQVRIICAgICAgICAgICAgICAgICAgICBzZXQgcGF0aCB0byBDIHByZXByb2Nlc3NvcgogICAtLXdpdGgtY2Mtb3B0PU9QVElPTlMgICAgICAgICAgICAgIHNldCBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIEMgY29tcGlsZXIKZGlmZiAtLWdpdCBhL2NvbmYvbmdpbnguY29uZiBiL2NvbmYvbmdpbnguY29uZgppbmRleCBhNGMxZmM1Li41NDJmZGEyIDEwMDY0NAotLS0gYS9jb25mL25naW54LmNvbmYKKysrIGIvY29uZi9uZ2lueC5jb25mCkBAIC0yNSw4ICsyNSw3IEBACiAgICAgc2VydmVyIHsKICAgICAgICAgbGlzdGVuICA4MDsKIAotICAgICAgICBjaGFyc2V0ICAgICAgICAgb247Ci0gICAgICAgIHNvdXJjZV9jaGFyc2V0ICBrb2k4LXI7CisgICAgICAgIGNoYXJzZXQga29pOC1yOwogCiAgICAgICAgICNhY2Nlc3NfbG9nICBsb2dzL2FjY2Vzcy5sb2c7CiAKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggNzVmOGQyNi4uNWJiYzg1OCAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwxMjUgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS4zOSIgZGF0ZT0iMTQuMDcuMjAwNSI+CisKKzxjaGFuZ2U+Cis8cGFyYSBsYW5nPSJydSI+Civp2s3FzsXOydEg1yDNz8TVzMUgbmd4X2h0dHBfY2hhcnNldF9tb2R1bGU6CivEydLFy9TJ18EgZGVmYXVsdF9jaGFyc2V0INXQ0sHaxM7FzsE7CivEydLFy9TJ18EgY2hhcnNldCDawcTBo9Qgy8/EydLP18vVIM/U18XUwTsKK8TJ0sXL1MnXwSBzb3VyY2VfY2hhcnNldCDawcTBo9Qg1M/M2MvPIMnTyM/EztXAIMvPxMnSz9fL1S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK1RoZSBjaGFuZ2VzIGluIHRoZSBuZ3hfaHR0cF9jaGFyc2V0X21vZHVsZToKK3RoZSAiZGVmYXVsdF9jaGFyc2V0IiBkaXJlY3RpdmUgaXMgY2FuY2VsZWQ7Cit0aGUgImNoYXJzZXQiIGRpcmVjdGl2ZSBzZXRzIHRoZSByZXNwb25zZSBjaGFyc2V0OwordGhlICJzb3VyY2VfY2hhcnNldCIgZGlyZWN0aXZlIHNldHMgdGhlIHNvdXJjZSBjaGFyc2V0IG9ubHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJINDF0sXOwdDSwdfMxc7JySDP28nCy8kgNDAxLCDQz8zV3sXOzs/KIM/UIMLcy8XOxMEsIM7FINDF0sXEwdfBzMHT2Aor09TSz8vBINrBx8/Mz9fLwSAiV1dXLUF1dGhlbnRpY2F0ZSIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgYmFja2VuZCAiV1dXLUF1dGhlbnRpY2F0ZSIgaGVhZGVyIGxpbmUgZGlkIG5vdCB0cmFuc2ZlcnJlZCB3aGlsZQordGhlIDQwMSByZXNwb25zZSBjb2RlIHJlZGlyZWN0aW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXMySBuZ3hfaHR0cF9wcm94eV9tb2R1bGUgySBuZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZSDNz8fMySDawcvS2dTYCivTz8XEyc7FzsnFIMTPINTPx88sIMvByyDe1M8tzsnC1cTYIMLZzM8g0MXSxcTBzs8gy8zJxc7U1TsKK8/bycLLwSDQz9HXyczB09gg1yAwLjEuMzguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfcHJveHlfbW9kdWxlIGFuZCBuZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZSBtYXkgY2xvc2UKK2EgY29ubmVjdGlvbiBiZWZvcmUgYW55dGhpbmcgd2FzIHRyYW5zZmVycmVkIHRvIGEgY2xpZW50OworYnVnIGFwcGVhcmVkIGluIDAuMS4zOC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9Indvcmthcm91bmQiPgorPHBhcmEgbGFuZz0icnUiPgorz8LSwcLP1MvBIM/bycLLySDJzsnDycHMydrBw8nJINcgY3J5cHRfcigpINcgTGludXggZ2xpYmMuIAorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIExpbnV4IGdsaWJjIGNyeXB0X3IoKSBpbml0aWFsaXphdGlvbiBidWcuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorzc/E1czYIG5neF9odHRwX3NzaV9tb2R1bGUgzsUg0M/ExMXS1snXwcwgz9TOz9PJ1MXM2M7ZxSBVUkkg1wory8/Nwc7ExSBpbmNsdWRlIHZpcnR1YWwuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfc3NpX21vZHVsZSBkaWQgbm90IHN1cHBvcnQgdGhlIHJlbGF0aXZlIFVSSSBpbgordGhlICJpbmNsdWRlIHZpcnR1YWwiIGNvbW1hbmQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDXINPU0s/LxSDawcfPzM/Xy8Egz9TXxdTBIMLcy8XOxMEgwtnMwSDT1NLPy8EgIkxvY2F0aW9uIiwKK8vP1M/S1cAgbmdpbnggzsUgxM/M1sXOIMLZzCDJ2s3FztHU2Cwg1M8g1yDP1NfF1MUg0MXSxcTB18HMz9PYINTFzM8gNTAwIM/bycLLyTsKK8/bycLLwSDQz9HXyczB09gg1yAwLjEuMjkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgYmFja2VuZCByZXNwb25zZSBoYWQgdGhlICJMb2NhdGlvbiIgaGVhZGVyIGxpbmUgYW5kIG5naW54CitzaG91bGQgbm90IHJld3JpdGUgdGhpcyBsaW5lLCB0aGVuIHRoZSA1MDAgY29kZSByZXNwb25zZSBib2R5IHdhcyB0cmFuc2ZlcnJlZDsKK2J1ZyBhcHBlYXJlZCBpbiAwLjEuMjkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorzsXLz9TP0tnFIMTJ0sXL1MnX2SDNz8TVzMXKIG5neF9odHRwX3Byb3h5X21vZHVsZSDJIG5neF9odHRwX2Zhc3RjZ2lfbW9kdWxlCivOxSDOwdPMxcTP18HMydPYINMg1dLP187RIHNlcnZlciDOwSDV0s/Xxc7YIGxvY2F0aW9uOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4yOS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3NvbWUgZGlyZWN0aXZlcyBvZiB0aGUgbmd4X2h0dHBfcHJveHlfbW9kdWxlIGFuZCBuZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZQord2VyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIHNlcnZlciB0byB0aGUgbG9jYXRpb24gbGV2ZWw7CitidWcgYXBwZWFyZWQgaW4gMC4xLjI5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9zc2xfbW9kdWxlIM7FINDPxMTF0tbJ18HMIMPF0M/ey8kg08XS1MnGycvB1M/XLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX3NzbF9tb2R1bGUgZGlkIG5vdCBzdXBwb3J0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivP28nCy8Eg1yDNz8TVzMUgbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZSDQ0skg0M/LwdrFIMTMyc7O2cggyc2jziDGwcrMz9c7CivP28nCy8Eg0M/R18nMwdPYINcgMC4xLjM4LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgZGlkIG5vdCBzaG93IGNvcnJlY3RseSB0aGUgbG9uZyBmaWxlIG5hbWVzOworYnVnIGFwcGVhcmVkIGluIDAuMS4zOC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlPgorPHBhcmEgbGFuZz0icnUiPgor6dPQ0sHXzMXOydEg1yBJTUFQL1BPUDMg0NLPy9PJINDSySDX2sHJzc/ExcrT1NfJySDTIMLcy8XOxM/NIM7BINPUwcTJySBsb2dpbi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK0J1Z2ZpeGVzIGluIElNQVAvUE9QMyBwcm94eSBpbiBpbnRlcmFjdGlvbiB3aXRoIGEgYmFja2VuZCBhdCB0aGUgbG9naW4gc3RhdGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjM4IiBkYXRlPSIwOC4wNy4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDIyMWJhMzguLjRiODAwZTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4zOCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMzkiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwppbmRleCBkMTI4MzQwLi5hNzI0NmIwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwpAQCAtMzE1LDE2ICszMTUsMTYgQEAKIAogICAgICAgICBlbnRyeS0+bmFtZS5sZW4gPSBsZW47ICAgICAgICAKIAotICAgICAgICBlbnRyeS0+ZXNjYXBlID0gMiAqIG5neF9lc2NhcGVfdXJpKE5VTEwsIG5neF9kZV9uYW1lKCZkaXIpLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9IVE1MKTsKLQotICAgICAgICBlbnRyeS0+bmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBsZW4gKyBlbnRyeS0+ZXNjYXBlICsgMSk7CisgICAgICAgIGVudHJ5LT5uYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGxlbiArIDEpOwogICAgICAgICBpZiAoZW50cnktPm5hbWUuZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsIGRuYW1lLmRhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgbmd4X2NweXN0cm4oZW50cnktPm5hbWUuZGF0YSwgbmd4X2RlX25hbWUoJmRpciksIGxlbiArIDEpOwogCisgICAgICAgIGVudHJ5LT5lc2NhcGUgPSAyICogbmd4X2VzY2FwZV91cmkoTlVMTCwgbmd4X2RlX25hbWUoJmRpciksIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfRVNDQVBFX0hUTUwpOworCiAgICAgICAgIGlmIChyLT51dGY4KSB7CiAgICAgICAgICAgICBlbnRyeS0+dXRmX2xlbiA9IG5neF91dGZfbGVuZ3RoKCZlbnRyeS0+bmFtZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zNTMsMTQgKzM1MywxNCBAQAogICAgIGVudHJ5ID0gZW50cmllcy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLm5lbHRzOyBpKyspIHsKICAgICAgICAgbGVuICs9IHNpemVvZigiPGEgaHJlZj1cIiIpIC0gMQotICAgICAgICAgICAgKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSBpcyBmb3IgIi8iICovCiAgICAgICAgICAgICArIGVudHJ5W2ldLm5hbWUubGVuICsgZW50cnlbaV0uZXNjYXBlCisgICAgICAgICAgICArIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIGlzIGZvciAiLyIgKi8KICAgICAgICAgICAgICsgc2l6ZW9mKCJcIj4iKSAtIDEKICAgICAgICAgICAgICsgZW50cnlbaV0ubmFtZS5sZW4gLSBlbnRyeVtpXS51dGZfbGVuCiAgICAgICAgICAgICArIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTiArIHNpemVvZigiJmd0OyIpIC0gMgogICAgICAgICAgICAgKyBzaXplb2YoIjwvYT4iKSAtIDEKICAgICAgICAgICAgICsgc2l6ZW9mKCIgMjgtU2VwLTE5NzAgMTI6MDAgIikgLSAxCi0gICAgICAgICAgICArIDIwCisgICAgICAgICAgICArIDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgZmlsZSBzaXplICovCiAgICAgICAgICAgICArIDI7CiAgICAgfQogCkBAIC00MDcsNyArNDA3LDcgQEAKIAogICAgICAgICBsZW4gPSBlbnRyeVtpXS51dGZfbGVuOwogCi0gICAgICAgIGlmIChsZW4pIHsKKyAgICAgICAgaWYgKGVudHJ5W2ldLm5hbWUubGVuIC0gbGVuKSB7CiAgICAgICAgICAgICBpZiAobGVuID4gTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOKSB7CiAgICAgICAgICAgICAgICAgY29weSA9IE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTiAtIDMgKyAxOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwppbmRleCBjYWYzZjNmLi42MmM4MWUxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKQEAgLTksMTggKzksMjYgQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKKyNkZWZpbmUgTkdYX0hUVFBfTk9fQ0hBUlNFVCAgLTIKKworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAqKnRhYmxlczsKICAgICBuZ3hfc3RyX3QgICAgbmFtZTsKIAotICAgIHVuc2lnbmVkICAgICBzZXJ2ZXI6MTsKLSAgICB1bnNpZ25lZCAgICAgdXRmODoxOworICAgIG5neF91aW50X3QgICB1dGY4OyAgIC8qIHVuc2lnbmVkICAgICB1dGY4OjE7ICovCiB9IG5neF9odHRwX2NoYXJzZXRfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X2ludF90ICAgIHNyYzsKICAgICBuZ3hfaW50X3QgICAgZHN0OworfSBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZV90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfaW50X3QgICAgc3JjOworICAgIG5neF9pbnRfdCAgICBkc3Q7CiAgICAgY2hhciAgICAgICAgKnNyYzJkc3Q7CiAgICAgY2hhciAgICAgICAgKmRzdDJzcmM7CiB9IG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3Q7CkBAIC0yOSwxMyArMzcsMTIgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfYXJyYXlfdCAgY2hhcnNldHM7ICAgICAgICAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF90ICovCiAgICAgbmd4X2FycmF5X3QgIHRhYmxlczsgICAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3QgKi8KKyAgICBuZ3hfYXJyYXlfdCAgcmVjb2RlczsgICAgICAgICAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfdCAqLwogfSBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfZmxhZ190ICAgZW5hYmxlOwotCi0gICAgbmd4X2ludF90ICAgIGRlZmF1bHRfY2hhcnNldDsKKyAgICBuZ3hfaW50X3QgICAgY2hhcnNldDsKICAgICBuZ3hfaW50X3QgICAgc291cmNlX2NoYXJzZXQ7CiB9IG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdDsKIApAQCAtNDYsNyArNTMsNyBAQAogfSBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90OwogCiAKLXN0YXRpYyBuZ3hfdWludF90IG5neF9jaGFyc2V0X3JlY29kZShuZ3hfYnVmX3QgKmIsIGNoYXIgKnRhYmxlKTsKK3N0YXRpYyBuZ3hfdWludF90IG5neF9odHRwX2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgY2hhciAqdGFibGUpOwogCiBzdGF0aWMgY2hhciAqbmd4X2NoYXJzZXRfbWFwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgdm9pZCAqY29uZik7CkBAIC01OSwxNCArNjYsMzAgQEAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOwogCiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfY2hhcnNldF9jcmVhdGVfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmKTsKLXN0YXRpYyBjaGFyICpuZ3hfaHR0cF9jaGFyc2V0X2luaXRfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmLCB2b2lkICpjb25mKTsKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9jaGFyc2V0X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfY2hhcnNldF9tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwKICAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfY2hhcnNldF9wb3N0Y29uZmlndXJhdGlvbihuZ3hfY29uZl90ICpjZik7CiAKIAogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX2NvbW1hbmRzW10gPSB7CiAKKyAgICB7IG5neF9zdHJpbmcoImNoYXJzZXQiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9TSUZfQ09ORgorICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9IVFRQX0xJRl9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2h0dHBfc2V0X2NoYXJzZXRfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCwgY2hhcnNldCksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNvdXJjZV9jaGFyc2V0IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfU0lGX0NPTkYKKyAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfSFRUUF9MSUZfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9odHRwX3NldF9jaGFyc2V0X3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3QsIHNvdXJjZV9jaGFyc2V0KSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygiY2hhcnNldF9tYXAiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfQ09ORl9CTE9DS3xOR1hfQ09ORl9UQUtFMiwKICAgICAgIG5neF9jaGFyc2V0X21hcF9ibG9jaywKQEAgLTc0LDM3ICs5NywxNiBAQAogICAgICAgMCwKICAgICAgIE5VTEwgfSwKIAotICAgIHsgbmd4X3N0cmluZygiZGVmYXVsdF9jaGFyc2V0IiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCi0gICAgICBuZ3hfaHR0cF9zZXRfY2hhcnNldF9zbG90LAotICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY2hhcnNldF9sb2NfY29uZl90LCBkZWZhdWx0X2NoYXJzZXQpLAotICAgICAgTlVMTCB9LAotCi0gICAgeyBuZ3hfc3RyaW5nKCJzb3VyY2VfY2hhcnNldCIpLAotICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X2h0dHBfc2V0X2NoYXJzZXRfc2xvdCwKLSAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCwgc291cmNlX2NoYXJzZXQpLAotICAgICAgTlVMTCB9LAotCi0gICAgeyBuZ3hfc3RyaW5nKCJjaGFyc2V0IiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKLSAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCi0gICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3QsIGVuYWJsZSksCi0gICAgICBOVUxMIH0sCi0KICAgICAgIG5neF9udWxsX2NvbW1hbmQKIH07CiAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX2NoYXJzZXRfcG9zdGNvbmZpZ3VyYXRpb24sICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBuZ3hfaHR0cF9jaGFyc2V0X2NyZWF0ZV9tYWluX2NvbmYsICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCi0gICAgbmd4X2h0dHBfY2hhcnNldF9pbml0X21haW5fY29uZiwgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTEzOSw3ICsxNDEsNyBAQAogICAgIG1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CiAgICAgbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwogCi0gICAgaWYgKGxjZi0+ZW5hYmxlID09IDApIHsKKyAgICBpZiAobGNmLT5jaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CiAKQEAgLTE3NiwxMCArMTc4LDEyIEBACiAgICAgfQogCiAgICAgY2hhcnNldHMgPSBtY2YtPmNoYXJzZXRzLmVsdHM7Ci0gICAgci0+aGVhZGVyc19vdXQuY2hhcnNldCA9IGNoYXJzZXRzW2xjZi0+ZGVmYXVsdF9jaGFyc2V0XS5uYW1lOwotICAgIHItPnV0ZjggPSBjaGFyc2V0c1tsY2YtPmRlZmF1bHRfY2hhcnNldF0udXRmODsKKyAgICByLT5oZWFkZXJzX291dC5jaGFyc2V0ID0gY2hhcnNldHNbbGNmLT5jaGFyc2V0XS5uYW1lOworICAgIHItPnV0ZjggPSBjaGFyc2V0c1tsY2YtPmNoYXJzZXRdLnV0Zjg7CiAKLSAgICBpZiAobGNmLT5kZWZhdWx0X2NoYXJzZXQgPT0gbGNmLT5zb3VyY2VfY2hhcnNldCkgeworICAgIGlmIChsY2YtPnNvdXJjZV9jaGFyc2V0ID09IE5HWF9DT05GX1VOU0VUCisgICAgICAgIHx8IGxjZi0+c291cmNlX2NoYXJzZXQgPT0gbGNmLT5jaGFyc2V0KQorICAgIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CiAKQEAgLTIxOCwxMCArMjIyLDEwIEBACiAgICAgbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwogCiAgICAgY2hhcnNldHMgPSBtY2YtPmNoYXJzZXRzLmVsdHM7Ci0gICAgdGFibGUgPSBjaGFyc2V0c1tsY2YtPnNvdXJjZV9jaGFyc2V0XS50YWJsZXNbbGNmLT5kZWZhdWx0X2NoYXJzZXRdOworICAgIHRhYmxlID0gY2hhcnNldHNbbGNmLT5zb3VyY2VfY2hhcnNldF0udGFibGVzW2xjZi0+Y2hhcnNldF07CiAKICAgICBmb3IgKGNsID0gaW47IGNsOyBjbCA9IGNsLT5uZXh0KSB7Ci0gICAgICAgIG5neF9jaGFyc2V0X3JlY29kZShjbC0+YnVmLCB0YWJsZSk7CisgICAgICAgIG5neF9odHRwX2NoYXJzZXRfcmVjb2RlKGNsLT5idWYsIHRhYmxlKTsKICAgICB9CiAKICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlcihyLCBpbik7CkBAIC0yMjksNyArMjMzLDcgQEAKIAogCiBzdGF0aWMgbmd4X3VpbnRfdAotbmd4X2NoYXJzZXRfcmVjb2RlKG5neF9idWZfdCAqYiwgY2hhciAqdGFibGUpCituZ3hfaHR0cF9jaGFyc2V0X3JlY29kZShuZ3hfYnVmX3QgKmIsIGNoYXIgKnRhYmxlKQogewogICAgIHVfY2hhciAgICAgICpwOwogICAgIG5neF91aW50X3QgICBjaGFuZ2U7CkBAIC0zODUsNyArMzg5LDYgQEAKIAogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICpjcDsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAqdmFsdWU7Ci0gICAgbmd4X2h0dHBfY2hhcnNldF90ICAgICAgICAgICAgKmNoYXJzZXQ7CiAgICAgbmd4X2h0dHBfY2hhcnNldF9tYWluX2NvbmZfdCAgKm1jZjsKIAogICAgIGNwID0gKG5neF9pbnRfdCAqKSAocCArIGNtZC0+b2Zmc2V0KTsKQEAgLTM5NCwyMSArMzk3LDIzIEBACiAgICAgICAgIHJldHVybiAiaXMgZHVwbGljYXRlIjsKICAgICB9CiAKKyAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOworCisgICAgaWYgKGNtZC0+b2Zmc2V0ID09IG9mZnNldG9mKG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCwgY2hhcnNldCkKKyAgICAgICAgJiYgbmd4X3N0cmNtcCh2YWx1ZVsxXS5kYXRhLCAib2ZmIikgPT0gMCkKKyAgICB7CisgICAgICAgICpjcCA9IE5HWF9IVFRQX05PX0NIQVJTRVQ7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICB9CisKICAgICBtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKIAotICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7Ci0KICAgICAqY3AgPSBuZ3hfaHR0cF9hZGRfY2hhcnNldCgmbWNmLT5jaGFyc2V0cywgJnZhbHVlWzFdKTsKICAgICBpZiAoKmNwID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKGNtZC0+b2Zmc2V0ID09IG9mZnNldG9mKG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCwgc291cmNlX2NoYXJzZXQpKSB7Ci0gICAgICAgIGNoYXJzZXQgPSBtY2YtPmNoYXJzZXRzLmVsdHM7Ci0gICAgICAgIGNoYXJzZXRbKmNwXS5zZXJ2ZXIgPSAxOwotICAgIH0KLQogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KIApAQCAtNDQxLDcgKzQ0Niw2IEBACiAKICAgICBjLT50YWJsZXMgPSBOVUxMOwogICAgIGMtPm5hbWUgPSAqbmFtZTsKLSAgICBjLT5zZXJ2ZXIgPSAwOwogCiAgICAgaWYgKG5neF9zdHJjYXNlY21wKG5hbWUtPmRhdGEsICJ1dGYtOCIpID09IDApIHsKICAgICAgICAgYy0+dXRmOCA9IDE7CkBAIC00NzUsODIgKzQ3OSwyNyBAQAogICAgIH0KIAogICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmbWNmLT5jaGFyc2V0cywgY2YtPnBvb2wsIDIsIHNpemVvZihuZ3hfaHR0cF9jaGFyc2V0X3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKG5neF9hcnJheV9pbml0KCZtY2YtPnRhYmxlcywgY2YtPnBvb2wsIDQsCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZtY2YtPnRhYmxlcywgY2YtPnBvb2wsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190KSkgPT0gTkdYX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAorICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmbWNmLT5yZWNvZGVzLCBjZi0+cG9vbCwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX2NoYXJzZXRfcmVjb2RlX3QpKSA9PSBOR1hfRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCiAgICAgcmV0dXJuIG1jZjsKIH0KIAogCi1zdGF0aWMgY2hhciAqCi1uZ3hfaHR0cF9jaGFyc2V0X2luaXRfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmLCB2b2lkICpjb25mKQotewotICAgIG5neF9odHRwX2NoYXJzZXRfbWFpbl9jb25mX3QgKm1jZiA9IGNvbmY7Ci0KLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgbjsKLSAgICBuZ3hfaHR0cF9jaGFyc2V0X3QgICAgICAgICAqY2hhcnNldDsKLSAgICBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190ICAqdGFibGVzOwotCi0gICAgdGFibGVzID0gbWNmLT50YWJsZXMuZWx0czsKLSAgICBjaGFyc2V0ID0gbWNmLT5jaGFyc2V0cy5lbHRzOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG1jZi0+Y2hhcnNldHMubmVsdHM7IGkrKykgewotICAgICAgICBpZiAoIWNoYXJzZXRbaV0uc2VydmVyKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXJzZXRbaV0udGFibGVzID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNoYXIgKikgKiBtY2YtPmNoYXJzZXRzLm5lbHRzKTsKLSAgICAgICAgaWYgKGNoYXJzZXRbaV0udGFibGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCBtY2YtPnRhYmxlcy5uZWx0czsgbisrKSB7Ci0gICAgICAgICAgICBpZiAoKG5neF9pbnRfdCkgaSA9PSB0YWJsZXNbbl0uc3JjKSB7Ci0gICAgICAgICAgICAgICAgY2hhcnNldFtpXS50YWJsZXNbdGFibGVzW25dLmRzdF0gPSB0YWJsZXNbbl0uc3JjMmRzdDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChuZ3hfaW50X3QpIGkgPT0gdGFibGVzW25dLmRzdCkgewotICAgICAgICAgICAgICAgIGNoYXJzZXRbaV0udGFibGVzW3RhYmxlc1tuXS5zcmNdID0gdGFibGVzW25dLmRzdDJzcmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbWNmLT5jaGFyc2V0cy5uZWx0czsgaSsrKSB7Ci0gICAgICAgIGlmICghY2hhcnNldFtpXS5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChuID0gMDsgbiA8IG1jZi0+Y2hhcnNldHMubmVsdHM7IG4rKykgewotICAgICAgICAgICAgaWYgKGkgPT0gbikgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2hhcnNldFtpXS50YWJsZXNbbl0pIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vIFwiY2hhcnNldF9tYXBcIiBiZXR3ZWVuIHRoZSBjaGFyc2V0cyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2V0W2ldLm5hbWUsICZjaGFyc2V0W25dLm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5HWF9DT05GX09LOwotfQotCi0KIHN0YXRpYyB2b2lkICoKIG5neF9odHRwX2NoYXJzZXRfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKQogewpAQCAtNTYxLDggKzUxMCw3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBsY2YtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOwotICAgIGxjZi0+ZGVmYXVsdF9jaGFyc2V0ID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgbGNmLT5jaGFyc2V0ID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgbGNmLT5zb3VyY2VfY2hhcnNldCA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgcmV0dXJuIGxjZjsKQEAgLTU3NSwzNyArNTIzLDk1IEBACiAgICAgbmd4X2h0dHBfY2hhcnNldF9sb2NfY29uZl90ICpwcmV2ID0gcGFyZW50OwogICAgIG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCAqY29uZiA9IGNoaWxkOwogCi0gICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsIDApOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX2NoYXJzZXRfcmVjb2RlX3QgICAgICpyZWNvZGU7CisgICAgbmd4X2h0dHBfY2hhcnNldF9tYWluX2NvbmZfdCAgKm1jZjsKIAotICAgIGlmIChjb25mLT5kZWZhdWx0X2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQpIHsKLSAgICAgICAgY29uZi0+ZGVmYXVsdF9jaGFyc2V0ID0gcHJldi0+ZGVmYXVsdF9jaGFyc2V0OwotICAgIH0KKyAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5jaGFyc2V0LCBwcmV2LT5jaGFyc2V0LCBOR1hfSFRUUF9OT19DSEFSU0VUKTsKIAogICAgIGlmIChjb25mLT5zb3VyY2VfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVCkgewogICAgICAgICBjb25mLT5zb3VyY2VfY2hhcnNldCA9IHByZXYtPnNvdXJjZV9jaGFyc2V0OwogICAgIH0KIAotICAgIGlmIChjb25mLT5kZWZhdWx0X2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQKLSAgICAgICAgJiYgY29uZi0+c291cmNlX2NoYXJzZXQgIT0gTkdYX0NPTkZfVU5TRVQpCisgICAgaWYgKGNvbmYtPmNoYXJzZXQgPT0gTkdYX0hUVFBfTk9fQ0hBUlNFVAorICAgICAgICB8fCBjb25mLT5zb3VyY2VfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVAorICAgICAgICB8fCBjb25mLT5jaGFyc2V0ID09IGNvbmYtPnNvdXJjZV9jaGFyc2V0KQogICAgIHsKLSAgICAgICAgY29uZi0+ZGVmYXVsdF9jaGFyc2V0ID0gY29uZi0+c291cmNlX2NoYXJzZXQ7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKICAgICB9CiAKLSAgICBpZiAoY29uZi0+c291cmNlX2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQKLSAgICAgICAgJiYgY29uZi0+ZGVmYXVsdF9jaGFyc2V0ICE9IE5HWF9DT05GX1VOU0VUKQotICAgIHsKLSAgICAgICAgY29uZi0+c291cmNlX2NoYXJzZXQgPSBjb25mLT5kZWZhdWx0X2NoYXJzZXQ7CisgICAgbWNmID0gbmd4X2h0dHBfY29uZl9nZXRfbW9kdWxlX21haW5fY29uZihjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CisgICAgcmVjb2RlID0gbWNmLT5yZWNvZGVzLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IG1jZi0+cmVjb2Rlcy5uZWx0czsgaSsrKSB7CisgICAgICAgIGlmIChjb25mLT5zb3VyY2VfY2hhcnNldCA9PSByZWNvZGVbaV0uc3JjCisgICAgICAgICAgICAmJiBjb25mLT5jaGFyc2V0ID09IHJlY29kZVtpXS5kc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjb25mLT5lbmFibGUKLSAgICAgICAgJiYgKGNvbmYtPmRlZmF1bHRfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVAotICAgICAgICAgICAgfHwgY29uZi0+c291cmNlX2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQpKQotICAgIHsKLSAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBcInNvdXJjZV9jaGFyc2V0XCIgb3IgXCJkZWZhdWx0X2NoYXJzZXRcIiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBcImNoYXJzZXRcIiBpcyBvbiIpOworICAgIHJlY29kZSA9IG5neF9hcnJheV9wdXNoKCZtY2YtPnJlY29kZXMpOworICAgIGlmIChyZWNvZGUgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCisgICAgcmVjb2RlLT5zcmMgPSBjb25mLT5zb3VyY2VfY2hhcnNldDsKKyAgICByZWNvZGUtPmRzdCA9IGNvbmYtPmNoYXJzZXQ7CisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfY2hhcnNldF9wb3N0Y29uZmlndXJhdGlvbihuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgYzsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgaSwgdDsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X3QgICAgICAgICAgICAqY2hhcnNldDsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZV90ICAgICAqcmVjb2RlOworICAgIG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3QgICAgICp0YWJsZXM7CisgICAgbmd4X2h0dHBfY2hhcnNldF9tYWluX2NvbmZfdCAgKm1jZjsKKworICAgIG1jZiA9IG5neF9odHRwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworCisgICAgcmVjb2RlID0gbWNmLT5yZWNvZGVzLmVsdHM7CisgICAgdGFibGVzID0gbWNmLT50YWJsZXMuZWx0czsKKyAgICBjaGFyc2V0ID0gbWNmLT5jaGFyc2V0cy5lbHRzOworCisgICAgZm9yIChpID0gMDsgaSA8IG1jZi0+cmVjb2Rlcy5uZWx0czsgaSsrKSB7CisKKyAgICAgICAgYyA9IHJlY29kZVtpXS5zcmM7CisKKyAgICAgICAgY2hhcnNldFtjXS50YWJsZXMgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhciAqKSAqIG1jZi0+Y2hhcnNldHMubmVsdHMpOworICAgICAgICBpZiAoY2hhcnNldFtjXS50YWJsZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodCA9IDA7IHQgPCBtY2YtPnRhYmxlcy5uZWx0czsgdCsrKSB7CisKKyAgICAgICAgICAgIGlmIChjID09IHRhYmxlc1t0XS5zcmMgJiYgcmVjb2RlW2ldLmRzdCA9PSB0YWJsZXNbdF0uZHN0KSB7CisgICAgICAgICAgICAgICAgY2hhcnNldFtjXS50YWJsZXNbdGFibGVzW3RdLmRzdF0gPSB0YWJsZXNbdF0uc3JjMmRzdDsKKyAgICAgICAgICAgICAgICBnb3RvIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjID09IHRhYmxlc1t0XS5kc3QgJiYgcmVjb2RlW2ldLmRzdCA9PSB0YWJsZXNbdF0uc3JjKSB7CisgICAgICAgICAgICAgICAgY2hhcnNldFtjXS50YWJsZXNbdGFibGVzW3RdLnNyY10gPSB0YWJsZXNbdF0uZHN0MnNyYzsKKyAgICAgICAgICAgICAgICBnb3RvIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgIiBubyBcImNoYXJzZXRfbWFwXCIgYmV0d2VlbiB0aGUgY2hhcnNldHMgIgorICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzZXRbY10ubmFtZSwgJmNoYXJzZXRbcmVjb2RlW2ldLmRzdF0ubmFtZSk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisKKyAgICBuZXh0OgorICAgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDBlNzQ1MjguLjQ4MGEyMjggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUpLAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mKSwKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygiZmFzdGNnaV90ZW1wX3BhdGgiKSwKQEAgLTI5MSwxNCArMjkxLDE0IEBACiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfc2l6ZV9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUpLAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiksCiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoImZhc3RjZ2lfdGVtcF9maWxlX3dyaXRlX3NpemUiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKICAgICAgIG5neF9jb25mX3NldF9zaXplX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9mYXN0Y2dpX2xvY19jb25mX3QsIHVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplKSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiksCiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoImZhc3RjZ2lfbmV4dF91cHN0cmVhbSIpLApAQCAtMTAwMSwxNiArMTAwMSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUgPSAqc3RhdHVzX2xpbmU7CisgICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX2xpbmUgPSAqc3RhdHVzX2xpbmU7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSAyMDA7Ci0gICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1c19saW5lLmxlbiA9IHNpemVvZigiMjAwIE9LIikgLSAxOwotICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5kYXRhID0gKHVfY2hhciAqKSAiMjAwIE9LIjsKKyAgICAgICAgICAgICAgICAgICAgdS0+aGVhZGVyc19pbi5zdGF0dXNfbiA9IDIwMDsKKyAgICAgICAgICAgICAgICAgICAgdS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZS5sZW4gPSBzaXplb2YoIjIwMCBPSyIpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgdS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZS5kYXRhID0gKHVfY2hhciAqKSAiMjAwIE9LIjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB1LT5zdGF0ZS0+c3RhdHVzID0gci0+aGVhZGVyc19vdXQuc3RhdHVzOworICAgICAgICAgICAgICAgIHUtPnN0YXRlLT5zdGF0dXMgPSB1LT5oZWFkZXJzX2luLnN0YXR1c19uOwogI2lmIDAKICAgICAgICAgICAgICAgICBpZiAodS0+Y2FjaGFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgdS0+Y2FjaGFibGUgPSBuZ3hfaHR0cF91cHN0cmVhbV9pc19jYWNoYWJsZShyKTsKQEAgLTE0NTIsOSArMTQ1MiwxMCBAQAogCiAgICAgY29uZi0+dXBzdHJlYW0uc2VuZF9sb3dhdCA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgY29uZi0+dXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKLSAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7Ci0gICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsgCi0gICAgY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOworCisgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOyAKKyAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+dXBzdHJlYW0ubWV0aG9kID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKQEAgLTE1MjMsMjMgKzE1MjQsMjggQEAKICAgICB9CiAKIAotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUsCisgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemVfY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX1VOU0VUX1NJWkUpOwogCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplID09IE5HWF9DT05GX1VOU0VUX1NJWkUpIHsKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemVfY29uZiA9PSBOR1hfQ09ORl9VTlNFVF9TSVpFKSB7CiAgICAgICAgIGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplID0gMiAqIHNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mOworICAgIH0KIAotICAgIH0gZWxzZSBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPCBzaXplKSB7CisgICAgaWYgKGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplIDwgc2l6ZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgIlwiZmFzdGNnaV9idXN5X2J1ZmZlcnNfc2l6ZVwiIG11c3QgYmUgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gIgogICAgICAgICAgICAgICJtYXhpbXVtIG9mIHRoZSB2YWx1ZSBvZiBcImZhc3RjZ2lfaGVhZGVyX2J1ZmZlcl9zaXplXCIgYW5kICIKICAgICAgICAgICAgICAib25lIG9mIHRoZSBcImZhc3RjZ2lfYnVmZmVyc1wiIik7CiAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KIAotICAgIH0gZWxzZSBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUKLSAgICAgICAgICAgICAgID4gKGNvbmYtPnVwc3RyZWFtLmJ1ZnMubnVtIC0gMSkgKiBjb25mLT51cHN0cmVhbS5idWZzLnNpemUpCisgICAgaWYgKGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplCisgICAgICAgID4gKGNvbmYtPnVwc3RyZWFtLmJ1ZnMubnVtIC0gMSkgKiBjb25mLT51cHN0cmVhbS5idWZzLnNpemUpCiAgICAgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgIlwiZmFzdGNnaV9idXN5X2J1ZmZlcnNfc2l6ZVwiIG11c3QgYmUgbGVzcyB0aGFuICIKQEAgLTE1NDksMTQgKzE1NTUsMTggQEAKICAgICB9CiAKIAotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUsCisgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX1VOU0VUX1NJWkUpOwogCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID09IE5HWF9DT05GX1VOU0VUX1NJWkUpIHsKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiA9PSBOR1hfQ09ORl9VTlNFVF9TSVpFKSB7CiAgICAgICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID0gMiAqIHNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mOworICAgIH0KIAotICAgIH0gZWxzZSBpZiAoY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUgPCBzaXplKSB7CisgICAgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplIDwgc2l6ZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgIlwiZmFzdGNnaV90ZW1wX2ZpbGVfd3JpdGVfc2l6ZVwiIG11c3QgYmUgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gIgogICAgICAgICAgICAgICJtYXhpbXVtIG9mIHRoZSB2YWx1ZSBvZiBcImZhc3RjZ2lfaGVhZGVyX2J1ZmZlcl9zaXplXCIgYW5kICIKQEAgLTE1NjYsMTYgKzE1NzYsMTkgQEAKICAgICB9CiAKIAotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplLAorICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX1VOU0VUX1NJWkUpOwogCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSA9PSBOR1hfQ09ORl9VTlNFVF9TSVpFKSB7Ci0KKyAgICBpZiAoY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPT0gTkdYX0NPTkZfVU5TRVRfU0laRSkgewogICAgICAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZjsKKyAgICB9CiAKLSAgICB9IGVsc2UgaWYgKGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSAhPSAwCi0gICAgICAgICAgICAgICAmJiBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgPCBzaXplKQorICAgIGlmIChjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgIT0gMAorICAgICAgICAmJiBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgPCBzaXplKQogICAgIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICJcImZhc3RjZ2lfbWF4X3RlbXBfZmlsZV9zaXplXCIgbXVzdCBiZSBlcXVhbCB0byB6ZXJvIHRvIGRpc2FibGUgIgpAQCAtMTU5OCw3ICsxNjExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0ZBU1RDR0lfVEVNUF9QQVRILCAxLCAyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX3RlbXBfaGFuZGxlciwgY2YpOwogCi0gICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSwKKyAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpLCAwKTsKIAogICAgIGlmIChjb25mLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSAmJiBjb25mLT51cHN0cmVhbS5sb2NhdGlvbi0+bGVuID4gMSkgewpAQCAtMTYxNywxMCArMTYzMCwxMCBAQAogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHksIDEpOwogCi0gICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT51cHN0cmVhbS5yZWRpcmVjdF9lcnJvcnMsCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0ucmVkaXJlY3RfZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucmVkaXJlY3RfZXJyb3JzLCAwKTsKIAotICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc194X3Bvd2VyZWRfYnksCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc194X3Bvd2VyZWRfYnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5wYXNzX3hfcG93ZXJlZF9ieSwgMSk7CiAKIApAQCAtMTYyOCw3ICsxNjQxLDYgQEAKIAogICAgIGlmIChjb25mLT5wZWVycyA9PSBOVUxMKSB7CiAgICAgICAgIGNvbmYtPnBlZXJzID0gcHJldi0+cGVlcnM7Ci0gICAgICAgIGNvbmYtPnVwc3RyZWFtID0gcHJldi0+dXBzdHJlYW07CiAgICAgfQogCiAgICAgaWYgKGNvbmYtPnBhcmFtc19zb3VyY2UgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggNTk2ZTUyNC4uMDI0MzAyOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygiZ3ppcF9odHRwX3ZlcnNpb24iKSwKLSAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9BTlksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfZW51bV9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZ3ppcF9jb25mX3QsIGh0dHBfdmVyc2lvbiksCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCA4NTUwM2QwLi45MjYwNWUwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplKSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplX2NvbmYpLAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV90ZW1wX3BhdGgiKSwKQEAgLTIzMywxNCArMjMzLDE0IEBACiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfc2l6ZV9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgdXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplKSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mKSwKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygicHJveHlfdGVtcF9maWxlX3dyaXRlX3NpemUiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKICAgICAgIG5neF9jb25mX3NldF9zaXplX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZSksCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mKSwKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygicHJveHlfbmV4dF91cHN0cmVhbSIpLApAQCAtNzIwLDIxICs3MjAsMjEgQEAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBwLT5zdGF0dXM7CisgICAgdS0+aGVhZGVyc19pbi5zdGF0dXNfbiA9IHAtPnN0YXR1czsKICAgICB1LT5zdGF0ZS0+c3RhdHVzID0gcC0+c3RhdHVzOwogCi0gICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUubGVuID0gcC0+c3RhdHVzX2VuZCAtIHAtPnN0YXR1c19zdGFydDsKLSAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUubGVuKTsKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUuZGF0YSA9PSBOVUxMKSB7CisgICAgdS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZS5sZW4gPSBwLT5zdGF0dXNfZW5kIC0gcC0+c3RhdHVzX3N0YXJ0OworICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX2xpbmUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX2xpbmUubGVuKTsKKyAgICBpZiAodS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZS5kYXRhID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9Ci0gICAgbmd4X21lbWNweShyLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5kYXRhLCBwLT5zdGF0dXNfc3RhcnQsCi0gICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5sZW4pOworICAgIG5neF9tZW1jcHkodS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZS5kYXRhLCBwLT5zdGF0dXNfc3RhcnQsCisgICAgICAgICAgICAgICB1LT5oZWFkZXJzX2luLnN0YXR1c19saW5lLmxlbik7CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiaHR0cCBwcm94eSBzdGF0dXMgJXVpIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzLCAmci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUpOworICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzLCAmdS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZSk7CiAKICAgICB1LT5wcm9jZXNzX2hlYWRlciA9IG5neF9odHRwX3Byb3h5X3Byb2Nlc3NfaGVhZGVyOwogCkBAIC0xMzAxLDkgKzEzMDEsMTAgQEAKIAogICAgIGNvbmYtPnVwc3RyZWFtLnNlbmRfbG93YXQgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogICAgIGNvbmYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7Ci0gICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwotICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7ICAKLSAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisKKyAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKKyAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7ICAKKyAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+dXBzdHJlYW0ubWV0aG9kID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKQEAgLTEzNzQsMjMgKzEzNzUsMjggQEAKICAgICB9CiAKIAotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZSwKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0NPTkZfVU5TRVRfU0laRSk7CiAKLSAgICBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPT0gTkdYX0NPTkZfVU5TRVRfU0laRSkgeworICAgIGlmIChjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mID09IE5HWF9DT05GX1VOU0VUX1NJWkUpIHsKICAgICAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPSAyICogc2l6ZTsKLQotICAgIH0gZWxzZSBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPCBzaXplKSB7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mOworICAgIH0KKyAgICAKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPCBzaXplKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAiXCJwcm94eV9idXN5X2J1ZmZlcnNfc2l6ZVwiIG11c3QgYmUgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gIgogICAgICAgICAgICAgICJtYXhpbXVtIG9mIHRoZSB2YWx1ZSBvZiBcInByb3h5X2hlYWRlcl9idWZmZXJfc2l6ZVwiIGFuZCAiCiAgICAgICAgICAgICAgIm9uZSBvZiB0aGUgXCJwcm94eV9idWZmZXJzXCIiKTsKIAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQogCi0gICAgfSBlbHNlIGlmIChjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZQotICAgICAgICAgICAgICAgPiAoY29uZi0+dXBzdHJlYW0uYnVmcy5udW0gLSAxKSAqIGNvbmYtPnVwc3RyZWFtLmJ1ZnMuc2l6ZSkKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUKKyAgICAgICAgPiAoY29uZi0+dXBzdHJlYW0uYnVmcy5udW0gLSAxKSAqIGNvbmYtPnVwc3RyZWFtLmJ1ZnMuc2l6ZSkKICAgICB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAiXCJwcm94eV9idXN5X2J1ZmZlcnNfc2l6ZVwiIG11c3QgYmUgbGVzcyB0aGFuICIKQEAgLTEzOTgsMTYgKzE0MDQsMjAgQEAKIAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQotICAgIAogCi0gICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplLAorCisgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX1VOU0VUX1NJWkUpOwogCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID09IE5HWF9DT05GX1VOU0VUX1NJWkUpIHsKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiA9PSBOR1hfQ09ORl9VTlNFVF9TSVpFKSB7CiAgICAgICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID0gMiAqIHNpemU7Ci0KLSAgICB9IGVsc2UgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplIDwgc2l6ZSkgeworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZjsKKyAgICB9CisgICAgCisgICAgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplIDwgc2l6ZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgIlwicHJveHlfdGVtcF9maWxlX3dyaXRlX3NpemVcIiBtdXN0IGJlIGVxdWFsIG9yIGJpZ2dlciB0aGFuICIKICAgICAgICAgICAgICAibWF4aW11bSBvZiB0aGUgdmFsdWUgb2YgXCJwcm94eV9oZWFkZXJfYnVmZmVyX3NpemVcIiBhbmQgIgpAQCAtMTQxNiwxNyArMTQyNiwxOSBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0KLSAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSwKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9VTlNFVF9TSVpFKTsKIAotICAgIGlmIChjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgPT0gTkdYX0NPTkZfVU5TRVRfU0laRSkgewotCisgICAgaWYgKGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mID09IE5HWF9DT05GX1VOU0VUX1NJWkUpIHsKICAgICAgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmY7CisgICAgfQogCi0gICAgfSBlbHNlIGlmIChjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgIT0gMAotICAgICAgICAgICAgICAgJiYgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplIDwgc2l6ZSkKKyAgICBpZiAoY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplICE9IDAKKyAgICAgICAgJiYgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplIDwgc2l6ZSkKICAgICB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAiXCJmYXN0Y2dpX21heF90ZW1wX2ZpbGVfc2l6ZVwiIG11c3QgYmUgZXF1YWwgdG8gemVybyB0byBkaXNhYmxlICIKQEAgLTE0MzcsNiArMTQ0OSw3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKKwogICAgIG5neF9jb25mX21lcmdlX2JpdG1hc2tfdmFsdWUoY29uZi0+dXBzdHJlYW0ubmV4dF91cHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLm5leHRfdXBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTkdYX0NPTkZfQklUTUFTS19TRVQKQEAgLTE0NDgsNyArMTQ2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9QUk9YWV9URU1QX1BBVEgsIDEsIDIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfdGVtcF9oYW5kbGVyLCBjZik7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpLAorICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucGFzc191bnBhcnNlZF91cmksIDApOwogCiAgICAgaWYgKGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpICYmIGNvbmYtPnVwc3RyZWFtLmxvY2F0aW9uLT5sZW4gPiAxKSB7CkBAIC0xNDY3LDE0ICsxNDgwLDE0IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSwgMSk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycywKKyAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5yZWRpcmVjdF9lcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5yZWRpcmVjdF9lcnJvcnMsIDApOwogCi0gICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3hfcG93ZXJlZF9ieSwKKyAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3hfcG93ZXJlZF9ieSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnBhc3NfeF9wb3dlcmVkX2J5LCAxKTsKLSAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3Nfc2VydmVyLAorICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3Nfc2VydmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucGFzc19zZXJ2ZXIsIDApOwotICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc194X2FjY2VsX2V4cGlyZXMsCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc194X2FjY2VsX2V4cGlyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5wYXNzX3hfYWNjZWxfZXhwaXJlcywgMCk7CiAKIApAQCAtMTUwOCw3ICsxNTIxLDYgQEAKIAogICAgIGlmIChjb25mLT5wZWVycyA9PSBOVUxMKSB7CiAgICAgICAgIGNvbmYtPnBlZXJzID0gcHJldi0+cGVlcnM7Ci0gICAgICAgIGNvbmYtPnVwc3RyZWFtID0gcHJldi0+dXBzdHJlYW07CiAgICAgfQogCiAgICAgaWYgKGNvbmYtPmhlYWRlcnNfc291cmNlID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA4NTY3MjZhLi5iZjljMTI0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCkBAIC0xMzczLDggKzEzNzMsOCBAQAogbmd4X2h0dHBfc3NpX2luY2x1ZGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCwKICAgICBuZ3hfc3RyX3QgKipwYXJhbXMpCiB7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgIGNoLCAqcCwgKip2YWx1ZTsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAqc2l6ZSwgbGVuOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICBjaCwgKnAsICoqdmFsdWUsICpkYXRhOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICpzaXplLCBsZW4sIHByZWZpeDsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgaiwgbiwgYnJhY2tldDsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgdXJpLCBhcmdzLCBuYW1lOwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICBsZW5ndGhzLCB2YWx1ZXM7CkBAIC0xMzg1LDYgKzEzODUsNyBAQAogICAgIHVyaSA9ICpwYXJhbXNbTkdYX0hUVFBfU1NJX0lOQ0xVREVfVklSVFVBTF07CiAgICAgYXJncy5sZW4gPSAwOwogICAgIGFyZ3MuZGF0YSA9IE5VTEw7CisgICAgcHJlZml4ID0gMDsKIAogICAgIG4gPSBuZ3hfaHR0cF9zY3JpcHRfdmFyaWFibGVzX2NvdW50KCZ1cmkpOwogCkBAIC0xNDk3LDYgKzE0OTgsMjQgQEAKICAgICAgICAgICAgICp2YWx1ZSA9IG5hbWUuZGF0YTsKICAgICAgICAgfQogCisgICAgICAgIHNpemUgPSBsZW5ndGhzLmVsdHM7CisgICAgICAgIHZhbHVlID0gdmFsdWVzLmVsdHM7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlcy5uZWx0czsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2l6ZVtpXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZVtpXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChwcmVmaXggPSByLT51cmkubGVuOyBwcmVmaXg7IHByZWZpeC0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci0+dXJpLmRhdGFbcHJlZml4IC0gMV0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICs9IHByZWZpeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgbGVuKTsKICAgICAgICAgaWYgKHAgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKQEAgLTE1MDUsMTIgKzE1MjQsMzcgQEAKICAgICAgICAgdXJpLmxlbiA9IGxlbjsKICAgICAgICAgdXJpLmRhdGEgPSBwOwogCi0gICAgICAgIHNpemUgPSBsZW5ndGhzLmVsdHM7Ci0gICAgICAgIHZhbHVlID0gdmFsdWVzLmVsdHM7CisgICAgICAgIGlmIChwcmVmaXgpIHsKKyAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIHItPnVyaS5kYXRhLCBwcmVmaXgpOworICAgICAgICB9CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlcy5uZWx0czsgaSsrKSB7CiAgICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCB2YWx1ZVtpXSwgc2l6ZVtpXSk7CiAgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh1cmkuZGF0YVswXSAhPSAnLycpIHsKKyAgICAgICAgICAgIGZvciAocHJlZml4ID0gci0+dXJpLmxlbjsgcHJlZml4OyBwcmVmaXgtLSkgeworICAgICAgICAgICAgICAgIGlmIChyLT51cmkuZGF0YVtwcmVmaXggLSAxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICAgICAgbGVuID0gcHJlZml4ICsgdXJpLmxlbjsKKworICAgICAgICAgICAgICAgIGRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGRhdGEsIHItPnVyaS5kYXRhLCBwcmVmaXgpOworICAgICAgICAgICAgICAgIG5neF9tZW1jcHkocCwgdXJpLmRhdGEsIHVyaS5sZW4pOworCisgICAgICAgICAgICAgICAgdXJpLmxlbiA9IGxlbjsKKyAgICAgICAgICAgICAgICB1cmkuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgdXJpLmxlbjsgaSsrKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCmluZGV4IDA0ZDRjOTEuLmJmMWQyNGYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCkBAIC0yMjEsMTggKzIyMSwxOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY29uZi0+c3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBjb25mLT5jZXJ0aWZpY2F0ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pID09IDApIHsKKyAgICBpZiAoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjb25mLT5zc2xfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBjb25mLT5jZXJ0aWZpY2F0ZS5kYXRhKSA9PSAwKQorICAgIHsKICAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKFwiJXNcIikgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShcIiVzXCIpIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+Y2VydGlmaWNhdGUuZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKICAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbmYtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBjb25mLT5jZXJ0aWZpY2F0ZV9rZXkuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pID09IDApCisgICAgewogICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShcIiVzXCIpIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+Y2VydGlmaWNhdGVfa2V5LmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggODU3MWI4Ni4uNGI4NzdhMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0xMDMsNiArMTAzLDExIEBACiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2NvbmRpdGlvbmFsX2NvcHlfaGVhZGVyX2xpbmUsCiAgICAgICAgICAgICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Vwc3RyZWFtX2NvbmZfdCwgcGFzc19zZXJ2ZXIpLCAwIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoIldXVy1BdXRoZW50aWNhdGUiKSwKKyAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19oZWFkZXJfbGluZSwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyc19pbl90LCB3d3dfYXV0aGVudGljYXRlKSwKKyAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fY29weV9oZWFkZXJfbGluZSwgMCwgMCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJMb2NhdGlvbiIpLAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9pZ25vcmVfaGVhZGVyX2xpbmUsIDAsCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3Jld3JpdGVfbG9jYXRpb24sIDAsIDAgfSwKQEAgLTExMyw3ICsxMTgsNyBAQAogCiAgICAgeyBuZ3hfc3RyaW5nKCJTZXQtQ29va2llIiksCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2lnbm9yZV9oZWFkZXJfbGluZSwgMCwKLSAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fY29weV9oZWFkZXJfbGluZSwgMCwgMSB9LAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9jb3B5X2hlYWRlcl9saW5lLCAwLCAwIH0sCiAKICAgICB7IG5neF9zdHJpbmcoIkNhY2hlLUNvbnRyb2wiKSwKICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19tdWx0aV9oZWFkZXJfbGluZXMsCkBAIC0zODYsOSArMzkxLDYgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGV2LT5lb2YgPSAxOwotICAgIGMtPmNsb3NlZCA9IDE7Ci0KICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICBpZiAoZXJyID09IE5HWF9FQUdBSU4pIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQwMCw2ICs0MDIsOSBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAorICAgIGV2LT5lb2YgPSAxOworICAgIGMtPmNsb3NlZCA9IDE7CisKICAgICBpZiAoIXUtPmNhY2hhYmxlICYmIHUtPnBlZXIuY29ubmVjdGlvbikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgZXYtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgY2xvc2VkIHByZW1hdHVyZWx5IGNvbm5lY3Rpb24sICIKQEAgLTg1MSw3ICs4NTYsNyBAQAogCiAgICAgLyogcmMgPT0gTkdYX09LICovCiAKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikgeworICAgIGlmICh1LT5oZWFkZXJzX2luLnN0YXR1c19uID09IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikgewogCiAgICAgICAgIGlmICh1LT5wZWVyLnRyaWVzID4gMQogICAgICAgICAgICAgJiYgKHUtPmNvbmYtPm5leHRfdXBzdHJlYW0gJiBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzUwMCkpCkBAIC04NjcsMTQgKzg3MiwxNCBAQAogICAgICAgICAgICAgJiYgKHUtPmNvbmYtPnVzZV9zdGFsZSAmIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0hUVFBfNTAwKSkKICAgICAgICAgewogICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfc2VuZF9jYWNoZWRfcmVzcG9uc2UocikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3NlbmRfY2FjaGVkX3Jlc3BvbnNlKHIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX05PVF9GT1VORAorICAgIGlmICh1LT5oZWFkZXJzX2luLnN0YXR1c19uID09IE5HWF9IVFRQX05PVF9GT1VORAogICAgICAgICAmJiB1LT5wZWVyLnRyaWVzID4gMQogICAgICAgICAmJiB1LT5jb25mLT5uZXh0X3Vwc3RyZWFtICYgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF80MDQpCiAgICAgewpAQCAtODgzLDcgKzg4OCw3IEBACiAgICAgfQogCiAKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID49IE5HWF9IVFRQX0JBRF9SRVFVRVNUCisgICAgaWYgKHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPj0gTkdYX0hUVFBfQkFEX1JFUVVFU1QKICAgICAgICAgJiYgdS0+Y29uZi0+cmVkaXJlY3RfZXJyb3JzCiAgICAgICAgICYmIHItPmVycl9jdHggPT0gTlVMTCkKICAgICB7CkBAIC04OTMsOSArODk4LDI1IEBACiAKICAgICAgICAgICAgIGVycl9wYWdlID0gY2xjZi0+ZXJyb3JfcGFnZXMtPmVsdHM7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xjZi0+ZXJyb3JfcGFnZXMtPm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoZXJyX3BhZ2VbaV0uc3RhdHVzID09IChuZ3hfaW50X3QpIHItPmhlYWRlcnNfb3V0LnN0YXR1cykgeworICAgICAgICAgICAgICAgIGlmIChlcnJfcGFnZVtpXS5zdGF0dXMgPT0gKG5neF9pbnRfdCkgdS0+aGVhZGVyc19pbi5zdGF0dXNfbikgeworCisgICAgICAgICAgICAgICAgICAgIGlmICh1LT5oZWFkZXJzX2luLnN0YXR1c19uID09IE5HWF9IVFRQX1VOQVVUSE9SSVpFRCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC53d3dfYXV0aGVudGljYXRlID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICpyLT5oZWFkZXJzX291dC53d3dfYXV0aGVudGljYXRlID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1LT5oZWFkZXJzX2luLnd3d19hdXRoZW50aWNhdGU7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LT5oZWFkZXJzX2luLnN0YXR1c19uKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkzOCw4ICs5NTksNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUubGVuID0gMDsKLQogICAgICAgICBuZ3hfaHR0cF9pbnRlcm5hbF9yZWRpcmVjdChyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnItPnVwc3RyZWFtLT5oZWFkZXJzX2luLnhfYWNjZWxfcmVkaXJlY3QtPnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xMDAxLDYgKzEwMjAsOSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzID0gdS0+aGVhZGVyc19pbi5zdGF0dXNfbjsKKyAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZSA9IHUtPmhlYWRlcnNfaW4uc3RhdHVzX2xpbmU7CisKICAgICByYyA9IG5neF9odHRwX3NlbmRfaGVhZGVyKHIpOwogCiAgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+IE5HWF9PSykgewpAQCAtMTYyMiw2ICsxNjQ0LDEwIEBACiAgICAgaWYgKHItPnVwc3RyZWFtLT5yZXdyaXRlX3JlZGlyZWN0KSB7CiAgICAgICAgIHJjID0gci0+dXBzdHJlYW0tPnJld3JpdGVfcmVkaXJlY3QociwgaG8sIDApOwogCisgICAgICAgIGlmIChyYyA9PSBOR1hfREVDTElORUQpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KKwogICAgICAgICBpZiAocmMgPT0gTkdYX09LKSB7CiAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9IGhvOwogCkBAIC0xNjY3LDYgKzE2OTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAocmMgPT0gTkdYX0RFQ0xJTkVEKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisKICNpZiAoTkdYX0RFQlVHKQogICAgICAgICBpZiAocmMgPT0gTkdYX09LKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IDQyODI1M2MuLmEzOGY2NWIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtNTIsMTAgKzUyLDE1IEBACiAKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfbG93YXQ7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfYnVmZmVyX3NpemU7CisKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c3lfYnVmZmVyc19zaXplOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3RlbXBfZmlsZV9zaXplOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9maWxlX3dyaXRlX3NpemU7CiAKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c3lfYnVmZmVyc19zaXplX2NvbmY7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfdGVtcF9maWxlX3NpemVfY29uZjsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmY7CisKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIG5leHRfdXBzdHJlYW07CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q7CiAKQEAgLTk1LDYgKzEwMCw5IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X2xpc3RfdCAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOwogCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbjsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19saW5lOworCiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICpzdGF0dXM7CiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICpkYXRlOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqc2VydmVyOwpAQCAtMTEyLDYgKzEyMCw3IEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICpsYXN0X21vZGlmaWVkOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqbG9jYXRpb247CiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICphY2NlcHRfcmFuZ2VzOworICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqd3d3X2F1dGhlbnRpY2F0ZTsKIAogI2lmIChOR1hfSFRUUF9HWklQKQogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqY29udGVudF9lbmNvZGluZzsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYyBiL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYwppbmRleCA2NDY0ZDRhLi4yNTUwOWIyIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIHN0YXRpYyBuZ3hfc3RyX3QgIGdyZWV0aW5nc1tdID0gewogICAgbmd4X3N0cmluZygiK09LIFBPUDMgcmVhZHkiIENSTEYpLAotICAgbmd4X3N0cmluZygiKiBPSyBJTUFQIHJlYWR5IiBDUkxGKQorICAgbmd4X3N0cmluZygiKiBPSyBJTUFQNCByZWFkeSIgQ1JMRikKIH07CiAKIHN0YXRpYyBuZ3hfc3RyX3QgIGludGVybmFsX3NlcnZlcl9lcnJvcnNbXSA9IHsKQEAgLTI3LDcgKzI3LDcgQEAKIHN0YXRpYyB1X2NoYXIgIHBvcDNfb2tbXSA9ICIrT0siIENSTEY7CiBzdGF0aWMgdV9jaGFyICBwb3AzX2ludmFsaWRfY29tbWFuZFtdID0gIi1FUlIgaW52YWxpZCBjb21tYW5kIiBDUkxGOwogCi1zdGF0aWMgdV9jaGFyICBpbWFwX29rW10gPSAiT0siIENSTEY7CitzdGF0aWMgdV9jaGFyICBpbWFwX29rW10gPSAiT0sgY29tcGxldGVkIiBDUkxGOwogc3RhdGljIHVfY2hhciAgaW1hcF9uZXh0W10gPSAiKyBPSyIgQ1JMRjsKIHN0YXRpYyB1X2NoYXIgIGltYXBfYnllW10gPSAiKiBCWUUiIENSTEY7CiBzdGF0aWMgdV9jaGFyICBpbWFwX2ludmFsaWRfY29tbWFuZFtdID0gIkJBRCBpbnZhbGlkIGNvbW1hbmQiIENSTEY7CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYwppbmRleCBlMzkyM2U4Li4zNzQ2MDVlIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3BhcnNlLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogICAgICAgICAgICAgZ290byBpbnZhbGlkOwogCiAgICAgICAgIGNhc2Ugc3dfbGl0ZXJhbF9hcmd1bWVudDoKLSAgICAgICAgICAgIGlmICgtLXMtPmxpdGVyYWxfbGVuKSB7CisgICAgICAgICAgICBpZiAocy0+bGl0ZXJhbF9sZW4gJiYgLS1zLT5saXRlcmFsX2xlbikgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yODEsNyArMjgxLDggQEAKICAgICAgICAgICAgIGNhc2UgTEY6CiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zcGFjZXNfYmVmb3JlX2FyZ3VtZW50OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKaW5kZXggNTE3N2UyOC4uODFkZGI4MyAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKQEAgLTE2OSwxMSArMTY5LDIxIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA9PSBOR1hfSU1BUF9QUk9YWV9JTlZBTElEKSB7CiAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChyYyA9PSBOR1hfSU1BUF9QUk9YWV9FUlJPUikgeworICAgICAgICBzLT5jb25uZWN0aW9uLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKKyAgICAgICAgcy0+Y29ubmVjdGlvbi0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworICAgICAgICByZXYtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CisKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfaGFuZGxlcihjLT5yZWFkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHN3aXRjaCAocy0+aW1hcF9zdGF0ZSkgewogCiAgICAgY2FzZSBuZ3hfaW1hcF9zdGFydDoKQEAgLTE5OCwxNCArMjA4LDE0IEBACiAgICAgY2FzZSBuZ3hfaW1hcF9sb2dpbjoKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19JTUFQLCByZXYtPmxvZywgMCwgImltYXAgcHJveHkgc2VuZCB1c2VyIik7CiAKLSAgICAgICAgbGluZS5sZW4gPSBzLT5sb2dpbi5sZW4gKyAxICsgTkdYX1NJWkVfVF9MRU4gKyAxICsgMjsKKyAgICAgICAgbGluZS5sZW4gPSBzLT5sb2dpbi5sZW4gKyAxICsgMSArIE5HWF9TSVpFX1RfTEVOICsgMSArIDI7CiAgICAgICAgIGxpbmUuZGF0YSA9IG5neF9wYWxsb2MoYy0+cG9vbCwgbGluZS5sZW4pOwogICAgICAgICBpZiAobGluZS5kYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGxpbmUubGVuID0gbmd4X3NwcmludGYobGluZS5kYXRhLCAiJVZ7JXV6fSIgQ1JMRiwKKyAgICAgICAgbGluZS5sZW4gPSBuZ3hfc3ByaW50ZihsaW5lLmRhdGEsICIlViB7JXV6fSIgQ1JMRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+bG9naW4sIHMtPnBhc3N3ZC5sZW4pCiAgICAgICAgICAgICAgICAgICAgLSBsaW5lLmRhdGE7CiAKQEAgLTI5OCwxMSArMzA4LDIxIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA9PSBOR1hfSU1BUF9QUk9YWV9JTlZBTElEKSB7CiAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChyYyA9PSBOR1hfSU1BUF9QUk9YWV9FUlJPUikgeworICAgICAgICBzLT5jb25uZWN0aW9uLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKKyAgICAgICAgcy0+Y29ubmVjdGlvbi0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworICAgICAgICByZXYtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CisKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfaGFuZGxlcihjLT5yZWFkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHN3aXRjaCAocy0+aW1hcF9zdGF0ZSkgewogCiAgICAgY2FzZSBuZ3hfcG9wM19zdGFydDoKQEAgLTQyNCwxMyArNDQ0LDE3IEBACiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwWzBdID09ICdOJyAmJiBwWzFdID09ICdPJykgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9JTUFQX1BST1hZX0VSUk9SOworICAgICAgICB9CisKICAgICAgICAgaWYgKHdoYXQgPT0gTkdYX0lNQVBfV0FJVF9PSykgewogICAgICAgICAgICAgaWYgKHBbMF0gPT0gJyonICYmIHBbMV0gPT0gJyAnICYmIHBbMl0gPT0gJ08nICYmIHBbM10gPT0gJ0snKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHBbMF0gPT0gJysnICYmIHBbMV0gPT0gJyAnICYmIHBbMl0gPT0gJ08nICYmIHBbM10gPT0gJ0snKSB7CisgICAgICAgICAgICBpZiAocFswXSA9PSAnKycpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MjgsNyArNTUyLDcgQEAKIAogICAgICAgICAgICAgICAgIGlmIChuID09IE5HWF9BR0FJTiB8fCBuIDwgKHNzaXplX3QpIHNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQoZHN0LT53cml0ZSwgLyogVE9ETzogTE9XQVQgKi8gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF91c2VyLmMgYi9zcmMvb3MvdW5peC9uZ3hfdXNlci5jCmluZGV4IGNiYjA4YTguLmI0MGEyYjcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF91c2VyLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3VzZXIuYwpAQCAtMzMsOCArMzMsOCBAQAogICAgIG5neF9zZXRfZXJybm8oMCk7CiAKICAgICBjZC5pbml0aWFsaXplZCA9IDA7Ci0gICAgLyogd29yayBhcm91bmQgdGhlIGdsaWJjLTIuMi41IGJ1ZyAqLwotICAgIGNkLmN1cnJlbnRfc2FsdGJpdHMgPSAwOworICAgIC8qIHdvcmsgYXJvdW5kIHRoZSBnbGliYyBidWcgKi8KKyAgICBjZC5jdXJyZW50X3NhbHRbMF0gPSB+c2FsdFswXTsKIAogICAgIHZhbHVlID0gY3J5cHRfcigoY2hhciAqKSBrZXksIChjaGFyICopIHNhbHQsICZjZCk7CiAK