ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYjA0YWE5My4uMDQ2MGM5MyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw1NSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjI5IiBkYXRlPSIyMC4wMi4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9TF0MXS2CBuZ2lueCDJ09DPzNja1cXUIM3FztjbxSDQwc3R1MksIMXTzMkgUEhQINcg0sXWyc3FIEZhc3RDR0kg0MXSxcTBo9QKK8LPzNjbz8Ugy8/Myd7F09TXzyDQ0sXE1dDSxdbExc7JyiDQxdLFxCDP1NfF1M/NLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IG5naW54IHVzZXMgbGVzcyBtZW1vcnksIGlmIFBIUCBpbiBGYXN0Q0dJIG1vZGUgc2VuZHMgbWFueSB3YXJuaW5ncworYmVmb3JlIHRoZSByZXNwb25zZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivXIM/U18XUwcggMjA0IMTM0SDawdDSz9PP1yDXxdLTyckgSFRUUC8xLjEg19nEwdfBzMHT2CDT1NLPy8Eg2sHHz8zP18vBCisiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgaGVhZGVyIGxpbmUgd2FzIGlzc3VlZCBpbiB0aGUgMjA0IHJlc3BvbnNlcworZm9yIHRoZSBIVFRQLzEuMSByZXF1ZXN0cy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDXz9rX0sHdwcwgNTAyIMvPxCDP1NfF1MEsIMXTzMkgRmFzdENHSSDTxdLXxdIg0MXSxcTB18HMINDPzM7ZxSDT1NLPy8kKK9rBx8/Mz9fLwSDP1NfF1MEg1yDP1MTFzNjO2cggRmFzdENHSSDawdDJ09HILgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmdpbnggcmV0dXJuZWQgdGhlIDUwMiByZXNwb25zZSwgaWYgdGhlIGNvbXBsZXRlIHJlc3BvbnNlIGhlYWRlciBsaW5lcword2VyZSB0cmFuc2ZlcnJlZCBpbiBhIHNlcGFyYXRlIEZhc3RDR0kgcmVjb3Jkcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINcgxMnSxcvUydfFIHBvc3RfYWN0aW9uIMLZzCDVy8Hawc4g0NLPy9PJ0tXFzdnKIFVSSSwg1M8gz84g19nQz8zO0czT0Qor1M/M2MvPINDP08zFINXT0MXbzs/HzyDawdfF0tvFzsnRINrB0NLP08EuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgcHJveGllZCBVUkkgd2FzIHNwZWNpZmllZCBpbiB0aGUgInBvc3RfYWN0aW9uIiBkaXJlY3RpdmUsIHRoZW4gaXQgcmFuCitvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgcmVxdWVzdC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjMuMjgiIGRhdGU9IjE2LjAyLjIwMDYiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggNWFkYjQ3ZC4uMDFjZTFiZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjI4IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yOSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwppbmRleCA4NzVjNDVkLi5hNzk1MDc1IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKQEAgLTI2NCw4ICsyNjQsNyBAQAogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0IG11dGV4IGxvY2tlZCIpOwogCi0gICAgICAgIGlmIChuZ3hfYWNjZXB0X211dGV4X2hlbGQgJiYgIShuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX1JUU0lHX0VWRU5UKSkKLSAgICAgICAgeworICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkICYmICEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9SVFNJR19FVkVOVCkpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggODljNGEwNC4uZDhkMTIwOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jCkBAIC01MCw3ICs1MCwxMCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfY2h1bmtlZF9oZWFkZXJfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX05PVF9NT0RJRklFRCB8fCByICE9IHItPm1haW4pIHsKKyAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX05PVF9NT0RJRklFRAorICAgICAgICB8fCByLT5oZWFkZXJzX291dC5zdGF0dXMgPT0gTkdYX0hUVFBfTk9fQ09OVEVOVAorICAgICAgICB8fCByICE9IHItPm1haW4pCisgICAgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDQ1YjZlNzMuLjk3OGMzMjUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGhlYWRlcjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBmYXN0Y2dpX3N0ZG91dDsKIH0gbmd4X2h0dHBfZmFzdGNnaV9jdHhfdDsKIAogCkBAIC03NzYsNyArNzc2LDcgQEAKICAgICB9CiAKICAgICBmLT5zdGF0ZSA9IG5neF9odHRwX2Zhc3RjZ2lfc3RfdmVyc2lvbjsKLSAgICBmLT5oZWFkZXIgPSAwOworICAgIGYtPmZhc3RjZ2lfc3Rkb3V0ID0gMDsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC04NzYsMTMgKzg3Niw2IEBACiAKICAgICAgICAgaWYgKGYtPnR5cGUgPT0gTkdYX0hUVFBfRkFTVENHSV9TVERFUlIpIHsKIAotICAgICAgICAgICAgaWYgKGYtPmhlYWRlcikgewotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNwbGl0IGEgaGVhZGVyIGluIEZhc3RDR0kgcmVjb3JkcyIpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1VQU1RSRUFNX0lOVkFMSURfSEVBREVSOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoZi0+bGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgbGluZS5kYXRhID0gdS0+YnVmZmVyLnBvczsKIApAQCAtOTEwLDYgKzkwMywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhc3RDR0kgc2VudCBpbiBzdGRlcnI6IFwiJVZcIiIsICZsaW5lKTsKIAogICAgICAgICAgICAgICAgIGlmICh1LT5idWZmZXIucG9zID09IHUtPmJ1ZmZlci5sYXN0KSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmLT5mYXN0Y2dpX3N0ZG91dCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHNwZWNpYWwgaGFuZGxpbmcgdGhlIGxhcmdlIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIFBIUCB3YXJuaW5ncyB0byBub3QgYWxsb2NhdGUgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgdS0+YnVmZmVyLnBvcyA9IHUtPmJ1ZmZlci5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUtPmJ1ZmZlci5sYXN0ID0gdS0+YnVmZmVyLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTkyMyw2ICs5MjgsOCBAQAogCiAgICAgICAgIC8qIGYtPnR5cGUgPT0gTkdYX0hUVFBfRkFTVENHSV9TVERPVVQgKi8KIAorICAgICAgICBmLT5mYXN0Y2dpX3N0ZG91dCA9IDE7CisKICAgICAgICAgc3RhcnQgPSB1LT5idWZmZXIucG9zOwogCiAgICAgICAgIGlmICh1LT5idWZmZXIucG9zICsgZi0+bGVuZ3RoIDwgdS0+YnVmZmVyLmxhc3QpIHsKQEAgLTkzOSw4ICs5NDYsNiBAQAogICAgICAgICAgICAgbGFzdCA9IE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBmLT5oZWFkZXIgPSAxOwotCiAgICAgICAgIGZvciAoIDs7ICkgewogCiAgICAgICAgICAgICByYyA9IG5neF9odHRwX3BhcnNlX2hlYWRlcl9saW5lKHIsICZ1LT5idWZmZXIpOwpAQCAtOTkxLDcgKzk5NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGZhc3RjZ2kgaGVhZGVyOiBcIiVWOiAlVlwiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaC0+a2V5LCAmaC0+dmFsdWUpOwogCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHUtPmJ1ZmZlci5wb3MgPCB1LT5idWZmZXIubGFzdCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiB0aGUgZW5kIG9mIHRoZSBGYXN0Q0dJIHJlY29yZCAqLworCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9QQVJTRV9IRUFERVJfRE9ORSkgewpAQCAtMTA0NSwxNyArMTA1Niw2IEBACiAKICAgICAgICAgZi0+bGVuZ3RoIC09IHUtPmJ1ZmZlci5wb3MgLSBzdGFydDsKIAotICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICBpZiAodS0+YnVmZmVyLnBvcyA9PSB1LT5idWZmZXIubGFzdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gc3BsaXQgYSBoZWFkZXIgaW4gRmFzdENHSSByZWNvcmRzIik7Ci0KLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChmLT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgaWYgKGYtPnBhZGRpbmcpIHsKICAgICAgICAgICAgICAgICBmLT5zdGF0ZSA9IG5neF9odHRwX2Zhc3RjZ2lfc3RfcGFkZGluZzsKQEAgLTEwNjQsNyArMTA2NCwyMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgaWYgKHJjID09IE5HWF9IVFRQX1BBUlNFX0hFQURFUl9ET05FKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHUtPmJ1ZmZlci5wb3MgPT0gdS0+YnVmZmVyLmxhc3QpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgICAgIH0KKworICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNwbGl0IGEgaGVhZGVyIGxpbmUgaW4gRmFzdENHSSByZWNvcmRzIik7CisKKyAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKKyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IGI5NzUxNWMuLjM0OGM4NGIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTEzOTYsNyArMTM5Niw2IEBACiAgICAgICAgIHx8IHJjID09IE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQKICAgICAgICAgfHwgci0+Y29ubmVjdGlvbi0+ZXJyb3IpCiAgICAgewotCiAgICAgICAgIGlmIChuZ3hfaHR0cF9wb3N0X2FjdGlvbihyKSA9PSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggY2I1NTI4My4uZTczYjNiMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0yODMsOCArMjgzLDEyIEBACiAgICAgICAgIG5neF9kZWxfdGltZXIoYy0+cmVhZCk7CiAgICAgfQogCi0gICAgci0+cmVhZF9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfdXBzdHJlYW1fcmRfY2hlY2tfYnJva2VuX2Nvbm5lY3Rpb247Ci0gICAgci0+d3JpdGVfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3Vwc3RyZWFtX3dyX2NoZWNrX2Jyb2tlbl9jb25uZWN0aW9uOworICAgIGlmICghKHItPmh0dHBfdmVyc2lvbiA9PSBOR1hfSFRUUF9WRVJTSU9OXzkgJiYgci0+aGVhZGVyX29ubHkpKSB7CisgICAgICAgIC8qIG5vdCBhIHBvc3RfYWN0aW9uICovCisKKyAgICAgICAgci0+cmVhZF9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfdXBzdHJlYW1fcmRfY2hlY2tfYnJva2VuX2Nvbm5lY3Rpb247CisgICAgICAgIHItPndyaXRlX2V2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF91cHN0cmVhbV93cl9jaGVja19icm9rZW5fY29ubmVjdGlvbjsKKyAgICB9CiAKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9DTEVBUl9FVkVOVCkgewogCg==