ZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggYjgyYTE3ZC4uZjU4ZjU4MCAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTkwLDkgKzkwLDExIEBACiBDRkxBR1M9IiRDRkxBR1MgLXdkMTQxOCIKICMgZXh0ZXJuYWwgZGVjbGFyYXRpb24gaW4gcHJpbWFyeSBzb3VyY2UgZmlsZQogQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE0MTkiCisjIGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZQorQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE2ODMiCiAKIGNhc2UgIiROR1hfSUNDX1ZFUiIgaW4KLSAgICA4LiopCisgICAgOC4qIHwgOS4qKQogICAgICAgICAjICJjYyIgY2xvYmJlciBpZ25vcmVkLCB3YXJuaW5ncyBmb3IgTGl1bngncyBodG9ucygpCiAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNDY5IgogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IGY2MzFiMjAuLjI2YTU4NjkgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDEyICs5LDg3IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjIuNiIgZGF0ZT0iMDUuMTAuMjAwNSI+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9MgNjAgxM8gMTAg08XL1c7EINXNxc7Y28XOzyDX0sXN0SDQz9fUz9LOz8fPIM/C0sHdxc7J0SDLIMLcy8XOxNUKK9DSySDJ09DPzNjaz9fBzsnJINLB09DSxcTFzMXOydEgzsHH0tXay8kuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit3aGlsZSB1c2luZyBsb2FkLWJhbGFuY2luZyB0aGUgdGltZSBiZWZvcmUgdGhlIGZhaWxlZCBiYWNrZW5kIHJldHJ5Cit3YXMgZGVjcmVhc2VkIGZyb20gNjAgdG8gMTAgc2Vjb25kcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgcHJveHlfcGFzc191bnBhcnNlZF91cmkg1dDSwdrEzsXOwSwgz9LJx8nOwczYztnKINrB0NLP0yDUxdDF0tgKK9DF0sXEwaPU09EsIMXTzMkg1yDEydLFy9TJ18UgcHJveHlfcGFzcyDP1NPV1NPU19XF1CBVUkkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInByb3h5X3Bhc3NfdW5wYXJzZWRfdXJpIiB3YXMgY2FuY2VsZWQsIHRoZSBvcmlnaW5hbCBVUkkgbm93IHBhc3NlZCwKK2lmIHRoZSBVUkkgcGFydCBpcyBvbWl0dGVkIGluICJwcm94eV9wYXNzIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBlcnJvcl9wYWdlINDPxMTF0tbJ18HF1CDSxcTJ0sXL1NkgySDQz9rXz8zRxdQgws/MxcUgx8nCy88KK83FztHU2CDLz8Qgz9vJwsvJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJlcnJvcl9wYWdlIiBkaXJlY3RpdmUgc3VwcG9ydHMgcmVkaXJlY3RzIGFuZCBhbGxvd3MgbW9yZSBmbGV4aWJsZQordG8gY2hhbmdlIGFuIGVycm9yIGNvZGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgor1yDQ0s/L08nSz9fBzs7ZyCDQz8TawdDSz9PByCDUxdDF0tggycfOz9LJ0tXF1NPRINDF0sXEwc7O2cogY2hhcnNldC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBjaGFyc2V0IGluIHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIgbGluZSBub3cgaXMgaWdub3JlZAoraW4gcHJveGllZCBzdWJyZXF1ZXN0cy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINDP08zFIMnazcXOxc7J0SBVUkkg1yDCzM/LxSBpZiDEzNEg2sHQ0s/TwSDOxSDOwcjPxMnMwdPYCivOz9fB0SDLz87GycfV0sHDydEsINTPINDSwdfJzMEgzc/E1czRIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlINfZ0M/MztHMydPYCivTzs/XwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSBVUkkgd2FzIGNoYW5nZWQgaW4gdGhlICJpZiIgYmxvY2sgYW5kIHJlcXVlc3QgZGlkIG5vdCBmb3VuZAorbmV3IGNvbmZpZ3VyYXRpb24sIHRoZW4gdGhlIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlIHJ1bGVzIHJhbiBhZ2Fpbi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJIMTJ0sXL1MnXwSBzZXQg1dPUwc7B18zJ18HMwSDQxdLFzcXOztXAIM3PxNXM0SBuZ3hfaHR0cF9nZW9fbW9kdWxlCivXIMvBy8/KLczJws8g3sHT1Mkgy8/OxsnH1dLBw8nJLCDUzyDc1MEg0MXSxc3Fzs7B0SDOxSDC2czBIMTP09TV0M7BINcKK8TS1cfJyCDewdPU0cggy8/OxsnH1dLBw8nJIMkg19nEwdfBzMHT2CDP28nCy8EgInVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMi4yLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgdGhlICJzZXQiIGRpcmVjdGl2ZSBzZXQgdGhlIG5neF9odHRwX2dlb19tb2R1bGUgdmFyaWFibGUgaW4gc29tZQorY29uZmlndXJhdGlvbiBwYXJ0LCB0aGUgdGhpcyB2YXJpYWJsZSB3YXMgbm90IGF2YWlsYWJsZSBpbiBvdGhlcgorY29uZmlndXJhdGlvbiBwYXJ0cyBhbmQgdGhlICJ1c2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIiBlcnJvciB3YXMgb2NjdXJyZWQ7CitidWcgYXBwZWFyZWQgaW4gMC4yLjIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4yLjUiIGRhdGU9IjA0LjEwLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+CiA8cGFyYSBsYW5nPSJydSI+CiDE1cLMydLVwN3FxSDazsHexc7JxSDQxdLFzcXOzs/KIM3PxNXM0SBuZ3hfaHR0cF9nZW9fbW9kdWxlINTF0MXS2Aot19nEwaPUINDSxcTV0NLF1sTFzsnFIMkgydrNxc7Ro9Qg09TB0s/FINrOwd7FzsnFLgor19nEwaPUINDSxcTV0NLF1sTFzsnFIMkgydrNxc7RxdQg09TB0s/FINrOwd7FzsnFLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogdGhlIGR1cGxpY2F0ZSB2YWx1ZSBvZiB0aGUgbmd4X2h0dHBfZ2VvX21vZHVsZSB2YXJpYWJsZSBub3cgY2F1c2VzCkBAIC00Nyw3ICsxMjIsNyBAQAogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogdGhlIG5neF9odHRwX3NzaV9tb2R1bGUgc3VwcG9ydHMgdGhlIHZhcmlhYmxlIHZhbHVlIHN1YnN0aXR1dGlvbnMgaW4KLWVweGlyZXNzaW9ucyBvZiB0aGUgImlmIiBjb21tYW5kLgorZXhwcmVzc2lvbnMgb2YgdGhlICJpZiIgY29tbWFuZC4KIDwvcGFyYT4KIDwvY2hhbmdlPgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBiMzZlOTQ0Li43OGU3MzE5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjIuNSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjIuNiIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfaW5ldC5jIGIvc3JjL2NvcmUvbmd4X2luZXQuYwppbmRleCA3YjJkOGQ2Li4zNzZhYWFlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfaW5ldC5jCisrKyBiL3NyYy9jb3JlL25neF9pbmV0LmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCiAgICAgICAgICAgICBwZWVycy0+cGVlcltpXS53ZWlnaHQgPSAxOwogICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0ubWF4X2ZhaWxzID0gMTsKLSAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLmZhaWxfdGltZW91dCA9IDYwOworICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0gMTA7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CkBAIC00NzEsNyArNDcxLDggQEAKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh1LT5wb3J0X3RleHQubGVuID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAibm8gVVJJIjsKKyAgICAgICAgICAgIHUtPmRlZmF1bHRfcG9ydCA9IDE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIHBvcnQgPSBuZ3hfYXRvaSh1LT5wb3J0X3RleHQuZGF0YSwgdS0+cG9ydF90ZXh0Lmxlbik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfdW5peF9kb21haW4uYyBiL3NyYy9jb3JlL25neF91bml4X2RvbWFpbi5jCmluZGV4IDA5N2QxMTEuLjEyZmZhZWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF91bml4X2RvbWFpbi5jCisrKyBiL3NyYy9jb3JlL25neF91bml4X2RvbWFpbi5jCkBAIC0zNCwxMyArMzQsNiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHUtPnVyaS5sZW4gPT0gMCkgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdW5peCBkb21haW4gdXBzdHJlYW0gXCIlVlwiIGhhcyBubyBVUkkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1LT5uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGxlbiA9PSAwKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwppbmRleCAyZWMxMzhmLi41MWYxMTViIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKQEAgLTE2Miw3ICsxNjIsOCBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotICAgIGlmIChuZ3hfc3Ryc3RyKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLCAiY2hhcnNldCIpICE9IE5VTEwpCisgICAgaWYgKHItPm1haW4gPT0gcgorICAgICAgICAmJiBuZ3hfc3Ryc3RyKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLCAiY2hhcnNldCIpICE9IE5VTEwpCiAgICAgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwppbmRleCA5YjMxN2Y5Li5jNTQxODA3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCkBAIC0xNDgsMTEgKzE0OCw2IEBACiAgICAgbmd4X3N0cmluZygiZmFzdGNnaV9zY3JpcHRfbmFtZSIpOwogCiAKLSNpZiAoTkdYX1BDUkUpCi1zdGF0aWMgbmd4X3N0cl90IG5neF9odHRwX2Zhc3RjZ2lfdXJpID0gbmd4X3N0cmluZygiLyIpOwotI2VuZGlmCi0KLQogc3RhdGljIG5neF9jb25mX3Bvc3RfdCAgbmd4X2h0dHBfZmFzdGNnaV9sb3dhdF9wb3N0ID0KICAgICB7IG5neF9odHRwX2Zhc3RjZ2lfbG93YXRfY2hlY2sgfTsKIApAQCAtMTQ0OCw3ICsxNDQzLDYgQEAKICAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7IAogICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCi0gICAgY29uZi0+dXBzdHJlYW0ucGFzc191bnBhcnNlZF91cmkgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT51cHN0cmVhbS5tZXRob2QgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9oZWFkZXJzID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHkgPSBOR1hfQ09ORl9VTlNFVDsKQEAgLTE2MDIsMTYgKzE1OTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfRkFTVENHSV9URU1QX1BBVEgsIDEsIDIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfdGVtcF9oYW5kbGVyLCBjZik7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpLCAwKTsKLQotICAgIGlmIChjb25mLT51cHN0cmVhbS5wYXNzX3VucGFyc2VkX3VyaSAmJiBjb25mLT51cHN0cmVhbS5sb2NhdGlvbi0+bGVuID4gMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIlwiZmFzdGNnaV9wYXNzX3VucGFyc2VkX3VyaVwiIGNhbiBiZSBzZXQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24gXCIvXCIgb3IgZ2l2ZW4gYnkgcmVndWxhciBleHByZXNzaW9uLiIpOwotICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgfQotCiAgICAgaWYgKGNvbmYtPnVwc3RyZWFtLm1ldGhvZCA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CiAgICAgICAgIGNvbmYtPnVwc3RyZWFtLm1ldGhvZCA9IHByZXYtPnVwc3RyZWFtLm1ldGhvZDsgCiAgICAgfQpAQCAtMTgxMiw2ICsxNzk2LDEwIEBACiAgICAgbmd4X3VuaXhfZG9tYWluX3Vwc3RyZWFtX3QgICB1bml4X3Vwc3RyZWFtOwogI2VuZGlmCiAKKyAgICBpZiAobGNmLT51cHN0cmVhbS5zY2hlbWEubGVuKSB7CisgICAgICAgIHJldHVybiAiaXMgZHVwbGljYXRlIjsKKyAgICB9CisKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwogCiAgICAgaWYgKG5neF9zdHJuY2FzZWNtcCh2YWx1ZVsxXS5kYXRhLCAidW5peDoiLCA1KSA9PSAwKSB7CkBAIC0xODI4LDYgKzE4MTYsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKKyAgICAgICAgbGNmLT5wZWVycy0+cGVlclswXS51cmlfc2VwYXJhdG9yID0gIiI7CisKICNlbHNlCiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdW5peCBkb21haW4gc29ja2V0cyBhcmUgbm90IHN1cHBvcnRlZCAiCkBAIC0xODUwLDE4ICsxODQwLDEyIEBACiAKICAgICBsY2YtPnVwc3RyZWFtLnNjaGVtYS5sZW4gPSBzaXplb2YoImZhc3RjZ2k6Ly8iKSAtIDE7CiAgICAgbGNmLT51cHN0cmVhbS5zY2hlbWEuZGF0YSA9ICh1X2NoYXIgKikgImZhc3RjZ2k6Ly8iOwotICAgIGxjZi0+dXBzdHJlYW0udXJpLmxlbiA9IHNpemVvZigiLyIpIC0gMTsKLSAgICBsY2YtPnVwc3RyZWFtLnVyaS5kYXRhID0gKHVfY2hhciAqKSAiLyI7CiAKICAgICBjbGNmID0gbmd4X2h0dHBfY29uZl9nZXRfbW9kdWxlX2xvY19jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICBjbGNmLT5oYW5kbGVyID0gbmd4X2h0dHBfZmFzdGNnaV9oYW5kbGVyOwogCi0jaWYgKE5HWF9QQ1JFKQotICAgIGxjZi0+dXBzdHJlYW0ubG9jYXRpb24gPSBjbGNmLT5yZWdleCA/ICZuZ3hfaHR0cF9mYXN0Y2dpX3VyaSA6ICZjbGNmLT5uYW1lOwotI2Vsc2UKICAgICBsY2YtPnVwc3RyZWFtLmxvY2F0aW9uID0gJmNsY2YtPm5hbWU7Ci0jZW5kaWYKIAogICAgIGlmIChjbGNmLT5uYW1lLmRhdGFbY2xjZi0+bmFtZS5sZW4gLSAxXSA9PSAnLycpIHsKICAgICAgICAgY2xjZi0+YXV0b19yZWRpcmVjdCA9IDE7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCBmZDQxMDE3Li5lMWVlN2I0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTE1OSwxMyArMTU5LDYgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycyksCiAgICAgICBOVUxMIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInByb3h5X3Bhc3NfdW5wYXJzZWRfdXJpIiksCi0gICAgICBOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAotICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKLSAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpKSwKLSAgICAgIE5VTEwgfSwKLQogICAgIHsgbmd4X3N0cmluZygicHJveHlfc2V0X2hlYWRlciIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UyLAogICAgICAgbmd4X2NvbmZfc2V0X3RhYmxlX2VsdF9zbG90LApAQCAtMzQyLDExICszMzUsNiBAQAogfTsKIAogCi0jaWYgKE5HWF9QQ1JFKQotc3RhdGljIG5neF9zdHJfdCBuZ3hfaHR0cF9wcm94eV91cmkgPSBuZ3hfc3RyaW5nKCIvIik7Ci0jZW5kaWYKLQotCiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9wcm94eV9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsgICAKQEAgLTQzMiw3ICs0MjAsNyBAQAogCiAgICAgbG9jX2xlbiA9IHItPnZhbGlkX2xvY2F0aW9uID8gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiA6IDA7CiAKLSAgICBpZiAocGxjZi0+dXBzdHJlYW0ucGFzc191bnBhcnNlZF91cmkgJiYgci0+dmFsaWRfdW5wYXJzZWRfdXJpKSB7CisgICAgaWYgKHUtPmNvbmYtPnVyaS5sZW4gPT0gMCAmJiByLT52YWxpZF91bnBhcnNlZF91cmkpIHsKICAgICAgICAgbGVuICs9IHItPnVucGFyc2VkX3VyaS5sZW47CiAKICAgICB9IGVsc2UgewpAQCAtNTE0LDExICs1MDIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+bWV0aG9kX25hbWUubGVuICsgMSk7CiAgICAgfQogCi0gICAgaWYgKHBsY2YtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpICYmIHItPnZhbGlkX3VucGFyc2VkX3VyaSkgeworICAgIHUtPnVyaS5kYXRhID0gYi0+bGFzdDsKKworICAgIGlmICh1LT5jb25mLT51cmkubGVuID09IDAgJiYgci0+dmFsaWRfdW5wYXJzZWRfdXJpKSB7CiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnVucGFyc2VkX3VyaS5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51bnBhcnNlZF91cmkubGVuKTsKICAgICB9IGVsc2UgewotICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCB1LT5jb25mLT51cmkuZGF0YSwgdS0+Y29uZi0+dXJpLmxlbik7CisgICAgICAgIGlmIChyLT52YWxpZF9sb2NhdGlvbikgeworICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdS0+Y29uZi0+dXJpLmRhdGEsIHUtPmNvbmYtPnVyaS5sZW4pOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGVzY2FwZSkgewogICAgICAgICAgICAgbmd4X2VzY2FwZV91cmkoYi0+bGFzdCwgci0+dXJpLmRhdGEgKyBsb2NfbGVuLApAQCAtNTM2LDYgKzUyOCw4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1LT51cmkubGVuID0gYi0+bGFzdCAtIHUtPnVyaS5kYXRhOworCiAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgbmd4X2h0dHBfcHJveHlfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfcHJveHlfdmVyc2lvbikgLSAxKTsKIApAQCAtMTMxMiw3ICsxMzA2LDYgQEAKICAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7ICAKICAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAotICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+dXBzdHJlYW0ubWV0aG9kID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKICAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfaGVhZGVycyA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5ID0gTkdYX0NPTkZfVU5TRVQ7CkBAIC0xNDY3LDE2ICsxNDYwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX1BST1hZX1RFTVBfUEFUSCwgMSwgMiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9nYXJiYWdlX2NvbGxlY3Rvcl90ZW1wX2hhbmRsZXIsIGNmKTsKIAotICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucGFzc191bnBhcnNlZF91cmksIDApOwotCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpICYmIGNvbmYtPnVwc3RyZWFtLmxvY2F0aW9uLT5sZW4gPiAxKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9wYXNzX3VucGFyc2VkX3VyaVwiIGNhbiBiZSBzZXQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24gXCIvXCIgb3IgZ2l2ZW4gYnkgcmVndWxhciBleHByZXNzaW9uLiIpOwotICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgfQotCiAgICAgaWYgKGNvbmYtPnVwc3RyZWFtLm1ldGhvZCA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CiAgICAgICAgIGNvbmYtPnVwc3RyZWFtLm1ldGhvZCA9IHByZXYtPnVwc3RyZWFtLm1ldGhvZDsKICAgICB9CkBAIC0xNzU5LDcgKzE3NDIsNiBAQAogewogICAgIG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QgKnBsY2YgPSBjb25mOwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAqdmFsdWUsICp1cmw7CiAgICAgbmd4X2luZXRfdXBzdHJlYW1fdCAgICAgICAgICBpbmV0X3Vwc3RyZWFtOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAqY2xjZjsKQEAgLTE3NjcsNiArMTc0OSwxMCBAQAogICAgIG5neF91bml4X2RvbWFpbl91cHN0cmVhbV90ICAgdW5peF91cHN0cmVhbTsKICNlbmRpZgogCisgICAgaWYgKHBsY2YtPnVwc3RyZWFtLnNjaGVtYS5sZW4pIHsKKyAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOworICAgIH0KKwogICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CiAKICAgICB1cmwgPSAmdmFsdWVbMV07CkBAIC0xNzkyLDggKzE3NzgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgcGxjZi0+cGVlcnMtPnBlZXJbMF0udXJpX3NlcGFyYXRvciA9ICI6IjsKLQogICAgICAgICBwbGNmLT5ob3N0X2hlYWRlci5sZW4gPSBzaXplb2YoImxvY2FsaG9zdCIpIC0gMTsKICAgICAgICAgcGxjZi0+aG9zdF9oZWFkZXIuZGF0YSA9ICh1X2NoYXIgKikgImxvY2FsaG9zdCI7CiAgICAgICAgIHBsY2YtPnVwc3RyZWFtLnVyaSA9IHVuaXhfdXBzdHJlYW0udXJpOwpAQCAtMTgyMCwxMCArMTgwNCw2IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGxjZi0+cGVlcnMtPm51bWJlcjsgaSsrKSB7Ci0gICAgICAgICAgICBwbGNmLT5wZWVycy0+cGVlcltpXS51cmlfc2VwYXJhdG9yID0gIiI7Ci0gICAgICAgIH0KLQogICAgICAgICBwbGNmLT5ob3N0X2hlYWRlciA9IGluZXRfdXBzdHJlYW0uaG9zdF9oZWFkZXI7CiAgICAgICAgIHBsY2YtPnBvcnRfdGV4dCA9IGluZXRfdXBzdHJlYW0ucG9ydF90ZXh0OwogICAgICAgICBwbGNmLT51cHN0cmVhbS51cmkgPSBpbmV0X3Vwc3RyZWFtLnVyaTsKQEAgLTE4MzYsMTAgKzE4MTYsMTcgQEAKIAogICAgIGNsY2YtPmhhbmRsZXIgPSBuZ3hfaHR0cF9wcm94eV9oYW5kbGVyOwogCi0jaWYgKE5HWF9QQ1JFKQotICAgIHBsY2YtPnVwc3RyZWFtLmxvY2F0aW9uID0gY2xjZi0+cmVnZXggPyAmbmd4X2h0dHBfcHJveHlfdXJpIDogJmNsY2YtPm5hbWU7Ci0jZWxzZQogICAgIHBsY2YtPnVwc3RyZWFtLmxvY2F0aW9uID0gJmNsY2YtPm5hbWU7CisKKyNpZiAoTkdYX1BDUkUpCisKKyAgICBpZiAoY2xjZi0+cmVnZXggJiYgcGxjZi0+dXBzdHJlYW0udXJpLmxlbikgeworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9wYXNzXCIgbWF5IG5vdCBoYXZlIFVSSSBwYXJ0IGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiBnaXZlbiBieSByZWd1bGFyIGV4cHJlc3Npb24iKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKwogI2VuZGlmCiAKICAgICBwbGNmLT51cHN0cmVhbS51cmwgPSAqdXJsOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCmluZGV4IDY5MzQ5NWUuLmM1NzVkNDMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogCiAgICAgaWYgKHBjbGNmLT5sb2NhdGlvbnMuZWx0cyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmcGNsY2YtPmxvY2F0aW9ucywgY2YtPnBvb2wsIDQsIHNpemVvZih2b2lkICopKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KQEAgLTc1OSw2ICs3NTksMTAgQEAKICAgICBpZl9jb2RlLT5uZXh0ID0gKHVfY2hhciAqKSBsY2YtPmNvZGVzLT5lbHRzICsgbGNmLT5jb2Rlcy0+bmVsdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKHVfY2hhciAqKSBpZl9jb2RlOwogCisgICAgLyogdGhlIGNvZGUgYXJyYXkgYmVsb25nIHRvIHBhcmVudCBibG9jayAqLworCisgICAgbmxjZi0+Y29kZXMgPSBOVUxMOworCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQogCkBAIC0xMDQ4LDggKzEwNTIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIHYtPmhhbmRsZXIgPSBuZ3hfaHR0cF9yZXdyaXRlX3ZhcjsKLSAgICB2LT5kYXRhID0gaW5kZXg7CisgICAgaWYgKHYtPmhhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICB2LT5oYW5kbGVyID0gbmd4X2h0dHBfcmV3cml0ZV92YXI7CisgICAgICAgIHYtPmRhdGEgPSBpbmRleDsKKyAgICB9CiAKICAgICBuID0gbmd4X2h0dHBfc2NyaXB0X3ZhcmlhYmxlc19jb3VudCgmdmFsdWVbMl0pOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBjMDdlMzY3Li4wNjQzYTg3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTYyNiw2ICs2MjYsMTEgQEAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX05PVF9GT1VORDsKICAgICB9CiAKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAidXNpbmcgY29uZmlndXJhdGlvbiBcIiVzJVZcIiIsCisgICAgICAgICAgICAgICAgICAgKGNsY2YtPm5vbmFtZSA/ICIqIiA6IChjbGNmLT5leGFjdF9tYXRjaCA/ICI9IiA6ICIiKSksCisgICAgICAgICAgICAgICAgICAgJmNsY2YtPm5hbWUpOworCiAgICAgbmd4X2h0dHBfdXBkYXRlX2xvY2F0aW9uX2NvbmZpZyhyKTsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLApAQCAtNzA4LDcgKzcxMyw4IEBACiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgaSwgZm91bmQsIG5vcmVnZXg7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZiwgKipjbGNmcDsKIAotICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLCAiZmluZCBsb2NhdGlvbiIpOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJmaW5kIGxvY2F0aW9uIGZvciBcIiVWXCIiLCAmci0+dXJpKTsKIAogICAgIGZvdW5kID0gMDsKICAgICBub3JlZ2V4ID0gMDsKQEAgLTkwNyw3ICs5MTMsNyBAQAogbmd4X2ludF90CiBuZ3hfaHR0cF9zZW5kX2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgaWYgKHItPmVycl9jdHgpIHsKKyAgICBpZiAoci0+ZXJyX3N0YXR1cykgewogICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSByLT5lcnJfc3RhdHVzOwogICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5sZW4gPSAwOwogICAgIH0KQEAgLTIyMzcsMTggKzIyNDMsMjMgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIG92ZXJ3cml0ZSA9IG5neF9hdG9pKCZ2YWx1ZVtpXS5kYXRhWzFdLCB2YWx1ZVtpXS5sZW4gLSAxKTsKKyAgICAgICAgaWYgKHZhbHVlW2ldLmxlbiA+IDEpIHsKKyAgICAgICAgICAgIG92ZXJ3cml0ZSA9IG5neF9hdG9pKCZ2YWx1ZVtpXS5kYXRhWzFdLCB2YWx1ZVtpXS5sZW4gLSAxKTsKIAotICAgICAgICBpZiAob3ZlcndyaXRlID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIFwiJVZcIiIsICZ2YWx1ZVtpXSk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICBpZiAob3ZlcndyaXRlID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlW2ldKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG92ZXJ3cml0ZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICBuID0gMjsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIG92ZXJ3cml0ZSA9IDA7CisgICAgICAgIG92ZXJ3cml0ZSA9IC0xOwogICAgICAgICBuID0gMTsKICAgICB9CiAKQEAgLTIyNzMsNyArMjI4NCw4IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBlcnItPm92ZXJ3cml0ZSA9IG92ZXJ3cml0ZTsKKyAgICAgICAgZXJyLT5vdmVyd3JpdGUgPSAob3ZlcndyaXRlID49IDApID8gb3ZlcndyaXRlIDogZXJyLT5zdGF0dXM7CisKICAgICAgICAgZXJyLT51cmkgPSB2YWx1ZVtjZi0+YXJncy0+bmVsdHMgLSAxXTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwppbmRleCBiZTIzZDZkLi41YTFmM2M0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCkBAIC0yODMsMTggKzI4MywzMSBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xjZi0+ZXJyb3JfcGFnZXMtPm5lbHRzOyBpKyspIHsKIAogICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLnN0YXR1cyA9PSBlcnJvcikgewotCi0gICAgICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLm92ZXJ3cml0ZSkgewotICAgICAgICAgICAgICAgICAgICByLT5lcnJfc3RhdHVzID0gZXJyX3BhZ2VbaV0ub3ZlcndyaXRlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHItPmVycl9zdGF0dXMgPSBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICByLT5lcnJfc3RhdHVzID0gZXJyX3BhZ2VbaV0ub3ZlcndyaXRlOwogICAgICAgICAgICAgICAgIHItPmVycl9jdHggPSByLT5jdHg7CiAKICAgICAgICAgICAgICAgICByLT5tZXRob2QgPSBOR1hfSFRUUF9HRVQ7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJmVycl9wYWdlW2ldLnVyaSwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLnVyaS5kYXRhWzBdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJmVycl9wYWdlW2ldLnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKKworICAgICAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5sb2NhdGlvbikgeworICAgICAgICAgICAgICAgICAgICByLT5lcnJfc3RhdHVzID0gTkdYX0hUVFBfTU9WRURfVEVNUE9SQVJJTFk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gTkdYX0hUVFBfTU9WRURfVEVNUE9SQVJJTFk7CisKKyAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmhhc2ggPSAxOworICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+a2V5LmxlbiA9IHNpemVvZigiTG9jYXRpb24iKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5rZXkuZGF0YSA9ICh1X2NoYXIgKikgIkxvY2F0aW9uIjsKKyAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlID0gZXJyX3BhZ2VbaV0udXJpOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggNjQ3ZDlkMi4uZGQzMmY2MyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0xNzkzLDggKzE3OTMsNiBAQAogbmd4X2h0dHBfdXBzdHJlYW1fbG9nX2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAqcDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBsaW5lOwotICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgIGVzY2FwZTsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAgICp1OwogICAgIG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAgKnBlZXI7CiAKQEAgLTE4MDksNjIgKzE4MDcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICZ1LT5jb25mLT5zY2hlbWEsCiAgICAgICAgICAgICAgICAgICAgICAmcGVlci0+cGVlcnMtPnBlZXJbcGVlci0+Y3VyX3BlZXJdLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBwZWVyLT5wZWVycy0+cGVlcltwZWVyLT5jdXJfcGVlcl0udXJpX3NlcGFyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICZ1LT5jb25mLT51cmkpOworICAgICAgICAgICAgICAgICAgICAgJnUtPnVyaSk7CiAgICAgbGVuIC09IHAgLSBidWY7CiAgICAgYnVmID0gcDsKIAotICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7Ci0gICAgICAgIGVzY2FwZSA9IDIgKiBuZ3hfZXNjYXBlX3VyaShOVUxMLCByLT51cmkuZGF0YSArIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9FU0NBUEVfVVJJKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlc2NhcGUgPSAwOwotICAgIH0KLQotICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgaWYgKGxlbiA+PSByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSkgewotCi0gICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShidWYsIHItPnVyaS5kYXRhICsgdS0+Y29uZi0+bG9jYXRpb24tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5jb25mLT5sb2NhdGlvbi0+bGVuLCBOR1hfRVNDQVBFX1VSSSk7Ci0KLSAgICAgICAgICAgIGJ1ZiArPSByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKLSAgICAgICAgICAgIGxlbiAtPSByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5jb25mLT5sb2NhdGlvbi0+bGVuICsgZXNjYXBlKTsKLSAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShwLCByLT51cmkuZGF0YSArIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiwgTkdYX0VTQ0FQRV9VUkkpOwotCi0gICAgICAgICAgICBsaW5lLmxlbiA9IGxlbjsKLSAgICAgICAgICAgIGxpbmUuZGF0YSA9IHA7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIlViIsICZsaW5lKTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbGluZS5sZW4gPSByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbjsKLSAgICAgICAgaWYgKGxpbmUubGVuID4gbGVuKSB7Ci0gICAgICAgICAgICBsaW5lLmxlbiA9IGxlbjsKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmUuZGF0YSA9IHItPnVyaS5kYXRhICsgdS0+Y29uZi0+bG9jYXRpb24tPmxlbjsKLSAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIiVWIiwgJmxpbmUpOwotCi0gICAgICAgIGxlbiAtPSBwIC0gYnVmOwotICAgICAgICBidWYgPSBwOwotICAgIH0KLQotICAgIGlmIChyLT5hcmdzLmxlbikgewotICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiPyVWIiwgJnItPmFyZ3MpOwotICAgICAgICBsZW4gLT0gcCAtIGJ1ZjsKLSAgICAgICAgYnVmID0gcDsKLSAgICB9Ci0KICAgICByZXR1cm4gbmd4X2h0dHBfbG9nX2Vycm9yX2luZm8ociwgYnVmLCBsZW4pOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaAppbmRleCBhMzhmNjViLi42ZDk2NzM3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKQEAgLTcwLDcgKzcwLDYgQEAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgIHBhc3NfcmVxdWVzdF9ib2R5OwogCiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdF9lcnJvcnM7Ci0gICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICBwYXNzX3VucGFyc2VkX3VyaTsKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgIGN5Y2xpY190ZW1wX2ZpbGU7CiAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgIHBhc3NfeF9wb3dlcmVkX2J5OwpAQCAtMTY0LDYgKzE2Myw4IEBACiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc3RhdGVfdCAgICAgICpzdGF0ZTsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgIHN0YXRlczsgIC8qIG9mIG5neF9odHRwX3Vwc3RyZWFtX3N0YXRlX3QgKi8KIAorICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgdXJpOworCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBjYWNoYWJsZToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgYWNjZWw6MTsKIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCmluZGV4IDU3MWNkMjcuLjNjYWZhNmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKQEAgLTEwNjgsNyArMTA2OCw2IEBACiB7ICAgCiAgICAgbmd4X2ltYXBfYXV0aF9odHRwX2NvbmZfdCAqYWhjZiA9IGNvbmY7CiAKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgKnVybDsKICAgICBuZ3hfaW5ldF91cHN0cmVhbV90ICAgICAgICAgIGluZXRfdXBzdHJlYW07CiAjaWYgKE5HWF9IQVZFX1VOSVhfRE9NQUlOKQpAQCAtMTA5NCw4ICsxMDkzLDYgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGFoY2YtPnBlZXJzLT5wZWVyWzBdLnVyaV9zZXBhcmF0b3IgPSAiOiI7Ci0KICAgICAgICAgYWhjZi0+aG9zdF9oZWFkZXIubGVuID0gc2l6ZW9mKCJsb2NhbGhvc3QiKSAtIDE7CiAgICAgICAgIGFoY2YtPmhvc3RfaGVhZGVyLmRhdGEgPSAodV9jaGFyICopICJsb2NhbGhvc3QiOwogICAgICAgICBhaGNmLT51cmkgPSB1bml4X3Vwc3RyZWFtLnVyaTsKQEAgLTExMjEsMTMgKzExMTgsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhaGNmLT5wZWVycy0+bnVtYmVyOyBpKyspIHsKLSAgICAgICAgICAgIGFoY2YtPnBlZXJzLT5wZWVyW2ldLnVyaV9zZXBhcmF0b3IgPSAiIjsKLSAgICAgICAgfQotCiAgICAgICAgIGFoY2YtPmhvc3RfaGVhZGVyID0gaW5ldF91cHN0cmVhbS5ob3N0X2hlYWRlcjsKICAgICAgICAgYWhjZi0+dXJpID0gaW5ldF91cHN0cmVhbS51cmk7CiAgICAgfQogCisgICAgaWYgKGFoY2YtPnVyaS5sZW4pIHsKKyAgICAgICAgYWhjZi0+dXJpLmxlbiA9IHNpemVvZigiLyIpIC0gMTsKKyAgICAgICAgYWhjZi0+dXJpLmRhdGEgPSAodV9jaGFyICopICIvIjsKKyAgICB9CisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKaW5kZXggNmQ1MTZhYy4uOWJhZWIxZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CiAKICAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGxpbWl0IC0gc2VuZDsKKyAgICAgICAgICAgICAgICBzaXplID0gKHNzaXplX3QpIGxpbWl0IC0gc2VuZDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHByZXYgPT0gY2wtPmJ1Zi0+cG9zKSB7Cg==