ZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCBmMDJlODAzLi5iNzkzYjM0IDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC00NSw2ICs0NSwxMSBAQAogICAgIENPUkVfU1JDUz0iJENPUkVfU1JDUyAkUlRTSUdfU1JDUyIKIGZpCiAKK2lmIFsgJE5HWF9URVNUX0JVSUxEX1NPTEFSSVNfU0VOREZJTEVWID0gWUVTIF07IHRoZW4KKyAgICBoYXZlPU5HWF9URVNUX0JVSUxEX1NPTEFSSVNfU0VOREZJTEVWIC4gYXV0by9oYXZlCisgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRTT0xBUklTX1NFTkRGSUxFVl9TUkNTIgorZmkKKwogCiAjIHRoZSBmaWx0ZXIgb3JkZXIgaXMgaW1wb3J0YW50CiAjICAgICBuZ3hfaHR0cF93cml0ZV9maWx0ZXIKZGlmZiAtLWdpdCBhL2F1dG8vb3B0aW9ucyBiL2F1dG8vb3B0aW9ucwppbmRleCAyNjZlYTMxLi44MzRjYTAxIDEwMDY0NAotLS0gYS9hdXRvL29wdGlvbnMKKysrIGIvYXV0by9vcHRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiBOR1hfVEVTVF9CVUlMRF9ERVZQT0xMPU5PCiBOR1hfVEVTVF9CVUlMRF9FUE9MTD1OTwogTkdYX1RFU1RfQlVJTERfUlRTSUc9Tk8KK05HWF9URVNUX0JVSUxEX1NPTEFSSVNfU0VOREZJTEVWPU5PCiAKIE5HWF9QTEFURk9STT0KIE5HWF9XSU5FPQpAQCAtMTQ2LDYgKzE0Nyw3IEBACiAgICAgICAgIC0tdGVzdC1idWlsZC1kZXZwb2xsKSAgICAgICAgICAgIE5HWF9URVNUX0JVSUxEX0RFVlBPTEw9WUVTIDs7CiAgICAgICAgIC0tdGVzdC1idWlsZC1lcG9sbCkgICAgICAgICAgICAgIE5HWF9URVNUX0JVSUxEX0VQT0xMPVlFUyAgIDs7CiAgICAgICAgIC0tdGVzdC1idWlsZC1ydHNpZykgICAgICAgICAgICAgIE5HWF9URVNUX0JVSUxEX1JUU0lHPVlFUyAgIDs7CisgICAgICAgIC0tdGVzdC1idWlsZC1zb2xhcmlzLXNlbmRmaWxldikgIE5HWF9URVNUX0JVSUxEX1NPTEFSSVNfU0VOREZJTEVWPVlFUyA7OwogCiAgICAgICAgICopCiAgICAgICAgICAgICBlY2hvICIkMDogZXJyb3I6IGludmFsaWQgb3B0aW9uIFwiJG9wdGlvblwiIgpAQCAtMjEyLDExICsyMTQsNiBAQAogZmkKIAogCi1pZiB0ZXN0IC16ICIkTkdYX0dST1VQIjsgdGhlbgotICAgIE5HWF9HUk9VUD1OR1hfVVNFUgotZmkKLQotCiBjYXNlICIuJE5HWF9TQklOX1BBVEgiIGluCiAgICAgLi8qKQogICAgIDs7CmRpZmYgLS1naXQgYS9hdXRvL29zL2NvbmYgYi9hdXRvL29zL2NvbmYKaW5kZXggNTY4YjcxOC4uZjY0NDgzYiAxMDA2NDQKLS0tIGEvYXV0by9vcy9jb25mCisrKyBiL2F1dG8vb3MvY29uZgpAQCAtNDcsNyArNDcsMjYgQEAKIAogICAgIGlmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KICAgICAgICAgTkdYX1VTRVI9bm9ib2R5Ci0gICAgICAgIE5HWF9HUk9VUD1ub2JvZHkKKyAgICBmaQorCisgICAgaWYgWyAteiAiJE5HWF9HUk9VUCIgLWEgJE5HWF9VU0VSID0gbm9ib2R5IF0gOyB0aGVuCisgICAgICAgaWYgZ3JlcCBub2JvZHkgL2V0Yy9ncm91cCAyPiYxID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgZWNobyAiY2hlY2tpbmcgZm9yIG5vYm9keSBncm91cCAuLi4gZm91bmQiCisgICAgICAgICAgIE5HWF9HUk9VUD1ub2JvZHkKKyAgICAgICBlbHNlCisgICAgICAgICAgIGVjaG8gImNoZWNraW5nIGZvciBub2JvZHkgZ3JvdXAgLi4uIG5vdCBmb3VuZCIKKworICAgICAgICAgICBpZiBncmVwIG5vZ3JvdXAgL2V0Yy9ncm91cCAyPiYxID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgIGVjaG8gImNoZWNraW5nIGZvciBub2dyb3VwIGdyb3VwIC4uLiBmb3VuZCIKKyAgICAgICAgICAgICAgIE5HWF9HUk9VUD1ub2dyb3VwCisgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICBlY2hvICJjaGVja2luZyBmb3Igbm9ncm91cCBncm91cCAuLi4gbm90IGZvdW5kIgorICAgICAgICAgICAgICAgTkdYX0dST1VQPW5vYm9keQorICAgICAgICAgICBmaQorICAgICAgIGZpCisKKyAgICBlbHNlCisgICAgICAgIE5HWF9HUk9VUD0kTkdYX1VTRVIKICAgICBmaQogCiAKZGlmZiAtLWdpdCBhL2F1dG8vb3MvbGludXggYi9hdXRvL29zL2xpbnV4CmluZGV4IDY4NzM3N2IuLmYzYzY3MjIgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvbGludXgKKysrIGIvYXV0by9vcy9saW51eApAQCAtMjEsMTIgKzIxLDYgQEAKIENDX0FVWF9GTEFHUz0iLURfR05VX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgogCiAKLWlmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KLSAgICBOR1hfVVNFUj1ub2JvZHkKLSAgICBOR1hfR1JPVVA9bm9ncm91cAotZmkKLQotCiAjIExpbnV4IGtlcm5lbCB2ZXJzaW9uCiAKIHZlcnNpb249YGdyZXAgIiNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIiAvdXNyL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oIFwKZGlmZiAtLWdpdCBhL2F1dG8vdHlwZXMvdmFsdWUgYi9hdXRvL3R5cGVzL3ZhbHVlCmluZGV4IGQ4MjNhYjMuLjY5OGJhN2QgMTAwNjQ0Ci0tLSBhL2F1dG8vdHlwZXMvdmFsdWUKKysrIGIvYXV0by90eXBlcy92YWx1ZQpAQCAtNywzICs3LDUgQEAKICNpZm5kZWYgJG5neF9wYXJhbQogI2RlZmluZSAkbmd4X3BhcmFtICAkbmd4X3ZhbHVlCiAjZW5kaWYKKworRU5ECmRpZmYgLS1naXQgYS9hdXRvL3VuaXggYi9hdXRvL3VuaXgKaW5kZXggN2NkMWRmZS4uNmJmODllMiAxMDA3NTUKLS0tIGEvYXV0by91bml4CisrKyBiL2F1dG8vdW5peApAQCAtNDMsMzEgKzQzLDE1IEBACiAKIC4gYXV0by9lbmRpYW5lc3MKIAorbmd4X3R5cGU9InNpemVfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKK25neF9wYXJhbT1NQVhfU0laRV9UX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQogCi0jIHByaW50ZigpIGZvcm1hdHMKK25neF90eXBlPSJvZmZfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKK25neF9wYXJhbT1NQVhfT0ZGX1RfVkFMVUU7IG5neF92YWx1ZT0kbmd4X21heF92YWx1ZTsgLiBhdXRvL3R5cGVzL3ZhbHVlCiAKLSNDQ19XQVJOPSRDQ19TVFJPTkcKLSNuZ3hfZm10X2NvbGxlY3Q9bm8KLSMKLSNuZ3hfZm10X25hbWU9T0ZGX1RfRk1UOyBuZ3hfdHlwZT0ib2ZmX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCi1uZ3hfcGFyYW09T0ZGX1RfTUFYX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQotI2V2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10Ci0jCi0jbmd4X2ZtdF9uYW1lPVRJTUVfVF9GTVQ7IG5neF90eXBlPSJ0aW1lX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCituZ3hfdHlwZT0idGltZV90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgogbmd4X3BhcmFtPVRJTUVfVF9TSVpFOyBuZ3hfdmFsdWU9JG5neF9zaXplOyAuIGF1dG8vdHlwZXMvdmFsdWUKIG5neF9wYXJhbT1USU1FX1RfTEVOOyBuZ3hfdmFsdWU9JG5neF9tYXhfbGVuOyAuIGF1dG8vdHlwZXMvdmFsdWUKLSNldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9zaXplfV9mbXR9OyAuIGF1dG8vZm10L2ZtdAotIwotI25neF9mbXRfbmFtZT1TSVpFX1RfRk1UOyBuZ3hfdHlwZT0ic2l6ZV90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotI2V2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10Ci0jCi0jbmd4X2ZtdF9uYW1lPVNJWkVfVF9YX0ZNVDsgLiBhdXRvL2ZtdC94Zm10Ci0jCi0jbmd4X2ZtdF9uYW1lPVBJRF9UX0ZNVDsgbmd4X3R5cGU9InBpZF90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotI2V2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10Ci0jCi0jbmd4X2ZtdF9uYW1lPVJMSU1fVF9GTVQ7IG5neF90eXBlPSJybGltX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCi0jZXZhbCBuZ3hfZm9ybWF0cz1cJHtuZ3hfJHtuZ3hfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9mbXQKIAogCiAjIHN5c2NhbGxzLCBsaWJjIGNhbGxzIGFuZCBzb21lIGZlYXR1cmVzCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDdkMmMxYzIuLjUwNWZiZGUgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC02LDYgKzYsMTQ3IEBACiAgICAgICAgICAgICB0aXRsZT0ibmdpbngiPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjExIiBkYXRlPSIwMi4xMi4yMDA0Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSB3b3JrZXJfcHJpb3JpdHkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgd29ya2VyX3ByaW9yaXR5IGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQz8QgRnJlZUJTRCDEydLFy9TJ19kgdGNwX25vcHVzaCDJIHRjcF9ub2RlbGF5INfNxdPUxSDXzMnRwNQgzsEg0MXSxcTB3tUKK8/U18XUwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2JvdGggdGNwX25vcHVzaCBhbmQgdGNwX25vZGVsYXkgZGlyZWN0aXZlcyBhZmZlY3QgdGhlIHRyYW5zZmVycmVkIHJlc3BvbnNlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK25naW54IM7FINfZ2tnXwcwgaW5pdGdyb3VwcygpLjxici8+Civz0MHTycLPIOHOxNLFwCDzydTOycvP19UgySDhzsTSxcAg7snHzcHU1czJztUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CituZ2lueCBkaWQgbm90IGNhbGwgaW5pdGdyb3VwcygpLjxici8+CitUaGFua3MgdG8gQW5kcmV3IFNpdG5pa292IGFuZCBBbmRyZWkgTmlnbWF0dWxpbi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CituZ3hfaHR0cF9hdXRvX2luZGV4X21vZHVsZSDUxdDF0tgg19nEwaPUINLB2s3F0iDGwcrMz9cg1yDCwcrUwcguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Citub3cgdGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgc2hvd3MgdGhlIGZpbGUgc2l6ZSBpbiB0aGUgYnl0ZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorbmd4X2h0dHBfYXV0b19pbmRleF9tb2R1bGUg18/a19LB3cHMIM/bycLL1SA1MDAsIMXTzMkg1yDLwdTBzM/HxSDF09TYCivCydTZyiBzeW1saW5rLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgcmV0dXJuZWQgdGhlIDUwMCBlcnJvciBpZiB0aGUgYnJva2VuIHN5bWxpbmsKK3dhcyBpbiBhIGRpcmVjdG9yeS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivGwcrM2SDCz8zY28UgNEcgzsUg0MXSxcTB18HMydPYINMgydPQz8zY2s/Xwc7Jxc0gc2VuZGZpbGUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgZmlsZXMgYmlnZ2VyIHRoYW4gNEcgY291bGQgbm90IGJlIHRyYW5zZmVycmVkIHVzaW5nIHNlbmRmaWxlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkgwtzLxc7EINLF2s/M18nM09Eg1yDOxdPLz8zYy88gwcTSxdPP1yDJINDSySDP1snEwc7JySDP1CDOxcfPIM/U18XUwQor0NLPydPIz8TJzMEgz9vJwsvBLCDUzyDQ0s/DxdPTINrBw8nLzMnXwczT0S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSBiYWNrZW5kIHdhcyByZXNvbHZlZCB0byBzZXZlcmFsIGJhY2tlbmRzIGFuZCB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUKK3RoZSByZXNwb25zZSB3YWl0aW5nIHRoZW4gcHJvY2VzcyBtYXkgZ290IGNhdWdodCBpbiBhbiBlbmRsZXNzIGxvb3AuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckgzcXUz8TBIC9kZXYvcG9sbCDSwcLP3snKINDSz8PF09Mgzc/HINrB18XS28nU2NPRCivTINPPz8Ldxc7Jxc0gInVua25vd24gY3ljbGUiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIHdvcmtlciBwcm9jZXNzIG1heSBleGl0IHdpdGggdGhlICJ1bmtub3duIGN5Y2xlIiBtZXNzYWdlIHdoZW4gdGhlIC9kZXYvcG9sbAorbWV0aG9kIHdhcyB1c2VkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLySAiY2xvc2UoKSBjaGFubmVsIGZhaWxlZCIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CisiY2xvc2UoKSBjaGFubmVsIGZhaWxlZCIgZXJyb3JzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8HX1M/NwdTJ3sXTy8/FIM/Q0sXExczFzsnFIMfS1dDQIG5vYm9keSDJIG5vZ3JvdXAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgYXV0b2RldGVjdGlvbiBvZiB0aGUgbm9ib2R5IGFuZCBub2dyb3VwIGdyb3Vwcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18Egc2VuZF9sb3dhdCDOxSDSwcLP1MHMwSDOwSBMaW51eC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBzZW5kX2xvd2F0IGRpcmVjdGl2ZSBkaWQgbm90IHdvcmsgb24gTGludXguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDXIMvPzsbJx9XSwcPJySDOxSDC2czPINLB2sTFzMEgZXZlbnRzLCDUzyDQ0s/J08jPxMnMIHNlZ21lbnRhdGlvbiBmYXVsdC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyZWQgaWYgdGhlcmUgd2FzIG5vIGV2ZW50cyBzZWN0aW9uCitpbiBjb25maWd1cmF0aW9uLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK25naW54IM7FINPPwsnSwczT0SDQz8QgT3BlbkJTRC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25naW54IGNvdWxkIG5vdCBiZSBidWlsdCBvbiBPcGVuQlNELgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TXz8rO2cUg08zc29kg1yAiOi8vIiDXIFVSSSDQ0sXX0sHdwczJ09gg1yAiOi8iLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGRvdWJsZSBzbGFzaGVzIGluICI6Ly8iIGluIHRoZSBVUkkgd2VyZSBjb252ZXJ0ZWQgdG8gIjovIi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjEuMTAiIGRhdGU9IjI2LjExLjIwMDQiPgogCiA8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+CkBAIC0yMywxMSArMTY0LDEwIEBACiAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KIDxwYXJhIGxhbmc9InJ1Ij4KLcnT0NLB18zFzsnFINcg18XS08nJIDAuMS45IMTM0SDGwcrMz9cgws/M2NvFIM7BIExpbnV4IM7FINLBws/UwczPLgorydPQ0sHXzMXOycUg1yDXxdLTyckgMC4xLjkgxMzRIMbByszP1yDCz8zY28UgMkcgzsEgTGludXggzsUg0sHCz9TBzM8uCiA8L3BhcmE+CiA8cGFyYSBsYW5nPSJlbiI+Ci10aGUgZml4IGluIDAuMS45IGZvciB0aGUgZmlsZXMgYmlnZ2VyIHRoYW4gMkcgb24gTGludXgKLWRpZCBub3Qgd29yay4KK3RoZSBmaXggaW4gMC4xLjkgZm9yIHRoZSBmaWxlcyBiaWdnZXIgdGhhbiAyRyBvbiBMaW51eCBkaWQgbm90IHdvcmsuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIApAQCAtMTIzLDcgKzI2Myw3IEBACiDP28nCy8Eg0M/R18nMwdPYINcgMC4xLjUuCiA8L3BhcmE+CiA8cGFyYSBsYW5nPSJlbiI+Ci1vbiBGcmVlQlNEIHRoZSBzZWdtZW50YXRpb24gZmF1bHQgbWF5IG9jY3VyZSBpZiB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNmZXJyZWQKK29uIEZyZWVCU0QgdGhlIHNlZ21lbnRhdGlvbiBmYXVsdCBtYXkgb2NjdXIgaWYgdGhlIHNpemUgb2YgdGhlIHRyYW5zZmVycmVkCiBmaWxlIHdhcyBjaGFuZ2VkOwogYnVnIGFwcGVhcmVkIGluIDAuMS41LgogPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggODg3ZmM3OS4uMjY0MDZiMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC0xNiw2ICsxNiw3IEBACiBzdGF0aWMgdm9pZCAqbmd4X2NvcmVfbW9kdWxlX2NyZWF0ZV9jb25mKG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgY2hhciAqbmd4X2NvcmVfbW9kdWxlX2luaXRfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmNvbmYpOwogc3RhdGljIGNoYXIgKm5neF9zZXRfdXNlcihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKK3N0YXRpYyBjaGFyICpuZ3hfc2V0X3ByaW9yaXR5KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogCiAKIHN0YXRpYyBuZ3hfY29uZl9lbnVtX3QgIG5neF9kZWJ1Z19wb2ludHNbXSA9IHsKQEAgLTgwLDYgKzgxLDEzIEBACiAgICAgICAwLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJ3b3JrZXJfcHJpb3JpdHkiKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X3NldF9wcmlvcml0eSwKKyAgICAgIDAsCisgICAgICAwLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwaWQiKSwKICAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LApAQCAtNDQ3LDYgKzQ1NSw3IEBACiAgICAgICoKICAgICAgKiBjY2YtPnBpZCA9IE5VTEw7CiAgICAgICogY2NmLT5uZXdwaWQgPSBOVUxMOworICAgICAqIGNjZi0+cHJpb3JpdHkgPSAwOwogICAgICAqLwogICAgIGNjZi0+ZGFlbW9uID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY2NmLT5tYXN0ZXIgPSBOR1hfQ09ORl9VTlNFVDsKQEAgLTQ5NCw2ICs1MDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKKyAgICAgICAgY2NmLT51c2VybmFtZSA9IE5HWF9VU0VSOwogICAgICAgICBjY2YtPnVzZXIgPSBwd2QtPnB3X3VpZDsKIAogICAgICAgICBncnAgPSBnZXRncm5hbShOR1hfR1JPVVApOwpAQCAtNTYyLDYgKzU3Miw4IEBACiAKICAgICB2YWx1ZSA9IChuZ3hfc3RyX3QgKikgY2YtPmFyZ3MtPmVsdHM7CiAKKyAgICBjY2YtPnVzZXJuYW1lID0gKGNoYXIgKikgdmFsdWVbMV0uZGF0YTsKKwogICAgIHB3ZCA9IGdldHB3bmFtKChjb25zdCBjaGFyICopIHZhbHVlWzFdLmRhdGEpOwogICAgIGlmIChwd2QgPT0gTlVMTCkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIG5neF9lcnJubywKQEAgLTU4NiwzICs1OTgsNDIgQEAKIAogI2VuZGlmCiB9CisKKworc3RhdGljIGNoYXIgKm5neF9zZXRfcHJpb3JpdHkobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK3sKKyAgICBuZ3hfY29yZV9jb25mX3QgICpjY2YgPSBjb25mOworCisgICAgbmd4X3N0cl90ICAgICAgICAqdmFsdWU7CisgICAgbmd4X3VpbnRfdCAgICAgICAgbiwgbWludXM7CisKKyAgICBpZiAoY2NmLT5wcmlvcml0eSAhPSAwKSB7CisgICAgICAgIHJldHVybiAiaXMgZHVwbGljYXRlIjsKKyAgICB9CisKKyAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOworCisgICAgaWYgKHZhbHVlWzFdLmRhdGFbMF0gPT0gJy0nKSB7CisgICAgICAgIG4gPSAxOworICAgICAgICBtaW51cyA9IDE7CisKKyAgICB9IGVsc2UgaWYgKHZhbHVlWzFdLmRhdGFbMF0gPT0gJysnKSB7CisgICAgICAgIG4gPSAxOworICAgICAgICBtaW51cyA9IDA7CisKKyAgICB9IGVsc2UgeworICAgICAgICBuID0gMDsKKyAgICAgICAgbWludXMgPSAwOworICAgIH0KKworICAgIGNjZi0+cHJpb3JpdHkgPSBuZ3hfYXRvaSgmdmFsdWVbMV0uZGF0YVtuXSwgdmFsdWVbMV0ubGVuIC0gbik7CisgICAgaWYgKGNjZi0+cHJpb3JpdHkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgIH0KKworICAgIGlmIChtaW51cykgeworICAgICAgICBjY2YtPnByaW9yaXR5ID0gLWNjZi0+cHJpb3JpdHk7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggOWI2MWZjOS4uM2FjMjhmMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjEwIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4xMSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfYnVmLmggYi9zcmMvY29yZS9uZ3hfYnVmLmgKaW5kZXggZTJkMDcxOS4uNzY4NDAwZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2J1Zi5oCisrKyBiL3NyYy9jb3JlL25neF9idWYuaApAQCAtMTA5LDggKzEwOSw4IEBACiAgICAgICAgICgoYi0+Zmx1c2ggfHwgYi0+bGFzdF9idWYpICYmICFuZ3hfYnVmX2luX21lbW9yeShiKSAmJiAhYi0+aW5fZmlsZSkKIAogI2RlZmluZSBuZ3hfYnVmX3NpemUoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChuZ3hfYnVmX2luX21lbW9yeShiKSA/IChzaXplX3QpIChiLT5sYXN0IC0gYi0+cG9zKTogICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgKGItPmZpbGVfbGFzdCAtIGItPmZpbGVfcG9zKSkKKyAgICAgICAgKG5neF9idWZfaW5fbWVtb3J5KGIpID8gKG9mZl90KSAoYi0+bGFzdCAtIGItPnBvcyk6ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYi0+ZmlsZV9sYXN0IC0gYi0+ZmlsZV9wb3MpKQogCiBuZ3hfYnVmX3QgKm5neF9jcmVhdGVfdGVtcF9idWYobmd4X3Bvb2xfdCAqcG9vbCwgc2l6ZV90IHNpemUpOwogbmd4X2NoYWluX3QgKm5neF9jcmVhdGVfY2hhaW5fb2ZfYnVmcyhuZ3hfcG9vbF90ICpwb29sLCBuZ3hfYnVmc190ICpidWZzKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25maWcuaCBiL3NyYy9jb3JlL25neF9jb25maWcuaAppbmRleCA3ZDQ0NjNiLi5iNzJhZGQ3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZmlnLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2VuZGlmCiAKIAorI2lmbmRlZiBOR1hfSEFWRV9TT19TTkRMT1dBVAorI2RlZmluZSBOR1hfSEFWRV9TT19TTkRMT1dBVCAgICAgMQorI2VuZGlmCisKKwogI2lmICEoTkdYX1dJTjMyKQogCiAjZGVmaW5lIG5neF9zaWduYWxfaGVscGVyKG4pICAgICBTSUcjI24KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggZDkxYmE4NS4uOTU5MmE4MSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTUwLDcgKzUwLDYgQEAKICAgICBuZ3hfb3Blbl9maWxlX3QgICAgKmZpbGU7CiAgICAgbmd4X2xpc3RlbmluZ190ICAgICpscywgKm5sczsKICAgICBuZ3hfY29yZV9jb25mX3QgICAgKmNjZjsKLSAgICBuZ3hfZXZlbnRfY29uZl90ICAgKmVjZjsKICAgICBuZ3hfY29yZV9tb2R1bGVfdCAgKm1vZHVsZTsKIAogICAgIGxvZyA9IG9sZF9jeWNsZS0+bG9nOwpAQCAtNDM0LDEyICs0MzMsNiBAQAogICAgIH0KIAogCi0gICAgZWNmID0gbmd4X2V2ZW50X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2V2ZW50X2NvcmVfbW9kdWxlKTsKLQotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgInVzaW5nIHRoZSBcIiVzXCIgZXZlbnQgbWV0aG9kIiwgZWNmLT5uYW1lKTsKLQotCiAgICAgLyogY2xvc2UgYW5kIGRlbGV0ZSBzdHVmZiB0aGF0IGxlZnRzIGZyb20gYW4gb2xkIGN5Y2xlICovCiAKICAgICAvKiBjbG9zZSB0aGUgdW5uZWVkZWQgbGlzdGVuaW5nIHNvY2tldHMgKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5oIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKaW5kZXggMmJhZjgyOS4uZmFjZTY3ZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKQEAgLTE3LDUxICsxNyw1NCBAQAogCiAKIHN0cnVjdCBuZ3hfY3ljbGVfcyB7Ci0gICAgdm9pZCAgICAgICAgICAgKioqKmNvbmZfY3R4OwotICAgIG5neF9wb29sX3QgICAgICAgICpwb29sOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAqKioqY29uZl9jdHg7CisgICAgbmd4X3Bvb2xfdCAgICAgICAgICAgICAgICpwb29sOwogCi0gICAgbmd4X2xvZ190ICAgICAgICAgKmxvZzsKLSAgICBuZ3hfbG9nX3QgICAgICAgICAqbmV3X2xvZzsKKyAgICBuZ3hfbG9nX3QgICAgICAgICAgICAgICAgKmxvZzsKKyAgICBuZ3hfbG9nX3QgICAgICAgICAgICAgICAgKm5ld19sb2c7CiAKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgbGlzdGVuaW5nOwotICAgIG5neF9hcnJheV90ICAgICAgICBwYXRoZXM7Ci0gICAgbmd4X2xpc3RfdCAgICAgICAgIG9wZW5fZmlsZXM7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICBsaXN0ZW5pbmc7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICBwYXRoZXM7CisgICAgbmd4X2xpc3RfdCAgICAgICAgICAgICAgICBvcGVuX2ZpbGVzOwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgIGNvbm5lY3Rpb25fbjsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAqY29ubmVjdGlvbnM7Ci0gICAgbmd4X2V2ZW50X3QgICAgICAgKnJlYWRfZXZlbnRzOwotICAgIG5neF9ldmVudF90ICAgICAgICp3cml0ZV9ldmVudHM7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBjb25uZWN0aW9uX247CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICpjb25uZWN0aW9uczsKKyAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgKnJlYWRfZXZlbnRzOworICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAqd3JpdGVfZXZlbnRzOwogCi0gICAgbmd4X2N5Y2xlX3QgICAgICAgKm9sZF9jeWNsZTsKKyAgICBuZ3hfY3ljbGVfdCAgICAgICAgICAgICAgKm9sZF9jeWNsZTsKIAotICAgIG5neF9zdHJfdCAgICAgICAgICBjb25mX2ZpbGU7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgIHJvb3Q7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBjb25mX2ZpbGU7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICByb290OwogfTsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgIG5neF9mbGFnX3QgIGRhZW1vbjsKLSAgICAgbmd4X2ZsYWdfdCAgbWFzdGVyOworICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgZGFlbW9uOworICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgbWFzdGVyOwogCi0gICAgIG5neF9pbnRfdCAgIHdvcmtlcl9wcm9jZXNzZXM7Ci0gICAgIG5neF9pbnRfdCAgIGRlYnVnX3BvaW50czsKKyAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHdvcmtlcl9wcm9jZXNzZXM7CisgICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICBkZWJ1Z19wb2ludHM7CiAKLSAgICAgbmd4X3VpZF90ICAgdXNlcjsKLSAgICAgbmd4X2dpZF90ICAgZ3JvdXA7CisgICAgIGludCAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTsKIAotICAgICBuZ3hfc3RyX3QgICBwaWQ7Ci0gICAgIG5neF9zdHJfdCAgIG5ld3BpZDsKKyAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKnVzZXJuYW1lOworICAgICBuZ3hfdWlkX3QgICAgICAgICAgICAgICAgdXNlcjsKKyAgICAgbmd4X2dpZF90ICAgICAgICAgICAgICAgIGdyb3VwOworCisgICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICBwaWQ7CisgICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICBuZXdwaWQ7CiAKICNpZiAoTkdYX1RIUkVBRFMpCi0gICAgIG5neF9pbnRfdCAgIHdvcmtlcl90aHJlYWRzOwotICAgICBzaXplX3QgICAgICB0aHJlYWRfc3RhY2tfc2l6ZTsKKyAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHdvcmtlcl90aHJlYWRzOworICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgdGhyZWFkX3N0YWNrX3NpemU7CiAjZW5kaWYKIAogfSBuZ3hfY29yZV9jb25mX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgICBuZ3hfcG9vbF90ICAqcG9vbDsgICAvKiBwY3JlJ3MgbWFsbG9jKCkgcG9vbCAqLworICAgICBuZ3hfcG9vbF90ICAgICAgICAgICAgICAqcG9vbDsgICAvKiBwY3JlJ3MgbWFsbG9jKCkgcG9vbCAqLwogfSBuZ3hfY29yZV90bHNfdDsKIAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKaW5kZXggMWMzNjdjYy4uYjkyNWU0OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCisrKyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwpAQCAtMjgsNyArMjgsOCBAQAogbmd4X2ludF90IG5neF9vdXRwdXRfY2hhaW4obmd4X291dHB1dF9jaGFpbl9jdHhfdCAqY3R4LCBuZ3hfY2hhaW5fdCAqaW4pCiB7CiAgICAgaW50ICAgICAgICAgICByYywgbGFzdDsKLSAgICBzaXplX3QgICAgICAgIHNpemUsIGJzaXplOworICAgIG9mZl90ICAgICAgICAgYnNpemU7CisgICAgc2l6ZV90ICAgICAgICBzaXplOwogICAgIG5neF9jaGFpbl90ICAqY2wsICpvdXQsICoqbGFzdF9vdXQ7CiAKICAgICBpZiAoY3R4LT5pbiA9PSBOVUxMICYmIGN0eC0+YnVzeSA9PSBOVUxMKSB7CkBAIC04MSw2ICs4Miw4IEBACiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjdHgtPnBvb2wtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZXJvIHNpemUgYnVmIik7CiAKKyAgICAgICAgICAgICAgICBuZ3hfZGVidWdfcG9pbnQoKTsKKwogICAgICAgICAgICAgICAgIGN0eC0+aW4gPSBjdHgtPmluLT5uZXh0OwogCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTgsMTggKzEyMSwxOCBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPmluLT5idWYtPmxhc3RfYnVmKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChic2l6ZSA8IGN0eC0+YnVmcy5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnNpemUgPCAob2ZmX3QpIGN0eC0+YnVmcy5zaXplKSB7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGxvY2F0ZSBzbWFsbCB0ZW1wIGJ1ZiBmb3IgdGhlIHNtYWxsIGxhc3QgYnVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvciBpdHMgc21hbGwgbGFzdCBwYXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBic2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gKHNpemVfdCkgYnNpemU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4LT5idWZzLm51bSA9PSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChic2l6ZSA8IGN0eC0+YnVmcy5zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGN0eC0+YnVmcy5zaXplID4+IDIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJzaXplIDwgKG9mZl90KSAoY3R4LT5idWZzLnNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY3R4LT5idWZzLnNpemUgPj4gMikpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFsbG9jYXRlIGEgdGVtcCBidWYgdGhhdCBlcXVhbHMKQEAgLTEzNyw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYW4gMS4yNSBvZiBidWZzLnNpemUgYW5kIGEgdGVtcCBidWYgaXMgc2luZ2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gYnNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IChzaXplX3QpIGJzaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMwNiwxMiArMzA5LDEyIEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9vdXRwdXRfY2hhaW5fY29weV9idWYobmd4X2J1Zl90ICpkc3QsIG5neF9idWZfdCAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF91aW50X3Qgc2VuZGZpbGUpCiB7Ci0gICAgc2l6ZV90ICAgc2l6ZTsKKyAgICBvZmZfdCAgICBzaXplOwogICAgIHNzaXplX3QgIG47CiAKICAgICBzaXplID0gbmd4X2J1Zl9zaXplKHNyYyk7CiAKLSAgICBpZiAoc2l6ZSA+IChzaXplX3QpIChkc3QtPmVuZCAtIGRzdC0+cG9zKSkgeworICAgIGlmIChzaXplID4gZHN0LT5lbmQgLSBkc3QtPnBvcykgewogICAgICAgICBzaXplID0gZHN0LT5lbmQgLSBkc3QtPnBvczsKICAgICB9CiAKQEAgLTMyNCw5ICszMjcsOSBAQAogI2VuZGlmCiAKICAgICBpZiAobmd4X2J1Zl9pbl9tZW1vcnkoc3JjKSkgewotICAgICAgICBuZ3hfbWVtY3B5KGRzdC0+cG9zLCBzcmMtPnBvcywgc2l6ZSk7Ci0gICAgICAgIHNyYy0+cG9zICs9IHNpemU7Ci0gICAgICAgIGRzdC0+bGFzdCArPSBzaXplOworICAgICAgICBuZ3hfbWVtY3B5KGRzdC0+cG9zLCBzcmMtPnBvcywgKHNpemVfdCkgc2l6ZSk7CisgICAgICAgIHNyYy0+cG9zICs9IChzaXplX3QpIHNpemU7CisgICAgICAgIGRzdC0+bGFzdCArPSAoc2l6ZV90KSBzaXplOwogCiAgICAgICAgIGlmIChzcmMtPmluX2ZpbGUpIHsKIApAQCAtMzUxLDcgKzM1NCw3IEBACiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIG4gPSBuZ3hfcmVhZF9maWxlKHNyYy0+ZmlsZSwgZHN0LT5wb3MsIHNpemUsIHNyYy0+ZmlsZV9wb3MpOworICAgICAgICBuID0gbmd4X3JlYWRfZmlsZShzcmMtPmZpbGUsIGRzdC0+cG9zLCAoc2l6ZV90KSBzaXplLCBzcmMtPmZpbGVfcG9zKTsKIAogICAgICAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBuOwpAQCAtMzYzLDkgKzM2Niw5IEBACiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmICgoc2l6ZV90KSBuICE9IHNpemUpIHsKKyAgICAgICAgaWYgKG4gIT0gc2l6ZSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzcmMtPmZpbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlYWRfZmlsZV9uICIgcmVhZHMgb25seSAleiBvZiAldXogZnJvbSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlYWRfZmlsZV9uICIgcmVhZHMgb25seSAleiBvZiAlTyBmcm9tIGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBzaXplKTsKICAgICAgICAgICAgIGlmIChuID09IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpAQCAtMzk5LDEwICs0MDIsMTkgQEAKIHsKICAgICBuZ3hfY2hhaW5fd3JpdGVyX2N0eF90ICpjdHggPSBkYXRhOwogCisgICAgb2ZmX3QgICAgICAgICBzaXplOwogICAgIG5neF9jaGFpbl90ICAqY2w7CiAKIAotICAgIGZvciAoLyogdm9pZCAqLzsgaW47IGluID0gaW4tPm5leHQpIHsKKyAgICBmb3IgKHNpemUgPSAwOyBpbjsgaW4gPSBpbi0+bmV4dCkgeworCisjaWYgMQorICAgICAgICBpZiAobmd4X2J1Zl9zaXplKGluLT5idWYpID09IDAgJiYgIW5neF9idWZfc3BlY2lhbChpbi0+YnVmKSkgeworICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHNpemUgKz0gbmd4X2J1Zl9zaXplKGluLT5idWYpOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3R4LT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJjaGFpbiB3cml0ZXIgYnVmIHNpemU6ICV1eiIsIG5neF9idWZfc2l6ZShpbi0+YnVmKSk7CkBAIC00MTksNiArNDMxLDIzIEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdHgtPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiY2hhaW4gd3JpdGVyIGluOiAlcCIsIGN0eC0+b3V0KTsKIAorICAgIGZvciAoY2wgPSBjdHgtPm91dDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKworI2lmIDEKKworICAgICAgICBpZiAobmd4X2J1Zl9zaXplKGNsLT5idWYpID09IDAgJiYgIW5neF9idWZfc3BlY2lhbChjbC0+YnVmKSkgeworICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CisgICAgICAgIH0KKworI2VuZGlmCisKKyAgICAgICAgc2l6ZSArPSBuZ3hfYnVmX3NpemUoY2wtPmJ1Zik7CisgICAgfQorCisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKwogICAgIGN0eC0+b3V0ID0gbmd4X3NlbmRfY2hhaW4oY3R4LT5jb25uZWN0aW9uLCBjdHgtPm91dCwgY3R4LT5saW1pdCk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN0eC0+Y29ubmVjdGlvbi0+bG9nLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCmluZGV4IDRlNWQyNzMuLjRjMjFmYTYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuYworKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogLyoKICAqIHN1cHBvcnRlZCBmb3JtYXRzOgotICogICAgJVswXVt3aWR0aF1PICAgICAgICAgICAgICBvZmZfdAorICogICAgJVswXVt3aWR0aF1beF1bWF1PICAgICAgICBvZmZfdAogICogICAgJVswXVt3aWR0aF1UICAgICAgICAgICAgICB0aW1lX3QKICAqICAgICVbMF1bd2lkdGhdW3VdW3h8WF16ICAgICAgc3NpemVfdC9zaXplX3QKICAqICAgICVbMF1bd2lkdGhdW3VdW3h8WF1kICAgICAgaW50L3VfaW50CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCmluZGV4IDFhNDhjZWMuLjM0Nzc1ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCkBAIC00MzUsNiArNDM1LDE2IEBACiAgICAgICAgIGMgPSAmbmd4X2N5Y2xlLT5jb25uZWN0aW9uc1tldmVudF9saXN0W2ldLmZkXTsKIAogICAgICAgICBpZiAoYy0+ZmQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfY3ljbGUtPnJlYWRfZXZlbnRzW2V2ZW50X2xpc3RbaV0uZmRdLmNsb3NlZCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsICJ1bmV4cGVjdGVkIGV2ZW50Iik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisjaWYgMAorICAgICAgICBpZiAoYy0+ZmQgPT0gLTEpIHsKICAgICAgICAgICAgIG9sZF9jeWNsZSA9IG5neF9vbGRfY3ljbGVzLmVsdHM7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmd4X29sZF9jeWNsZXMubmVsdHM7IGorKykgewogICAgICAgICAgICAgICAgIGlmIChvbGRfY3ljbGVbal0gPT0gTlVMTCkgewpAQCAtNDUxLDYgKzQ2MSw3IEBACiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsICJ1bmtub3duIGN5Y2xlIik7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiZGV2cG9sbDogZmQ6JWQsIGV2OiUwNFhkLCByZXY6JTA0WGQiLApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IGJkNDUxYmMuLmVmMjVmZmMgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTE3NCwxMCArMTc0LDI1IEBACiB7CiAjaWYgIShOR1hfV0lOMzIpCiAKLSAgICBzaXplX3QgICAgICAgICAgICAgc2l6ZTsKLSAgICBjaGFyICAgICAgICAgICAgICAqc2hhcmVkOwotICAgIG5neF9jb3JlX2NvbmZfdCAgICpjY2Y7Ci0gICAgbmd4X2V2ZW50X2NvbmZfdCAgKmVjZjsKKyAgICBzaXplX3QgICAgICAgICAgICAgICBzaXplOworICAgIHZvaWQgICAgICAgICAgICAgICoqKmNmOworICAgIGNoYXIgICAgICAgICAgICAgICAgKnNoYXJlZDsKKyAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CisgICAgbmd4X2V2ZW50X2NvbmZfdCAgICAqZWNmOworCisgICAgY2YgPSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfZXZlbnRzX21vZHVsZSk7CisKKyAgICBpZiAoY2YgPT0gTlVMTCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgIm5vIFwiZXZlbnRzXCIgc2VjdGlvbiBpbiBjb25maWd1cmF0aW9uIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgZWNmID0gKCpjZilbbmd4X2V2ZW50X2NvcmVfbW9kdWxlLmN0eF9pbmRleF07CisKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJ1c2luZyB0aGUgXCIlc1wiIGV2ZW50IG1ldGhvZCIsIGVjZi0+bmFtZSk7CisKIAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKIApAQCAtMTg1LDggKzIwMCw2IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgZWNmID0gbmd4X2V2ZW50X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2V2ZW50X2NvcmVfbW9kdWxlKTsKLQogCiAgICAgLyogVE9ETzogMTI4IGlzIGNhY2hlIGxpbmUgc2l6ZSAqLwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCmluZGV4IGMwNjg5NjguLjZmMGQ5NGYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCkBAIC04MSw5ICs4MSwxMiBAQAogICAgICAgICAgICAgZm9yICggOzsgKSB7CiAgICAgICAgICAgICAgICAgcGVlciA9ICZwYy0+cGVlcnMtPnBlZXJzW3BjLT5jdXJfcGVlcl07CiAKLSAgICAgICAgICAgICAgICBpZiAocGVlci0+ZmFpbHMgPD0gcGMtPnBlZXJzLT5tYXhfZmFpbHMKLSAgICAgICAgICAgICAgICAgICAgfHwgKG5vdyAtIHBlZXItPmFjY2Vzc2VkID4gcGMtPnBlZXJzLT5mYWlsX3RpbWVvdXQpKQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocGVlci0+ZmFpbHMgPD0gcGMtPnBlZXJzLT5tYXhfZmFpbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG5vdyAtIHBlZXItPmFjY2Vzc2VkID4gcGMtPnBlZXJzLT5mYWlsX3RpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGVlci0+ZmFpbHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKaW5kZXggMjk0ZjNiNC4uYzBlYzZhZCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKQEAgLTksNyArOSw5IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorc3RhdGljIHZvaWQgbmd4X3NzbF93cml0ZV9oYW5kbGVyKG5neF9ldmVudF90ICp3ZXYpOwogc3RhdGljIHNzaXplX3Qgbmd4X3NzbF93cml0ZShuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2NoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIG5neF9zc2xfcmVhZF9oYW5kbGVyKG5neF9ldmVudF90ICpyZXYpOwogCiAKIG5neF9pbnRfdCBuZ3hfc3NsX2luaXQobmd4X2xvZ190ICpsb2cpCkBAIC02OSw2ICs3MSwyNSBAQAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF9yZWFkOiAlZCIsIG4pOyAKIAogICAgIGlmIChuID4gMCkgeworICAgICAgICBpZiAoYy0+c3NsLT5zYXZlZF93cml0ZV9oYW5kbGVyKSB7CisKKyAgICAgICAgICAgIGMtPndyaXRlLT5ldmVudF9oYW5kbGVyID0gYy0+c3NsLT5zYXZlZF93cml0ZV9oYW5kbGVyOworICAgICAgICAgICAgYy0+c3NsLT5zYXZlZF93cml0ZV9oYW5kbGVyID0gTlVMTDsKKyAgICAgICAgICAgIGMtPndyaXRlLT5yZWFkeSA9IDE7CisKKyAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KGMtPndyaXRlLCAwKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KGMtPndyaXRlKTsKKworICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gbjsKICAgICB9CiAKQEAgLTkzLDEzICsxMTQsMjcgQEAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgIlNTTCB3YW50cyB0byB3cml0ZSVzIiwgaGFuZHNoYWtlKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSNpZiAwCisKKyAgICAgICAgYy0+d3JpdGUtPnJlYWR5ID0gMDsKKworICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChjLT53cml0ZSwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UgZG8gbm90IHNldCB0aGUgdGltZXIgYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IHRoZSByZWFkIGV2ZW50IHRpbWVyCisgICAgICAgICAqLworCisgICAgICAgIGlmIChjLT5zc2wtPnNhdmVkX3dyaXRlX2hhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgYy0+c3NsLT5zYXZlZF93cml0ZV9oYW5kbGVyID0gYy0+d3JpdGUtPmV2ZW50X2hhbmRsZXI7CisgICAgICAgICAgICBjLT53cml0ZS0+ZXZlbnRfaGFuZGxlciA9IG5neF9zc2xfd3JpdGVfaGFuZGxlcjsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBOR1hfQUdBSU47Ci0jZW5kaWYKICAgICB9CiAKICAgICBjLT5zc2wtPm5vX3Jjdl9zaHV0ID0gMTsKKyAgICBjLT5zc2wtPm5vX3NlbmRfc2h1dCA9IDE7CiAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9aRVJPX1JFVFVSTiB8fCBFUlJfcGVla19lcnJvcigpID09IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgZXJyLApAQCAtMTE1LDkgKzE1MCwxOCBAQAogfQogCiAKK3N0YXRpYyB2b2lkIG5neF9zc2xfd3JpdGVfaGFuZGxlcihuZ3hfZXZlbnRfdCAqd2V2KQoreworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOworCisgICAgYyA9IHdldi0+ZGF0YTsKKyAgICBjLT5yZWFkLT5ldmVudF9oYW5kbGVyKGMtPnJlYWQpOworfQorCisKIC8qCiAgKiBPcGVuU1NMIGhhcyBubyBTU0xfd3JpdGV2KCkgc28gd2UgY29weSBzZXZlcmFsIGJ1ZnMgaW50byBvdXIgMTZLIGJ1ZmZlcgotICogYmVmb3JlIFNTTF93cml0ZSgpIGNhbGwgdG8gZGVjcmVhc2UgYSBTU0wgb3ZlcmhlYWQuCisgKiBiZWZvcmUgdGhlIFNTTF93cml0ZSgpIGNhbGwgdG8gZGVjcmVhc2UgYSBTU0wgb3ZlcmhlYWQuCiAgKgogICogQmVzaWRlcyBmb3IgcHJvdG9jb2xzIHN1Y2ggYXMgSFRUUCBpdCBpcyBwb3NzaWJsZSB0byBhbHdheXMgYnVmZmVyCiAgKiB0aGUgb3V0cHV0IHRvIGRlY3JlYXNlIGEgU1NMIG92ZXJoZWFkIHNvbWUgbW9yZS4KQEAgLTE1NSw2ICsxOTksMTQgQEAKICAgICAgICAgcmV0dXJuIGluOwogICAgIH0KIAorCisgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSB1aW50MzJfdCB2YWx1ZSAtIHRoZSBwYWdlIHNpemUgKi8KKworICAgIGlmIChsaW1pdCA9PSAwIHx8IGxpbWl0ID4gTkdYX01BWF9VSU5UMzJfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKKyAgICAgICAgbGltaXQgPSBOR1hfTUFYX1VJTlQzMl9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICB9CisKKwogICAgIHNlbmQgPSAwOwogICAgIGZsdXNoID0gKGluID09IE5VTEwpID8gMSA6IDA7CiAKQEAgLTI1Miw2ICszMDQsMjUgQEAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJTU0xfd3JpdGU6ICVkIiwgbik7CiAKICAgICBpZiAobiA+IDApIHsKKyAgICAgICAgaWYgKGMtPnNzbC0+c2F2ZWRfcmVhZF9oYW5kbGVyKSB7CisKKyAgICAgICAgICAgIGMtPnJlYWQtPmV2ZW50X2hhbmRsZXIgPSBjLT5zc2wtPnNhdmVkX3JlYWRfaGFuZGxlcjsKKyAgICAgICAgICAgIGMtPnNzbC0+c2F2ZWRfcmVhZF9oYW5kbGVyID0gTlVMTDsKKyAgICAgICAgICAgIGMtPnJlYWQtPnJlYWR5ID0gMTsKKworICAgICAgICAgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudChjLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KGMtPnJlYWQpOworCisgICAgICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBuOwogICAgIH0KIApAQCAtMjc3LDEzICszNDgsMjggQEAKIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJTU0wgd2FudHMgdG8gcmVhZCVzIiwgaGFuZHNoYWtlKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSNpZiAwCisKKyAgICAgICAgYy0+cmVhZC0+cmVhZHkgPSAwOworCisgICAgICAgIGlmIChuZ3hfaGFuZGxlX3JlYWRfZXZlbnQoYy0+cmVhZCwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UgZG8gbm90IHNldCB0aGUgdGltZXIgYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5CisgICAgICAgICAqIHRoZSB3cml0ZSBldmVudCB0aW1lcgorICAgICAgICAgKi8KKworICAgICAgICBpZiAoYy0+c3NsLT5zYXZlZF9yZWFkX2hhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgYy0+c3NsLT5zYXZlZF9yZWFkX2hhbmRsZXIgPSBjLT5yZWFkLT5ldmVudF9oYW5kbGVyOworICAgICAgICAgICAgYy0+cmVhZC0+ZXZlbnRfaGFuZGxlciA9IG5neF9zc2xfcmVhZF9oYW5kbGVyOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKLSNlbmRpZgogICAgIH0KIAogICAgIGMtPnNzbC0+bm9fcmN2X3NodXQgPSAxOworICAgIGMtPnNzbC0+bm9fc2VuZF9zaHV0ID0gMTsKIAogICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBlcnIsICJTU0xfd3JpdGUoKSBmYWlsZWQiKTsKIApAQCAtMjkxLDIxICszNzcsNDIgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBuZ3hfc3NsX3JlYWRfaGFuZGxlcihuZ3hfZXZlbnRfdCAqcmV2KQoreworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOworCisgICAgYyA9IHJldi0+ZGF0YTsKKyAgICBjLT53cml0ZS0+ZXZlbnRfaGFuZGxlcihjLT53cml0ZSk7Cit9CisKKwogbmd4X2ludF90IG5neF9zc2xfc2h1dGRvd24obmd4X2Nvbm5lY3Rpb25fdCAqYykKIHsKLSAgICBpbnQgICAgICAgICBuLCBzc2xlcnI7CisgICAgaW50ICAgICAgICAgbiwgc3NsZXJyLCBtb2RlOwogICAgIG5neF91aW50X3QgIGFnYWluOwogCi0gICAgaWYgKGMtPnRpbWVkb3V0KSB7Ci0gICAgICAgIFNTTF9zZXRfc2h1dGRvd24oYy0+c3NsLT5zc2wsIFNTTF9SRUNFSVZFRF9TSFVURE9XTnxTU0xfU0VOVF9TSFVURE9XTik7CisgICAgaWYgKCFjLT5zc2wtPnNodXRkb3duX3NldCkgewogCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGMtPnNzbC0+bm9fcmN2X3NodXQpIHsKLSAgICAgICAgICAgIFNTTF9zZXRfc2h1dGRvd24oYy0+c3NsLT5zc2wsIFNTTF9SRUNFSVZFRF9TSFVURE9XTik7CisgICAgICAgIC8qIGl0IHNlZW1zIHRoYXQgU1NMX3NldF9zaHV0ZG93bigpIGNvdWxkIGJlIGNhbGxlZCBvbmNlIG9ubHkgKi8KKworICAgICAgICBpZiAoYy0+cmVhZC0+dGltZWRvdXQpIHsKKyAgICAgICAgICAgIG1vZGUgPSBTU0xfUkVDRUlWRURfU0hVVERPV058U1NMX1NFTlRfU0hVVERPV047CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vZGUgPSAwOworCisgICAgICAgICAgICBpZiAoYy0+c3NsLT5ub19yY3Zfc2h1dCkgeworICAgICAgICAgICAgICAgIG1vZGUgPSBTU0xfUkVDRUlWRURfU0hVVERPV047CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjLT5zc2wtPm5vX3NlbmRfc2h1dCkgeworICAgICAgICAgICAgICAgIG1vZGUgfD0gU1NMX1NFTlRfU0hVVERPV047CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYy0+c3NsLT5ub19zZW5kX3NodXQpIHsKLSAgICAgICAgICAgIFNTTF9zZXRfc2h1dGRvd24oYy0+c3NsLT5zc2wsIFNTTF9TRU5UX1NIVVRET1dOKTsKKyAgICAgICAgaWYgKG1vZGUpIHsKKyAgICAgICAgICAgIFNTTF9zZXRfc2h1dGRvd24oYy0+c3NsLT5zc2wsIG1vZGUpOworICAgICAgICAgICAgYy0+c3NsLT5zaHV0ZG93bl9zZXQgPSAxOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTksMTcgKzQyNiwxNyBAQAogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF9zaHV0ZG93bjogJWQiLCBuKTsKIAotICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgICAgICBhZ2FpbiA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuID09IDEpIHsKKyAgICAgICAgaWYgKG4gPT0gMSB8fCAobiA9PSAwICYmIGMtPnJlYWQtPnRpbWVkb3V0KSkgewogICAgICAgICAgICAgU1NMX2ZyZWUoYy0+c3NsLT5zc2wpOwogICAgICAgICAgICAgYy0+c3NsID0gTlVMTDsKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICBhZ2FpbiA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzQyLDcgKzQ0OSw3IEBACiAKICAgICBpZiAoYWdhaW4gfHwgc3NsZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKIAotICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIDEwMDAwKTsKKyAgICAgICAgbmd4X2FkZF90aW1lcihjLT5yZWFkLCAzMDAwMCk7CiAKICAgICAgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudChjLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCmluZGV4IGRiZGI1ZjcuLjZlN2I3MDUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCkBAIC0xOCwxMSArMTgsMTMgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBTU0wgICAgICAgICAgICAgICAgICAgKnNzbDsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgKmJ1ZjsKLSAgICBuZ3hfZXZlbnRfaGFuZGxlcl9wdCAgIHNhdmVkX2hhbmRsZXI7CisgICAgbmd4X2V2ZW50X2hhbmRsZXJfcHQgICBzYXZlZF9yZWFkX2hhbmRsZXI7CisgICAgbmd4X2V2ZW50X2hhbmRsZXJfcHQgICBzYXZlZF93cml0ZV9oYW5kbGVyOwogCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICBidWZmZXI6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgIG5vX3Jjdl9zaHV0OjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICBub19zZW5kX3NodXQ6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgIHNodXRkb3duX3NldDoxOwogfSBuZ3hfc3NsX3Q7CiAKIApAQCAtNDgsMTAgKzUwLDUgQEAKIHZvaWQgbmd4X3NzbF9lcnJvcihuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKICAgICAgICAgICAgICAgICAgICBjaGFyICpmbXQsIC4uLik7CiAKLSNkZWZpbmUgbmd4X3NzbF9zZXRfbm9zZW5kc2h1dChzc2wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKHNzbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3NsLT5ub19zZW5kX3NodXQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0KLQogCiAjZW5kaWYgLyogX05HWF9FVkVOVF9PUEVOU1NMX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCmluZGV4IDNjYThhMGMuLjMxMGYwY2UgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAogbmd4X2ludF90IG5neF9ldmVudF9waXBlX3dyaXRlX3RvX2Rvd25zdHJlYW0obmd4X2V2ZW50X3BpcGVfdCAqcCkKIHsKLSAgICBzaXplX3QgICAgICAgIGJzaXplOworICAgIG9mZl90ICAgICAgICAgYnNpemU7CiAgICAgbmd4X3VpbnRfdCAgICBmbHVzaDsKICAgICBuZ3hfYnVmX3QgICAgKmI7CiAgICAgbmd4X2NoYWluX3QgICpvdXQsICoqbGwsICpjbCwgKnRsOwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwaXBlIHdyaXRlIGJ1c3k6ICV1eiIsIGJzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgd3JpdGUgYnVzeTogJU8iLCBic2l6ZSk7CiAKICAgICAgICAgb3V0ID0gTlVMTDsKICAgICAgICAgbGwgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaAppbmRleCA5NjFmMDY2Li45NzgxODIwIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaApAQCAtNjIsNyArNjIsNyBAQAogICAgIG5neF9idWZzX3QgICAgICAgICBidWZzOwogICAgIG5neF9idWZfdGFnX3QgICAgICB0YWc7CiAKLSAgICBzaXplX3QgICAgICAgICAgICAgYnVzeV9zaXplOworICAgIHNzaXplX3QgICAgICAgICAgICBidXN5X3NpemU7CiAKICAgICBvZmZfdCAgICAgICAgICAgICAgcmVhZF9sZW5ndGg7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXIuYwppbmRleCBmNWVjOTcwLi5hYzI0MzhlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jCkBAIC0xMDUsMTEgKzEwNSwxMCBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgKmxhc3QsIHNjYWxlOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAqbGFzdDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKICAgICBuZ3hfdG1fdCAgICAgICAgICAgICAgICAgICAgICAgIHRtOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgcmMsIHNpemU7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGksIGxldmVsOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgICAgICAgZXJyOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgICAqYjsKQEAgLTMwNyw3ICszMDYsNyBAQAogICAgICAgICAgICAgICAgKyBOR1hfSFRUUF9BVVRPSU5ERVhfTkFNRV9MRU4gKyBzaXplb2YoIiZndDsiKSAtIDIKICAgICAgICAgICAgICAgICsgc2l6ZW9mKCI8L2E+IikgLSAxCiAgICAgICAgICAgICAgICArIHNpemVvZigiIDI4LVNlcC0xOTcwIDEyOjAwICIpIC0gMQotICAgICAgICAgICAgICAgKyBzaXplb2YoIjEwMjNHIikgLSAxCisgICAgICAgICAgICAgICArIDE5CiAgICAgICAgICAgICAgICArIDI7CiAgICAgfQogCkBAIC0zODMsNDQgKzM4MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbik7CiAKICAgICAgICAgaWYgKGVudHJ5W2ldLmRpcikgewotICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIiAgIC0iLCBzaXplb2YoIiAgIC0iKSAtIDEpOworICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgICIgICAgICAgICAgICAgICAgICAtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiICAgICAgICAgICAgICAgICAgLSIpIC0gMSk7CiAKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGVudHJ5W2ldLnNpemU7Ci0KLSAgICAgICAgICAgIGlmIChsZW5ndGggPiAxMDI0ICogMTAyNCAqIDEwMjQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IChuZ3hfaW50X3QpIChsZW5ndGggLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKChsZW5ndGggJSAoMTAyNCAqIDEwMjQgKiAxMDI0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIDIgLSAxKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2NhbGUgPSAnRyc7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gMTAyNCAqIDEwMjQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IChuZ3hfaW50X3QpIChsZW5ndGggLyAoMTAyNCAqIDEwMjQpKTsKLSAgICAgICAgICAgICAgICBpZiAoKGxlbmd0aCAlICgxMDI0ICogMTAyNCkpID4gKDEwMjQgKiAxMDI0IC8gMiAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2NhbGUgPSAnTSc7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gOTk5OSkgewotICAgICAgICAgICAgICAgIHNpemUgPSAobmd4X2ludF90KSAobGVuZ3RoIC8gMTAyNCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCAlIDEwMjQgPiA1MTEpIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzY2FsZSA9ICdLJzsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplID0gKG5neF9pbnRfdCkgbGVuZ3RoOwotICAgICAgICAgICAgICAgIHNjYWxlID0gJyAnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIiU0aSIsIHNpemUpOwotCi0gICAgICAgICAgICBpZiAoc2NhbGUgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgKmItPmxhc3QrKyA9IHNjYWxlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICIlMTlPIiwgZW50cnlbaV0uc2l6ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAqYi0+bGFzdCsrID0gQ1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMKaW5kZXggOTI5YTdlZC4uNTEzNDE1MSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXIuYwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jaGFpbl90ICppbikKIHsKICAgICB1X2NoYXIgICAgICAgKmNodW5rOwotICAgIHNpemVfdCAgICAgICAgc2l6ZTsKKyAgICBvZmZfdCAgICAgICAgIHNpemU7CiAgICAgbmd4X2J1Zl90ICAgICpiOwogICAgIG5neF9jaGFpbl90ICAgb3V0LCB0YWlsLCAqY2wsICp0bCwgKipsbDsKIApAQCAtMTA2LDEzICsxMDYsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIShjaHVuayA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKCIwMDAwMDAwMCIgQ1JMRikgLSAxKSkpIHsKKyAgICAgICAgY2h1bmsgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZigiMDAwMDAwMDAwMDAwMDAwMCIgQ1JMRikgLSAxKTsKKyAgICAgICAgaWYgKGNodW5rID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAogICAgICAgICBiLT50ZW1wb3JhcnkgPSAxOwogICAgICAgICBiLT5wb3MgPSBjaHVuazsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGNodW5rLCAiJXh6IiBDUkxGLCBzaXplKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGNodW5rLCAiJXhPIiBDUkxGLCBzaXplKTsKIAogICAgICAgICBvdXQuYnVmID0gYjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfaGFuZGxlci5jCmluZGV4IDMzODY5NTMuLjc0Y2NmMGEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfaGFuZGxlci5jCkBAIC00NDgsOCArNDQ4LDcgQEAKICAgICBuZ3hfaHR0cF9pbmRleF9sb2NfY29uZl90ICAqcHJldiA9IHBhcmVudDsKICAgICBuZ3hfaHR0cF9pbmRleF9sb2NfY29uZl90ICAqY29uZiA9IGNoaWxkOwogCi0gICAgbmd4X3VpbnRfdCAgaTsKLSAgICBuZ3hfc3RyX3QgICppbmRleCwgKnByZXZfaW5kZXg7CisgICAgbmd4X3N0cl90ICAqaW5kZXg7CiAKICAgICBpZiAoY29uZi0+bWF4X2luZGV4X2xlbiA9PSAwKSB7CiAgICAgICAgIGlmIChwcmV2LT5tYXhfaW5kZXhfbGVuICE9IDApIHsKQEAgLTQ2NSw2ICs0NjQsOCBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiAgICAgfQogCisjaWYgMAorCiAgICAgaWYgKHByZXYtPm1heF9pbmRleF9sZW4gIT0gMCkgewogCiAgICAgICAgIHByZXZfaW5kZXggPSBwcmV2LT5pbmRpY2VzLmVsdHM7CkBAIC00NzYsNiArNDc3LDggQEAKICAgICAgICAgfQogICAgIH0KIAorI2VuZGlmCisKICAgICBpZiAoY29uZi0+bWF4X2luZGV4X2xlbiA8IHByZXYtPm1heF9pbmRleF9sZW4pIHsKICAgICAgICAgY29uZi0+bWF4X2luZGV4X2xlbiA9IHByZXYtPm1heF9pbmRleF9sZW47CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwppbmRleCA0MjVhMWE2Li42NTFkZmE2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwpAQCAtMjc1LDEyICsyNzUsOSBAQAogCiAKIHN0YXRpYyBuZ3hfaHR0cF9sb2dfb3BfbmFtZV90IG5neF9odHRwX3Byb3h5X2xvZ19mbXRfb3BzW10gPSB7Ci0gICAgeyBuZ3hfc3RyaW5nKCJwcm94eSIpLCAvKiBTVFVCICovIDEwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb3h5X2xvZ19wcm94eV9zdGF0ZSB9LAotICAgIHsgbmd4X3N0cmluZygicHJveHlfY2FjaGVfc3RhdGUiKSwgc2l6ZW9mKCJCWVBBU1MiKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm94eV9sb2dfY2FjaGVfc3RhdGUgfSwKLSAgICB7IG5neF9zdHJpbmcoInByb3h5X3JlYXNvbiIpLCBzaXplb2YoIkJQUyIpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm94eV9sb2dfcmVhc29uIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJwcm94eSIpLCAwLCBuZ3hfaHR0cF9wcm94eV9sb2dfcHJveHlfc3RhdGUgfSwKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2NhY2hlX3N0YXRlIiksIDAsIG5neF9odHRwX3Byb3h5X2xvZ19jYWNoZV9zdGF0ZSB9LAorICAgIHsgbmd4X3N0cmluZygicHJveHlfcmVhc29uIiksIDAsIG5neF9odHRwX3Byb3h5X2xvZ19yZWFzb24gfSwKICAgICB7IG5neF9udWxsX3N0cmluZywgMCwgTlVMTCB9CiB9OwogCkBAIC03OTIsMTExICs3ODksMTgwIEBACiBzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9wcm94eV9sb2dfcHJveHlfc3RhdGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqYnVmLCB1aW50cHRyX3QgZGF0YSkKIHsKLSAgICBuZ3hfaHR0cF9wcm94eV9jdHhfdCAgKnA7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgIGk7CisgICAgbmd4X2h0dHBfcHJveHlfY3R4X3QgICAgKnA7CisgICAgbmd4X2h0dHBfcHJveHlfc3RhdGVfdCAgKnN0YXRlOwogCiAgICAgcCA9IG5neF9odHRwX2dldF9tb2R1bGVfZXJyX2N0eChyLCBuZ3hfaHR0cF9wcm94eV9tb2R1bGUpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIDE7CisgICAgICAgIH0KKwogICAgICAgICAqYnVmID0gJy0nOwogICAgICAgICByZXR1cm4gYnVmICsgMTsKICAgICB9CiAKLSAgICBpZiAocC0+c3RhdGUtPmNhY2hlX3N0YXRlID09IDApIHsKLSAgICAgICAgKmJ1ZisrID0gJy0nOwogCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmID0gbmd4X2NweW1lbShidWYsIGNhY2hlX3N0YXRlc1twLT5zdGF0ZS0+Y2FjaGVfc3RhdGUgLSAxXS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3N0YXRlc1twLT5zdGF0ZS0+Y2FjaGVfc3RhdGUgLSAxXS5sZW4pOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAvKiBmaW5kIHRoZSByZXF1ZXN0IGxpbmUgbGVuZ3RoICovCisgICAgICAgIHJldHVybiAodV9jaGFyICopICh1aW50cHRyX3QpIChwLT5zdGF0ZXMubmVsdHMgKiAvKiBTVFVCICovIDEwMCk7CiAgICAgfQogCi0gICAgKmJ1ZisrID0gJy8nOwogCi0gICAgaWYgKHAtPnN0YXRlLT5leHBpcmVkID09IDApIHsKLSAgICAgICAgKmJ1ZisrID0gJy0nOworICAgIGkgPSAwOworICAgIHN0YXRlID0gcC0+c3RhdGVzLmVsdHM7CiAKLSAgICB9IGVsc2UgewotICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHAtPnN0YXRlLT5leHBpcmVkKTsKKyAgICBmb3IgKCA7OyApIHsKKyAgICAgICAgaWYgKHN0YXRlW2ldLmNhY2hlX3N0YXRlID09IDApIHsKKyAgICAgICAgICAgICpidWYrKyA9ICctJzsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmID0gbmd4X2NweW1lbShidWYsIGNhY2hlX3N0YXRlc1tzdGF0ZVtpXS5jYWNoZV9zdGF0ZSAtIDFdLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3N0YXRlc1tzdGF0ZVtpXS5jYWNoZV9zdGF0ZSAtIDFdLmxlbik7CisgICAgICAgIH0KKworICAgICAgICAqYnVmKysgPSAnLyc7CisKKyAgICAgICAgaWYgKHN0YXRlW2ldLmV4cGlyZWQgPT0gMCkgeworICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHN0YXRlW2ldLmV4cGlyZWQpOworICAgICAgICB9CisKKyAgICAgICAgKmJ1ZisrID0gJy8nOworCisgICAgICAgIGlmIChzdGF0ZVtpXS5ibF90aW1lID09IDApIHsKKyAgICAgICAgICAgICpidWYrKyA9ICctJzsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmID0gbmd4X3NwcmludGYoYnVmLCAiJVQiLCBzdGF0ZVtpXS5ibF90aW1lKTsKKyAgICAgICAgfQorCisgICAgICAgICpidWYrKyA9ICcvJzsKKworICAgICAgICAqYnVmKysgPSAnKic7CisKKyAgICAgICAgKmJ1ZisrID0gJyAnOworCisgICAgICAgIGlmIChzdGF0ZVtpXS5zdGF0dXMgPT0gMCkgeworICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIldWkiLCBzdGF0ZVtpXS5zdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgKmJ1ZisrID0gJy8nOworCisgICAgICAgIGlmIChzdGF0ZVtpXS5yZWFzb24gPT0gMCkgeworICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWYgPSBuZ3hfY3B5bWVtKGJ1ZiwgY2FjaGVfcmVhc29uc1tzdGF0ZVtpXS5yZWFzb24gLSAxXS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9yZWFzb25zW3N0YXRlW2ldLnJlYXNvbiAtIDFdLmxlbik7CisgICAgICAgIH0KKworICAgICAgICAqYnVmKysgPSAnLyc7CisKKyAgICAgICAgaWYgKHN0YXRlW2ldLnJlYXNvbiA8IE5HWF9IVFRQX1BST1hZX0NBQ0hFX1hBRSkgeworICAgICAgICAgICAgKmJ1ZisrID0gJy0nOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHN0YXRlW2ldLmV4cGlyZXMpOworICAgICAgICB9CisKKyAgICAgICAgKmJ1ZisrID0gJyAnOworICAgICAgICAqYnVmKysgPSAnKic7CisKKyAgICAgICAgaWYgKCsraSA9PSBwLT5zdGF0ZXMubmVsdHMpIHsKKyAgICAgICAgICAgIHJldHVybiBidWY7CisgICAgICAgIH0KKworICAgICAgICAqYnVmKysgPSAnLCc7CisgICAgICAgICpidWYrKyA9ICcgJzsKICAgICB9Ci0KLSAgICAqYnVmKysgPSAnLyc7Ci0KLSAgICBpZiAocC0+c3RhdGUtPmJsX3RpbWUgPT0gMCkgewotICAgICAgICAqYnVmKysgPSAnLSc7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHAtPnN0YXRlLT5ibF90aW1lKTsKLSAgICB9Ci0KLSAgICAqYnVmKysgPSAnLyc7Ci0KLSAgICAqYnVmKysgPSAnKic7Ci0KLSAgICAqYnVmKysgPSAnICc7Ci0KLSAgICBpZiAocC0+c3RhdGUtPnN0YXR1cyA9PSAwKSB7Ci0gICAgICAgICpidWYrKyA9ICctJzsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZiA9IG5neF9zcHJpbnRmKGJ1ZiwgIiV1aSIsIHAtPnN0YXRlLT5zdGF0dXMpOwotICAgIH0KLQotICAgICpidWYrKyA9ICcvJzsKLQotICAgIGlmIChwLT5zdGF0ZS0+cmVhc29uID09IDApIHsKLSAgICAgICAgKmJ1ZisrID0gJy0nOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmID0gbmd4X2NweW1lbShidWYsIGNhY2hlX3JlYXNvbnNbcC0+c3RhdGUtPnJlYXNvbiAtIDFdLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfcmVhc29uc1twLT5zdGF0ZS0+cmVhc29uIC0gMV0ubGVuKTsKLSAgICB9Ci0KLSAgICAqYnVmKysgPSAnLyc7Ci0KLSAgICBpZiAocC0+c3RhdGUtPnJlYXNvbiA8IE5HWF9IVFRQX1BST1hZX0NBQ0hFX1hBRSkgewotICAgICAgICAqYnVmKysgPSAnLSc7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHAtPnN0YXRlLT5leHBpcmVzKTsKLSAgICB9Ci0KLSAgICAqYnVmKysgPSAnICc7Ci0gICAgKmJ1ZisrID0gJyonOwotCi0gICAgcmV0dXJuIGJ1ZjsKIH0KIAogCiBzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9wcm94eV9sb2dfY2FjaGVfc3RhdGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqYnVmLCB1aW50cHRyX3QgZGF0YSkKIHsKLSAgICBuZ3hfaHR0cF9wcm94eV9jdHhfdCAgKnA7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgIGk7CisgICAgbmd4X2h0dHBfcHJveHlfY3R4X3QgICAgKnA7CisgICAgbmd4X2h0dHBfcHJveHlfc3RhdGVfdCAgKnN0YXRlOwogCiAgICAgcCA9IG5neF9odHRwX2dldF9tb2R1bGVfZXJyX2N0eChyLCBuZ3hfaHR0cF9wcm94eV9tb2R1bGUpOwogCiAgICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5zdGF0ZS0+Y2FjaGVfc3RhdGUgPT0gMCkgeworICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIDE7CisgICAgICAgIH0KKwogICAgICAgICAqYnVmID0gJy0nOwogICAgICAgICByZXR1cm4gYnVmICsgMTsKICAgICB9CiAKLSAgICByZXR1cm4gbmd4X2NweW1lbShidWYsIGNhY2hlX3N0YXRlc1twLT5zdGF0ZS0+Y2FjaGVfc3RhdGUgLSAxXS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3N0YXRlc1twLT5zdGF0ZS0+Y2FjaGVfc3RhdGUgLSAxXS5sZW4pOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAvKiBmaW5kIHRoZSByZXF1ZXN0IGxpbmUgbGVuZ3RoICovCisgICAgICAgIHJldHVybiAodV9jaGFyICopIChwLT5zdGF0ZXMubmVsdHMgKiBzaXplb2YoIkJZUEFTUyIpIC0gMSk7CisgICAgfQorCisgICAgaSA9IDA7CisgICAgc3RhdGUgPSBwLT5zdGF0ZXMuZWx0czsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBidWYgPSBuZ3hfY3B5bWVtKGJ1ZiwgY2FjaGVfc3RhdGVzW3N0YXRlW2ldLmNhY2hlX3N0YXRlIC0gMV0uZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9zdGF0ZXNbc3RhdGVbaV0uY2FjaGVfc3RhdGUgLSAxXS5sZW4pOworCisgICAgICAgIGlmICgrK2kgPT0gcC0+c3RhdGVzLm5lbHRzKSB7CisgICAgICAgICAgICByZXR1cm4gYnVmOworICAgICAgICB9CisKKyAgICAgICAgKmJ1ZisrID0gJywnOworICAgICAgICAqYnVmKysgPSAnICc7CisgICAgfQogfQogCiAKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX3Byb3h5X2xvZ19yZWFzb24obmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpCiB7Ci0gICAgbmd4X2h0dHBfcHJveHlfY3R4X3QgICpwOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX3Byb3h5X2N0eF90ICAgICpwOworICAgIG5neF9odHRwX3Byb3h5X3N0YXRlX3QgICpzdGF0ZTsKIAogICAgIHAgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2Vycl9jdHgociwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKIAogICAgIGlmIChwID09IE5VTEwgfHwgcC0+c3RhdGUtPnJlYXNvbiA9PSAwKSB7CisgICAgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgMTsKKyAgICAgICAgfQorCiAgICAgICAgICpidWYgPSAnLSc7CiAgICAgICAgIHJldHVybiBidWYgKyAxOwogICAgIH0KIAotICAgIHJldHVybiBuZ3hfY3B5bWVtKGJ1ZiwgY2FjaGVfcmVhc29uc1twLT5zdGF0ZS0+cmVhc29uIC0gMV0uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9yZWFzb25zW3AtPnN0YXRlLT5yZWFzb24gLSAxXS5sZW4pOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAvKiBmaW5kIHRoZSByZXF1ZXN0IGxpbmUgbGVuZ3RoICovCisgICAgICAgIHJldHVybiAodV9jaGFyICopIChwLT5zdGF0ZXMubmVsdHMgKiBzaXplb2YoIkJQUyIpIC0gMSk7CisgICAgfQorCisgICAgaSA9IDA7CisgICAgc3RhdGUgPSBwLT5zdGF0ZXMuZWx0czsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBidWYgPSBuZ3hfY3B5bWVtKGJ1ZiwgY2FjaGVfcmVhc29uc1tzdGF0ZVtpXS5yZWFzb24gLSAxXS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3JlYXNvbnNbc3RhdGVbaV0ucmVhc29uIC0gMV0ubGVuKTsKKworICAgICAgICBpZiAoKytpID09IHAtPnN0YXRlcy5uZWx0cykgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICAgICAgfQorCisgICAgICAgICpidWYrKyA9ICcsJzsKKyAgICAgICAgKmJ1ZisrID0gJyAnOworICAgIH0KIH0KIAogCkBAIC0xMzg3LDkgKzE0NTMsOCBAQAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfcHJveHlfbG93YXRfY2hlY2sobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpCiB7Ci0gICAgc3NpemVfdCAqbnAgPSBkYXRhOwotCiAjaWYgKE5HWF9GUkVFQlNEKQorICAgIHNzaXplX3QgKm5wID0gZGF0YTsKIAogICAgIGlmICgqbnAgPj0gbmd4X2ZyZWVic2RfbmV0X2luZXRfdGNwX3NlbmRzcGFjZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCkBAIC0xNDAxLDYgKzE0NjYsNyBAQAogICAgIH0KIAogI2VsaWYgIShOR1hfSEFWRV9TT19TTkRMT1dBVCkKKyAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIlwicHJveHlfc2VuZF9sb3dhdFwiIGlzIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZWQiKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYwppbmRleCAyM2Q0MGM0Li40N2QyYjE3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCkBAIC01MjgsNiArNTI4LDcgQEAKIHsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAqY2w7CiAgICAgbmd4X291dHB1dF9jaGFpbl9jdHhfdCAgKm91dHB1dDsKKyAgICBuZ3hfaHR0cF9wcm94eV9zdGF0ZV9lICAgc3RhdGU7CiAKICAgICAvKiByZWluaXQgdGhlIHJlcXVlc3QgY2hhaW4gKi8KIApAQCAtNTYwLDExICs1NjEsMTcgQEAKIAogICAgIC8qIGFkZCBvbmUgbW9yZSBzdGF0ZSAqLwogCisgICAgc3RhdGUgPSBwLT5zdGF0ZS0+Y2FjaGVfc3RhdGU7CisKICAgICBpZiAoIShwLT5zdGF0ZSA9IG5neF9wdXNoX2FycmF5KCZwLT5zdGF0ZXMpKSkgewogICAgICAgICBuZ3hfaHR0cF9wcm94eV9maW5hbGl6ZV9yZXF1ZXN0KHAsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBuZ3hfbWVtemVybyhwLT5zdGF0ZSwgc2l6ZW9mKG5neF9odHRwX3Byb3h5X3N0YXRlX3QpKTsKKworICAgIHAtPnN0YXRlLT5jYWNoZV9zdGF0ZSA9IHN0YXRlOyAKKwogICAgIHAtPnN0YXR1cyA9IDA7CiAgICAgcC0+c3RhdHVzX2NvdW50ID0gMDsKIH0KQEAgLTcxOSw5ICs3MjYsOSBAQAogICAgIHdyaXRlci0+b3V0ID0gTlVMTDsKICAgICB3cml0ZXItPmxhc3QgPSAmd3JpdGVyLT5vdXQ7CiAgICAgd3JpdGVyLT5jb25uZWN0aW9uID0gYzsKLSAgICB3cml0ZXItPmxpbWl0ID0gT0ZGX1RfTUFYX1ZBTFVFOworICAgIHdyaXRlci0+bGltaXQgPSAwOwogCi0gICAgaWYgKHAtPnVwc3RyZWFtLT5wZWVyLnRyaWVzID4gMSAmJiBwLT5yZXF1ZXN0X3NlbnQpIHsKKyAgICBpZiAocC0+cmVxdWVzdF9zZW50KSB7CiAgICAgICAgIG5neF9odHRwX3Byb3h5X3JlaW5pdF91cHN0cmVhbShwKTsKICAgICB9CiAKQEAgLTgwMywxMyArODEwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnJlcXVlc3Rfc2VudCA/IE5VTEw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnJlcXVlc3QtPnJlcXVlc3RfYm9keS0+YnVmcyk7CiAKKyAgICBwLT5yZXF1ZXN0X3NlbnQgPSAxOworCiAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgewogICAgICAgICBuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtKHAsIE5HWF9IVFRQX1BST1hZX0ZUX0VSUk9SKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHAtPnJlcXVlc3Rfc2VudCA9IDE7Ci0KICAgICBpZiAoYy0+d3JpdGUtPnRpbWVyX3NldCkgewogICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPndyaXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jYWNoZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY2FjaGUuaAppbmRleCBhYTY2OTAyLi5jODgyYjMwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jYWNoZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NhY2hlLmgKQEAgLTk3LDYgKzk3LDExIEBACiB9IG5neF9odHRwX2NhY2hlX3Q7CiAKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9wYXRoX3QgICAgICAgICAgICAgICAgcGF0aDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgIGtleTsKK30gbmd4X2h0dHBfY2FjaGVfY3R4X3Q7CisKIAogI2RlZmluZSBOR1hfSFRUUF9DQUNIRV9TVEFMRSAgICAgMQogI2RlZmluZSBOR1hfSFRUUF9DQUNIRV9BR0VEICAgICAgMgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggYzRjYjhiOS4uZTNjY2Q4ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC0xODE1LDkgKzE4MTUsOCBAQAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfbG93YXRfY2hlY2sobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpCiB7Ci0gICAgc3NpemVfdCAqbnAgPSBkYXRhOwotCiAjaWYgKE5HWF9GUkVFQlNEKQorICAgIHNzaXplX3QgKm5wID0gZGF0YTsKIAogICAgIGlmICgqbnAgPj0gbmd4X2ZyZWVic2RfbmV0X2luZXRfdGNwX3NlbmRzcGFjZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCkBAIC0xODI5LDYgKzE4MjgsNyBAQAogICAgIH0KIAogI2VsaWYgIShOR1hfSEFWRV9TT19TTkRMT1dBVCkKKyAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIlwic2VuZF9sb3dhdFwiIGlzIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZWQiKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCAzZmExMTA4Li4zMWZhODI2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0yNTIsOSArMjUyLDcgQEAKICAgICAgICAgICogS29ucXVlcm9yIGtlZXBzIHRoZSBjb25uZWN0aW9uIGFsaXZlIGZvciBhYm91dCBOIHNlY29uZHMuCiAgICAgICAgICAqLwogCi0gICAgICAgIGlmIChjbGNmLT5rZWVwYWxpdmVfaGVhZGVyCi0gICAgICAgICAgICAmJiAoci0+aGVhZGVyc19pbi5nZWNrbyB8fCByLT5oZWFkZXJzX2luLmtvbnF1ZXJvcikpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpIHsKICAgICAgICAgICAgIGxlbiArPSBzaXplb2YoIktlZXAtQWxpdmU6IHRpbWVvdXQ9IikgLSAxICsgVElNRV9UX0xFTiArIDI7CiAgICAgICAgIH0KIApAQCAtMzg0LDkgKzM4Miw3IEBACiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlIiBDUkxGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIkNvbm5lY3Rpb246IGtlZXAtYWxpdmUiIENSTEYpIC0gMSk7CiAKLSAgICAgICAgaWYgKGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIKLSAgICAgICAgICAgICYmIChyLT5oZWFkZXJzX2luLmdlY2tvIHx8IHItPmhlYWRlcnNfaW4ua29ucXVlcm9yKSkKLSAgICAgICAgeworICAgICAgICBpZiAoY2xjZi0+a2VlcGFsaXZlX2hlYWRlcikgewogICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICJLZWVwLUFsaXZlOiB0aW1lb3V0PSVUIiBDUkxGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX2hhbmRsZXIuYwppbmRleCA1ODFhMWNlLi5mZDM3MzQ0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMKQEAgLTE2Niw3ICsxNjYsMTAgQEAKICAgICAgICAgbGVuKys7CiAjZW5kaWYKIAotICAgICAgICBuZ3hfdGVzdF9udWxsKGxpbmUsIG5neF9wYWxsb2Moci0+cG9vbCwgbGVuKSwgTkdYX0VSUk9SKTsKKyAgICAgICAgaWYgKCEobGluZSA9IG5neF9wYWxsb2Moci0+cG9vbCwgbGVuKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKwogICAgICAgICBwID0gbGluZTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbG9nW2xdLm9wcy0+bmVsdHM7IGkrKykgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKaW5kZXggOTZlZDQ5Yy4uNzdkYjgxMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCkBAIC02NjUsNiArNjY1LDggQEAKICAgICB1X2NoYXIgIGMsIGNoLCBkZWNvZGVkLCAqcCwgKnU7CiAgICAgZW51bSB7CiAgICAgICAgIHN3X3VzdWFsID0gMCwKKyAgICAgICAgc3dfY29sb24sCisgICAgICAgIHN3X2NvbG9uX3NsYXNoLAogICAgICAgICBzd19zbGFzaCwKICAgICAgICAgc3dfZG90LAogICAgICAgICBzd19kb3RfZG90LApAQCAtNzMwLDggKzczMiwxNCBAQAogICAgICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgci0+YXJnc19zdGFydCA9IHA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X2NvbG9uOworICAgICAgICAgICAgICAgICp1KysgPSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJy4nOgogICAgICAgICAgICAgICAgIHItPnVyaV9leHQgPSB1ICsgMTsKKyAgICAgICAgICAgICAgICAqdSsrID0gY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTczOSw2ICs3NDcsNjEgQEAKICAgICAgICAgICAgIGNoID0gKnArKzsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2Ugc3dfY29sb246CisgICAgICAgICAgICBzd2l0Y2goY2gpIHsKKyNpZiAoTkdYX1dJTjMyKQorICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfY29sb25fc2xhc2g7CisgICAgICAgICAgICAgICAgKnUrKyA9ICcvJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19jb2xvbl9zbGFzaDsKKyAgICAgICAgICAgICAgICAqdSsrID0gY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICAqdSsrID0gY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgICAgICBxdW90ZWRfc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3F1b3RlZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191c3VhbDsKKyAgICAgICAgICAgICAgICAqdSsrID0gY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9ICpwKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIHN3X2NvbG9uX3NsYXNoOgorICAgICAgICAgICAgc3dpdGNoKGNoKSB7CisjaWYgKE5HWF9XSU4zMikKKyAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3NsYXNoOworICAgICAgICAgICAgICAgICp1KysgPSAnLyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc2xhc2g7CisgICAgICAgICAgICAgICAgKnUrKyA9IGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19kb3Q7CisgICAgICAgICAgICAgICAgKnUrKyA9IGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICAgICAgcXVvdGVkX3N0YXRlID0gc3RhdGU7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19xdW90ZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfdXN1YWw7CisgICAgICAgICAgICAgICAgKnUrKyA9IGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSAqcCsrOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBzd19zbGFzaDoKICAgICAgICAgICAgIHN3aXRjaChjaCkgewogI2lmIChOR1hfV0lOMzIpCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggYjYwMTNmYy4uZmUzZDUxNiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTE5MCw4ICsxMTkwLDkgQEAKIAogI2lmIDAKICAgICAgICAgICAgIC8qIE1TSUUgaWdub3JlcyB0aGUgU1NMICJjbG9zZSBub3RpZnkiIGFsZXJ0ICovCi0KLSAgICAgICAgICAgIG5neF9zc2xfc2V0X25vc2VuZHNodXQoci0+Y29ubmVjdGlvbi0+c3NsKTsKKyAgICAgICAgICAgIGlmIChjLT5zc2wpIHsKKyAgICAgICAgICAgICAgICByLT5jb25uZWN0aW9uLT5zc2wtPm5vX3NlbmRfc2h1dCA9IDE7CisgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogICAgIH0KIAogICAgIGlmIChyLT5jb25uZWN0aW9uLT5yZWFkLT5wZW5kaW5nX2VvZikgewotI2lmIChOR1hfS1FVRVVFKQorI2lmIChOR1hfSEFWRV9LUVVFVUUpCiAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLAogICAgICAgICAgICAgICAgICAgICAgICByLT5jb25uZWN0aW9uLT5yZWFkLT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIGFib3V0IGFuIGNsb3NlZCBjb25uZWN0aW9uIik7CkBAIC0xNzAyLDI0ICsxNzAzLDI2IEBACiAgICAgICAgIH0KIAogICAgICAgICBjLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfVU5TRVQ7CisgICAgICAgIHRjcF9ub2RlbGF5ID0gbmd4X3RjcF9ub2RlbGF5X2FuZF90Y3Bfbm9wdXNoID8gMSA6IDA7CiAKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY2xjZi0+dGNwX25vZGVsYXkgJiYgIWMtPnRjcF9ub2RlbGF5KSB7Ci0gICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IDE7CisgICAgICAgIHRjcF9ub2RlbGF5ID0gMTsKKyAgICB9CiAKLSAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLCAidGNwX25vZGVsYXkiKTsKKyAgICBpZiAodGNwX25vZGVsYXkgJiYgY2xjZi0+dGNwX25vZGVsYXkgJiYgIWMtPnRjcF9ub2RlbGF5KSB7CiAKLSAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KGMtPmZkLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnRjcF9ub2RlbGF5LCBzaXplb2YoaW50KSkgPT0gLTEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChUQ1BfTk9ERUxBWSkgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLCAidGNwX25vZGVsYXkiKTsKIAotICAgICAgICAgICAgYy0+dGNwX25vZGVsYXkgPSAxOworICAgICAgICBpZiAoc2V0c29ja29wdChjLT5mZCwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnRjcF9ub2RlbGF5LCBzaXplb2YoaW50KSkgPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChUQ1BfTk9ERUxBWSkgZmFpbGVkIik7CisgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgYy0+dGNwX25vZGVsYXkgPSAxOwogICAgIH0KIAogI2lmIDAKQEAgLTE3NjEsNiArMTc2NCwxMSBAQAogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgcmV2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIHRoYXQgY2xpZW50ICVWIGNsb3NlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZWVwYWxpdmUgY29ubmVjdGlvbiIsIGN0eC0+Y2xpZW50KTsKKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgICAgICAgICAgaWYgKGMtPnNzbCkgeworICAgICAgICAgICAgICAgIGMtPnNzbC0+bm9fc2VuZF9zaHV0ID0gMTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXIuYwppbmRleCA2N2Y2ODYyLi41MGU4YmMyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXIuYwpAQCAtMTUyLDggKzE1Miw3IEBACiAKICAgICBzZW50ID0gYy0+c2VudDsKIAotICAgIGNoYWluID0gYy0+c2VuZF9jaGFpbihjLCBjdHgtPm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2xjZi0+bGltaXRfcmF0ZSA/IGNsY2YtPmxpbWl0X3JhdGU6IE9GRl9UX01BWF9WQUxVRSk7CisgICAgY2hhaW4gPSBjLT5zZW5kX2NoYWluKGMsIGN0eC0+b3V0LCBjbGNmLT5saW1pdF9yYXRlKTsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlIGZpbHRlciAlcCIsIGNoYWluKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYwppbmRleCA0ZDQ1ZjA3Li5jMTEwOWRjIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZV9jaGFpbi5jCkBAIC0yMCw2ICsyMCwxMiBAQAogICAgIG5neF9lcnJfdCAgICAgZXJyOwogICAgIG5neF9jaGFpbl90ICAqY2w7CiAKKyAgICAvKiB0aGUgbWF4aW11bSBsaW1pdCBzaXplIGlzIHRoZSBtYXhpbXVtIHNpemVfdCB2YWx1ZSAtIHRoZSBwYWdlIHNpemUgKi8KKworICAgIGlmIChsaW1pdCA9PSAwIHx8IGxpbWl0ID4gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZSkgeworICAgICAgICBsaW1pdCA9IE1BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemU7CisgICAgfQorCiAgICAgc2VuZCA9IDA7CiAgICAgc2VudCA9IDA7CiAgICAgY2wgPSBpbjsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5oIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKaW5kZXggMDNkZTk0Ni4uYmU5Y2ViZSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2Vsc2UKICNkZWZpbmUgbmd4X2RlX25hbWVsZW4oZGlyKSAgICAgIG5neF9zdHJsZW4oKGRpciktPmRlLT5kX25hbWUpCiAjZW5kaWYKLSNkZWZpbmUgbmd4X2RlX2luZm8obmFtZSwgZGlyKSAgIHN0YXQoKGNvbnN0IGNoYXIgKikgbmFtZSwgJihkaXIpLT5pbmZvKQorI2RlZmluZSBuZ3hfZGVfaW5mbyhuYW1lLCBkaXIpICAgbHN0YXQoKGNvbnN0IGNoYXIgKikgbmFtZSwgJihkaXIpLT5pbmZvKQogI2RlZmluZSBuZ3hfZGVfaW5mb19uICAgICAgICAgICAgInN0YXQoKSIKICNkZWZpbmUgbmd4X2RlX2lzX2RpcihkaXIpICAgICAgIChTX0lTRElSKChkaXIpLT5pbmZvLnN0X21vZGUpKQogI2RlZmluZSBuZ3hfZGVfaXNfZmlsZShkaXIpICAgICAgKFNfSVNSRUcoKGRpciktPmluZm8uc3RfbW9kZSkpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMKaW5kZXggYjc2ZGMwYy4uMDQ0ZDlkNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYwpAQCAtMjA0LDYgKzIwNCw5IEBACiAgICAgfQogCiAKKyAgICBuZ3hfdGNwX25vZGVsYXlfYW5kX3RjcF9ub3B1c2ggPSAxOworCisKICAgICByZXR1cm4gbmd4X3Bvc2l4X2luaXQobG9nKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKaW5kZXggZjg2ZTFjMC4uMTg3MzY1YyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCkBAIC0zNyw5ICszNyw4IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgICByYzsKICAgICB1X2NoYXIgICAgICAgICAgKnByZXY7Ci0gICAgb2ZmX3QgICAgICAgICAgICBmcHJldiwgc2VudCwgc2VuZCwgc3ByZXYsIGFsaWduZWQ7Ci0gICAgc2l6ZV90ICAgICAgICAgICBoc2l6ZSwgZnNpemU7Ci0gICAgc3NpemVfdCAgICAgICAgICBzaXplOworICAgIG9mZl90ICAgICAgICAgICAgc2l6ZSwgc2VuZCwgcHJldl9zZW5kLCBhbGlnbmVkLCBzZW50LCBmcHJldjsKKyAgICBzaXplX3QgICAgICAgICAgIGhlYWRlcl9zaXplLCBmaWxlX3NpemU7CiAgICAgbmd4X3VpbnRfdCAgICAgICBlaW50ciwgZWFnYWluLCBjb21wbGV0ZTsKICAgICBuZ3hfZXJyX3QgICAgICAgIGVycjsKICAgICBuZ3hfYnVmX3QgICAgICAgKmZpbGU7CkBAIC02Nyw2ICs2NiwxMiBAQAogCiAjZW5kaWYKIAorICAgIC8qIHRoZSBtYXhpbXVtIGxpbWl0IHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZV90IHZhbHVlIC0gdGhlIHBhZ2Ugc2l6ZSAqLworCisgICAgaWYgKGxpbWl0ID09IDAgfHwgbGltaXQgPiBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICB9CisKICAgICBzZW5kID0gMDsKICAgICBlYWdhaW4gPSAwOwogCkBAIC04MiwxMSArODcsMTEgQEAKIAogICAgIGZvciAoIDs7ICkgewogICAgICAgICBmaWxlID0gTlVMTDsKLSAgICAgICAgZnNpemUgPSAwOwotICAgICAgICBoc2l6ZSA9IDA7CisgICAgICAgIGZpbGVfc2l6ZSA9IDA7CisgICAgICAgIGhlYWRlcl9zaXplID0gMDsKICAgICAgICAgZWludHIgPSAwOwogICAgICAgICBjb21wbGV0ZSA9IDA7Ci0gICAgICAgIHNwcmV2ID0gc2VuZDsKKyAgICAgICAgcHJldl9zZW5kID0gc2VuZDsKIAogICAgICAgICBoZWFkZXIubmVsdHMgPSAwOwogICAgICAgICB0cmFpbGVyLm5lbHRzID0gMDsKQEAgLTExNSw3ICsxMjAsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocHJldiA9PSBjbC0+YnVmLT5wb3MpIHsKLSAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gKz0gKHNpemVfdCkgc2l6ZTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoIShpb3YgPSBuZ3hfYXJyYXlfcHVzaCgmaGVhZGVyKSkpIHsKQEAgLTEyMywxMSArMTI4LDExIEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopIGNsLT5idWYtPnBvczsKLSAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gPSBzaXplOworICAgICAgICAgICAgICAgIGlvdi0+aW92X2xlbiA9IChzaXplX3QpIHNpemU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyBzaXplOwotICAgICAgICAgICAgaHNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyAoc2l6ZV90KSBzaXplOworICAgICAgICAgICAgaGVhZGVyX3NpemUgKz0gKHNpemVfdCkgc2l6ZTsKICAgICAgICAgICAgIHNlbmQgKz0gc2l6ZTsKICAgICAgICAgfQogCkBAIC0xMzgsNyArMTQzLDcgQEAKICAgICAgICAgICAgIC8qIGNvYWxlc2NlIHRoZSBuZWlnaGJvdXJpbmcgZmlsZSBidWZzICovCiAKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBzaXplID0gKHNpemVfdCkgKGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKKyAgICAgICAgICAgICAgICBzaXplID0gY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3M7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VuZCArIHNpemUgPiBsaW1pdCkgewogICAgICAgICAgICAgICAgICAgICBzaXplID0gbGltaXQgLSBzZW5kOwpAQCAtMTUxLDcgKzE1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmc2l6ZSArPSBzaXplOworICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSArPSAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIHNlbmQgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICBmcHJldiA9IGNsLT5idWYtPmZpbGVfcG9zICsgc2l6ZTsKICAgICAgICAgICAgICAgICBjbCA9IGNsLT5uZXh0OwpAQCAtMTg5LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHByZXYgPT0gY2wtPmJ1Zi0+cG9zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlvdi0+aW92X2xlbiArPSBzaXplOworICAgICAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gKz0gKHNpemVfdCkgc2l6ZTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGlvdiA9IG5neF9hcnJheV9wdXNoKCZ0cmFpbGVyKSkpIHsKQEAgLTE5NywxMCArMjAyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpb3YtPmlvdl9iYXNlID0gKHZvaWQgKikgY2wtPmJ1Zi0+cG9zOwotICAgICAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gPSBzaXplOworICAgICAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gPSAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyBzaXplOworICAgICAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIHNlbmQgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICBjbCA9IGNsLT5uZXh0OwogICAgICAgICAgICAgfQpAQCAtMjQ1LDEzICsyNTAsMTMgQEAKICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBpZiAobmd4X2ZyZWVic2Rfc2VuZGZpbGVfbmJ5dGVzX2J1ZyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaHNpemUgPSAwOworICAgICAgICAgICAgICAgIGhlYWRlcl9zaXplID0gMDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2VudCA9IDA7CiAKICAgICAgICAgICAgIHJjID0gc2VuZGZpbGUoZmlsZS0+ZmlsZS0+ZmQsIGMtPmZkLCBmaWxlLT5maWxlX3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnNpemUgKyBoc2l6ZSwgJmhkdHIsICZzZW50LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplICsgaGVhZGVyX3NpemUsICZoZHRyLCAmc2VudCwgMCk7CiAKICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkgewogICAgICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKQEAgLTI2NSw4ICsyNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kZmlsZSgpIHNlbnQgb25seSAlTyBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGUoKSBzZW50IG9ubHkgJU8gYnl0ZXMiLCBzZW50KTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwpAQCAtMjkxLDEzICsyOTUsMTMgQEAKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxlOiAlZCwgQCVPICVPOiV1eiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByYywgZmlsZS0+ZmlsZV9wb3MsIHNlbnQsIGZzaXplICsgaHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGZpbGUtPmZpbGVfcG9zLCBzZW50LCBmaWxlX3NpemUgKyBoZWFkZXJfc2l6ZSk7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gd3JpdGV2KGMtPmZkLCBoZWFkZXIuZWx0cywgaGVhZGVyLm5lbHRzKTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRldjogJWQgb2YgJXV6IiwgcmMsIGhzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZXY6ICVkIG9mICV1eiIsIHJjLCBoZWFkZXJfc2l6ZSk7CiAKICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkgewogICAgICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKQEAgLTMyMCw3ICszMjQsNyBAQAogICAgICAgICAgICAgc2VudCA9IHJjID4gMCA/IHJjIDogMDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZW5kIC0gc3ByZXYgPT0gc2VudCkgeworICAgICAgICBpZiAoc2VuZCAtIHByZXZfc2VuZCA9PSBzZW50KSB7CiAgICAgICAgICAgICBjb21wbGV0ZSA9IDE7CiAgICAgICAgIH0KIApAQCAtMzUzLDcgKzM1Nyw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSkgewotICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyArPSBzZW50OworICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyArPSAoc2l6ZV90KSBzZW50OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY2wtPmJ1Zi0+aW5fZmlsZSkgewpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYwppbmRleCBiY2Y5ZDRjLi5jMDlkMDM2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYwpAQCAtMjUsMTEgKzI1LDEwIEBACiBuZ3hfY2hhaW5fdCAqbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICppbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgbGltaXQpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICByYzsKKyAgICBpbnQgICAgICAgICAgICAgIHJjLCB0Y3Bfbm9kZWxheTsKICAgICB1X2NoYXIgICAgICAgICAgKnByZXY7Ci0gICAgb2ZmX3QgICAgICAgICAgICBmcHJldiwgc2VuZCwgc3ByZXYsIGFsaWduZWQ7Ci0gICAgc2l6ZV90ICAgICAgICAgICBmc2l6ZTsKLSAgICBzc2l6ZV90ICAgICAgICAgIHNpemUsIHNlbnQ7CisgICAgb2ZmX3QgICAgICAgICAgICBzaXplLCBzZW5kLCBwcmV2X3NlbmQsIGFsaWduZWQsIHNlbnQsIGZwcmV2OworICAgIHNpemVfdCAgICAgICAgICAgZmlsZV9zaXplOwogICAgIG5neF91aW50X3QgICAgICAgZWludHIsIGNvbXBsZXRlOwogICAgIG5neF9lcnJfdCAgICAgICAgZXJyOwogICAgIG5neF9idWZfdCAgICAgICAqZmlsZTsKQEAgLTQ5LDYgKzQ4LDE0IEBACiAgICAgICAgIHJldHVybiBpbjsKICAgICB9CiAKKworICAgIC8qIHRoZSBtYXhpbXVtIGxpbWl0IHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZV90IHZhbHVlIC0gdGhlIHBhZ2Ugc2l6ZSAqLworCisgICAgaWYgKGxpbWl0ID09IDAgfHwgbGltaXQgPiBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICB9CisKKwogICAgIHNlbmQgPSAwOwogCiAgICAgaGVhZGVyLmVsdHMgPSBoZWFkZXJzOwpAQCAtNTgsMTAgKzY1LDEwIEBACiAKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgZmlsZSA9IE5VTEw7Ci0gICAgICAgIGZzaXplID0gMDsKKyAgICAgICAgZmlsZV9zaXplID0gMDsKICAgICAgICAgZWludHIgPSAwOwogICAgICAgICBjb21wbGV0ZSA9IDA7Ci0gICAgICAgIHNwcmV2ID0gc2VuZDsKKyAgICAgICAgcHJldl9zZW5kID0gc2VuZDsKIAogICAgICAgICBoZWFkZXIubmVsdHMgPSAwOwogCkBAIC04OSw3ICs5Niw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwcmV2ID09IGNsLT5idWYtPnBvcykgewotICAgICAgICAgICAgICAgIGlvdi0+aW92X2xlbiArPSBzaXplOworICAgICAgICAgICAgICAgIGlvdi0+aW92X2xlbiArPSAoc2l6ZV90KSBzaXplOwogCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICghKGlvdiA9IG5neF9hcnJheV9wdXNoKCZoZWFkZXIpKSkgewpAQCAtOTcsMTAgKzEwNCwxMCBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlvdi0+aW92X2Jhc2UgPSAodm9pZCAqKSBjbC0+YnVmLT5wb3M7Ci0gICAgICAgICAgICAgICAgaW92LT5pb3ZfbGVuID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gPSAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcmV2ID0gY2wtPmJ1Zi0+cG9zICsgc2l6ZTsKKyAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgc2VuZCArPSBzaXplOwogICAgICAgICB9CiAKQEAgLTExMSwyNSArMTE4LDYyIEBACiAgICAgICAgICAgICAmJiBjbAogICAgICAgICAgICAgJiYgY2wtPmJ1Zi0+aW5fZmlsZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG5neF90Y3Bfbm9wdXNoKGMtPmZkKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CiAKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIHRoZXJlIGlzIGEgdGlueSBjaGFuY2UgdG8gYmUgaW50ZXJydXB0ZWQsIGhvd2V2ZXIKLSAgICAgICAgICAgICAgICAgKiB3ZSBjb250aW51ZSBhIHByb2Nlc3Npbmcgd2l0aG91dCB0aGUgVENQX0NPUksKLSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHRoZSBUQ1BfQ09SSyBhbmQgVENQX05PREVMQVkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCi0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOR1hfRUlOVFIpIHsgCi0gICAgICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBlcnIsIG5neF90Y3Bfbm9wdXNoX24gIiBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKKyAgICAgICAgICAgIGlmIChjLT50Y3Bfbm9kZWxheSkgeworCisgICAgICAgICAgICAgICAgdGNwX25vZGVsYXkgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoYy0+ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdGNwX25vZGVsYXksIHNpemVvZihpbnQpKSA9PSAtMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiB0aGVyZSBpcyBhIHRpbnkgY2hhbmNlIHRvIGJlIGludGVycnVwdGVkLCBob3dldmVyCisgICAgICAgICAgICAgICAgICAgICAqIHdlIGNvbnRpbnVlIGEgcHJvY2Vzc2luZyB3aXRoIHRoZSBUQ1BfTk9ERUxBWQorICAgICAgICAgICAgICAgICAgICAgKiBhbmQgd2l0aG91dCB0aGUgVENQX0NPUksKKyAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOR1hfRUlOVFIpIHsgCisgICAgICAgICAgICAgICAgICAgICAgICB3ZXYtPmVycm9yID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChUQ1BfTk9ERUxBWSkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjLT50Y3Bfbm9kZWxheSA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyB0Y3Bfbm9kZWxheSIpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfU0VUOworICAgICAgICAgICAgaWYgKCFjLT50Y3Bfbm9kZWxheSkgewogCi0gICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0Y3Bfbm9wdXNoIik7CisgICAgICAgICAgICAgICAgaWYgKG5neF90Y3Bfbm9wdXNoKGMtPmZkKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOworCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIHRoZXJlIGlzIGEgdGlueSBjaGFuY2UgdG8gYmUgaW50ZXJydXB0ZWQsIGhvd2V2ZXIKKyAgICAgICAgICAgICAgICAgICAgICogd2UgY29udGludWUgYSBwcm9jZXNzaW5nIHdpdGhvdXQgdGhlIFRDUF9DT1JLCisgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTkdYX0VJTlRSKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgd2V2LT5lcnJvciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdGNwX25vcHVzaF9uICIgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfU0VUOworICAgIAorICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0Y3Bfbm9wdXNoIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE0MSw3ICsxODUsNyBAQAogICAgICAgICAgICAgLyogY29hbGVzY2UgdGhlIG5laWdoYm91cmluZyBmaWxlIGJ1ZnMgKi8KIAogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHNpemUgPSAoc2l6ZV90KSAoY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3MpOworICAgICAgICAgICAgICAgIHNpemUgPSBjbC0+YnVmLT5maWxlX2xhc3QgLSBjbC0+YnVmLT5maWxlX3BvczsKIAogICAgICAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsaW1pdCAtIHNlbmQ7CkBAIC0xNTQsNyArMTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGZzaXplICs9IHNpemU7CisgICAgICAgICAgICAgICAgZmlsZV9zaXplICs9IChzaXplX3QpIHNpemU7CiAgICAgICAgICAgICAgICAgc2VuZCArPSBzaXplOwogICAgICAgICAgICAgICAgIGZwcmV2ID0gY2wtPmJ1Zi0+ZmlsZV9wb3MgKyBzaXplOwogICAgICAgICAgICAgICAgIGNsID0gY2wtPm5leHQ7CkBAIC0xNzIsNyArMjE2LDcgQEAKICNlbHNlCiAgICAgICAgICAgICBvZmZzZXQgPSAoaW50MzJfdCkgZmlsZS0+ZmlsZV9wb3M7CiAjZW5kaWYKLSAgICAgICAgICAgIHJjID0gc2VuZGZpbGUoYy0+ZmQsIGZpbGUtPmZpbGUtPmZkLCAmb2Zmc2V0LCBmc2l6ZSk7CisgICAgICAgICAgICByYyA9IHNlbmRmaWxlKGMtPmZkLCBmaWxlLT5maWxlLT5mZCwgJm9mZnNldCwgZmlsZV9zaXplKTsKIAogICAgICAgICAgICAgaWYgKHJjID09IC0xKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwpAQCAtMTk1LDggKzIzOSw4IEBACiAgICAgICAgICAgICBzZW50ID0gcmMgPiAwID8gcmMgOiAwOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGU6ICVkLCBAJU8gJXo6JXV6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBmaWxlLT5maWxlX3Bvcywgc2VudCwgZnNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxlOiAlZCwgQCVPICVPOiV1eiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgZmlsZS0+ZmlsZV9wb3MsIHNlbnQsIGZpbGVfc2l6ZSk7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gd3JpdGV2KGMtPmZkLCBoZWFkZXIuZWx0cywgaGVhZGVyLm5lbHRzKTsKQEAgLTIyMSwxMCArMjY1LDEwIEBACiAKICAgICAgICAgICAgIHNlbnQgPSByYyA+IDAgPyByYyA6IDA7CiAKLSAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIndyaXRldjogJXoiLCBzZW50KTsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIndyaXRldjogJU8iLCBzZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZW5kIC0gc3ByZXYgPT0gc2VudCkgeworICAgICAgICBpZiAoc2VuZCAtIHByZXZfc2VuZCA9PSBzZW50KSB7CiAgICAgICAgICAgICBjb21wbGV0ZSA9IDE7CiAgICAgICAgIH0KIApAQCAtMjU3LDcgKzMwMSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSkgewotICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyArPSBzZW50OworICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyArPSAoc2l6ZV90KSBzZW50OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY2wtPmJ1Zi0+aW5fZmlsZSkgewpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X29zLmggYi9zcmMvb3MvdW5peC9uZ3hfb3MuaAppbmRleCBlZTkxZGYzLi40MmZjODg2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfb3MuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfb3MuaApAQCAtNTAsNyArNTAsOCBAQAogZXh0ZXJuIG5neF9vc19pb190ICBuZ3hfb3NfaW87CiBleHRlcm4gbmd4X2ludF90ICAgIG5neF9uY3B1OwogZXh0ZXJuIG5neF9pbnRfdCAgICBuZ3hfbWF4X3NvY2tldHM7Ci1leHRlcm4gbmd4X2ludF90ICAgIG5neF9pbmhlcml0ZWRfbm9uYmxvY2tpbmc7CitleHRlcm4gbmd4X3VpbnRfdCAgIG5neF9pbmhlcml0ZWRfbm9uYmxvY2tpbmc7CitleHRlcm4gbmd4X3VpbnRfdCAgIG5neF90Y3Bfbm9kZWxheV9hbmRfdGNwX25vcHVzaDsKIAogI2RlZmluZSBuZ3hfc3RkZXJyX2ZpbGVubyAgU1RERVJSX0ZJTEVOTwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwppbmRleCA1NmJlMGNlLi42MjZkODIxIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKQEAgLTgsOSArOCwxMCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotbmd4X2ludF90ICBuZ3hfbmNwdTsKLW5neF9pbnRfdCAgbmd4X21heF9zb2NrZXRzOwotbmd4X2ludF90ICBuZ3hfaW5oZXJpdGVkX25vbmJsb2NraW5nOworbmd4X2ludF90ICAgbmd4X25jcHU7CituZ3hfaW50X3QgICBuZ3hfbWF4X3NvY2tldHM7CituZ3hfdWludF90ICBuZ3hfaW5oZXJpdGVkX25vbmJsb2NraW5nOworbmd4X3VpbnRfdCAgbmd4X3RjcF9ub2RlbGF5X2FuZF90Y3Bfbm9wdXNoOwogCiAKIHN0cnVjdCBybGltaXQgIHJsbXQ7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCAzZDFjNTFiLi5jM2I5OTA1IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTE3LDcgKzE3LDcgQEAKIHN0YXRpYyBuZ3hfdWludF90IG5neF9yZWFwX2NoaWxkcyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIHZvaWQgbmd4X21hc3Rlcl9leGl0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCBuZ3hfd29ya2VyX3Byb2Nlc3NfY3ljbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIG5neF93b3JrZXJfcHJvY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgdm9pZCBuZ3hfd29ya2VyX3Byb2Nlc3NfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF91aW50X3QgcHJpb3JpdHkpOwogc3RhdGljIHZvaWQgbmd4X2NoYW5uZWxfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogI2lmIChOR1hfVEhSRUFEUykKIHN0YXRpYyB2b2lkIG5neF93YWtldXBfd29ya2VyX3RocmVhZHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKQEAgLTU2NCw2ICs1NjQsMzMgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCisKKyAgICAgICAgICAgICAgICBjaC5jb21tYW5kID0gTkdYX0NNRF9PUEVOX0NIQU5ORUw7CisgICAgICAgICAgICAgICAgY2gucGlkID0gbmd4X3Byb2Nlc3Nlc1tuZ3hfcHJvY2Vzc19zbG90XS5waWQ7CisgICAgICAgICAgICAgICAgY2guc2xvdCA9IG5neF9wcm9jZXNzX3Nsb3Q7CisgICAgICAgICAgICAgICAgY2guZmQgPSBuZ3hfcHJvY2Vzc2VzW25neF9wcm9jZXNzX3Nsb3RdLmNoYW5uZWxbMF07CisKKyAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbmd4X2xhc3RfcHJvY2VzczsgbisrKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT0gbmd4X3Byb2Nlc3Nfc2xvdAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbmd4X3Byb2Nlc3Nlc1tuXS5waWQgPT0gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5neF9wcm9jZXNzZXNbbl0uY2hhbm5lbFswXSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNihOR1hfTE9HX0RFQlVHX0NPUkUsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzIGNoYW5uZWwgczolZCBwaWQ6JVAgZmQ6JWQgdG8gczolaSBwaWQ6JVAgZmQ6JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaC5zbG90LCBjaC5waWQsIGNoLmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBuZ3hfcHJvY2Vzc2VzW25dLnBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tuXS5jaGFubmVsWzBdKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBOR1hfQUdBSU4gKi8KKworICAgICAgICAgICAgICAgICAgICBuZ3hfd3JpdGVfY2hhbm5lbChuZ3hfcHJvY2Vzc2VzW25dLmNoYW5uZWxbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaCwgc2l6ZW9mKG5neF9jaGFubmVsX3QpLCBjeWNsZS0+bG9nKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBsaXZlID0gMTsKIAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjExLDcgKzYzOCw3IEBACiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKICAgICBuZ3hfY29yZV9jb25mX3QgICAqY2NmOwogCi0gICAgbmd4X3dvcmtlcl9wcm9jZXNzX2luaXQoY3ljbGUpOworICAgIG5neF93b3JrZXJfcHJvY2Vzc19pbml0KGN5Y2xlLCAxKTsKIAogICAgIG5neF9zZXRwcm9jdGl0bGUoIndvcmtlciBwcm9jZXNzIik7CiAKQEAgLTcxOCw3ICs3NDUsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5neF93b3JrZXJfcHJvY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK3N0YXRpYyB2b2lkIG5neF93b3JrZXJfcHJvY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpbnRfdCBwcmlvcml0eSkKIHsKICAgICBzaWdzZXRfdCAgICAgICAgICAgc2V0OwogICAgIG5neF9pbnRfdCAgICAgICAgICBuOwpAQCAtNzM5LDYgKzc2NiwxMyBAQAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKIAogICAgIGlmIChnZXRldWlkKCkgPT0gMCkgeworICAgICAgICBpZiAocHJpb3JpdHkgJiYgY2NmLT5wcmlvcml0eSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCAwLCBjY2YtPnByaW9yaXR5KSA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHByaW9yaXR5KCVkKSBmYWlsZWQiLCBjY2YtPnByaW9yaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGlmIChzZXRnaWQoY2NmLT5ncm91cCkgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0Z2lkKCVkKSBmYWlsZWQiLCBjY2YtPmdyb3VwKTsKQEAgLTc0Niw2ICs3ODAsMTIgQEAKICAgICAgICAgICAgIGV4aXQoMik7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoaW5pdGdyb3VwcyhjY2YtPnVzZXJuYW1lLCBjY2YtPmdyb3VwKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0Z3JvdXBzKCVzLCAlZCkgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2NmLT51c2VybmFtZSwgY2NmLT5ncm91cCk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoc2V0dWlkKGNjZi0+dXNlcikgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0dWlkKCVkKSBmYWlsZWQiLCBjY2YtPnVzZXIpOwpAQCAtMTA0MSw3ICsxMDgxLDcgQEAKICAgICBuZ3hfcGF0aF90ICAgICAgICoqcGF0aDsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAqZXY7CiAKLSAgICBuZ3hfd29ya2VyX3Byb2Nlc3NfaW5pdChjeWNsZSk7CisgICAgbmd4X3dvcmtlcl9wcm9jZXNzX2luaXQoY3ljbGUsIDApOwogCiAgICAgZXYgPSAmY3ljbGUtPnJlYWRfZXZlbnRzW25neF9jaGFubmVsXTsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwppbmRleCAyMWY4YjhmLi40Yzg3M2FhIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwpAQCAtOSw2ICs5LDI4IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorI2lmIChOR1hfVEVTVF9CVUlMRF9TT0xBUklTX1NFTkRGSUxFVikKKworLyogU29sYXJpcyBkZWNsYXJhdGlvbnMgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2VuZGZpbGV2ZWMgeworICAgIGludCAgICAgc2Z2X2ZkOworICAgIHVfaW50ICAgc2Z2X2ZsYWc7CisgICAgb2ZmX3QgICBzZnZfb2ZmOworICAgIHNpemVfdCAgc2Z2X2xlbjsKK30gc2VuZGZpbGV2ZWNfdDsKKworI2RlZmluZSBTRlZfRkRfU0VMRiAgLTIKKworc3RhdGljIHNzaXplX3Qgc2VuZGZpbGV2KGludCBmZCwgY29uc3Qgc3RydWN0IHNlbmRmaWxldmVjICp2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNmdmNudCwgc2l6ZV90ICp4ZmVycmVkKQoreworICAgIHJldHVybiAtMTsKK30KKworI2VuZGlmCisKKwogI2RlZmluZSBOR1hfU0VOREZJTEVWRUNTICAgMTYKIAogCkBAIC0xNyw4ICszOSw5IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIGZkOwogICAgIHVfY2hhciAgICAgICAgICpwcmV2OwotICAgIG9mZl90ICAgICAgICAgICBmcHJldiwgc3ByZXYsIHNlbmQsIGFsaWduZWQ7Ci0gICAgc3NpemVfdCAgICAgICAgIHNpemUsIHNlbnQsIG47CisgICAgb2ZmX3QgICAgICAgICAgIHNpemUsIHNlbmQsIHByZXZfc2VuZCwgYWxpZ25lZCwgZnByZXY7CisgICAgc2l6ZV90ICAgICAgICAgIHNlbnQ7CisgICAgc3NpemVfdCAgICAgICAgIG47CiAgICAgbmd4X2ludF90ICAgICAgIGVpbnRyLCBjb21wbGV0ZTsKICAgICBuZ3hfZXJyX3QgICAgICAgZXJyOwogICAgIHNlbmRmaWxldmVjX3QgICpzZnYsIHNmdnNbTkdYX1NFTkRGSUxFVkVDU107CkBAIC0zNiw2ICs1OSwxNCBAQAogICAgICAgICByZXR1cm4gbmd4X3dyaXRldl9jaGFpbihjLCBpbiwgbGltaXQpOwogICAgIH0KIAorCisgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgLSB0aGUgcGFnZSBzaXplICovCisKKyAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE1BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKKyAgICAgICAgbGltaXQgPSBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOworICAgIH0KKworCiAgICAgc2VuZCA9IDA7CiAgICAgY29tcGxldGUgPSAwOwogCkBAIC01MSw3ICs4Miw3IEBACiAgICAgICAgIHNmdiA9IE5VTEw7CiAgICAgICAgIGVpbnRyID0gMDsKICAgICAgICAgc2VudCA9IDA7Ci0gICAgICAgIHNwcmV2ID0gc2VuZDsKKyAgICAgICAgcHJldl9zZW5kID0gc2VuZDsKIAogICAgICAgICB2ZWMubmVsdHMgPSAwOwogCkBAIC03Myw3ICsxMDQsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChwcmV2ID09IGNsLT5idWYtPnBvcykgewotICAgICAgICAgICAgICAgICAgICBzZnYtPnNmdl9sZW4gKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfbGVuICs9IChzaXplX3QpIHNpemU7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoIShzZnYgPSBuZ3hfYXJyYXlfcHVzaCgmdmVjKSkpIHsKQEAgLTgzLDE2ICsxMTQsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfZmQgPSBTRlZfRkRfU0VMRjsKICAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIHNmdi0+c2Z2X29mZiA9IChvZmZfdCkgKHVpbnRwdHJfdCkgY2wtPmJ1Zi0+cG9zOwotICAgICAgICAgICAgICAgICAgICBzZnYtPnNmdl9sZW4gPSBzaXplOworICAgICAgICAgICAgICAgICAgICBzZnYtPnNmdl9sZW4gPSAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyBzaXplOworICAgICAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5wb3MgKyAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIHNlbmQgKz0gc2l6ZTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwcmV2ID0gTlVMTDsKIAotICAgICAgICAgICAgICAgIHNpemUgPSAoc2l6ZV90KSAoY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3MpOworICAgICAgICAgICAgICAgIHNpemUgPSBjbC0+YnVmLT5maWxlX2xhc3QgLSBjbC0+YnVmLT5maWxlX3BvczsKIAogICAgICAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsaW1pdCAtIHNlbmQ7CkBAIC0xMDYsNyArMTM3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoZmQgPT0gY2wtPmJ1Zi0+ZmlsZS0+ZmQgJiYgZnByZXYgPT0gY2wtPmJ1Zi0+ZmlsZV9wb3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfbGVuICs9IHNpemU7CisgICAgICAgICAgICAgICAgICAgIHNmdi0+c2Z2X2xlbiArPSAoc2l6ZV90KSBzaXplOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoc2Z2ID0gbmd4X2FycmF5X3B1c2goJnZlYykpKSB7CkBAIC0xMTcsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfZmQgPSBmZDsKICAgICAgICAgICAgICAgICAgICAgc2Z2LT5zZnZfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIHNmdi0+c2Z2X29mZiA9IGNsLT5idWYtPmZpbGVfcG9zOwotICAgICAgICAgICAgICAgICAgICBzZnYtPnNmdl9sZW4gPSBzaXplOworICAgICAgICAgICAgICAgICAgICBzZnYtPnNmdl9sZW4gPSAoc2l6ZV90KSBzaXplOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZwcmV2ID0gY2wtPmJ1Zi0+ZmlsZV9wb3MgKyBzaXplOwpAQCAtMTM2LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGV2KCkgc2VudCBvbmx5ICV6IGJ5dGVzIiwgc2VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGV2KCkgc2VudCBvbmx5ICV1eiBieXRlcyIsIHNlbnQpOwogCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwpAQCAtMTQ4LDcgKzE3OSw3IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxldjogJXogJXoiLCBuLCBzZW50KTsKIAotICAgICAgICBpZiAoc2VuZCAtIHNwcmV2ID09IHNlbnQpIHsKKyAgICAgICAgaWYgKHNlbmQgLSBwcmV2X3NlbmQgPT0gKG9mZl90KSBzZW50KSB7CiAgICAgICAgICAgICBjb21wbGV0ZSA9IDE7CiAgICAgICAgIH0KIApAQCAtMTY2LDggKzE5Nyw4IEBACiAKICAgICAgICAgICAgIHNpemUgPSBuZ3hfYnVmX3NpemUoY2wtPmJ1Zik7CiAKLSAgICAgICAgICAgIGlmIChzZW50ID49IHNpemUpIHsKLSAgICAgICAgICAgICAgICBzZW50IC09IHNpemU7CisgICAgICAgICAgICBpZiAoKG9mZl90KSBzZW50ID49IHNpemUpIHsKKyAgICAgICAgICAgICAgICBzZW50ID0gKHNpemVfdCkgKChvZmZfdCkgc2VudCAtIHNpemUpOwogCiAgICAgICAgICAgICAgICAgaWYgKG5neF9idWZfaW5fbWVtb3J5KGNsLT5idWYpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyA9IGNsLT5idWYtPmxhc3Q7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKaW5kZXggMmFmNjQ2OS4uOGYxMDg3YiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwpAQCAtMTYsNyArMTYsNyBAQAogewogICAgIHVfY2hhciAgICAgICAgKnByZXY7CiAgICAgc3NpemVfdCAgICAgICAgbiwgc2l6ZSwgc2VudDsKLSAgICBvZmZfdCAgICAgICAgICBzZW5kLCBzcHJldjsKKyAgICBvZmZfdCAgICAgICAgICBzZW5kLCBwcmV2X3NlbmQ7CiAgICAgbmd4X3VpbnRfdCAgICAgZWludHIsIGNvbXBsZXRlOwogICAgIG5neF9lcnJfdCAgICAgIGVycjsKICAgICBuZ3hfYXJyYXlfdCAgICB2ZWM7CkBAIC00Miw2ICs0MiwxMiBAQAogCiAjZW5kaWYKIAorICAgIC8qIHRoZSBtYXhpbXVtIGxpbWl0IHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZV90IHZhbHVlIC0gdGhlIHBhZ2Ugc2l6ZSAqLworCisgICAgaWYgKGxpbWl0ID09IDAgfHwgbGltaXQgPiBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICB9CisKICAgICBzZW5kID0gMDsKICAgICBjb21wbGV0ZSA9IDA7CiAKQEAgLTU0LDcgKzYwLDcgQEAKICAgICAgICAgcHJldiA9IE5VTEw7CiAgICAgICAgIGlvdiA9IE5VTEw7CiAgICAgICAgIGVpbnRyID0gMDsKLSAgICAgICAgc3ByZXYgPSBzZW5kOworICAgICAgICBwcmV2X3NlbmQgPSBzZW5kOwogCiAgICAgICAgIHZlYy5uZWx0cyA9IDA7CiAKQEAgLTExOCw3ICsxMjQsNyBAQAogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIndyaXRldjogJXoiLCBzZW50KTsKIAotICAgICAgICBpZiAoc2VuZCAtIHNwcmV2ID09IHNlbnQpIHsKKyAgICAgICAgaWYgKHNlbmQgLSBwcmV2X3NlbmQgPT0gc2VudCkgewogICAgICAgICAgICAgY29tcGxldGUgPSAxOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uYyBiL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uYwppbmRleCA4ZTkyODBkLi4yNjhlZDUyIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9lcnJuby5jCkBAIC00Myw3ICs0MywxMSBAQAogICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDM5ICovCiAgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDAgKi8KICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0MSAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQyICovCisKKyAgICAvKiBXU0FFTk9QUk9UT09QVCAxMDA0MiAqLworICAgIG5neF9zdHJpbmcoIkFuIHVua25vd24sIGludmFsaWQsIG9yIHVuc3VwcG9ydGVkIG9wdGlvbiBvciBsZXZlbCB3YXMgIgorICAgICAgICAgICAgICAgInNwZWNpZmllZCBpbiBhIGdldHNvY2tvcHQgb3Igc2V0c29ja29wdCBjYWxsIiksCisKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0MyAqLwogICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQ0ICovCiAgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDUgKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfb3MuaCBiL3NyYy9vcy93aW4zMi9uZ3hfb3MuaAppbmRleCA2ZDcyMGZhLi42MTFmN2VmIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X29zLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9vcy5oCkBAIC00OCw2ICs0OCw3IEBACiBleHRlcm4gbmd4X3VpbnRfdCAgIG5neF9tYXhfd3NhYnVmczsKIGV4dGVybiBuZ3hfaW50X3QgICAgbmd4X21heF9zb2NrZXRzOwogZXh0ZXJuIG5neF91aW50X3QgICBuZ3hfaW5oZXJpdGVkX25vbmJsb2NraW5nOworZXh0ZXJuIG5neF91aW50X3QgICBuZ3hfdGNwX25vZGVsYXlfYW5kX3RjcF9ub3B1c2g7CiBleHRlcm4gbmd4X3VpbnRfdCAgIG5neF93aW4zMl92ZXJzaW9uOwogZXh0ZXJuIG5neF9mZF90ICAgICBuZ3hfc3RkZXJyX2ZpbGVubzsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaCBiL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKaW5kZXggYzc3MDNjMi4uNzljZWEzZiAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCkBAIC0xNDEsNSArMTQxLDEwIEBACiAjZGVmaW5lIE5HWF9IQVZFX1NFTkRGSUxFICAxCiAjZW5kaWYKIAorI2lmbmRlZiBOR1hfSEFWRV9TT19TTkRMT1dBVAorLyogc2V0c29ja29wdChTT19TTkRMT1dBVCkgcmV0dXJucyBlcnJvciBXU0FFTk9QUk9UT09QVCAqLworI2RlZmluZSBOR1hfSEFWRV9TT19TTkRMT1dBVCAgICAgICAgIDAKKyNlbmRpZgorCiAKICNlbmRpZiAvKiBfTkdYX1dJTjMyX0NPTkZJR19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9pbml0LmMgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYwppbmRleCBjYjhjOTMxLi4yYjg4OTEzIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYworKysgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYwpAQCAtMTMsNiArMTMsOCBAQAogbmd4X3VpbnRfdCAgbmd4X21heF93c2FidWZzOwogbmd4X2ludF90ICAgbmd4X21heF9zb2NrZXRzOwogbmd4X3VpbnRfdCAgbmd4X2luaGVyaXRlZF9ub25ibG9ja2luZyA9IDE7CituZ3hfdWludF90ICBuZ3hfdGNwX25vZGVsYXlfYW5kX3RjcF9ub3B1c2g7CisKIG5neF9mZF90ICAgIG5neF9zdGRlcnJfZmlsZW5vOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jIGIvc3JjL29zL3dpbjMyL25neF93c2FzZW5kX2NoYWluLmMKaW5kZXggMWQ3NWUwOS4uZDViMTMzNCAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF93c2FzZW5kX2NoYWluLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF93c2FzZW5kX2NoYWluLmMKQEAgLTE3LDcgKzE3LDcgQEAKIHsKICAgICBpbnQgICAgICAgICAgIHJjOwogICAgIHVfY2hhciAgICAgICAqcHJldjsKLSAgICB1X2xvbmcgICAgICAgIHNpemUsIHNlbnQsIHNlbmQsIHNwcmV2OworICAgIHVfbG9uZyAgICAgICAgc2l6ZSwgc2VudCwgc2VuZCwgcHJldl9zZW5kOwogICAgIG5neF91aW50X3QgICAgY29tcGxldGU7CiAgICAgbmd4X2Vycl90ICAgICBlcnI7CiAgICAgbmd4X2V2ZW50X3QgICp3ZXY7CkBAIC0zMiw2ICszMiwxMiBAQAogICAgICAgICByZXR1cm4gaW47CiAgICAgfQogCisgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSB1X2xvbmcgdmFsdWUgLSB0aGUgcGFnZSBzaXplICovCisKKyAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE5HWF9NQVhfVUlOVDMyX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTkdYX01BWF9VSU5UMzJfVkFMVUUgLSBuZ3hfcGFnZXNpemU7CisgICAgfQorCiAgICAgc2VuZCA9IDA7CiAgICAgY29tcGxldGUgPSAwOwogCkBAIC00OCw3ICs1NCw3IEBACiAgICAgZm9yICggOzsgKSB7CiAgICAgICAgIHByZXYgPSBOVUxMOwogICAgICAgICB3c2FidWYgPSBOVUxMOwotICAgICAgICBzcHJldiA9IHNlbmQ7CisgICAgICAgIHByZXZfc2VuZCA9IHNlbmQ7CiAKICAgICAgICAgdmVjLm5lbHRzID0gMDsKIApAQCAtMTA1LDcgKzExMSw3IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIldTQVNlbmQ6IGZkOiVkLCBzOiV1bCIsIGMtPmZkLCBzZW50KTsKIAotICAgICAgICBpZiAoc2VuZCAtIHNwcmV2ID09IHNlbnQpIHsKKyAgICAgICAgaWYgKHNlbmQgLSBwcmV2X3NlbmQgPT0gc2VudCkgewogICAgICAgICAgICAgY29tcGxldGUgPSAxOwogICAgICAgICB9CiAKQEAgLTE1Myw4ICsxNTksNyBAQAogewogICAgIGludCAgICAgICAgICAgICAgIHJjOwogICAgIHVfY2hhciAgICAgICAgICAgKnByZXY7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgc2l6ZTsKLSAgICB1X2xvbmcgICAgICAgICAgICBzZW5kLCBzZW50OworICAgIHVfbG9uZyAgICAgICAgICAgIHNpemUsIHNlbmQsIHNlbnQ7CiAgICAgTFBXU0FCVUYgICAgICAgICAgd3NhYnVmOwogICAgIG5neF9lcnJfdCAgICAgICAgIGVycjsKICAgICBuZ3hfZXZlbnRfdCAgICAgICp3ZXY7CkBAIC0xNzUsNiArMTgwLDEyIEBACiAgICAgaWYgKCF3ZXYtPmNvbXBsZXRlKSB7CiAKICAgICAgICAgLyogcG9zdCB0aGUgb3ZlcmxhcHBlZCBXU0FTZW5kKCkgKi8KKworICAgICAgICAvKiB0aGUgbWF4aW11bSBsaW1pdCBzaXplIGlzIHRoZSBtYXhpbXVtIHVfbG9uZyB2YWx1ZSAtIHRoZSBwYWdlIHNpemUgKi8KKworICAgICAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE5HWF9NQVhfVUlOVDMyX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgICAgICBsaW1pdCA9IE5HWF9NQVhfVUlOVDMyX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOworICAgICAgICB9CiAgCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdTQUJVRnMgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCBvdGhlcndpc2UK