ZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCBkY2NiN2E3Li42MDYxNDlhIDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC0yMjgsNiArMjI4LDE0IEBACiBpZiBbICRJTUFQID0gWUVTIF07IHRoZW4KICAgICBtb2R1bGVzPSIkbW9kdWxlcyAkSU1BUF9NT0RVTEVTIgogCisgICAgaWYgWyAkSU1BUF9TU0wgPSBZRVMgXTsgdGhlbgorICAgICAgICBtb2R1bGVzPSIkbW9kdWxlcyAkSU1BUF9TU0xfTU9EVUxFIgorICAgICAgICBJTUFQX0RFUFM9IiRJTUFQX0RFUFMgJElNQVBfU1NMX0RFUFMiCisgICAgICAgIElNQVBfU1JDUz0iJElNQVBfU1JDUyAkSU1BUF9TU0xfU1JDUyIKKyAgICAgICAgaGF2ZT1OR1hfSU1BUF9TU0wgLiBhdXRvL2hhdmUKKyAgICAgICAgVVNFX09QRU5TU0w9WUVTCisgICAgZmkKKwogICAgIG1vZHVsZXM9IiRtb2R1bGVzICRJTUFQX0FVVEhfSFRUUF9NT0RVTEUiCiAgICAgSU1BUF9TUkNTPSIkSU1BUF9TUkNTICRJTUFQX0FVVEhfSFRUUF9TUkNTIgogCmRpZmYgLS1naXQgYS9hdXRvL29wdGlvbnMgYi9hdXRvL29wdGlvbnMKaW5kZXggYWQyNWNjMi4uMjk2MGYwOSAxMDA2NDQKLS0tIGEvYXV0by9vcHRpb25zCisrKyBiL2F1dG8vb3B0aW9ucwpAQCAtNjQsNiArNjQsNyBAQAogSFRUUF9TVFVCX1NUQVRVUz1OTwogCiBJTUFQPU5PCitJTUFQX1NTTD1OTwogCiBOR1hfQURET05TPQogCkBAIC0xNDEsNiArMTQyLDcgQEAKICAgICAgICAgLS13aXRoLWh0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlKSAgSFRUUF9TVFVCX1NUQVRVUz1ZRVMgICAgICAgOzsKIAogICAgICAgICAtLXdpdGgtaW1hcCkgICAgICAgICAgICAgICAgICAgICBJTUFQPVlFUyAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAtLXdpdGgtaW1hcF9zc2xfbW9kdWxlKSAgICAgICAgICBJTUFQX1NTTD1ZRVMgICAgICAgICAgICAgICA7OwogCiAgICAgICAgIC0tYWRkLW1vZHVsZT0qKSAgICAgICAgICAgICAgICAgIE5HWF9BRERPTlM9IiROR1hfQURET05TICR2YWx1ZSIgOzsKIApkaWZmIC0tZ2l0IGEvYXV0by9zb3VyY2VzIGIvYXV0by9zb3VyY2VzCmluZGV4IDA1ODg5ZjMuLjgwNjg3NWQgMTAwNjQ0Ci0tLSBhL2F1dG8vc291cmNlcworKysgYi9hdXRvL3NvdXJjZXMKQEAgLTM0Niw2ICszNDYsMTAgQEAKICAgICAgICAgICAgc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jIFwKICAgICAgICAgICAgc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYyIKIAorSU1BUF9TU0xfTU9EVUxFPSJuZ3hfaW1hcF9zc2xfbW9kdWxlIgorSU1BUF9TU0xfREVQUz0ic3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5oIgorSU1BUF9TU0xfU1JDUz0ic3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jIgorCiBJTUFQX0FVVEhfSFRUUF9NT0RVTEU9Im5neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUiCiBJTUFQX0FVVEhfSFRUUF9TUkNTPSJzcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMiCiAKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYjg0MzBlZi4uM2JmMjYxMSAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw0OSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjQ0IiBkYXRlPSIwNi4wOS4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK0lNQVAvUE9QMyDQ0s/L08kg0M/ExMXS1snXwcXUIFNTTC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBJTUFQL1BPUDMgcHJveHkgc3VwcG9ydHMgU1NMLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgcHJveHlfdGltZW91dC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicHJveHlfdGltZW91dCIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgdXNlcmlkX21hcmsuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInVzZXJpZF9tYXJrIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9rOwd7FzsnFINDF0sXNxc7Oz8ogJHJlbW90ZV91c2VyIM/Q0sXExczRxdTT0SDOxdrB18nTyc3PIM/UINTPx88sCivJ09DPzNja1cXU09EgzMkgwdfUz9LJ2sHDydEgyczJIM7F1C4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAkcmVtb3RlX3VzZXIgdmFyaWFibGUgdmFsdWUgaXMgZGV0ZXJtaW5lZCBpbmRlcGVuZGVudGx5IG9mCithdXRob3JpemF0aW9uIHVzZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjEuNDMiIGRhdGU9IjMwLjA4LjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggYTU5ZTRkNi4uNzhlM2NhYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC0yMzYsNiArMjM2LDEwIEBACiAKICNlbHNlCiAKKyAgICBpZiAobmd4X2luaXRfc2lnbmFscyhjeWNsZS0+bG9nKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgaWYgKCFuZ3hfaW5oZXJpdGVkICYmIGNjZi0+ZGFlbW9uKSB7CiAgICAgICAgIGlmIChuZ3hfZGFlbW9uKGN5Y2xlLT5sb2cpID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBkNThmNjA4Li5hMjRmODgzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuNDMiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjQ0IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9ORVdQSURfRVhUICAgICAiLm5ld2JpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IDZkZDE5MTkuLjNjMjgwYmQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtOTIsNiArOTIsNyBAQAogICAgIG5neF9zb2NrZXRfdCAgICAgICAgZmQ7CiAKICAgICBuZ3hfcmVjdl9wdCAgICAgICAgIHJlY3Y7CisgICAgbmd4X3NlbmRfcHQgICAgICAgICBzZW5kOwogICAgIG5neF9zZW5kX2NoYWluX3B0ICAgc2VuZF9jaGFpbjsKIAogICAgIG5neF9saXN0ZW5pbmdfdCAgICAqbGlzdGVuaW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggMGMyMWU3Mi4uNmQ5ZjY2ZSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC0yNTYsNiArMjU2LDcgQEAKICAgICAgICAgYy0+c2VydmVycyA9IGxzLT5zZXJ2ZXJzOwogCiAgICAgICAgIGMtPnJlY3YgPSBuZ3hfcmVjdjsKKyAgICAgICAgYy0+c2VuZCA9IG5neF9zZW5kOwogICAgICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CiAKICAgICAgICAgYy0+bG9nID0gbG9nOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCmluZGV4IDUwY2QyMWQuLmJjMjQ0M2QgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKQEAgLTE1MSw2ICsxNTEsNyBAQAogICAgICAgICBjLT5zZXJ2ZXJzID0gbHMtPnNlcnZlcnM7CiAKICAgICAgICAgYy0+cmVjdiA9IG5neF9yZWN2OworICAgICAgICBjLT5zZW5kID0gbmd4X3NlbmQ7CiAgICAgICAgIGMtPnNlbmRfY2hhaW4gPSBuZ3hfc2VuZF9jaGFpbjsKIAogICAgICAgICBjLT5wb29sID0gbmd4X2NyZWF0ZV9wb29sKGxzLT5wb29sX3NpemUsIGxzLT5sb2cpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCBlMDdhMzNkLi43Y2FiMzhjIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtMjI5LDYgKzIyOSwxMCBAQAogICAgIGMtPndyaXRlID0gd2V2OwogICAgIHdldi0+d3JpdGUgPSAxOwogCisgICAgYy0+cmVjdiA9IG5neF9yZWN2OworICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CisKICAgICBjLT5sb2cgPSBwYy0+bG9nOwogICAgIHJldi0+bG9nID0gcGMtPmxvZzsKICAgICB3ZXYtPmxvZyA9IHBjLT5sb2c7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IDFjMGYxNDguLjRjN2RlYjMgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X3NzbF9oYW5kbGVfcmVjdihuZ3hfY29ubmVjdGlvbl90ICpjLCBpbnQgbik7CiBzdGF0aWMgdm9pZCBuZ3hfc3NsX3dyaXRlX2hhbmRsZXIobmd4X2V2ZW50X3QgKndldik7Ci1zdGF0aWMgc3NpemVfdCBuZ3hfc3NsX3dyaXRlKG5neF9jb25uZWN0aW9uX3QgKmMsIHVfY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOwogc3RhdGljIHZvaWQgbmd4X3NzbF9yZWFkX2hhbmRsZXIobmd4X2V2ZW50X3QgKnJldik7CiAKIApAQCAtMjA5LDggKzIwOCwxMCBAQAogICAgIH0KIAogICAgIGlmIChzc2xlcnIgPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAiU1NMIHdhbnRzIHRvIHdyaXRlJXMiLCBoYW5kc2hha2UpOworCisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IGRvZXMgU1NMICVzaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgICBTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkgPyAicmUiIDogIiIpOwogCiAgICAgICAgIGMtPndyaXRlLT5yZWFkeSA9IDA7CiAKQEAgLTM5MSwxMiArMzkyLDExIEBACiB9CiAKIAotc3RhdGljIHNzaXplX3QKK3NzaXplX3QKIG5neF9zc2xfd3JpdGUobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpbnQgICAgICAgICBuLCBzc2xlcnI7Ci0gICAgbmd4X2Vycl90ICAgZXJyOwotICAgIGNoYXIgICAgICAgKmhhbmRzaGFrZTsKKyAgICBpbnQgICAgICAgIG4sIHNzbGVycjsKKyAgICBuZ3hfZXJyX3QgIGVycjsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTCB0byB3cml0ZTogJWQiLCBzaXplKTsKIApAQCAtNDA1LDYgKzQwNSw0NyBAQAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF93cml0ZTogJWQiLCBuKTsKIAogICAgIGlmIChuID4gMCkgeworCisjaWYgKE5HWF9ERUJVRykKKworICAgICAgICBpZiAoIWMtPnNzbC0+aGFuZHNoYWtlZCAmJiBTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkpIHsKKyAgICAgICAgICAgIGNoYXIgICAgICAgICBidWZbMTI5XSwgKnMsICpkOworICAgICAgICAgICAgU1NMX0NJUEhFUiAgKmNpcGhlcjsKKworICAgICAgICAgICAgYy0+c3NsLT5oYW5kc2hha2VkID0gMTsKKworICAgICAgICAgICAgY2lwaGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihjLT5zc2wtPnNzbCk7CisKKyAgICAgICAgICAgIGlmIChjaXBoZXIpIHsKKyAgICAgICAgICAgICAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNpcGhlciwgJmJ1ZlsxXSwgMTI4KTsKKworICAgICAgICAgICAgICAgIGZvciAocyA9ICZidWZbMV0sIGQgPSBidWY7ICpzOyBzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzID09ICcgJyAmJiAqZCA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzID09IExGIHx8ICpzID09IENSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICorK2QgPSAqczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKmQgIT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgIGQrKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAqZCA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBjaXBoZXI6IFwiJXNcIiIsICZidWZbMV0pOyAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgbm8gc2hhcmVkIGNpcGhlcnMiKTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGlmIChjLT5zc2wtPnNhdmVkX3JlYWRfaGFuZGxlcikgewogCiAgICAgICAgICAgICBjLT5yZWFkLT5oYW5kbGVyID0gYy0+c3NsLT5zYXZlZF9yZWFkX2hhbmRsZXI7CkBAIC00NDAsMTUgKzQ4MSw5IEBACiAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKIAotICAgICAgICBpZiAoIVNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSkgewotICAgICAgICAgICAgaGFuZHNoYWtlID0gIiBpbiBTU0wgaGFuZHNoYWtlIjsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaGFuZHNoYWtlID0gIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICJTU0wgd2FudHMgdG8gcmVhZCVzIiwgaGFuZHNoYWtlKTsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgZG9lcyBTU0wgJXNoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgICAgICAgIFNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSA/ICJyZSIgOiAiIik7CiAKICAgICAgICAgYy0+cmVhZC0+cmVhZHkgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCmluZGV4IDg3OTdmY2QuLjdmYzZiYzAgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCkBAIC00OSw2ICs0OSw3IEBACiAjZGVmaW5lIG5neF9zc2xfaGFuZHNoYWtlKGMpICAgICBOR1hfT0sKIAogc3NpemVfdCBuZ3hfc3NsX3JlY3Yobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpidWYsIHNpemVfdCBzaXplKTsKK3NzaXplX3Qgbmd4X3NzbF93cml0ZShuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2NoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKIG5neF9jaGFpbl90ICpuZ3hfc3NsX3NlbmRfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAogICAgIG9mZl90IGxpbWl0KTsKIG5neF9pbnRfdCBuZ3hfc3NsX3NodXRkb3duKG5neF9jb25uZWN0aW9uX3QgKmMpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCmluZGV4IDk4YzQ3YmQuLjA2ZDBkZjUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMKQEAgLTkwLDggKzkwLDkgQEAKICAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfZmRfdCAgICAgICAgICAgICAgICAgICAgICAgICBmZDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICBhdXRoLCBlbmNvZGVkLCBwd2Q7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgaSwgbG9naW4sIGxlbiwgbGVmdCwgcGFzc3dkOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgIHB3ZDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICBpLCBsb2dpbiwgbGVmdCwgcGFzc3dkOwogICAgIG5neF9maWxlX3QgICAgICAgICAgICAgICAgICAgICAgIGZpbGU7CiAgICAgbmd4X2h0dHBfYXV0aF9iYXNpY19jdHhfdCAgICAgICAqY3R4OwogICAgIG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdCAgKmFsY2Y7CkBAIC0xMTUsNTcgKzExNiwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbGNmLT5yZWFsbSk7CiAgICAgfQogCi0gICAgaWYgKHItPmhlYWRlcnNfaW4uYXV0aG9yaXphdGlvbiA9PSBOVUxMKSB7CisgICAgcmMgPSBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3VzZXIocik7CisKKyAgICBpZiAocmMgPT0gTkdYX0RFQ0xJTkVEKSB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3NldF9yZWFsbShyLCAmYWxjZi0+cmVhbG0pOwogICAgIH0KIAotICAgIGVuY29kZWQgPSByLT5oZWFkZXJzX2luLmF1dGhvcml6YXRpb24tPnZhbHVlOwotCi0gICAgaWYgKGVuY29kZWQubGVuIDwgc2l6ZW9mKCJCYXNpYyAiKSAtIDEKLSAgICAgICAgfHwgbmd4X3N0cm5jYXNlY21wKGVuY29kZWQuZGF0YSwgIkJhc2ljICIsIHNpemVvZigiQmFzaWMgIikgLSAxKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7Ci0gICAgfQotCi0gICAgZW5jb2RlZC5sZW4gLT0gc2l6ZW9mKCJCYXNpYyAiKSAtIDE7Ci0gICAgZW5jb2RlZC5kYXRhICs9IHNpemVvZigiQmFzaWMgIikgLSAxOwotCi0gICAgd2hpbGUgKGVuY29kZWQubGVuICYmIGVuY29kZWQuZGF0YVswXSA9PSAnICcpIHsKLSAgICAgICAgZW5jb2RlZC5sZW4tLTsKLSAgICAgICAgZW5jb2RlZC5kYXRhKys7Ci0gICAgfQotCi0gICAgaWYgKGVuY29kZWQubGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7Ci0gICAgfQotCi0gICAgYXV0aC5sZW4gPSBuZ3hfYmFzZTY0X2RlY29kZWRfbGVuZ3RoKGVuY29kZWQubGVuKTsKLSAgICBhdXRoLmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGF1dGgubGVuICsgMSk7Ci0gICAgaWYgKGF1dGguZGF0YSA9PSBOVUxMKSB7CisgICAgaWYgKHJjID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAotICAgIGlmIChuZ3hfZGVjb2RlX2Jhc2U2NCgmYXV0aCwgJmVuY29kZWQpICE9IE5HWF9PSykgewotICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0aF9iYXNpY19zZXRfcmVhbG0ociwgJmFsY2YtPnJlYWxtKTsKLSAgICB9Ci0KLSAgICBhdXRoLmRhdGFbYXV0aC5sZW5dID0gJ1wwJzsKLQotICAgIGZvciAobGVuID0gMDsgbGVuIDwgYXV0aC5sZW47IGxlbisrKSB7Ci0gICAgICAgIGlmIChhdXRoLmRhdGFbbGVuXSA9PSAnOicpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSBhdXRoLmxlbikgewotICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0aF9iYXNpY19zZXRfcmVhbG0ociwgJmFsY2YtPnJlYWxtKTsKLSAgICB9Ci0KLSAgICByLT5oZWFkZXJzX2luLnVzZXIubGVuID0gbGVuOwotICAgIHItPmhlYWRlcnNfaW4udXNlci5kYXRhID0gYXV0aC5kYXRhOwotICAgIHItPmhlYWRlcnNfaW4ucGFzc3dkLmxlbiA9IGF1dGgubGVuIC0gbGVuIC0gMTsKLSAgICByLT5oZWFkZXJzX2luLnBhc3N3ZC5kYXRhID0gJmF1dGguZGF0YVtsZW4gKyAxXTsKLQogICAgIGZkID0gbmd4X29wZW5fZmlsZShhbGNmLT51c2VyX2ZpbGUuZGF0YSwgTkdYX0ZJTEVfUkRPTkxZLCBOR1hfRklMRV9PUEVOKTsKIAogICAgIGlmIChmZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7CkBAIC0yMDgsMTIgKzE2OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IGF1dGguZGF0YVtsb2dpbl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IHItPmhlYWRlcnNfaW4udXNlci5kYXRhW2xvZ2luXSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3NraXA7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChsb2dpbiA9PSBsZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAobG9naW4gPT0gci0+aGVhZGVyc19pbi51c2VyLmxlbikgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3Bhc3N3ZDsKICAgICAgICAgICAgICAgICAgICAgcGFzc3dkID0gaSArIDE7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggODI4OGRmMS4uZThiOWM0ZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC00MjQsMTAgKzQyNCwxMCBAQAogCiAgICAgZXNjYXBlID0gMDsKIAotICAgIGxvY19sZW4gPSByLT52YWxpZF9sb2NhdGlvbiA/IHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gOiAxOworICAgIGxvY19sZW4gPSByLT52YWxpZF9sb2NhdGlvbiA/IHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gLSAxIDogMDsKIAogICAgIGlmIChwbGNmLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSAmJiByLT52YWxpZF91bnBhcnNlZF91cmkpIHsKLSAgICAgICAgbGVuICs9IHItPnVucGFyc2VkX3VyaS5sZW4gLSAxOworICAgICAgICBsZW4gKz0gci0+dW5wYXJzZWRfdXJpLmxlbjsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7CkBAIC01MDgsMTEgKzUwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5tZXRob2RfbmFtZS5sZW4gKyAxKTsKICAgICB9CiAKLSAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCB1LT5jb25mLT51cmkuZGF0YSwgdS0+Y29uZi0+dXJpLmxlbik7CisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdS0+Y29uZi0+dXJpLmRhdGEsIHUtPmNvbmYtPnVyaS5sZW4gLSAxKTsKIAogICAgIGlmIChwbGNmLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSAmJiByLT52YWxpZF91bnBhcnNlZF91cmkpIHsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+dW5wYXJzZWRfdXJpLmRhdGEgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51bnBhcnNlZF91cmkubGVuIC0gMSk7CisgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnVucGFyc2VkX3VyaS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51bnBhcnNlZF91cmkubGVuKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXNjYXBlKSB7CiAgICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShiLT5sYXN0LCByLT51cmkuZGF0YSArIGxvY19sZW4sCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggYWY2MGQ4MC4uNWVlOTcxMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMjYsMTggKzI2LDIyIEBACiAgICAgbmd4X3N0cl90ICAgbmFtZTsKICAgICBuZ3hfc3RyX3QgICBkb21haW47CiAgICAgbmd4X3N0cl90ICAgcGF0aDsKLSAgICB0aW1lX3QgICAgICBleHBpcmVzOwogICAgIG5neF9zdHJfdCAgIHAzcDsKKworICAgIHRpbWVfdCAgICAgIGV4cGlyZXM7CisKKyAgICB1X2NoYXIgICAgICBtYXJrOwogfSBuZ3hfaHR0cF91c2VyaWRfY29uZl90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICB1aW50MzJfdCAgICB1aWRfZ290WzRdOwogICAgIHVpbnQzMl90ICAgIHVpZF9zZXRbNF07CisgICAgbmd4X3N0cl90ICAgY29va2llOwogfSBuZ3hfaHR0cF91c2VyaWRfY3R4X3Q7CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF91c2VyaWRfZ2V0X3VpZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCitzdGF0aWMgdm9pZCBuZ3hfaHR0cF91c2VyaWRfZ2V0X3VpZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdXNlcmlkX2N0eF90ICpjdHgsIG5neF9odHRwX3VzZXJpZF9jb25mX3QgKmNvbmYpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF91c2VyaWRfc2V0X3VpZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdXNlcmlkX2N0eF90ICpjdHgsIG5neF9odHRwX3VzZXJpZF9jb25mX3QgKmNvbmYpOwpAQCAtNjEsNiArNjUsOSBAQAogc3RhdGljIGNoYXIgKm5neF9odHRwX3VzZXJpZF9leHBpcmVzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgdm9pZCAqY29uZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfdXNlcmlkX3AzcChuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgY2hhciAqbmd4X2h0dHBfdXNlcmlkX21hcmsobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwKKyAgICB2b2lkICpjb25mKTsKKwogCiAKIHN0YXRpYyB1aW50MzJfdCAgc2VxdWVuY2VyX3YxID0gMTsKQEAgLTg0LDcgKzkxLDYgQEAKIAogc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2h0dHBfdXNlcmlkX2RvbWFpbl9wID0KICAgICBuZ3hfaHR0cF91c2VyaWRfZG9tYWluOwotCiBzdGF0aWMgbmd4X2NvbmZfcG9zdF9oYW5kbGVyX3B0ICBuZ3hfaHR0cF91c2VyaWRfcGF0aF9wID0gbmd4X2h0dHBfdXNlcmlkX3BhdGg7CiBzdGF0aWMgbmd4X2NvbmZfcG9zdF9oYW5kbGVyX3B0ICBuZ3hfaHR0cF91c2VyaWRfcDNwX3AgPSBuZ3hfaHR0cF91c2VyaWRfcDNwOwogCkBAIC05OSwyOCArMTA1LDI4IEBACiAgICAgICBuZ3hfaHR0cF91c2VyaWRfc3RhdGUgfSwKIAogICAgIHsgbmd4X3N0cmluZygidXNlcmlkX3NlcnZpY2UiKSwKLSAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXNlcmlkX2NvbmZfdCwgc2VydmljZSksCiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInVzZXJpZF9uYW1lIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKICAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3VzZXJpZF9jb25mX3QsIG5hbWUpLAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJ1c2VyaWRfZG9tYWluIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKICAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3VzZXJpZF9jb25mX3QsIGRvbWFpbiksCiAgICAgICAmbmd4X2h0dHBfdXNlcmlkX2RvbWFpbl9wIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInVzZXJpZF9wYXRoIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKICAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3VzZXJpZF9jb25mX3QsIHBhdGgpLApAQCAtMTQwLDYgKzE0NiwxMyBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXNlcmlkX2NvbmZfdCwgcDNwKSwKICAgICAgICZuZ3hfaHR0cF91c2VyaWRfcDNwX3AgfSwKIAorICAgIHsgbmd4X3N0cmluZygidXNlcmlkX21hcmsiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9odHRwX3VzZXJpZF9tYXJrLAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgMCwKKyAgICAgIE5VTEwgfSwKKwogICAgICAgbmd4X251bGxfY29tbWFuZAogfTsKIApAQCAtMjA1LDE1ICsyMTgsMjQgQEAKIAogICAgIG5neF9odHRwX3NldF9jdHgociwgY3R4LCBuZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZSk7CiAKKyAgICBuZ3hfaHR0cF91c2VyaWRfZ2V0X3VpZChyLCBjdHgsIGNvbmYpOwogCi0gICAgcmMgPSBuZ3hfaHR0cF91c2VyaWRfZ2V0X3VpZChyLCBjdHgsIGNvbmYpOwotCi0gICAgaWYgKHJjICE9IE5HWF9PSykgewotICAgICAgICByZXR1cm4gcmM7CisgICAgaWYgKGNvbmYtPmVuYWJsZSA9PSBOR1hfSFRUUF9VU0VSSURfTE9HKSB7CisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCi0gICAgaWYgKGNvbmYtPmVuYWJsZSA9PSBOR1hfSFRUUF9VU0VSSURfTE9HIHx8IGN0eC0+dWlkX2dvdFszXSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgaWYgKGN0eC0+dWlkX2dvdFszXSAhPSAwKSB7CisgICAgICAgIGlmIChjb25mLT5tYXJrID09ICdcMCcpIHsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjdHgtPmNvb2tpZS5sZW4gPiAyMworICAgICAgICAgICAgICAgICYmIGN0eC0+Y29va2llLmRhdGFbMjJdID09IGNvbmYtPm1hcmsKKyAgICAgICAgICAgICAgICAmJiBjdHgtPmNvb2tpZS5kYXRhWzIzXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIHJjID0gbmd4X2h0dHBfdXNlcmlkX3NldF91aWQociwgY3R4LCBjb25mKTsKQEAgLTIyNiw3ICsyNDgsNyBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3QKK3N0YXRpYyB2b2lkCiBuZ3hfaHR0cF91c2VyaWRfZ2V0X3VpZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3VzZXJpZF9jdHhfdCAqY3R4LAogICAgIG5neF9odHRwX3VzZXJpZF9jb25mX3QgKmNvbmYpCiB7CkBAIC0yMzUsMjMgKzI1NywyOSBAQAogICAgIG5neF90YWJsZV9lbHRfdCAgKipjb29raWVzOwogCiAgICAgbiA9IG5neF9odHRwX3BhcnNlX211bHRpX2hlYWRlcl9saW5lcygmci0+aGVhZGVyc19pbi5jb29raWVzLCAmY29uZi0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+Y29va2llKTsKICAgICBpZiAobiA9PSBOR1hfREVDTElORUQpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzcmMubGVuIDwgMjIpIHsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAidWlkIGNvb2tpZTogXCIlVlwiIiwgJmN0eC0+Y29va2llKTsKKworICAgIGlmIChjdHgtPmNvb2tpZS5sZW4gPCAyMikgewogICAgICAgICBjb29raWVzID0gci0+aGVhZGVyc19pbi5jb29raWVzLmVsdHM7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgdG9vIHNob3J0IHVzZXJpZCBjb29raWUgXCIlVlwiIiwKICAgICAgICAgICAgICAgICAgICAgICAmY29va2llc1tuXS0+dmFsdWUpOwotICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3JjID0gY3R4LT5jb29raWU7CisKICAgICAvKgotICAgICAqIHdlIGhhdmUgdG8gbGltaXQgZW5jb2RlZCBzdHJpbmcgdG8gMjIgY2hhcmFjdGVycwotICAgICAqIGJlY2F1c2UgdGhlcmUgYXJlIGFscmVhZHkgdGhlIG1pbGxpb25zIGNvb2tpZXMgd2l0aCBhIGdhcmJhZ2UKLSAgICAgKiBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGJhc2U2NCB0cmFpbCAiPT0iCisgICAgICogd2UgaGF2ZSB0byBsaW1pdCB0aGUgZW5jb2RlZCBzdHJpbmcgdG8gMjIgY2hhcmFjdGVycyBiZWNhdXNlCisgICAgICogIDEpIGNvb2tpZSBtYXkgYmUgbWFya2VkIGJ5ICJ1c2VyaWRfbWFyayIsCisgICAgICogIDIpIGFuZCB0aGVyZSBhcmUgYWxyZWFkeSB0aGUgbWlsbGlvbnMgY29va2llcyB3aXRoIGEgZ2FyYmFnZQorICAgICAqICAgICBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGJhc2U2NCB0cmFpbCAiPT0iCiAgICAgICovCiAKICAgICBzcmMubGVuID0gMjI7CkBAIC0yNjMsMTUgKzI5MSwxMyBAQAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IGludmFsaWQgdXNlcmlkIGNvb2tpZSBcIiVWXCIiLAogICAgICAgICAgICAgICAgICAgICAgICZjb29raWVzW25dLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAidWlkOiAlMDhYRCUwOFhEJTA4WEQlMDhYRCIsCiAgICAgICAgICAgICAgICAgICAgY3R4LT51aWRfZ290WzBdLCBjdHgtPnVpZF9nb3RbMV0sCiAgICAgICAgICAgICAgICAgICAgY3R4LT51aWRfZ290WzJdLCBjdHgtPnVpZF9nb3RbM10pOwotCi0gICAgcmV0dXJuIE5HWF9PSzsKIH0KIAogCkBAIC0yODYsNDcgKzMxMiw1OCBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgIHNyYywgZHN0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgKnNldF9jb29raWUsICpwM3A7CiAKLSAgICAvKiBUT0RPOiBtdXRleCBmb3Igc2VxdWVuY2VycyAqLworICAgIC8qCisgICAgICogVE9ETzogaW4gdGhlIHRocmVhZGVkIG1vZGUgdGhlIHNlcXVlbmNlcnMgc2hvdWxkIGJlIGluIFRMUyBhbmQgdGhlaXIKKyAgICAgKiByYW5nZXMgc2hvdWxkIGJlIGRpdmlkZWQgYmV0d2VlbiB0aHJlYWRzCisgICAgICovCiAKLSAgICBpZiAoY29uZi0+ZW5hYmxlID09IE5HWF9IVFRQX1VTRVJJRF9WMSkgewotICAgICAgICBpZiAoY29uZi0+c2VydmljZSA9PSBOR1hfQ09ORl9VTlNFVCkgewotICAgICAgICAgICAgY3R4LT51aWRfc2V0WzBdID0gMDsKKyAgICBpZiAoY3R4LT51aWRfZ290WzNdID09IDApIHsKKworICAgICAgICBpZiAoY29uZi0+ZW5hYmxlID09IE5HWF9IVFRQX1VTRVJJRF9WMSkgeworICAgICAgICAgICAgaWYgKGNvbmYtPnNlcnZpY2UgPT0gTkdYX0NPTkZfVU5TRVQpIHsKKyAgICAgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMF0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMF0gPSBjb25mLT5zZXJ2aWNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51aWRfc2V0WzFdID0gbmd4X3RpbWUoKTsKKyAgICAgICAgICAgIGN0eC0+dWlkX3NldFsyXSA9IG5neF9waWQ7CisgICAgICAgICAgICBjdHgtPnVpZF9zZXRbM10gPSBzZXF1ZW5jZXJfdjE7CisgICAgICAgICAgICBzZXF1ZW5jZXJfdjEgKz0gMHgxMDA7CisKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGN0eC0+dWlkX3NldFswXSA9IGh0b25sKGNvbmYtPnNlcnZpY2UpOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uZi0+c2VydmljZSA9PSBOR1hfQ09ORl9VTlNFVCkgeworICAgICAgICAgICAgICAgIGlmIChyLT5pbl9hZGRyID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUoci0+Y29ubmVjdGlvbi0+ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZzaW4sICZzbGVuKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIHItPmNvbm5lY3Rpb24tPmxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NvY2tldF9lcnJubywgImdldHNvY2tuYW1lKCkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjdHgtPnVpZF9zZXRbMV0gPSBuZ3hfdGltZSgpOwotICAgICAgICBjdHgtPnVpZF9zZXRbMl0gPSBuZ3hfcGlkOwotICAgICAgICBjdHgtPnVpZF9zZXRbM10gPSBzZXF1ZW5jZXJfdjE7Ci0gICAgICAgIHNlcXVlbmNlcl92MSArPSAweDEwMDsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjb25mLT5zZXJ2aWNlID09IE5HWF9DT05GX1VOU0VUKSB7Ci0gICAgICAgICAgICBpZiAoci0+aW5fYWRkciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAgICAgICAgICAgICAgIGlmIChnZXRzb2NrbmFtZShyLT5jb25uZWN0aW9uLT5mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2luLCAmc2xlbikgPT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfZXJybm8sICJnZXRzb2NrbmFtZSgpIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICByLT5pbl9hZGRyID0gc2luLnNpbl9hZGRyLnNfYWRkcjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICByLT5pbl9hZGRyID0gc2luLnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMF0gPSBodG9ubChyLT5pbl9hZGRyKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMF0gPSBodG9ubChjb25mLT5zZXJ2aWNlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3R4LT51aWRfc2V0WzBdID0gaHRvbmwoci0+aW5fYWRkcik7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGN0eC0+dWlkX3NldFswXSA9IGh0b25sKGNvbmYtPnNlcnZpY2UpOworICAgICAgICAgICAgY3R4LT51aWRfc2V0WzFdID0gaHRvbmwobmd4X3RpbWUoKSk7CisgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMl0gPSBodG9ubChuZ3hfcGlkKTsKKyAgICAgICAgICAgIGN0eC0+dWlkX3NldFszXSA9IGh0b25sKHNlcXVlbmNlcl92Mik7CisgICAgICAgICAgICBzZXF1ZW5jZXJfdjIgKz0gMHgxMDA7CisgICAgICAgICAgICBpZiAoc2VxdWVuY2VyX3YyIDwgMHgwMzAzMDMwMikgeworICAgICAgICAgICAgICAgIHNlcXVlbmNlcl92MiA9IDB4MDMwMzAzMDI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjdHgtPnVpZF9zZXRbMV0gPSBodG9ubChuZ3hfdGltZSgpKTsKLSAgICAgICAgY3R4LT51aWRfc2V0WzJdID0gaHRvbmwobmd4X3BpZCk7Ci0gICAgICAgIGN0eC0+dWlkX3NldFszXSA9IGh0b25sKHNlcXVlbmNlcl92Mik7Ci0gICAgICAgIHNlcXVlbmNlcl92MiArPSAweDEwMDsKLSAgICAgICAgaWYgKHNlcXVlbmNlcl92MiA8IDB4MDMwMzAzMDIpIHsKLSAgICAgICAgICAgIHNlcXVlbmNlcl92MiA9IDB4MDMwMzAzMDI7Ci0gICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjdHgtPnVpZF9zZXRbMF0gPSBjdHgtPnVpZF9nb3RbMF07CisgICAgICAgIGN0eC0+dWlkX3NldFsxXSA9IGN0eC0+dWlkX2dvdFsxXTsKKyAgICAgICAgY3R4LT51aWRfc2V0WzJdID0gY3R4LT51aWRfZ290WzJdOworICAgICAgICBjdHgtPnVpZF9zZXRbM10gPSBjdHgtPnVpZF9nb3RbM107CiAgICAgfQogCiAgICAgbGVuID0gY29uZi0+bmFtZS5sZW4gKyAxICsgbmd4X2Jhc2U2NF9lbmNvZGVkX2xlbmd0aCgxNikgKyBjb25mLT5wYXRoLmxlbjsKQEAgLTM0NywxMyArMzg0LDI0IEBACiAgICAgcCA9IG5neF9jcHltZW0oY29va2llLCBjb25mLT5uYW1lLmRhdGEsIGNvbmYtPm5hbWUubGVuKTsKICAgICAqcCsrID0gJz0nOwogCi0gICAgc3JjLmxlbiA9IDE2OwotICAgIHNyYy5kYXRhID0gKHVfY2hhciAqKSBjdHgtPnVpZF9zZXQ7Ci0gICAgZHN0LmRhdGEgPSBwOworICAgIGlmIChjdHgtPnVpZF9nb3RbM10gPT0gMCkgeworICAgICAgICBzcmMubGVuID0gMTY7CisgICAgICAgIHNyYy5kYXRhID0gKHVfY2hhciAqKSBjdHgtPnVpZF9zZXQ7CisgICAgICAgIGRzdC5kYXRhID0gcDsKIAotICAgIG5neF9lbmNvZGVfYmFzZTY0KCZkc3QsICZzcmMpOworICAgICAgICBuZ3hfZW5jb2RlX2Jhc2U2NCgmZHN0LCAmc3JjKTsKIAotICAgIHAgKz0gZHN0LmxlbjsKKyAgICAgICAgcCArPSBkc3QubGVuOworCisgICAgICAgIGlmIChjb25mLT5tYXJrKSB7CisgICAgICAgICAgICAqKHAgLSAyKSA9IGNvbmYtPm1hcms7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIGN0eC0+Y29va2llLmRhdGEsIDIyKTsKKyAgICAgICAgKnArKyA9IGNvbmYtPm1hcms7CisgICAgICAgICpwKysgPSAnPSc7CisgICAgfQogCiAgICAgaWYgKGNvbmYtPmV4cGlyZXMgPT0gTkdYX0hUVFBfVVNFUklEX01BWF9FWFBJUkVTKSB7CiAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIGV4cGlyZXMsIHNpemVvZihleHBpcmVzKSAtIDEpOwpAQCAtNTQ1LDYgKzU5Myw3IEBACiAgICAgY29uZi0+ZW5hYmxlID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKICAgICBjb25mLT5zZXJ2aWNlID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+ZXhwaXJlcyA9IE5HWF9DT05GX1VOU0VUOworICAgIGNvbmYtPm1hcmsgPSAodV9jaGFyKSAnXHhGRic7CiAKICAgICByZXR1cm4gY29uZjsKIH0gICAKQEAgLTU2Nyw2ICs2MTYsMTQgQEAKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5zZXJ2aWNlLCBwcmV2LT5zZXJ2aWNlLCBOR1hfQ09ORl9VTlNFVCk7CiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2VjX3ZhbHVlKGNvbmYtPmV4cGlyZXMsIHByZXYtPmV4cGlyZXMsIDApOwogCisgICAgaWYgKGNvbmYtPm1hcmsgPT0gKHVfY2hhcikgJ1x4RkYnKSB7CisgICAgICAgIGlmIChwcmV2LT5tYXJrID09ICh1X2NoYXIpICdceEZGJykgeworICAgICAgICAgICAgY29uZi0+bWFyayA9ICdcMCc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25mLT5tYXJrID0gcHJldi0+bWFyazsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KIApAQCAtNjI3LDcgKzY4NCw3IEBACiB7CiAgICAgbmd4X2h0dHBfdXNlcmlkX2NvbmZfdCAqdWNmID0gY29uZjsKIAotICAgIG5neF9zdHJfdCAgICp2YWx1ZTsKKyAgICBuZ3hfc3RyX3QgICp2YWx1ZTsKIAogICAgIGlmICh1Y2YtPmV4cGlyZXMgIT0gTkdYX0NPTkZfVU5TRVQpIHsKICAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOwpAQCAtNjcwLDMgKzcyNywzNiBAQAogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQorCisKK3N0YXRpYyBjaGFyICoKK25neF9odHRwX3VzZXJpZF9tYXJrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCit7CisgICAgbmd4X2h0dHBfdXNlcmlkX2NvbmZfdCAqdWNmID0gY29uZjsKKworICAgIG5neF9zdHJfdCAgKnZhbHVlOworCisgICAgaWYgKHVjZi0+bWFyayAhPSAodV9jaGFyKSAnXHhGRicpIHsKKyAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOworICAgIH0KKworICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CisKKyAgICBpZiAobmd4X3N0cmNtcCh2YWx1ZVsxXS5kYXRhLCAib2ZmIikgPT0gMCkgeworICAgICAgICB1Y2YtPm1hcmsgPSAnXDAnOworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgfQorCisgICAgaWYgKHZhbHVlWzFdLmxlbiAhPSAxCisgICAgICAgIHx8ICEoKHZhbHVlWzFdLmRhdGFbMF0gPj0gJzAnICYmIHZhbHVlWzFdLmRhdGFbMF0gPD0gJzknKQorICAgICAgICAgICAgICB8fCAodmFsdWVbMV0uZGF0YVswXSA+PSAnQScgJiYgdmFsdWVbMV0uZGF0YVswXSA8PSAnWicpCisgICAgICAgICAgICAgIHx8ICh2YWx1ZVsxXS5kYXRhWzBdID49ICdhJyAmJiB2YWx1ZVsxXS5kYXRhWzBdIDw9ICd6JykKKyAgICAgICAgICAgICAgfHwgdmFsdWVbMV0uZGF0YVswXSA9PSAnPScpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJ2YWx1ZSBtdXN0IGJlIFwib2ZmXCIgb3IgYSBzaW5nbGUgbGV0dGVyLCBkaWdpdCBvciBcIj1cIiI7CisgICAgfQorCisgICAgdWNmLT5tYXJrID0gdmFsdWVbMV0uZGF0YVswXTsKKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDg1MmE5YmIuLjBiNDgzZTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtOTMxLDYgKzkzMSw3NiBAQAogCiAKIG5neF9pbnRfdAorbmd4X2h0dHBfYXV0aF9iYXNpY191c2VyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICBuZ3hfc3RyX3QgICBhdXRoLCBlbmNvZGVkOworICAgIG5neF91aW50X3QgIGxlbjsKKworICAgIGlmIChyLT5oZWFkZXJzX2luLnVzZXIubGVuID09IDAgJiYgci0+aGVhZGVyc19pbi51c2VyLmRhdGEgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgIH0KKworICAgIGlmIChyLT5oZWFkZXJzX2luLmF1dGhvcml6YXRpb24gPT0gTlVMTCkgeworICAgICAgICByLT5oZWFkZXJzX2luLnVzZXIuZGF0YSA9ICh1X2NoYXIgKikgIiI7CisgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CisgICAgfQorCisgICAgZW5jb2RlZCA9IHItPmhlYWRlcnNfaW4uYXV0aG9yaXphdGlvbi0+dmFsdWU7CisKKyAgICBpZiAoZW5jb2RlZC5sZW4gPCBzaXplb2YoIkJhc2ljICIpIC0gMQorICAgICAgICB8fCBuZ3hfc3RybmNhc2VjbXAoZW5jb2RlZC5kYXRhLCAiQmFzaWMgIiwgc2l6ZW9mKCJCYXNpYyAiKSAtIDEpICE9IDApCisgICAgeworICAgICAgICByLT5oZWFkZXJzX2luLnVzZXIuZGF0YSA9ICh1X2NoYXIgKikgIiI7CisgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CisgICAgfQorCisgICAgZW5jb2RlZC5sZW4gLT0gc2l6ZW9mKCJCYXNpYyAiKSAtIDE7CisgICAgZW5jb2RlZC5kYXRhICs9IHNpemVvZigiQmFzaWMgIikgLSAxOworCisgICAgd2hpbGUgKGVuY29kZWQubGVuICYmIGVuY29kZWQuZGF0YVswXSA9PSAnICcpIHsKKyAgICAgICAgZW5jb2RlZC5sZW4tLTsKKyAgICAgICAgZW5jb2RlZC5kYXRhKys7CisgICAgfQorCisgICAgaWYgKGVuY29kZWQubGVuID09IDApIHsKKyAgICAgICAgci0+aGVhZGVyc19pbi51c2VyLmRhdGEgPSAodV9jaGFyICopICIiOworICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgIH0KKyAgICAKKyAgICBhdXRoLmxlbiA9IG5neF9iYXNlNjRfZGVjb2RlZF9sZW5ndGgoZW5jb2RlZC5sZW4pOworICAgIGF1dGguZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgYXV0aC5sZW4gKyAxKTsgCisgICAgaWYgKGF1dGguZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgaWYgKG5neF9kZWNvZGVfYmFzZTY0KCZhdXRoLCAmZW5jb2RlZCkgIT0gTkdYX09LKSB7CisgICAgICAgIHItPmhlYWRlcnNfaW4udXNlci5kYXRhID0gKHVfY2hhciAqKSAiIjsKKyAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICB9CisgICAgCisgICAgYXV0aC5kYXRhW2F1dGgubGVuXSA9ICdcMCc7CisgICAgCisgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBhdXRoLmxlbjsgbGVuKyspIHsgCisgICAgICAgIGlmIChhdXRoLmRhdGFbbGVuXSA9PSAnOicpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChsZW4gPT0gYXV0aC5sZW4pIHsKKyAgICAgICAgci0+aGVhZGVyc19pbi51c2VyLmRhdGEgPSAodV9jaGFyICopICIiOworICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgIH0KKworICAgIHItPmhlYWRlcnNfaW4udXNlci5sZW4gPSBsZW47CisgICAgci0+aGVhZGVyc19pbi51c2VyLmRhdGEgPSBhdXRoLmRhdGE7CisgICAgci0+aGVhZGVyc19pbi5wYXNzd2QubGVuID0gYXV0aC5sZW4gLSBsZW4gLSAxOworICAgIHItPmhlYWRlcnNfaW4ucGFzc3dkLmRhdGEgPSAmYXV0aC5kYXRhW2xlbiArIDFdOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCituZ3hfaW50X3QKIG5neF9odHRwX3N1YnJlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9zdHJfdCAqdXJpLCBuZ3hfc3RyX3QgKmFyZ3MpCiB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAppbmRleCAxZjZiMTg1Li41OWZjMzJhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKQEAgLTI1Miw2ICsyNTIsNyBAQAogCiBuZ3hfaW50X3Qgbmd4X2h0dHBfc2V0X2NvbnRlbnRfdHlwZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogbmd4X2ludF90IG5neF9odHRwX3NldF9leHRlbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworbmd4X2ludF90IG5neF9odHRwX2F1dGhfYmFzaWNfdXNlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogCiBuZ3hfaW50X3Qgbmd4X2h0dHBfc3VicmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X3N0cl90ICp1cmksIG5neF9zdHJfdCAqYXJncyk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggYjhlOTdkMi4uNTk0YTI3MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTEsOSArMTEsNiBAQAogCiAKIHN0YXRpYyB2b2lkIG5neF9odHRwX2luaXRfcmVxdWVzdChuZ3hfZXZlbnRfdCAqZXYpOwotI2lmIChOR1hfSFRUUF9TU0wpCi1zdGF0aWMgdm9pZCBuZ3hfaHR0cF9zc2xfaGFuZHNoYWtlKG5neF9ldmVudF90ICpyZXYpOwotI2VuZGlmCiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9wcm9jZXNzX3JlcXVlc3RfbGluZShuZ3hfZXZlbnRfdCAqcmV2KTsKIHN0YXRpYyB2b2lkIG5neF9odHRwX3Byb2Nlc3NfcmVxdWVzdF9oZWFkZXJzKG5neF9ldmVudF90ICpyZXYpOwogc3RhdGljIHNzaXplX3Qgbmd4X2h0dHBfcmVhZF9yZXF1ZXN0X2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwpAQCAtNTAsNiArNDcsMTEgQEAKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19lcnJvcl9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgc2l6ZV90IGxlbik7CiAKKyNpZiAoTkdYX0hUVFBfU1NMKQorc3RhdGljIHZvaWQgbmd4X2h0dHBfc3NsX2hhbmRzaGFrZShuZ3hfZXZlbnRfdCAqcmV2KTsKK3N0YXRpYyB2b2lkIG5neF9odHRwX3NzbF9jbG9zZV9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CisjZW5kaWYKKwogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfY2xpZW50X2Vycm9yc1tdID0gewogCkBAIC00OTAsNiArNDkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwcyBzc2wgaGFuZHNoYWtlOiAweCUwMlhkIiwgYnVmWzBdKTsKIAogICAgICAgICAgICAgYy0+cmVjdiA9IG5neF9zc2xfcmVjdjsKKyAgICAgICAgICAgIGMtPnNlbmQgPSBuZ3hfc3NsX3dyaXRlOwogICAgICAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zc2xfc2VuZF9jaGFpbjsKIAogICAgICAgICAgICAgcmMgPSBuZ3hfc3NsX2hhbmRzaGFrZShjKTsKQEAgLTI0MTIsMjcgKzI0MTUsNiBAQAogfQogCiAKLSNpZiAoTkdYX0hUVFBfU1NMKQotCi1zdGF0aWMgdm9pZAotbmd4X2h0dHBfc3NsX2Nsb3NlX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQotewotICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwotCi0gICAgYyA9IGV2LT5kYXRhOwotCi0gICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBldi0+bG9nLCAwLCAiaHR0cCBzc2wgY2xvc2UgaGFuZGxlciIpOwotCi0gICAgaWYgKG5neF9zc2xfc2h1dGRvd24oYykgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwotfQotCi0jZW5kaWYKLQotCiBzdGF0aWMgdm9pZAogbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjKQogewpAQCAtMjQ0MSw3ICsyNDIzLDcgQEAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiY2xvc2UgaHR0cCBjb25uZWN0aW9uOiAlZCIsIGMtPmZkKTsKIAotI2lmIChOR1hfT1BFTlNTTCkKKyNpZiAoTkdYX0hUVFBfU1NMKQogCiAgICAgaWYgKGMtPnNzbCkgewogICAgICAgICBpZiAobmd4X3NzbF9zaHV0ZG93bihjKSA9PSBOR1hfQUdBSU4pIHsKQEAgLTI0NjUsNiArMjQ0NywyNyBAQAogfQogCiAKKyNpZiAoTkdYX0hUVFBfU1NMKQorCitzdGF0aWMgdm9pZAorbmd4X2h0dHBfc3NsX2Nsb3NlX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQoreworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOworCisgICAgYyA9IGV2LT5kYXRhOworCisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBldi0+bG9nLCAwLCAiaHR0cCBzc2wgY2xvc2UgaGFuZGxlciIpOworCisgICAgaWYgKG5neF9zc2xfc2h1dGRvd24oYykgPT0gTkdYX0FHQUlOKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOworfQorCisjZW5kaWYKKworCiBzdGF0aWMgdV9jaGFyICoKIG5neF9odHRwX2xvZ19lcnJvcihuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKaW5kZXggYmEzYmZjYi4uNGNmODgxMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwpAQCAtMjkyLDYgKzI5Miw4IEBACiAKICAgICAgICAgICAgICAgICByLT5lcnJfY3R4ID0gci0+Y3R4OwogCisgICAgICAgICAgICAgICAgci0+bWV0aG9kID0gTkdYX0hUVFBfR0VUOworCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2ludGVybmFsX3JlZGlyZWN0KHIsICZlcnJfcGFnZVtpXS51cmksIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IDNlM2Y5ZjcuLjAyNDcyOTggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC0zMiw2ICszMiw4IEBACiAgICAgbmd4X2h0dHBfdmFyaWFibGVfZG9jdW1lbnRfcm9vdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVpbnRwdHJfdCBkYXRhKTsKIHN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICoKICAgICBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2ZpbGVuYW1lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgorICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOwogCiAKIC8qCkBAIC0xMDgsOCArMTEwLDcgQEAKICAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbWV0aG9kIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9yZXF1ZXN0X3QsIG1ldGhvZF9uYW1lKSwgMCwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJyZW1vdGVfdXNlciIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0LAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcmVxdWVzdF90LCBoZWFkZXJzX2luLnVzZXIpLCAwLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJyZW1vdGVfdXNlciIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfdXNlciwgMCwgMCwgMCB9LAogCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIDAsIDAsIDAgfQogfTsKQEAgLTY1Nyw2ICs2NTgsMzQgQEAKIH0KIAogCitzdGF0aWMgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqCituZ3hfaHR0cF92YXJpYWJsZV9yZW1vdGVfdXNlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAqdnY7CisKKyAgICByYyA9IG5neF9odHRwX2F1dGhfYmFzaWNfdXNlcihyKTsKKworICAgIGlmIChyYyA9PSBOR1hfREVDTElORUQpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2diA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QpKTsKKyAgICBpZiAodnYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2di0+dmFsdWUgPSAwOworICAgIHZ2LT50ZXh0ID0gci0+aGVhZGVyc19pbi51c2VyOworCisgICAgcmV0dXJuIHZ2OworfQorCisKIG5neF9pbnRfdAogbmd4X2h0dHBfdmFyaWFibGVzX2FkZF9jb3JlX3ZhcnMobmd4X2NvbmZfdCAqY2YpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcC5oIGIvc3JjL2ltYXAvbmd4X2ltYXAuaAppbmRleCA4YTUwNmRiLi41ZTAzNzc0IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcC5oCisrKyBiL3NyYy9pbWFwL25neF9pbWFwLmgKQEAgLTEzLDYgKzEzLDExIEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAjaW5jbHVkZSA8bmd4X2V2ZW50X2Nvbm5lY3QuaD4KIAorI2lmIChOR1hfSU1BUF9TU0wpCisjaW5jbHVkZSA8bmd4X2ltYXBfc3NsX21vZHVsZS5oPgorI2VuZGlmCisKKwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgdm9pZCAgICoqbWFpbl9jb25mOwpAQCAtMzIsNyArMzcsNiBAQAogICAgIG5neF9tc2VjX3QgICAgICAgICAgICB0aW1lb3V0OwogCiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgIGltYXBfY2xpZW50X2J1ZmZlcl9zaXplOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICBwcm94eV9idWZmZXJfc2l6ZTsKIAogICAgIG5neF91aW50X3QgICAgICAgICAgICBwcm90b2NvbDsKIApAQCAtODIsOCArODYsOCBAQAogCiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAqY29ubmVjdGlvbjsKIAotICAgIG5neF9idWZfdCAgICAgICAgICAgICAgKmJ1ZmZlcjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBvdXQ7CisgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAqYnVmZmVyOwogCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICoqY3R4OwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAqKm1haW5fY29uZjsKQEAgLTkzLDYgKzk3LDggQEAKIAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgIGltYXBfc3RhdGU7CiAKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICBibG9ja2VkOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgcXVpdDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIHByb3RvY29sOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgcXVvdGVkOjE7CiAKQEAgLTEwMCw2ICsxMDYsNyBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHBhc3N3ZDsKIAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHRhZzsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICB0YWdnZWRfbGluZTsKIAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgIGNvbW1hbmQ7CiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgYXJnczsKQEAgLTE2Nyw2ICsxNzQsNyBAQAogCiAKIHZvaWQgbmd4X2ltYXBfaW5pdF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpOwordm9pZCBuZ3hfaW1hcF9zZW5kKG5neF9ldmVudF90ICp3ZXYpOwogdm9pZCBuZ3hfaW1hcF9hdXRoX3N0YXRlKG5neF9ldmVudF90ICpyZXYpOwogdm9pZCBuZ3hfcG9wM19hdXRoX3N0YXRlKG5neF9ldmVudF90ICpyZXYpOwogdm9pZCBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCmluZGV4IGU2NjU5M2EuLjJiZjBjYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKQEAgLTUxNiwxMyArNTE2LDE0IEBACiAgICAgICAgICAgICBuZ3hfY2xvc2VfY29ubmVjdGlvbihjdHgtPnBlZXIuY29ubmVjdGlvbik7CiAKICAgICAgICAgICAgIGlmIChjdHgtPmVyci5sZW4pIHsKLSAgICAgICAgICAgICAgICAodm9pZCkgbmd4X3NlbmQocy0+Y29ubmVjdGlvbiwgY3R4LT5lcnIuZGF0YSwgY3R4LT5lcnIubGVuKTsKKyAgICAgICAgICAgICAgICBzLT5vdXQgPSBjdHgtPmVycjsKIAogICAgICAgICAgICAgICAgIGlmIChjdHgtPnNsZWVwID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihzLT5jb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzLT5xdWl0ID0gMTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBuZ3hfaW1hcF9zZW5kKHMtPmNvbm5lY3Rpb24tPndyaXRlKTsKKwogICAgICAgICAgICAgICAgIG5neF9hZGRfdGltZXIocy0+Y29ubmVjdGlvbi0+cmVhZCwgY3R4LT5zbGVlcCAqIDEwMDApOwogCiAgICAgICAgICAgICAgICAgcy0+Y29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX2F1dGhfc2xlZXBfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCmluZGV4IGU1ZDdhMjAuLjgyMjU1NzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwpAQCAtNzUsMTMgKzc1LDYgQEAKICAgICAgIG9mZnNldG9mKG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCwgaW1hcF9jbGllbnRfYnVmZmVyX3NpemUpLAogICAgICAgTlVMTCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9idWZmZXIiKSwKLSAgICAgIE5HWF9JTUFQX01BSU5fQ09ORnxOR1hfSU1BUF9TUlZfQ09ORnxOR1hfQ09ORl9UQUtFMSwKLSAgICAgIG5neF9jb25mX3NldF9zaXplX3Nsb3QsCi0gICAgICBOR1hfSU1BUF9TUlZfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QsIHByb3h5X2J1ZmZlcl9zaXplKSwKLSAgICAgIE5VTEwgfSwKLQogICAgIHsgbmd4X3N0cmluZygidGltZW91dCIpLAogICAgICAgTkdYX0lNQVBfTUFJTl9DT05GfE5HWF9JTUFQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X21zZWNfc2xvdCwKQEAgLTE1Nyw3ICsxNTAsNiBAQAogICAgIH0KIAogICAgIGNzY2YtPmltYXBfY2xpZW50X2J1ZmZlcl9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKLSAgICBjc2NmLT5wcm94eV9idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgY3NjZi0+dGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY3NjZi0+cHJvdG9jb2wgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogCkBAIC0xOTEsOCArMTgzLDYgQEAKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPmltYXBfY2xpZW50X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+aW1hcF9jbGllbnRfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuZ3hfcGFnZXNpemUpOwotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+cHJveHlfYnVmZmVyX3NpemUsIHByZXYtPnByb3h5X2J1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgbmd4X3BhZ2VzaXplKTsKICAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnRpbWVvdXQsIHByZXYtPnRpbWVvdXQsIDYwMDAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV91bnNpZ25lZF92YWx1ZShjb25mLT5wcm90b2NvbCwgcHJldi0+cHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSU1BUF9JTUFQX1BST1RPQ09MKTsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYyBiL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYwppbmRleCAyNTUwOWIyLi4wM2RlZGFmIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCkBAIC0xMyw2ICsxMywxMCBAQAogc3RhdGljIHZvaWQgbmd4X2ltYXBfaW5pdF9zZXNzaW9uKG5neF9ldmVudF90ICpyZXYpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaW1hcF9yZWFkX2NvbW1hbmQobmd4X2ltYXBfc2Vzc2lvbl90ICpzKTsKIAorI2lmIChOR1hfSU1BUF9TU0wpCitzdGF0aWMgdm9pZCBuZ3hfaW1hcF9zc2xfY2xvc2VfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOworI2VuZGlmCisKIAogc3RhdGljIG5neF9zdHJfdCAgZ3JlZXRpbmdzW10gPSB7CiAgICBuZ3hfc3RyaW5nKCIrT0sgUE9QMyByZWFkeSIgQ1JMRiksCkBAIC0zNiw4ICs0MCwxMiBAQAogdm9pZAogbmd4X2ltYXBfaW5pdF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpCiB7Ci0gICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgc2l6ZTsKKyAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICAgICpzOwogICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICAgICAgKmN0eDsKKyNpZiAoTkdYX0lNQVBfU1NMKQorICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9pbWFwX3NzbF9jb25mX3QgICAgICAgKnNzbGNmOworI2VuZGlmCiAgICAgbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKIAogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSU1BUCwgYy0+bG9nLCAwLCAiaW1hcCBpbml0IGNvbm5lY3Rpb24iKTsKQEAgLTQ1LDI2ICs1MywxMjMgQEAKICAgICBjLT5sb2dfZXJyb3IgPSBOR1hfRVJST1JfSU5GTzsKIAogICAgIGN0eCA9IGMtPmN0eDsKLSAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihjdHgsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKIAotICAgIHNpemUgPSBncmVldGluZ3NbY3NjZi0+cHJvdG9jb2xdLmxlbjsKKyNpZiAoTkdYX0lNQVBfU1NMKQogCi0gICAgaWYgKG5neF9zZW5kKGMsIGdyZWV0aW5nc1tjc2NmLT5wcm90b2NvbF0uZGF0YSwgc2l6ZSkgPCBzaXplKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIHRyZWF0IHRoZSBpbmNvbXBsZXRlIHNlbmRpbmcgYXMgTkdYX0VSUk9SCi0gICAgICAgICAqIGJlY2F1c2UgaXQgaXMgdmVyeSBzdHJhbmdlIGhlcmUKLSAgICAgICAgICovCisgICAgc3NsY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKGN0eCwgbmd4X2ltYXBfc3NsX21vZHVsZSk7CisKKyAgICBpZiAoc3NsY2YtPmVuYWJsZSkgeworCisgICAgICAgIGlmIChuZ3hfc3NsX2NyZWF0ZV9zZXNzaW9uKHNzbGNmLT5zc2xfY3R4LCBjLCBOR1hfU1NMX0JVRkZFUikKKyAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbmd4X3NzbF9oYW5kc2hha2UoYyk7CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGMtPnJlY3YgPSBuZ3hfc3NsX3JlY3Y7CisgICAgICAgIGMtPnNlbmQgPSBuZ3hfc3NsX3dyaXRlOworICAgICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NzbF9zZW5kX2NoYWluOworICAgIH0KKworI2VuZGlmCisKKyAgICBzID0gbmd4X3BjYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9pbWFwX3Nlc3Npb25fdCkpOworICAgIGlmIChzID09IE5VTEwpIHsKICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9pbml0X3Nlc3Npb247CisgICAgYy0+ZGF0YSA9IHM7CisgICAgcy0+Y29ubmVjdGlvbiA9IGM7CiAKKyAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihjdHgsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKKyAgICBzLT5wcm90b2NvbCA9IGNzY2YtPnByb3RvY29sOworCisgICAgcy0+Y3R4ID0gbmd4X3BjYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKHZvaWQgKikgKiBuZ3hfaW1hcF9tYXhfbW9kdWxlKTsKKyAgICBpZiAocy0+Y3R4ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2ltYXBfc2Vzc2lvbl9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzLT5tYWluX2NvbmYgPSBjdHgtPm1haW5fY29uZjsKKyAgICBzLT5zcnZfY29uZiA9IGN0eC0+c3J2X2NvbmY7CisKKyAgICBzLT5vdXQgPSBncmVldGluZ3Nbcy0+cHJvdG9jb2xdOworCisgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX2luaXRfc2Vzc2lvbjsKKyAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3NlbmQ7CisKKyAgICBuZ3hfYWRkX3RpbWVyKGMtPndyaXRlLCBjc2NmLT50aW1lb3V0KTsKICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIGNzY2YtPnRpbWVvdXQpOwogCiAgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudChjLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICB9CisKKyAgICBuZ3hfaW1hcF9zZW5kKGMtPndyaXRlKTsKK30KKworCit2b2lkCituZ3hfaW1hcF9zZW5kKG5neF9ldmVudF90ICp3ZXYpCit7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgbjsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjOworICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgKnM7CisKKyAgICBjID0gd2V2LT5kYXRhOworICAgIHMgPSBjLT5kYXRhOworCisgICAgaWYgKHdldi0+dGltZWRvdXQpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKKyAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzLT5vdXQubGVuID09IDApIHsKKyAgICAgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQoYy0+d3JpdGUsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuID0gYy0+c2VuZChjLCBzLT5vdXQuZGF0YSwgcy0+b3V0Lmxlbik7CisKKyAgICBpZiAobiA+IDApIHsKKyAgICAgICAgcy0+b3V0LmxlbiAtPSBuOworCisgICAgICAgIGlmIChzLT5xdWl0KSB7CisgICAgICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHMtPmJsb2NrZWQpIHsKKyAgICAgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIoYy0+cmVhZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBuID09IE5HWF9BR0FJTiAqLworCisgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQoYy0+d3JpdGUsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAKQEAgLTc0LDcgKzE3OSw2IEBACiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgc2l6ZTsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOwogICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICAgICAgKnM7Ci0gICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgICAgICAqY3R4OwogICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CiAKICAgICBjID0gcmV2LT5kYXRhOwpAQCAtODUsNDAgKzE4OSwyMCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcyA9IG5neF9wY2FsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9zZXNzaW9uX3QpKTsKLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgIG5neF9pbWFwX3Nlc3Npb25faW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYy0+ZGF0YSA9IHM7Ci0gICAgcy0+Y29ubmVjdGlvbiA9IGM7Ci0KLSAgICBzLT5jdHggPSBuZ3hfcGNhbGxvYyhjLT5wb29sLCBzaXplb2Yodm9pZCAqKSAqIG5neF9pbWFwX21heF9tb2R1bGUpOwotICAgIGlmIChzLT5jdHggPT0gTlVMTCkgewotICAgICAgICBuZ3hfaW1hcF9zZXNzaW9uX2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN0eCA9IGMtPmN0eDsKLSAgICBzLT5tYWluX2NvbmYgPSBjdHgtPm1haW5fY29uZjsKLSAgICBzLT5zcnZfY29uZiA9IGN0eC0+c3J2X2NvbmY7CisgICAgcyA9IGMtPmRhdGE7CiAKICAgICBpZiAobmd4X2FycmF5X2luaXQoJnMtPmFyZ3MsIGMtPnBvb2wsIDIsIHNpemVvZihuZ3hfc3RyX3QpKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgbmd4X2ltYXBfc2Vzc2lvbl9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7Ci0KLSAgICBzLT5wcm90b2NvbCA9IGNzY2YtPnByb3RvY29sOwotCi0gICAgaWYgKGNzY2YtPnByb3RvY29sID09IE5HWF9JTUFQX1BPUDNfUFJPVE9DT0wpIHsKKyAgICBpZiAocy0+cHJvdG9jb2wgPT0gTkdYX0lNQVBfUE9QM19QUk9UT0NPTCkgewogICAgICAgICBzaXplID0gMTI4OwogICAgICAgICBzLT5pbWFwX3N0YXRlID0gbmd4X3BvcDNfc3RhcnQ7CiAgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfcG9wM19hdXRoX3N0YXRlOwogCiAgICAgfSBlbHNlIHsKKyAgICAgICAgY3NjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfY29yZV9tb2R1bGUpOwogICAgICAgICBzaXplID0gY3NjZi0+aW1hcF9jbGllbnRfYnVmZmVyX3NpemU7CiAgICAgICAgIHMtPmltYXBfc3RhdGUgPSBuZ3hfaW1hcF9zdGFydDsKICAgICAgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX2F1dGhfc3RhdGU7CkBAIC0xMzcsMTEgKzIyMSwxMSBAQAogdm9pZAogbmd4X2ltYXBfYXV0aF9zdGF0ZShuZ3hfZXZlbnRfdCAqcmV2KQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKnRleHQsICpsYXN0LCAqb3V0LCAqcDsKLSAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgICBzaXplLCB0ZXh0X2xlbiwgbGFzdF9sZW47CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqdGV4dCwgKmxhc3QsICpwOworICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIHRleHRfbGVuLCBsYXN0X2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICphcmc7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgcXVpdCwgdGFnOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHRhZzsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOwogICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICAgICAgKnM7CiAgICAgbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKQEAgLTE1Nyw2ICsyNDEsMTQgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChzLT5vdXQubGVuKSB7CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSU1BUCwgYy0+bG9nLCAwLCAiaW1hcCBzZW5kIGhhbmRsZXIgYnVzeSIpOworICAgICAgICBzLT5ibG9ja2VkID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHMtPmJsb2NrZWQgPSAwOworCiAgICAgcmMgPSBuZ3hfaW1hcF9yZWFkX2NvbW1hbmQocyk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0lNQVAsIGMtPmxvZywgMCwgImltYXAgYXV0aDogJWkiLCByYyk7CkBAIC0xNjUsNyArMjU3LDYgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHF1aXQgPSAwOwogICAgIHRhZyA9IDE7CiAKICAgICB0ZXh0ID0gTlVMTDsKQEAgLTIzNSw5ICszMjYsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBOR1hfSU1BUF9MT0dPVVQ6CisgICAgICAgICAgICBzLT5xdWl0ID0gMTsKICAgICAgICAgICAgIHRleHQgPSBpbWFwX2J5ZTsKICAgICAgICAgICAgIHRleHRfbGVuID0gc2l6ZW9mKGltYXBfYnllKSAtIDE7Ci0gICAgICAgICAgICBxdWl0ID0gMTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTkdYX0lNQVBfTk9PUDoKQEAgLTI2MCwxOCArMzUxLDE5IEBACiAgICAgfQogCiAgICAgaWYgKHRhZykgewotICAgICAgICBpZiAocy0+b3V0LmxlbiA8IHRleHRfbGVuICsgcy0+dGFnLmxlbiArIGxhc3RfbGVuKSB7Ci0KLSAgICAgICAgICAgIHMtPm91dC5sZW4gPSB0ZXh0X2xlbiArIHMtPnRhZy5sZW4gKyBsYXN0X2xlbjsKLSAgICAgICAgICAgIHMtPm91dC5kYXRhID0gbmd4X3BhbGxvYyhjLT5wb29sLCBzLT5vdXQubGVuKTsKLSAgICAgICAgICAgIGlmIChzLT5vdXQuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzLT50YWdnZWRfbGluZS5sZW4gPCBzLT50YWcubGVuICsgdGV4dF9sZW4gKyBsYXN0X2xlbikgeworICAgICAgICAgICAgcy0+dGFnZ2VkX2xpbmUubGVuID0gcy0+dGFnLmxlbiArIHRleHRfbGVuICsgbGFzdF9sZW47CisgICAgICAgICAgICBzLT50YWdnZWRfbGluZS5kYXRhID0gbmd4X3BhbGxvYyhjLT5wb29sLCBzLT50YWdnZWRfbGluZS5sZW4pOworICAgICAgICAgICAgaWYgKHMtPnRhZ2dlZF9saW5lLmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgb3V0ID0gcy0+b3V0LmRhdGE7Ci0gICAgICAgIHAgPSBvdXQ7CisgICAgICAgIHMtPm91dC5kYXRhID0gcy0+dGFnZ2VkX2xpbmUuZGF0YTsKKyAgICAgICAgcy0+b3V0LmxlbiA9IHMtPnRhZy5sZW4gKyB0ZXh0X2xlbiArIGxhc3RfbGVuOworCisgICAgICAgIHAgPSBzLT5vdXQuZGF0YTsKIAogICAgICAgICBpZiAodGV4dCkgewogICAgICAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgdGV4dCwgdGV4dF9sZW4pOwpAQCAtMjc5LDM1ICszNzEsMjAgQEAKICAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgcy0+dGFnLmRhdGEsIHMtPnRhZy5sZW4pOwogICAgICAgICBuZ3hfbWVtY3B5KHAsIGxhc3QsIGxhc3RfbGVuKTsKIAotICAgICAgICBzaXplID0gdGV4dF9sZW4gKyBzLT50YWcubGVuICsgbGFzdF9sZW47CiAKICAgICB9IGVsc2UgewotICAgICAgICBvdXQgPSBsYXN0OwotICAgICAgICBzaXplID0gbGFzdF9sZW47CisgICAgICAgIHMtPm91dC5kYXRhID0gbGFzdDsKKyAgICAgICAgcy0+b3V0LmxlbiA9IGxhc3RfbGVuOwogICAgIH0KIAotICAgIGlmIChuZ3hfc2VuZChjLCBvdXQsIHNpemUpIDwgc2l6ZSkgewotICAgICAgICAvKgotICAgICAgICAgKiB3ZSB0cmVhdCB0aGUgaW5jb21wbGV0ZSBzZW5kaW5nIGFzIE5HWF9FUlJPUgotICAgICAgICAgKiBiZWNhdXNlIGl0IGlzIHZlcnkgc3RyYW5nZSBoZXJlCi0gICAgICAgICAqLwotICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHJjICE9IE5HWF9JTUFQX05FWFQpIHsKKyAgICAgICAgcy0+YXJncy5uZWx0cyA9IDA7CisgICAgICAgIHMtPmJ1ZmZlci0+cG9zID0gcy0+YnVmZmVyLT5zdGFydDsKKyAgICAgICAgcy0+YnVmZmVyLT5sYXN0ID0gcy0+YnVmZmVyLT5zdGFydDsKKyAgICAgICAgcy0+dGFnLmxlbiA9IDA7CiAgICAgfQogCi0gICAgaWYgKHJjID09IE5HWF9JTUFQX05FWFQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChxdWl0KSB7Ci0gICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzLT5hcmdzLm5lbHRzID0gMDsKLSAgICBzLT5idWZmZXItPnBvcyA9IHMtPmJ1ZmZlci0+c3RhcnQ7Ci0gICAgcy0+YnVmZmVyLT5sYXN0ID0gcy0+YnVmZmVyLT5zdGFydDsKLSAgICBzLT50YWcubGVuID0gMDsKKyAgICBuZ3hfaW1hcF9zZW5kKGMtPndyaXRlKTsKIH0KIAogCkBAIC0zMTcsNyArMzk0LDYgQEAKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICp0ZXh0OwogICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIHNpemU7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgcXVpdDsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICphcmc7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKICAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICAgICpzOwpAQCAtMzM0LDEzICs0MTAsMjAgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChzLT5vdXQubGVuKSB7CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSU1BUCwgYy0+bG9nLCAwLCAiaW1hcCBzZW5kIGhhbmRsZXIgYnVzeSIpOworICAgICAgICBzLT5ibG9ja2VkID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHMtPmJsb2NrZWQgPSAwOworCiAgICAgcmMgPSBuZ3hfaW1hcF9yZWFkX2NvbW1hbmQocyk7CiAKICAgICBpZiAocmMgPT0gTkdYX0FHQUlOIHx8IHJjID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcXVpdCA9IDA7CiAgICAgdGV4dCA9IHBvcDNfb2s7CiAgICAgc2l6ZSA9IHNpemVvZihwb3AzX29rKSAtIDE7CiAKQEAgLTM4MSw3ICs0NjQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE5HWF9QT1AzX1FVSVQ6Ci0gICAgICAgICAgICAgICAgcXVpdCA9IDE7CisgICAgICAgICAgICAgICAgcy0+cXVpdCA9IDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfTk9PUDoKQEAgLTQ0MSw3ICs1MjQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE5HWF9QT1AzX1FVSVQ6Ci0gICAgICAgICAgICAgICAgcXVpdCA9IDE7CisgICAgICAgICAgICAgICAgcy0+cXVpdCA9IDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfTk9PUDoKQEAgLTQ2NiwyMyArNTQ5LDE0IEBACiAgICAgICAgIHNpemUgPSBzaXplb2YocG9wM19pbnZhbGlkX2NvbW1hbmQpIC0gMTsKICAgICB9CiAKLSAgICBpZiAobmd4X3NlbmQoYywgdGV4dCwgc2l6ZSkgPCBzaXplKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIHRyZWF0IHRoZSBpbmNvbXBsZXRlIHNlbmRpbmcgYXMgTkdYX0VSUk9SCi0gICAgICAgICAqIGJlY2F1c2UgaXQgaXMgdmVyeSBzdHJhbmdlIGhlcmUKLSAgICAgICAgICovCi0gICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocXVpdCkgewotICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgcy0+YXJncy5uZWx0cyA9IDA7CiAgICAgcy0+YnVmZmVyLT5wb3MgPSBzLT5idWZmZXItPnN0YXJ0OwogICAgIHMtPmJ1ZmZlci0+bGFzdCA9IHMtPmJ1ZmZlci0+c3RhcnQ7CisKKyAgICBzLT5vdXQuZGF0YSA9IHRleHQ7CisgICAgcy0+b3V0LmxlbiA9IHNpemU7CisKKyAgICBuZ3hfaW1hcF9zZW5kKGMtPndyaXRlKTsKIH0KIAogCkBAIC00OTIsOCArNTY2LDggQEAKICAgICBzc2l6ZV90ICAgIG47CiAgICAgbmd4X2ludF90ICByYzsKIAotICAgIG4gPSBuZ3hfcmVjdihzLT5jb25uZWN0aW9uLCBzLT5idWZmZXItPmxhc3QsCi0gICAgICAgICAgICAgICAgIHMtPmJ1ZmZlci0+ZW5kIC0gcy0+YnVmZmVyLT5sYXN0KTsKKyAgICBuID0gcy0+Y29ubmVjdGlvbi0+cmVjdihzLT5jb25uZWN0aW9uLCBzLT5idWZmZXItPmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+YnVmZmVyLT5lbmQgLSBzLT5idWZmZXItPmxhc3QpOwogCiAgICAgaWYgKG4gPT0gTkdYX0VSUk9SIHx8IG4gPT0gMCkgewogICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKHMtPmNvbm5lY3Rpb24pOwpAQCAtNTM4LDEwICs2MTIsMTAgQEAKIHZvaWQKIG5neF9pbWFwX3Nlc3Npb25faW50ZXJuYWxfc2VydmVyX2Vycm9yKG5neF9pbWFwX3Nlc3Npb25fdCAqcykKIHsKLSAgICAodm9pZCkgbmd4X3NlbmQocy0+Y29ubmVjdGlvbiwgaW50ZXJuYWxfc2VydmVyX2Vycm9yc1tzLT5wcm90b2NvbF0uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxfc2VydmVyX2Vycm9yc1tzLT5wcm90b2NvbF0ubGVuKTsKKyAgICBzLT5vdXQgPSBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3JzW3MtPnByb3RvY29sXTsKKyAgICBzLT5xdWl0ID0gMTsKIAotICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24ocy0+Y29ubmVjdGlvbik7CisgICAgbmd4X2ltYXBfc2VuZChzLT5jb25uZWN0aW9uLT53cml0ZSk7CiB9CiAKIApAQCAtNTUzLDkgKzYyNyw0MiBAQAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSU1BUCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJjbG9zZSBpbWFwIGNvbm5lY3Rpb246ICVkIiwgYy0+ZmQpOwogCisjaWYgKE5HWF9JTUFQX1NTTCkKKworICAgIGlmIChjLT5zc2wpIHsKKyAgICAgICAgaWYgKG5neF9zc2xfc2h1dGRvd24oYykgPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICBjLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfc3NsX2Nsb3NlX2hhbmRsZXI7CisgICAgICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3NzbF9jbG9zZV9oYW5kbGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKwogICAgIHBvb2wgPSBjLT5wb29sOwogCiAgICAgbmd4X2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAKICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOwogfQorCisKKyNpZiAoTkdYX0lNQVBfU1NMKQorIAorc3RhdGljIHZvaWQKK25neF9pbWFwX3NzbF9jbG9zZV9oYW5kbGVyKG5neF9ldmVudF90ICpldikKK3sKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKKworICAgIGMgPSBldi0+ZGF0YTsKKworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSU1BUCwgZXYtPmxvZywgMCwgImh0dHAgc3NsIGNsb3NlIGhhbmRsZXIiKTsKKworICAgIGlmIChuZ3hfc3NsX3NodXRkb3duKGMpID09IE5HWF9BR0FJTikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCmluZGV4IGJlMzJlNmYuLmY5YTg0Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCkBAIC0xMyw2ICsxMyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfZmxhZ190ICBlbmFibGU7CisgICAgc2l6ZV90ICAgICAgYnVmZmVyX3NpemU7CisgICAgbmd4X21zZWNfdCAgdGltZW91dDsKIH0gbmd4X2ltYXBfcHJveHlfY29uZl90OwogCiAKQEAgLTM1LDYgKzM3LDcgQEAKIAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2ltYXBfcHJveHlfY29tbWFuZHNbXSA9IHsKKwogICAgIHsgbmd4X3N0cmluZygicHJveHkiKSwKICAgICAgIE5HWF9JTUFQX01BSU5fQ09ORnxOR1hfSU1BUF9TUlZfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKQEAgLTQyLDYgKzQ1LDIwIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaW1hcF9wcm94eV9jb25mX3QsIGVuYWJsZSksCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2J1ZmZlciIpLAorICAgICAgTkdYX0lNQVBfTUFJTl9DT05GfE5HWF9JTUFQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKKyAgICAgIE5HWF9JTUFQX1NSVl9DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9pbWFwX3Byb3h5X2NvbmZfdCwgYnVmZmVyX3NpemUpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV90aW1lb3V0IiksCisgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfbXNlY19zbG90LAorICAgICAgTkdYX0lNQVBfU1JWX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2ltYXBfcHJveHlfY29uZl90LCB0aW1lb3V0KSwKKyAgICAgIE5VTEwgfSwKKwogICAgICAgbmd4X251bGxfY29tbWFuZAogfTsKIApAQCAtMTMxLDEyICsxNDgsMTIgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaW1hcF9wcm94eV9pbWFwX2hhbmRsZXIobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpwOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIHJjOwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIGxpbmU7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKLSAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICAgICpzOwotICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBsaW5lOworICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgKmM7CisgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAqczsKKyAgICBuZ3hfaW1hcF9wcm94eV9jb25mX3QgICpwY2Y7CiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIHJldi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJpbWFwIHByb3h5IGltYXAgYXV0aCBoYW5kbGVyIik7CkBAIC0xNTIsMTAgKzE2OSw5IEBACiAgICAgfQogCiAgICAgaWYgKHMtPnByb3h5LT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7CisgICAgICAgIHBjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfcHJveHlfbW9kdWxlKTsKIAotICAgICAgICBzLT5wcm94eS0+YnVmZmVyID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc2NmLT5wcm94eV9idWZmZXJfc2l6ZSk7CisgICAgICAgIHMtPnByb3h5LT5idWZmZXIgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKGMtPnBvb2wsIHBjZi0+YnVmZmVyX3NpemUpOwogICAgICAgICBpZiAocy0+cHJveHktPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBuZ3hfaW1hcF9wcm94eV9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDcsNyArMjYzLDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKG5neF9zZW5kKGMsIGxpbmUuZGF0YSwgbGluZS5sZW4pIDwgKHNzaXplX3QpIGxpbmUubGVuKSB7CisgICAgaWYgKGMtPnNlbmQoYywgbGluZS5kYXRhLCBsaW5lLmxlbikgPCAoc3NpemVfdCkgbGluZS5sZW4pIHsKICAgICAgICAgLyoKICAgICAgICAgICogd2UgdHJlYXQgdGhlIGluY29tcGxldGUgc2VuZGluZyBhcyBOR1hfRVJST1IKICAgICAgICAgICogYmVjYXVzZSBpdCBpcyB2ZXJ5IHN0cmFuZ2UgaGVyZQpAQCAtMjY1LDYgKzI4MSw4IEBACiAgICAgICAgIHJldi0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CiAgICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKIAorICAgICAgICBwY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3Byb3h5X21vZHVsZSk7CisgICAgICAgIG5neF9hZGRfdGltZXIocy0+Y29ubmVjdGlvbi0+cmVhZCwgcGNmLT50aW1lb3V0KTsKICAgICAgICAgbmd4X2RlbF90aW1lcihjLT5yZWFkKTsKICAgICB9CiB9CkBAIC0yNzMsMTIgKzI5MSwxMiBAQAogc3RhdGljIHZvaWQKIG5neF9pbWFwX3Byb3h5X3BvcDNfaGFuZGxlcihuZ3hfZXZlbnRfdCAqcmV2KQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKnA7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgbGluZTsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOwotICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICAgICAgKnM7Ci0gICAgbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICpwOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgIHJjOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIGxpbmU7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAqYzsKKyAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICpzOworICAgIG5neF9pbWFwX3Byb3h5X2NvbmZfdCAgKnBjZjsKIAogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSU1BUCwgcmV2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImltYXAgcHJveHkgcG9wMyBhdXRoIGhhbmRsZXIiKTsKQEAgLTI5NCwxMCArMzEyLDkgQEAKICAgICB9CiAKICAgICBpZiAocy0+cHJveHktPmJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKKyAgICAgICAgcGNmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9wcm94eV9tb2R1bGUpOwogCi0gICAgICAgIHMtPnByb3h5LT5idWZmZXIgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKGMtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzY2YtPnByb3h5X2J1ZmZlcl9zaXplKTsKKyAgICAgICAgcy0+cHJveHktPmJ1ZmZlciA9IG5neF9jcmVhdGVfdGVtcF9idWYoYy0+cG9vbCwgcGNmLT5idWZmZXJfc2l6ZSk7CiAgICAgICAgIGlmIChzLT5wcm94eS0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM2OSw3ICszODYsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobmd4X3NlbmQoYywgbGluZS5kYXRhLCBsaW5lLmxlbikgPCAoc3NpemVfdCkgbGluZS5sZW4pIHsKKyAgICBpZiAoYy0+c2VuZChjLCBsaW5lLmRhdGEsIGxpbmUubGVuKSA8IChzc2l6ZV90KSBsaW5lLmxlbikgewogICAgICAgICAvKgogICAgICAgICAgKiB3ZSB0cmVhdCB0aGUgaW5jb21wbGV0ZSBzZW5kaW5nIGFzIE5HWF9FUlJPUgogICAgICAgICAgKiBiZWNhdXNlIGl0IGlzIHZlcnkgc3RyYW5nZSBoZXJlCkBAIC0zODcsNiArNDA0LDggQEAKICAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKICAgICAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwogCisgICAgICAgIHBjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfcHJveHlfbW9kdWxlKTsKKyAgICAgICAgbmd4X2FkZF90aW1lcihzLT5jb25uZWN0aW9uLT5yZWFkLCBwY2YtPnRpbWVvdXQpOwogICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPnJlYWQpOwogICAgIH0KIH0KQEAgLTQwOCw3ICs0MjcsOCBAQAogCiAgICAgYiA9IHMtPnByb3h5LT5idWZmZXI7CiAKLSAgICBuID0gbmd4X3JlY3Yocy0+cHJveHktPnVwc3RyZWFtLmNvbm5lY3Rpb24sIGItPmxhc3QsIGItPmVuZCAtIGItPmxhc3QpOworICAgIG4gPSBzLT5wcm94eS0+dXBzdHJlYW0uY29ubmVjdGlvbi0+cmVjdihzLT5wcm94eS0+dXBzdHJlYW0uY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+bGFzdCwgYi0+ZW5kIC0gYi0+bGFzdCk7CiAKICAgICBpZiAobiA9PSBOR1hfRVJST1IgfHwgbiA9PSAwKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CkBAIC00NzUsMTIgKzQ5NSwxMyBAQAogc3RhdGljIHZvaWQKIG5neF9pbWFwX3Byb3h5X2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQogewotICAgIHNpemVfdCAgICAgICAgICAgICAgIHNpemU7Ci0gICAgc3NpemVfdCAgICAgICAgICAgICAgbjsKLSAgICBuZ3hfYnVmX3QgICAgICAgICAgICpiOwotICAgIG5neF91aW50X3QgICAgICAgICAgIGFnYWluLCBkb193cml0ZTsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjLCAqc3JjLCAqZHN0OwotICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgKnM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgc2l6ZTsKKyAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICBuOworICAgIG5neF9idWZfdCAgICAgICAgICAgICAgKmI7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgYWdhaW4sIGRvX3dyaXRlOworICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgKmMsICpzcmMsICpkc3Q7CisgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAqczsKKyAgICBuZ3hfaW1hcF9wcm94eV9jb25mX3QgICpwY2Y7CiAKICAgICBjID0gZXYtPmRhdGE7CiAgICAgcyA9IGMtPmRhdGE7CkBAIC01MzcsNyArNTU4LDcgQEAKICAgICAgICAgICAgIHNpemUgPSBiLT5sYXN0IC0gYi0+cG9zOwogCiAgICAgICAgICAgICBpZiAoc2l6ZSAmJiBkc3QtPndyaXRlLT5yZWFkeSkgewotICAgICAgICAgICAgICAgIG4gPSBuZ3hfc2VuZChkc3QsIGItPnBvcywgc2l6ZSk7CisgICAgICAgICAgICAgICAgbiA9IGRzdC0+c2VuZChkc3QsIGItPnBvcywgc2l6ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKQEAgLTU2OCw3ICs1ODksNyBAQAogICAgICAgICBzaXplID0gYi0+ZW5kIC0gYi0+bGFzdDsKIAogICAgICAgICBpZiAoc2l6ZSAmJiBzcmMtPnJlYWQtPnJlYWR5KSB7Ci0gICAgICAgICAgICBuID0gbmd4X3JlY3Yoc3JjLCBiLT5sYXN0LCBzaXplKTsKKyAgICAgICAgICAgIG4gPSBzcmMtPnJlY3Yoc3JjLCBiLT5sYXN0LCBzaXplKTsKIAogICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SIHx8IG4gPT0gMCkgewogICAgICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7CkBAIC01ODcsNiArNjA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjID09IHMtPmNvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBwY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3Byb3h5X21vZHVsZSk7CisgICAgICAgICAgICAgICAgbmd4X2FkZF90aW1lcihjLT5yZWFkLCBwY2YtPnRpbWVvdXQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICB9IHdoaWxlIChhZ2Fpbik7CkBAIC02MzQsNiArNjYwLDggQEAKICAgICB9CiAKICAgICBwY2YtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOworICAgIHBjZi0+YnVmZmVyX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOworICAgIHBjZi0+dGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAKICAgICByZXR1cm4gcGNmOwogfQpAQCAtNjQ1LDcgKzY3MywxMCBAQAogICAgIG5neF9pbWFwX3Byb3h5X2NvbmZfdCAqcHJldiA9IHBhcmVudDsKICAgICBuZ3hfaW1hcF9wcm94eV9jb25mX3QgKmNvbmYgPSBjaGlsZDsKIAotICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmVuYWJsZSwgcHJldi0+ZW5hYmxlLCAwKTsKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPmJ1ZmZlcl9zaXplLCBwcmV2LT5idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIG5neF9wYWdlc2l6ZSk7CisgICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT50aW1lb3V0LCBwcmV2LT50aW1lb3V0LCAyNCAqIDYwICogNjAwMDApOwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODM0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMKQEAgLTAsMCArMSwxNzQgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfaW1hcC5oPgorCisKKyNkZWZpbmUgTkdYX0RFRkxBVVRfQ0VSVElGSUNBVEUgICAgICAiY2VydC5wZW0iCisjZGVmaW5lIE5HWF9ERUZMQVVUX0NFUlRJRklDQVRFX0tFWSAgImNlcnQucGVtIgorCisKK3N0YXRpYyB2b2lkICpuZ3hfaW1hcF9zc2xfY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpOworc3RhdGljIGNoYXIgKm5neF9pbWFwX3NzbF9tZXJnZV9jb25mKG5neF9jb25mX3QgKmNmLCB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKKworCitzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2ltYXBfc3NsX2NvbW1hbmRzW10gPSB7CisKKyAgICB7IG5neF9zdHJpbmcoInNzbCIpLAorICAgICAgTkdYX0lNQVBfTUFJTl9DT05GfE5HWF9JTUFQX1NSVl9DT05GfE5HWF9DT05GX0ZMQUcsCisgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAorICAgICAgTkdYX0lNQVBfU1JWX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2ltYXBfc3NsX2NvbmZfdCwgZW5hYmxlKSwKKyAgICAgIE5VTEwgfSwKKworICAgIHsgbmd4X3N0cmluZygic3NsX2NlcnRpZmljYXRlIiksCisgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSU1BUF9TUlZfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaW1hcF9zc2xfY29uZl90LCBjZXJ0aWZpY2F0ZSksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNzbF9jZXJ0aWZpY2F0ZV9rZXkiKSwKKyAgICAgIE5HWF9JTUFQX01BSU5fQ09ORnxOR1hfSU1BUF9TUlZfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKKyAgICAgIE5HWF9JTUFQX1NSVl9DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9pbWFwX3NzbF9jb25mX3QsIGNlcnRpZmljYXRlX2tleSksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNzbF9jaXBoZXJzIiksCisgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSU1BUF9TUlZfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaW1hcF9zc2xfY29uZl90LCBjaXBoZXJzKSwKKyAgICAgIE5VTEwgfSwKKworICAgICAgbmd4X251bGxfY29tbWFuZAorfTsKKworCitzdGF0aWMgbmd4X2ltYXBfbW9kdWxlX3QgIG5neF9pbWFwX3NzbF9tb2R1bGVfY3R4ID0geworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLworCisgICAgbmd4X2ltYXBfc3NsX2NyZWF0ZV9jb25mLCAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCisgICAgbmd4X2ltYXBfc3NsX21lcmdlX2NvbmYgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KK307CisKKworbmd4X21vZHVsZV90ICBuZ3hfaW1hcF9zc2xfbW9kdWxlID0geworICAgIE5HWF9NT0RVTEVfVjEsCisgICAgJm5neF9pbWFwX3NzbF9tb2R1bGVfY3R4LCAgICAgICAgICAgICAgLyogbW9kdWxlIGNvbnRleHQgKi8KKyAgICBuZ3hfaW1hcF9zc2xfY29tbWFuZHMsICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLworICAgIE5HWF9JTUFQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KK307CisKKworc3RhdGljIHZvaWQgKgorbmd4X2ltYXBfc3NsX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKQoreyAgICAgICAgICAgCisgICAgbmd4X2ltYXBfc3NsX2NvbmZfdCAgKnNjZjsKKyAgICAgICAgICAgIAorICAgIHNjZiA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X2ltYXBfc3NsX2NvbmZfdCkpOworICAgIGlmIChzY2YgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzZXQgYnkgbmd4X3BjYWxsb2MoKTogIAorICAgICAqCisgICAgICogICAgIHNjZi0+Y2VydGlmaWNhdGUubGVuID0gMDsKKyAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZS5kYXRhID0gTlVMTDsKKyAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZV9rZXkubGVuID0gMDsKKyAgICAgKiAgICAgc2NmLT5jZXJ0aWZpY2F0ZV9rZXkuZGF0YSA9IE5VTEw7CisgICAgICogICAgIHNjZi0+Y2lwaGVycy5sZW4gPSAwOworICAgICAqICAgICBzY2YtPmNpcGhlcnMuZGF0YSA9IE5VTEw7CisgICAgICovCisKKyAgICBzY2YtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOworCisgICAgcmV0dXJuIHNjZjsKK30KKworCitzdGF0aWMgY2hhciAqCituZ3hfaW1hcF9zc2xfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCkKK3sKKyAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICpwcmV2ID0gcGFyZW50OworICAgIG5neF9pbWFwX3NzbF9jb25mX3QgKmNvbmYgPSBjaGlsZDsKKworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmVuYWJsZSwgcHJldi0+ZW5hYmxlLCAwKTsKKworICAgIGlmIChjb25mLT5lbmFibGUgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgfQorCisgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmNlcnRpZmljYXRlLCBwcmV2LT5jZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0RFRkxBVVRfQ0VSVElGSUNBVEUpOworCisgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmNlcnRpZmljYXRlX2tleSwgcHJldi0+Y2VydGlmaWNhdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfREVGTEFVVF9DRVJUSUZJQ0FURV9LRVkpOworCisgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmNpcGhlcnMsIHByZXYtPmNpcGhlcnMsICIiKTsKKworCisgICAgLyogVE9ETzogY29uZmlndXJlIG1ldGhvZHMgKi8KKworICAgIGNvbmYtPnNzbF9jdHggPSBTU0xfQ1RYX25ldyhTU0x2MjNfc2VydmVyX21ldGhvZCgpKTsKKworICAgIGlmIChjb25mLT5zc2xfY3R4ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLCAiU1NMX0NUWF9uZXcoKSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIGlmIChuZ3hfcG9vbF9jbGVhbnVwX2FkZChjZi0+cG9vbCwgbmd4X3NzbF9jbGVhbnVwX2N0eCwgY29uZi0+c3NsX2N0eCkKKyAgICAgICAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKworI2lmIDAKKyAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbF9jdHgsIFNTTF9PUF9BTEwpOworICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoY29uZi0+c3NsX2N0eCwgU1NMX09QX05PX1NTTHYzKTsKKyAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbF9jdHgsIFNTTF9PUF9TSU5HTEVfREhfVVNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbmYtPmNpcGhlcnMubGVuKSB7CisgICAgICAgIGlmIChTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjb25mLT5zc2xfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBjb25mLT5jaXBoZXJzLmRhdGEpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KFwiJVZcIikgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmYtPmNpcGhlcnMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoY29uZi0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgY29uZi0+Y2VydGlmaWNhdGUuZGF0YSkgPT0gMCkKKyAgICB7CisgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShcIiVzXCIpIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgY29uZi0+Y2VydGlmaWNhdGUuZGF0YSk7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKworICAgIGlmIChTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uZi0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGNvbmYtPmNlcnRpZmljYXRlX2tleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVUWVBFX1BFTSkgPT0gMCkKKyAgICB7CisgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKFwiJXNcIikgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25mLT5jZXJ0aWZpY2F0ZV9rZXkuZGF0YSk7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmggYi9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwYTYxNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuaApAQCAtMCwwICsxLDMwIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaWZuZGVmIF9OR1hfSU1BUF9TU0xfSF9JTkNMVURFRF8KKyNkZWZpbmUgX05HWF9JTUFQX1NTTF9IX0lOQ0xVREVEXworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfaW1hcC5oPgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfZmxhZ190ICAgICAgZW5hYmxlOworICAgIG5neF9zdHJfdCAgICAgICBjZXJ0aWZpY2F0ZTsKKyAgICBuZ3hfc3RyX3QgICAgICAgY2VydGlmaWNhdGVfa2V5OworCisgICAgbmd4X3N0cl90ICAgICAgIGNpcGhlcnM7CisKKyAgICBuZ3hfc3NsX2N0eF90ICAqc3NsX2N0eDsKK30gbmd4X2ltYXBfc3NsX2NvbmZfdDsKKworCitleHRlcm4gbmd4X21vZHVsZV90ICBuZ3hfaW1hcF9zc2xfbW9kdWxlOworCisKKyNlbmRpZiAvKiBfTkdYX0lNQVBfU1NMX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCmluZGV4IDdiMzQ1OTAuLjczZGViOWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCkBAIC05OSw1ICs5OSw3IEBACiAKIGV4dGVybiBjaGFyICptYWxsb2Nfb3B0aW9uczsKIAorI2RlZmluZSBOR1hfSEFWRV9PU19TUEVDSUZJQ19JTklUICAgIDEKKwogCiAjZW5kaWYgLyogX05HWF9GUkVFQlNEX0NPTkZJR19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jCmluZGV4IGFiMDAyYWUuLjg2MTBhNTYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMKQEAgLTI3LDcgKzI3LDcgQEAKIG5neF91aW50X3Qgbmd4X2ZyZWVic2RfdXNlX3RjcF9ub3B1c2g7CiAKIAotbmd4X29zX2lvX3Qgbmd4X29zX2lvID0geworc3RhdGljIG5neF9vc19pb190IG5neF9mcmVlYnNkX2lvID0gewogICAgIG5neF91bml4X3JlY3YsCiAgICAgbmd4X3JlYWR2X2NoYWluLAogICAgIG5neF91bml4X3NlbmQsCkBAIC03NCw3ICs3NCw4IEBACiB9OwogCiAKLXZvaWQgbmd4X2RlYnVnX2luaXQoKQordm9pZAorbmd4X2RlYnVnX2luaXQoKQogewogI2lmIChOR1hfREVCVUcgJiYgIU5HWF9OT19ERUJVR19NQUxMT0MpCiAKQEAgLTg4LDcgKzg5LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X29zX2luaXQobmd4X2xvZ190ICpsb2cpCituZ3hfaW50X3QKK25neF9vc19zcGVjaWZpY19pbml0KG5neF9sb2dfdCAqbG9nKQogewogICAgIGludCAgICAgICAgIHZlcnNpb24sIHNvbWF4Y29ubjsKICAgICBzaXplX3QgICAgICBzaXplOwpAQCAtMjIzLDEyICsyMjUsMTQgQEAKIAogICAgIG5neF90Y3Bfbm9kZWxheV9hbmRfdGNwX25vcHVzaCA9IDE7CiAKKyAgICBuZ3hfb3NfaW8gPSBuZ3hfZnJlZWJzZF9pbzsKIAotICAgIHJldHVybiBuZ3hfcG9zaXhfaW5pdChsb2cpOworICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAotdm9pZCBuZ3hfb3Nfc3RhdHVzKG5neF9sb2dfdCAqbG9nKQordm9pZAorbmd4X29zX3NwZWNpZmljX3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBuZ3hfdWludF90ICBpOwogCkBAIC0yNTEsNyArMjU1LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3Rsc1tpXS5uYW1lLCAqc3lzY3Rsc1tpXS52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0KLQotICAgIG5neF9wb3NpeF9zdGF0dXMobG9nKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDdhZTU5NDguLjcyMTMzNWUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYwpAQCAtNTYsNyArNTYsMTEgQEAKIAogI2lmIChOR1hfSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSAmJiB3ZXYtPnBlbmRpbmdfZW9mKSB7CisgICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkKKyAgICAgICAgJiYgd2V2LT5wZW5kaW5nX2VvZgorICAgICAgICAgICAvKiBGcmVlQlNEIDYuMCBtYXkgZXJyb25lb3VzbHkgcmVwb3J0IEVUSU1FRE9VVCAqLworICAgICAgICAmJiB3ZXYtPmtxX2Vycm5vICE9IE5HWF9FVElNRURPVVQpCisgICAgewogICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgd2V2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgICAgICAgd2V2LT5lcnJvciA9IDE7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKaW5kZXggN2JkMjYyYS4uZDNlZjMyNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaApAQCAtMTAzLDQgKzEwMyw3IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIE5HWF9IQVZFX09TX1NQRUNJRklDX0lOSVQgICAgMQorCisKICNlbmRpZiAvKiBfTkdYX0xJTlVYX0NPTkZJR19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYyBiL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMKaW5kZXggNTZkOWYxNS4uOGQyZjc5MSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jCkBAIC0xNCw3ICsxNCw3IEBACiBpbnQgbmd4X2xpbnV4X3J0c2lnX21heDsKIAogCi1uZ3hfb3NfaW9fdCBuZ3hfb3NfaW8gPSB7CitzdGF0aWMgbmd4X29zX2lvX3Qgbmd4X2xpbnV4X2lvID0gewogICAgIG5neF91bml4X3JlY3YsCiAgICAgbmd4X3JlYWR2X2NoYWluLAogICAgIG5neF91bml4X3NlbmQsCkBAIC0yOSw3ICsyOSw3IEBACiAKIAogbmd4X2ludF90Ci1uZ3hfb3NfaW5pdChuZ3hfbG9nX3QgKmxvZykKK25neF9vc19zcGVjaWZpY19pbml0KG5neF9sb2dfdCAqbG9nKQogewogICAgIGludCAgICAgICAgbmFtZVsyXTsKICAgICBzaXplX3QgICAgIGxlbjsKQEAgLTc0LDE5ICs3NCwxOCBAQAogICAgIH0KIAogCi0gICAgcmV0dXJuIG5neF9wb3NpeF9pbml0KGxvZyk7CisgICAgbmd4X29zX2lvID0gbmd4X2xpbnV4X2lvOworCisgICAgcmV0dXJuIE5HWF9PSzsKIH0KIAogCiB2b2lkCi1uZ3hfb3Nfc3RhdHVzKG5neF9sb2dfdCAqbG9nKQorbmd4X29zX3NwZWNpZmljX3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBsb2csIDAsICJPUzogJXMgJXMiLAogICAgICAgICAgICAgICAgICAgbmd4X2xpbnV4X2tlcm5fb3N0eXBlLCBuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UpOwogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbG9nLCAwLCAic3lzY3RsKEtFUk5fUlRTSUdNQVgpOiAlZCIsCiAgICAgICAgICAgICAgICAgICBuZ3hfbGludXhfcnRzaWdfbWF4KTsKLQotCi0gICAgbmd4X3Bvc2l4X3N0YXR1cyhsb2cpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X29zLmggYi9zcmMvb3MvdW5peC9uZ3hfb3MuaAppbmRleCA5N2EyOWU2Li4wMTVkNjQwIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfb3MuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfb3MuaApAQCAtMzQsMTAgKzM0LDkgQEAKIHZvaWQgbmd4X2RlYnVnX2luaXQodm9pZCk7CiBuZ3hfaW50X3Qgbmd4X29zX2luaXQobmd4X2xvZ190ICpsb2cpOwogdm9pZCBuZ3hfb3Nfc3RhdHVzKG5neF9sb2dfdCAqbG9nKTsKK25neF9pbnRfdCBuZ3hfb3Nfc3BlY2lmaWNfaW5pdChuZ3hfbG9nX3QgKmxvZyk7Cit2b2lkIG5neF9vc19zcGVjaWZpY19zdGF0dXMobmd4X2xvZ190ICpsb2cpOwogbmd4X2ludF90IG5neF9kYWVtb24obmd4X2xvZ190ICpsb2cpOwotbmd4X2ludF90IG5neF9wb3NpeF9pbml0KG5neF9sb2dfdCAqbG9nKTsKLXZvaWQgbmd4X3Bvc2l4X3N0YXR1cyhuZ3hfbG9nX3QgKmxvZyk7Ci1uZ3hfaW50X3Qgbmd4X3Bvc2l4X3Bvc3RfY29uZl9pbml0KG5neF9sb2dfdCAqbG9nKTsKIAogCiBzc2l6ZV90IG5neF91bml4X3JlY3Yobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpidWYsIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wb3NpeF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9wb3NpeF9jb25maWcuaAppbmRleCA1OTJmZjc2Li5kYzQzNDFhIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2NvbmZpZy5oCkBAIC0xMDIsNyArMTAyLDQgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgTkdYX1BPU0lYX0lPICAxCi0KLQogI2VuZGlmIC8qIF9OR1hfUE9TSVhfQ09ORklHX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwppbmRleCBkMGRlNWQ1Li5jOGIwNTQ4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ2lueC5oPgogCiAKIG5neF9pbnRfdCAgIG5neF9uY3B1OwpAQCAtMTcsOCArMTgsNiBAQAogc3RydWN0IHJsaW1pdCAgcmxtdDsKIAogCi0jaWYgKE5HWF9QT1NJWF9JTykKLQogbmd4X29zX2lvX3Qgbmd4X29zX2lvID0gewogICAgIG5neF91bml4X3JlY3YsCiAgICAgbmd4X3JlYWR2X2NoYWluLApAQCAtMjgsNzUgKzI3LDE3IEBACiB9OwogCiAKLW5neF9pbnRfdCBuZ3hfb3NfaW5pdChuZ3hfbG9nX3QgKmxvZykKK25neF9pbnRfdAorbmd4X29zX2luaXQobmd4X2xvZ190ICpsb2cpCiB7Ci0gICAgcmV0dXJuIG5neF9wb3NpeF9pbml0KGxvZyk7Ci19CisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbG9nLCAwLCBOR0lOWF9WRVIpOwogCi0KLXZvaWQgbmd4X29zX3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKLXsKLSAgICBuZ3hfcG9zaXhfc3RhdHVzKGxvZyk7Ci19Ci0KLQorI2lmIChOR1hfSEFWRV9PU19TUEVDSUZJQ19JTklUKQorICAgIGlmIChuZ3hfb3Nfc3BlY2lmaWNfaW5pdChsb2cpICE9IE5HWF9PSykgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KICNlbmRpZgogCi0KLXZvaWQgbmd4X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubyk7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgICBpbnQgICAgIHNpZ25vOwotICAgICBjaGFyICAgKnNpZ25hbWU7Ci0gICAgIHZvaWQgICgqaGFuZGxlcikoaW50IHNpZ25vKTsKLX0gbmd4X3NpZ25hbF90OwotCi0KLW5neF9zaWduYWxfdCAgc2lnbmFsc1tdID0gewotICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVDT05GSUdVUkVfU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfUkVDT05GSUdVUkVfU0lHTkFMKSwKLSAgICAgIG5neF9zaWduYWxfaGFuZGxlciB9LAotCi0gICAgeyBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRU9QRU5fU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfUkVPUEVOX1NJR05BTCksCi0gICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfTk9BQ0NFUFRfU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfTk9BQ0NFUFRfU0lHTkFMKSwKLSAgICAgIG5neF9zaWduYWxfaGFuZGxlciB9LAotCi0gICAgeyBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9URVJNSU5BVEVfU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfVEVSTUlOQVRFX1NJR05BTCksCi0gICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfU0hVVERPV05fU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfU0hVVERPV05fU0lHTkFMKSwKLSAgICAgIG5neF9zaWduYWxfaGFuZGxlciB9LAotCi0gICAgeyBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9DSEFOR0VCSU5fU0lHTkFMKSwKLSAgICAgICJTSUciIG5neF92YWx1ZShOR1hfQ0hBTkdFQklOX1NJR05BTCksCi0gICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgU0lHQUxSTSwgIlNJR0FMUk0iLCBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgU0lHSU5ULCAiU0lHSU5UIiwgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCi0KLSAgICB7IFNJR0lPLCAiU0lHSU8iLCBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgU0lHQ0hMRCwgIlNJR0NITEQiLCBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKLQotICAgIHsgU0lHUElQRSwgIlNJR1BJUEUsIFNJR19JR04iLCBTSUdfSUdOIH0sCi0KLSAgICB7IDAsIE5VTEwsIE5VTEwgfQotfTsKLQotCi1uZ3hfaW50X3Qgbmd4X3Bvc2l4X2luaXQobmd4X2xvZ190ICpsb2cpCi17Ci0gICAgbmd4X3NpZ25hbF90ICAgICAgKnNpZzsKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uICAgc2E7Ci0KICAgICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobG9nKTsKIAogICAgIG5neF9wYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CkBAIC0xMDUsMjMgKzQ2LDEyIEBACiAgICAgICAgIG5neF9uY3B1ID0gMTsKICAgICB9CiAKLSAgICBmb3IgKHNpZyA9IHNpZ25hbHM7IHNpZy0+c2lnbm8gIT0gMDsgc2lnKyspIHsKLSAgICAgICAgbmd4X21lbXplcm8oJnNhLCBzaXplb2Yoc3RydWN0IHNpZ2FjdGlvbikpOwotICAgICAgICBzYS5zYV9oYW5kbGVyID0gc2lnLT5oYW5kbGVyOwotICAgICAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7Ci0gICAgICAgIGlmIChzaWdhY3Rpb24oc2lnLT5zaWdubywgJnNhLCBOVUxMKSA9PSAtMSkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ2FjdGlvbiglcykgZmFpbGVkIiwgc2lnLT5zaWduYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybG10KSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgImdldHJsaW1pdChSTElNSVRfTk9GSUxFKSBmYWlsZWQpIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQotCisgICAgCiAgICAgbmd4X21heF9zb2NrZXRzID0gcmxtdC5ybGltX2N1cjsKIAogI2lmIChOR1hfSEFWRV9JTkhFUklURURfTk9OQkxPQ0spCkBAIC0xMzQsMTU3ICs2NCwyMSBAQAogfQogCiAKLXZvaWQgbmd4X3Bvc2l4X3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKK3ZvaWQKK25neF9vc19zdGF0dXMobmd4X2xvZ190ICpsb2cpCiB7CisjaWYgKE5HWF9IQVZFX09TX1NQRUNJRklDX0lOSVQpCisgICAgbmd4X29zX3NwZWNpZmljX3N0YXR1cyhsb2cpOworI2VuZGlmCisKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAiZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUpOiAlcjolciIsCiAgICAgICAgICAgICAgICAgICBybG10LnJsaW1fY3VyLCBybG10LnJsaW1fbWF4KTsKIH0KIAogCi12b2lkIG5neF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCi17Ci0gICAgY2hhciAgICAgICAgICAgICphY3Rpb247Ci0gICAgc3RydWN0IHRpbWV2YWwgICB0djsKLSAgICBuZ3hfaW50X3QgICAgICAgIGlnbm9yZTsKLSAgICBuZ3hfZXJyX3QgICAgICAgIGVycjsKLSAgICBuZ3hfc2lnbmFsX3QgICAgKnNpZzsKLQotICAgIGlnbm9yZSA9IDA7Ci0KLSAgICBlcnIgPSBuZ3hfZXJybm87Ci0KLSAgICBmb3IgKHNpZyA9IHNpZ25hbHM7IHNpZy0+c2lnbm8gIT0gMDsgc2lnKyspIHsKLSAgICAgICAgaWYgKHNpZy0+c2lnbm8gPT0gc2lnbm8pIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwotICAgIG5neF90aW1lX3VwZGF0ZSh0di50dl9zZWMpOwotCi0gICAgYWN0aW9uID0gIiI7Ci0KLSAgICBzd2l0Y2ggKG5neF9wcm9jZXNzKSB7Ci0KLSAgICBjYXNlIE5HWF9QUk9DRVNTX01BU1RFUjoKLSAgICBjYXNlIE5HWF9QUk9DRVNTX1NJTkdMRToKLSAgICAgICAgc3dpdGNoIChzaWdubykgewotCi0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfU0hVVERPV05fU0lHTkFMKToKLSAgICAgICAgICAgIG5neF9xdWl0ID0gMTsKLSAgICAgICAgICAgIGFjdGlvbiA9ICIsIHNodXR0aW5nIGRvd24iOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9URVJNSU5BVEVfU0lHTkFMKToKLSAgICAgICAgY2FzZSBTSUdJTlQ6Ci0gICAgICAgICAgICBuZ3hfdGVybWluYXRlID0gMTsKLSAgICAgICAgICAgIGFjdGlvbiA9ICIsIGV4aXRpbmciOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9OT0FDQ0VQVF9TSUdOQUwpOgotICAgICAgICAgICAgbmd4X25vYWNjZXB0ID0gMTsKLSAgICAgICAgICAgIGFjdGlvbiA9ICIsIHN0b3AgYWNjZXB0aW5nIGNvbm5lY3Rpb25zIjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVDT05GSUdVUkVfU0lHTkFMKToKLSAgICAgICAgICAgIG5neF9yZWNvbmZpZ3VyZSA9IDE7Ci0gICAgICAgICAgICBhY3Rpb24gPSAiLCByZWNvbmZpZ3VyaW5nIjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVPUEVOX1NJR05BTCk6Ci0gICAgICAgICAgICBuZ3hfcmVvcGVuID0gMTsKLSAgICAgICAgICAgIGFjdGlvbiA9ICIsIHJlb3BlbmluZyBsb2dzIjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfQ0hBTkdFQklOX1NJR05BTCk6Ci0gICAgICAgICAgICBpZiAoZ2V0cHBpZCgpID4gMSB8fCBuZ3hfbmV3X2JpbmFyeSA+IDApIHsKLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogSWdub3JlIHRoZSBzaWduYWwgaW4gdGhlIG5ldyBiaW5hcnkgaWYgaXRzIHBhcmVudCBpcwotICAgICAgICAgICAgICAgICAqIG5vdCB0aGUgaW5pdCBwcm9jZXNzLCBpLmUuIHRoZSBvbGQgYmluYXJ5J3MgcHJvY2VzcwotICAgICAgICAgICAgICAgICAqIGlzIHN0aWxsIHJ1bm5pbmcuICBPciBpbmdvcmUgdGhlIHNpZ25hbCBpbiB0aGUgb2xkIGJpbmFyeSdzCi0gICAgICAgICAgICAgICAgICogcHJvY2VzcyBpZiB0aGUgbmV3IGJpbmFyeSdzIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLgotICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgYWN0aW9uID0gIiwgaWdub3JpbmciOwotICAgICAgICAgICAgICAgIGlnbm9yZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9jaGFuZ2VfYmluYXJ5ID0gMTsKLSAgICAgICAgICAgIGFjdGlvbiA9ICIsIGNoYW5naW5nIGJpbmFyeSI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNJR0FMUk06Ci0gICAgICAgICAgICBpZiAoIW5neF90ZXJtaW5hdGUpIHsKLSAgICAgICAgICAgICAgICBuZ3hfdGltZXIgPSAxOwotICAgICAgICAgICAgICAgIGFjdGlvbiA9ICIsIHNodXR0aW5nIGRvd24gb2xkIHdvcmtlciBwcm9jZXNzZXMiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNJR0lPOgotICAgICAgICAgICAgbmd4X3NpZ2lvID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0lHQ0hMRDoKLSAgICAgICAgICAgIG5neF9yZWFwID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE5HWF9QUk9DRVNTX1dPUktFUjoKLSAgICAgICAgc3dpdGNoIChzaWdubykgewotCi0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfTk9BQ0NFUFRfU0lHTkFMKToKLSAgICAgICAgICAgIG5neF9kZWJ1Z19xdWl0ID0gMTsKLSAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9TSFVURE9XTl9TSUdOQUwpOgotICAgICAgICAgICAgbmd4X3F1aXQgPSAxOwotICAgICAgICAgICAgYWN0aW9uID0gIiwgc2h1dHRpbmcgZG93biI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1RFUk1JTkFURV9TSUdOQUwpOgotICAgICAgICBjYXNlIFNJR0lOVDoKLSAgICAgICAgICAgIG5neF90ZXJtaW5hdGUgPSAxOwotICAgICAgICAgICAgYWN0aW9uID0gIiwgZXhpdGluZyI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1JFT1BFTl9TSUdOQUwpOgotICAgICAgICAgICAgbmd4X3Jlb3BlbiA9IDE7Ci0gICAgICAgICAgICBhY3Rpb24gPSAiLCByZW9wZW5pbmcgbG9ncyI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1JFQ09ORklHVVJFX1NJR05BTCk6Ci0gICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfQ0hBTkdFQklOX1NJR05BTCk6Ci0gICAgICAgIGNhc2UgU0lHSU86Ci0gICAgICAgICAgICBhY3Rpb24gPSAiLCBpZ25vcmluZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIG5neF9jeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgInNpZ25hbCAlZCAoJXMpIHJlY2VpdmVkJXMiLCBzaWdubywgc2lnLT5zaWduYW1lLCBhY3Rpb24pOwotCi0gICAgaWYgKGlnbm9yZSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgbmd4X2N5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInRoZSBjaGFuZ2luZyBiaW5hcnkgc2lnbmFsIGlzIGlnbm9yZWQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICAieW91IHNob3VsZCBzaHV0ZG93biBvciB0ZXJtaW5hdGUgIgotICAgICAgICAgICAgICAgICAgICAgICJiZWZvcmUgZWl0aGVyIG9sZCBvciBuZXcgYmluYXJ5J3MgcHJvY2VzcyIpOwotICAgIH0KLQotICAgIGlmIChzaWdubyA9PSBTSUdDSExEKSB7Ci0gICAgICAgIG5neF9wcm9jZXNzX2dldF9zdGF0dXMoKTsKLSAgICB9Ci0KLSAgICBuZ3hfc2V0X2Vycm5vKGVycik7Ci19Ci0KLQotbmd4X2ludF90IG5neF9wb3NpeF9wb3N0X2NvbmZfaW5pdChuZ3hfbG9nX3QgKmxvZykKK25neF9pbnRfdAorbmd4X3Bvc2l4X3Bvc3RfY29uZl9pbml0KG5neF9sb2dfdCAqbG9nKQogewogICAgIG5neF9mZF90ICBwcFsyXTsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKaW5kZXggZjk2ODljOS4uZWFmN2FlNCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCkBAIC0xMCw3ICsxMCwxNyBAQAogI2luY2x1ZGUgPG5neF9jaGFubmVsLmg+CiAKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgICBpbnQgICAgIHNpZ25vOworICAgICBjaGFyICAgKnNpZ25hbWU7CisgICAgIHZvaWQgICgqaGFuZGxlcikoaW50IHNpZ25vKTsKK30gbmd4X3NpZ25hbF90OworCisKKwogc3RhdGljIHZvaWQgbmd4X2V4ZWN1dGVfcHJvYyhuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgbmd4X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubyk7CitzdGF0aWMgdm9pZCBuZ3hfcHJvY2Vzc19nZXRfc3RhdHVzKHZvaWQpOwogCiAKIGludCAgICAgICAgICAgICAgbmd4X2FyZ2M7CkBAIC0yMyw2ICszMyw0NSBAQAogbmd4X3Byb2Nlc3NfdCAgICBuZ3hfcHJvY2Vzc2VzW05HWF9NQVhfUFJPQ0VTU0VTXTsKIAogCituZ3hfc2lnbmFsX3QgIHNpZ25hbHNbXSA9IHsKKyAgICB7IG5neF9zaWduYWxfdmFsdWUoTkdYX1JFQ09ORklHVVJFX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX1JFQ09ORklHVVJFX1NJR05BTCksCisgICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKKworICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVPUEVOX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX1JFT1BFTl9TSUdOQUwpLAorICAgICAgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IG5neF9zaWduYWxfdmFsdWUoTkdYX05PQUNDRVBUX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX05PQUNDRVBUX1NJR05BTCksCisgICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKKworICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfVEVSTUlOQVRFX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX1RFUk1JTkFURV9TSUdOQUwpLAorICAgICAgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IG5neF9zaWduYWxfdmFsdWUoTkdYX1NIVVRET1dOX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX1NIVVRET1dOX1NJR05BTCksCisgICAgICBuZ3hfc2lnbmFsX2hhbmRsZXIgfSwKKworICAgIHsgbmd4X3NpZ25hbF92YWx1ZShOR1hfQ0hBTkdFQklOX1NJR05BTCksCisgICAgICAiU0lHIiBuZ3hfdmFsdWUoTkdYX0NIQU5HRUJJTl9TSUdOQUwpLAorICAgICAgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IFNJR0FMUk0sICJTSUdBTFJNIiwgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IFNJR0lOVCwgIlNJR0lOVCIsIG5neF9zaWduYWxfaGFuZGxlciB9LAorCisgICAgeyBTSUdJTywgIlNJR0lPIiwgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IFNJR0NITEQsICJTSUdDSExEIiwgbmd4X3NpZ25hbF9oYW5kbGVyIH0sCisKKyAgICB7IFNJR1BJUEUsICJTSUdQSVBFLCBTSUdfSUdOIiwgU0lHX0lHTiB9LAorCisgICAgeyAwLCBOVUxMLCBOVUxMIH0KK307CisKKwogbmd4X3BpZF90CiBuZ3hfc3Bhd25fcHJvY2VzcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9zcGF3bl9wcm9jX3B0IHByb2MsIHZvaWQgKmRhdGEsCiAgICAgY2hhciAqbmFtZSwgbmd4X2ludF90IHJlc3Bhd24pCkBAIC0yMDgsNyArMjU3LDE3MSBAQAogfQogCiAKK25neF9pbnRfdAorbmd4X2luaXRfc2lnbmFscyhuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICBuZ3hfc2lnbmFsX3QgICAgICAqc2lnOworICAgIHN0cnVjdCBzaWdhY3Rpb24gICBzYTsKKworICAgIGZvciAoc2lnID0gc2lnbmFsczsgc2lnLT5zaWdubyAhPSAwOyBzaWcrKykgeworICAgICAgICBuZ3hfbWVtemVybygmc2EsIHNpemVvZihzdHJ1Y3Qgc2lnYWN0aW9uKSk7CisgICAgICAgIHNhLnNhX2hhbmRsZXIgPSBzaWctPmhhbmRsZXI7CisgICAgICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKyAgICAgICAgaWYgKHNpZ2FjdGlvbihzaWctPnNpZ25vLCAmc2EsIE5VTEwpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnYWN0aW9uKCVzKSBmYWlsZWQiLCBzaWctPnNpZ25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwogdm9pZAorbmd4X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykKK3sKKyAgICBjaGFyICAgICAgICAgICAgKmFjdGlvbjsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgIHR2OworICAgIG5neF9pbnRfdCAgICAgICAgaWdub3JlOworICAgIG5neF9lcnJfdCAgICAgICAgZXJyOworICAgIG5neF9zaWduYWxfdCAgICAqc2lnOworCisgICAgaWdub3JlID0gMDsKKworICAgIGVyciA9IG5neF9lcnJubzsKKworICAgIGZvciAoc2lnID0gc2lnbmFsczsgc2lnLT5zaWdubyAhPSAwOyBzaWcrKykgeworICAgICAgICBpZiAoc2lnLT5zaWdubyA9PSBzaWdubykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CisgICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CisKKyAgICBhY3Rpb24gPSAiIjsKKworICAgIHN3aXRjaCAobmd4X3Byb2Nlc3MpIHsKKworICAgIGNhc2UgTkdYX1BST0NFU1NfTUFTVEVSOgorICAgIGNhc2UgTkdYX1BST0NFU1NfU0lOR0xFOgorICAgICAgICBzd2l0Y2ggKHNpZ25vKSB7CisKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9TSFVURE9XTl9TSUdOQUwpOgorICAgICAgICAgICAgbmd4X3F1aXQgPSAxOworICAgICAgICAgICAgYWN0aW9uID0gIiwgc2h1dHRpbmcgZG93biI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1RFUk1JTkFURV9TSUdOQUwpOgorICAgICAgICBjYXNlIFNJR0lOVDoKKyAgICAgICAgICAgIG5neF90ZXJtaW5hdGUgPSAxOworICAgICAgICAgICAgYWN0aW9uID0gIiwgZXhpdGluZyI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX05PQUNDRVBUX1NJR05BTCk6CisgICAgICAgICAgICBuZ3hfbm9hY2NlcHQgPSAxOworICAgICAgICAgICAgYWN0aW9uID0gIiwgc3RvcCBhY2NlcHRpbmcgY29ubmVjdGlvbnMiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRUNPTkZJR1VSRV9TSUdOQUwpOgorICAgICAgICAgICAgbmd4X3JlY29uZmlndXJlID0gMTsKKyAgICAgICAgICAgIGFjdGlvbiA9ICIsIHJlY29uZmlndXJpbmciOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRU9QRU5fU0lHTkFMKToKKyAgICAgICAgICAgIG5neF9yZW9wZW4gPSAxOworICAgICAgICAgICAgYWN0aW9uID0gIiwgcmVvcGVuaW5nIGxvZ3MiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9DSEFOR0VCSU5fU0lHTkFMKToKKyAgICAgICAgICAgIGlmIChnZXRwcGlkKCkgPiAxIHx8IG5neF9uZXdfYmluYXJ5ID4gMCkgeworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBJZ25vcmUgdGhlIHNpZ25hbCBpbiB0aGUgbmV3IGJpbmFyeSBpZiBpdHMgcGFyZW50IGlzCisgICAgICAgICAgICAgICAgICogbm90IHRoZSBpbml0IHByb2Nlc3MsIGkuZS4gdGhlIG9sZCBiaW5hcnkncyBwcm9jZXNzCisgICAgICAgICAgICAgICAgICogaXMgc3RpbGwgcnVubmluZy4gIE9yIGluZ29yZSB0aGUgc2lnbmFsIGluIHRoZSBvbGQgYmluYXJ5J3MKKyAgICAgICAgICAgICAgICAgKiBwcm9jZXNzIGlmIHRoZSBuZXcgYmluYXJ5J3MgcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSAiLCBpZ25vcmluZyI7CisgICAgICAgICAgICAgICAgaWdub3JlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X2NoYW5nZV9iaW5hcnkgPSAxOworICAgICAgICAgICAgYWN0aW9uID0gIiwgY2hhbmdpbmcgYmluYXJ5IjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU0lHQUxSTToKKyAgICAgICAgICAgIGlmICghbmd4X3Rlcm1pbmF0ZSkgeworICAgICAgICAgICAgICAgIG5neF90aW1lciA9IDE7CisgICAgICAgICAgICAgICAgYWN0aW9uID0gIiwgc2h1dHRpbmcgZG93biBvbGQgd29ya2VyIHByb2Nlc3NlcyI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU0lHSU86CisgICAgICAgICAgICBuZ3hfc2lnaW8gPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTSUdDSExEOgorICAgICAgICAgICAgbmd4X3JlYXAgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTkdYX1BST0NFU1NfV09SS0VSOgorICAgICAgICBzd2l0Y2ggKHNpZ25vKSB7CisKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9OT0FDQ0VQVF9TSUdOQUwpOgorICAgICAgICAgICAgbmd4X2RlYnVnX3F1aXQgPSAxOworICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1NIVVRET1dOX1NJR05BTCk6CisgICAgICAgICAgICBuZ3hfcXVpdCA9IDE7CisgICAgICAgICAgICBhY3Rpb24gPSAiLCBzaHV0dGluZyBkb3duIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfVEVSTUlOQVRFX1NJR05BTCk6CisgICAgICAgIGNhc2UgU0lHSU5UOgorICAgICAgICAgICAgbmd4X3Rlcm1pbmF0ZSA9IDE7CisgICAgICAgICAgICBhY3Rpb24gPSAiLCBleGl0aW5nIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVPUEVOX1NJR05BTCk6CisgICAgICAgICAgICBuZ3hfcmVvcGVuID0gMTsKKyAgICAgICAgICAgIGFjdGlvbiA9ICIsIHJlb3BlbmluZyBsb2dzIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfUkVDT05GSUdVUkVfU0lHTkFMKToKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9DSEFOR0VCSU5fU0lHTkFMKToKKyAgICAgICAgY2FzZSBTSUdJTzoKKyAgICAgICAgICAgIGFjdGlvbiA9ICIsIGlnbm9yaW5nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbmd4X2N5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAic2lnbmFsICVkICglcykgcmVjZWl2ZWQlcyIsIHNpZ25vLCBzaWctPnNpZ25hbWUsIGFjdGlvbik7CisKKyAgICBpZiAoaWdub3JlKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBuZ3hfY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAidGhlIGNoYW5naW5nIGJpbmFyeSBzaWduYWwgaXMgaWdub3JlZDogIgorICAgICAgICAgICAgICAgICAgICAgICJ5b3Ugc2hvdWxkIHNodXRkb3duIG9yIHRlcm1pbmF0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgImJlZm9yZSBlaXRoZXIgb2xkIG9yIG5ldyBiaW5hcnkncyBwcm9jZXNzIik7CisgICAgfQorCisgICAgaWYgKHNpZ25vID09IFNJR0NITEQpIHsKKyAgICAgICAgbmd4X3Byb2Nlc3NfZ2V0X3N0YXR1cygpOworICAgIH0KKworICAgIG5neF9zZXRfZXJybm8oZXJyKTsKK30KKworCitzdGF0aWMgdm9pZAogbmd4X3Byb2Nlc3NfZ2V0X3N0YXR1cyh2b2lkKQogewogICAgIGludCAgICAgICAgICAgICAgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaCBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKaW5kZXggMjViZmE5Ni4uMzY4NGIxNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCkBAIC01NCw3ICs1NCw3IEBACiBuZ3hfcGlkX3Qgbmd4X3NwYXduX3Byb2Nlc3Mobmd4X2N5Y2xlX3QgKmN5Y2xlLAogICAgIG5neF9zcGF3bl9wcm9jX3B0IHByb2MsIHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUsIG5neF9pbnRfdCByZXNwYXduKTsKIG5neF9waWRfdCBuZ3hfZXhlY3V0ZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9leGVjX2N0eF90ICpjdHgpOwotdm9pZCBuZ3hfcHJvY2Vzc19nZXRfc3RhdHVzKHZvaWQpOworbmd4X2ludF90IG5neF9pbml0X3NpZ25hbHMobmd4X2xvZ190ICpsb2cpOwogdm9pZCBuZ3hfZGVidWdfcG9pbnQodm9pZCk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaAppbmRleCA0MzdlNTA2Li44NGE0Yzg0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaApAQCAtODMsNCArODMsNyBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBOR1hfSEFWRV9PU19TUEVDSUZJQ19JTklUICAgIDEKKworCiAjZW5kaWYgLyogX05HWF9TT0xBUklTX0NPTkZJR19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfaW5pdC5jCmluZGV4IDE2M2FkYWEuLjkzZDAyMjUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19pbml0LmMKQEAgLTEzLDcgKzEzLDcgQEAKIGNoYXIgbmd4X3NvbGFyaXNfdmVyc2lvbls1MF07CiAKIAotbmd4X29zX2lvX3Qgbmd4X29zX2lvID0geworc3RhdGljIG5neF9vc19pb190IG5neF9zb2xhcmlzX2lvID0gewogICAgIG5neF91bml4X3JlY3YsCiAgICAgbmd4X3JlYWR2X2NoYWluLAogICAgIG5neF91bml4X3NlbmQsCkBAIC0yNywxMCArMjcsMTEgQEAKIH07CiAKIAotbmd4X2ludF90IG5neF9vc19pbml0KG5neF9sb2dfdCAqbG9nKQorbmd4X2ludF90CituZ3hfb3Nfc3BlY2lmaWNfaW5pdChuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBpZiAoc3lzaW5mbyhTSV9TWVNOQU1FLCBuZ3hfc29sYXJpc19zeXNuYW1lLCBzaXplb2Yobmd4X3NvbGFyaXNfc3lzbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgID09IC0xKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAic3lzaW5mbyhTSV9TWVNOQU1FKSBmYWlsZWQiKTsKQEAgLTM4LDcgKzM5LDcgQEAKICAgICB9CiAKICAgICBpZiAoc3lzaW5mbyhTSV9SRUxFQVNFLCBuZ3hfc29sYXJpc19yZWxlYXNlLCBzaXplb2Yobmd4X3NvbGFyaXNfcmVsZWFzZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgID09IC0xKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAic3lzaW5mbyhTSV9SRUxFQVNFKSBmYWlsZWQiKTsKQEAgLTQ2LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBpZiAoc3lzaW5mbyhTSV9WRVJTSU9OLCBuZ3hfc29sYXJpc192ZXJzaW9uLCBzaXplb2Yobmd4X3NvbGFyaXNfdmVyc2lvbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgID09IC0xKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAic3lzaW5mbyhTSV9TWVNOQU1FKSBmYWlsZWQiKTsKQEAgLTU0LDExICs1NSwxNCBAQAogICAgIH0KIAogCi0gICAgcmV0dXJuIG5neF9wb3NpeF9pbml0KGxvZyk7CisgICAgbmd4X29zX2lvID0gbmd4X3NvbGFyaXNfaW87CisKKyAgICByZXR1cm4gTkdYX09LOzsKIH0KIAogCi12b2lkIG5neF9vc19zdGF0dXMobmd4X2xvZ190ICpsb2cpCit2b2lkCituZ3hfb3Nfc3BlY2lmaWNfc3RhdHVzKG5neF9sb2dfdCAqbG9nKQogewogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbG9nLCAwLCAiT1M6ICVzICVzIiwKQEAgLTY2LDYgKzcwLDQgQEAKIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGxvZywgMCwgInZlcnNpb246ICVzIiwKICAgICAgICAgICAgICAgICAgIG5neF9zb2xhcmlzX3ZlcnNpb24pOwotCi0gICAgbmd4X3Bvc2l4X3N0YXR1cyhsb2cpOwogfQo=