ZGlmZiAtLWdpdCBhL0NoYW5nZXMgYi9DaGFuZ2VzCmluZGV4IDYzODE4NjYuLjFlODg1YWIgMTAwNjQ0Ci0tLSBhL0NoYW5nZXMKKysrIGIvQ2hhbmdlcwpAQCAtMSwzICsxLDI0IEBACitSZWxlYXNlIDIuMC4xIFR1ZSBKdW5lIDUgMjAwNworICAgICAgICAtIEZpeGVkIGJ1Z3MgIzE1MTUyNjYsIDE1MTU2MDA6IFRoZSBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyJ3MgY2FsbGluZworICAgICAgICAgIG9mIFhNTF9TdG9wUGFyc2VyKCkgd2FzIG5vdCBoYW5kbGVkIHByb3Blcmx5OyBpZiB0aGUgcGFyc2VyIHdhcworICAgICAgICAgIHN0b3BwZWQgYW5kIHRoZSBoYW5kbGVyIHNldCB0byBOVUxMLCB0aGUgcGFyc2VyIHdvdWxkIHNlZ2ZhdWx0LgorICAgICAgICAtIEZpeGVkIGJ1ZyAjMTY5MDg4MzogRXhwYXQgZmFpbGVkIG9uIEVCQ0RJQyBzeXN0ZW1zIGFzIGl0IGFzc3VtZWQKKyAgICAgICAgICBzb21lIGNoYXJhY3RlciBjb25zdGFudHMgdG8gYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgLSBNaW5vciBjbGVhbnVwcyBvZiB0aGUgdGVzdCBoYXJuZXNzLgorICAgICAgICAtIEZpeGVkIHhtbHdmIGJ1ZyAjMTUxMzU2NjogIm91dCBvZiBtZW1vcnkiIGVycm9yIG9uIGZpbGUgc2l6ZSB6ZXJvLgorICAgICAgICAtIEZpeGVkIG91dGxpbmUuYyBidWcgIzE1NDMyMzM6IG1pc3NpbmcgYSBmaW5hbCBYTUxfUGFyc2VyRnJlZSgpIGNhbGwuCisgICAgICAgIC0gRml4ZXMgYW5kIGltcHJvdmVtZW50cyBmb3IgV2luZG93cyBwbGF0Zm9ybToKKyAgICAgICAgICBidWdzICMxNDA5NDUxLCAjMTQ3NjE2MCwgMTU0ODE4MiwgMTYwMjc2OSwgMTcxNzMyMi4KKyAgICAgICAgLSBCdWlsZCBmaXhlcyBmb3IgdmFyaW91cyBwbGF0Zm9ybXM6CisgICAgICAgICAgSFAtVVgsIFRydTY0LCBTb2xhcmlzIDk6IHBhdGNoICMxNDM3ODQwLCBidWcgIzExOTYxODAuCisgICAgICAgICAgQWxsIFVuaXg6ICMxNTU0NjE4IChyZWZyZXNoZWQgY29uZmlnLnN1Yi9jb25maWcuZ3Vlc3MpLgorICAgICAgICAgICAgICAgICAgICAjMTQ5MDM3MSwgIzE2MTM0NTc6IHN1cHBvcnQgYm90aCwgREVTVERJUiBhbmQgSU5TVEFMTF9ST09ULAorICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHJlbHlpbmcgb24gR05VLU1ha2Ugc3BlY2lmaWMgZmVhdHVyZXMuCisgICAgICAgICAgIzE2NDc4MDU6IFBhdGNoZWQgY29uZmlndXJlLmluIHRvIHdvcmsgYmV0dGVyIHdpdGggSW50ZWwgY29tcGlsZXIuCisgICAgICAgIC0gRml4ZXMgdG8gTWFrZWZpbGUuaW4gdG8gaGF2ZSBtYWtlIGNoZWNrIHdvcmsgY29ycmVjdGx5OgorICAgICAgICAgIGJ1Z3MgIzE0MDgxNDMsICMxNTM1NjAzLCAjMTUzNjY4NC4KKyAgICAgICAgLSBBZGRlZCBPcGVuIFdhdGNvbSBzdXBwb3J0OiBwYXRjaCAjMTUyMzI0Mi4KKwogUmVsZWFzZSAyLjAuMCBXZWQgSmFuIDExIDIwMDYKICAgICAgICAgLSBXZSBubyBsb25nZXIgdXNlIHRoZSAiY2hlY2siIGxpYnJhcnkgZm9yIEMgdW5pdCB0ZXN0aW5nOyB3ZQogICAgICAgICAgIGFsd2F5cyB1c2UgdGhlIChwYXJ0aWFsKSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJLgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCBhYWRlZGExLi4wZTJjYzk1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtNDQsOSArNDQsNyBAQAogQVBJSEVBREVSID0gJChzcmNkaXIpL2xpYi9leHBhdC5oICQoc3JjZGlyKS9saWIvZXhwYXRfZXh0ZXJuYWwuaAogTElCUkFSWSA9IGxpYmV4cGF0LmxhCiAKLWlmbmRlZiBJTlNUQUxMX1JPT1QKLUlOU1RBTExfUk9PVD0kKERFU1RESVIpCi1lbmRpZgorREVTVERJUiA9ICQoSU5TVEFMTF9ST09UKQogCiBkZWZhdWx0OiAgYnVpbGRsaWIgeG1sd2YveG1sd2YKIApAQCAtNzgsMjMgKzc2LDIzIEBACiAJdGVzdHMvcnVudGVzdHNwcAogCiBpbnN0YWxsOiB4bWx3Zi94bWx3ZiBpbnN0YWxsbGliCi0JJChta2luc3RhbGxkaXJzKSAkKElOU1RBTExfUk9PVCkkKGJpbmRpcikgJChJTlNUQUxMX1JPT1QpJChtYW4xZGlyKQotCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pIHhtbHdmL3htbHdmICQoSU5TVEFMTF9ST09UKSQoYmluZGlyKS94bWx3ZgotCSQoSU5TVEFMTF9EQVRBKSAkKE1BTkZJTEUpICQoSU5TVEFMTF9ST09UKSQobWFuMWRpcikKKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGJpbmRpcikgJChERVNURElSKSQobWFuMWRpcikKKwkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSB4bWx3Zi94bWx3ZiAkKERFU1RESVIpJChiaW5kaXIpL3htbHdmCisJJChJTlNUQUxMX0RBVEEpICQoTUFORklMRSkgJChERVNURElSKSQobWFuMWRpcikKIAogaW5zdGFsbGxpYjogJChMSUJSQVJZKSAkKEFQSUhFQURFUikKLQkkKG1raW5zdGFsbGRpcnMpICQoSU5TVEFMTF9ST09UKSQobGliZGlyKSAkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpCi0JJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoTElCUkFSWSkgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpLyQoTElCUkFSWSkKLQlmb3IgRk4gaW4gJChBUElIRUFERVIpIDsgZG8gJChJTlNUQUxMX0RBVEEpICQkRk4gJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKSA7IGRvbmUKKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQoaW5jbHVkZWRpcikKKwkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChMSUJSQVJZKSAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCUkFSWSkKKwlmb3IgRk4gaW4gJChBUElIRUFERVIpIDsgZG8gJChJTlNUQUxMX0RBVEEpICQkRk4gJChERVNURElSKSQoaW5jbHVkZWRpcikgOyBkb25lCiAKIHVuaW5zdGFsbDogdW5pbnN0YWxsbGliCi0JJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICQoSU5TVEFMTF9ST09UKSQoYmluZGlyKS94bWx3ZgotCXJtIC1mICQoSU5TVEFMTF9ST09UKSQobWFuMWRpcikveG1sd2YuMQorCSQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpL3htbHdmCisJcm0gLWYgJChERVNURElSKSQobWFuMWRpcikveG1sd2YuMQogCiB1bmluc3RhbGxsaWI6Ci0JJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICQoSU5TVEFMTF9ST09UKSQobGliZGlyKS8kKExJQlJBUlkpCi0Jcm0gLWYgJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9leHBhdC5oCi0Jcm0gLWYgJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9leHBhdF9leHRlcm5hbC5oCisJJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvJChMSUJSQVJZKQorCXJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2V4cGF0LmgKKwlybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9leHBhdF9leHRlcm5hbC5oCiAKICMgZm9yIFZQQVRIIGJ1aWxkcyAoaW52b2tlZCBieSBjb25maWd1cmUpCiBta2Rpci1pbml0OgpAQCAtMTAzLDE5ICsxMDEsMjEgQEAKIAlkb25lCiAKIENDID0gQENDQAorQ1hYID0gQENYWEAKIExJQlRPT0wgPSBATElCVE9PTEAKIAogSU5DTFVERVMgPSAtSSQoc3JjZGlyKS9saWIgLUkuCiBMREZMQUdTID0gQExERkxBR1NACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNGTEFHUyA9IEBDRkxBR1NAIC1ESEFWRV9FWFBBVF9DT05GSUdfSAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NAIC1ESEFWRV9FWFBBVF9DT05GSUdfSAorQ0ZMQUdTID0gQENGTEFHU0AKK0NYWEZMQUdTID0gQENYWEZMQUdTQAogVlNORkxBRyA9IC12ZXJzaW9uLWluZm8gQExJQkNVUlJFTlRAOkBMSUJSRVZJU0lPTkA6QExJQkFHRUAKIAogIyMjIGF1dG9jb25mIHRoaXM/CiBMVEZMQUdTID0gLS1zaWxlbnQKIAogQ09NUElMRSA9ICQoQ0MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKERFRlMpICQoQ1BQRkxBR1MpCi1DWFhDT01QSUxFID0gJChDWFgpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKERFRlMpICQoQ1BQRkxBR1MpCitDWFhDT01QSUxFID0gJChDWFgpICQoSU5DTFVERVMpICQoQ1hYRkxBR1MpICQoREVGUykgJChDUFBGTEFHUykKIExUQ09NUElMRSA9ICQoTElCVE9PTCkgJChMVEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpCiBMSU5LX0xJQiA9ICQoTElCVE9PTCkgJChMVEZMQUdTKSAtLW1vZGU9bGluayAkKENPTVBJTEUpIC1uby11bmRlZmluZWQgJChWU05GTEFHKSAtcnBhdGggJChsaWJkaXIpICQoTERGTEFHUykgLW8gJEAKIExJTktfRVhFID0gJChMSUJUT09MKSAkKExURkxBR1MpIC0tbW9kZT1saW5rICQoQ09NUElMRSkgJChMREZMQUdTKSAtbyAkQApAQCAtMTU3LDEwICsxNTcsMTAgQEAKIHRlc3RzL21pbmljaGVjay5vOiB0ZXN0cy9taW5pY2hlY2suYyB0ZXN0cy9taW5pY2hlY2suaAogdGVzdHMvcnVudGVzdHMubzogdGVzdHMvcnVudGVzdHMuYyB0ZXN0cy9jaGFyZGF0YS5oCiB0ZXN0cy9ydW50ZXN0czogdGVzdHMvcnVudGVzdHMubyB0ZXN0cy9jaGFyZGF0YS5vIHRlc3RzL21pbmljaGVjay5vICQoTElCUkFSWSkKLQkkKExJTktfRVhFKSAkXgorCSQoTElOS19FWEUpIHRlc3RzL3J1bnRlc3RzLm8gdGVzdHMvY2hhcmRhdGEubyB0ZXN0cy9taW5pY2hlY2subyAkKExJQlJBUlkpCiB0ZXN0cy9ydW50ZXN0c3BwLm86IHRlc3RzL3J1bnRlc3RzcHAuY3BwIHRlc3RzL3J1bnRlc3RzLmMgdGVzdHMvY2hhcmRhdGEuaAogdGVzdHMvcnVudGVzdHNwcDogdGVzdHMvcnVudGVzdHNwcC5vIHRlc3RzL2NoYXJkYXRhLm8gdGVzdHMvbWluaWNoZWNrLm8gJChMSUJSQVJZKQotCSQoTElOS19DWFhfRVhFKSAkXgorCSQoTElOS19DWFhfRVhFKSB0ZXN0cy9ydW50ZXN0c3BwLm8gdGVzdHMvY2hhcmRhdGEubyB0ZXN0cy9taW5pY2hlY2subyAkKExJQlJBUlkpCiAKIHRlc3RzL3htbHRzLnppcDoKIAl3Z2V0IC0tb3V0cHV0LWRvY3VtZW50PXRlc3RzL3htbHRzLnppcCBcCkBAIC0xNzIsOCArMTcyLDEwIEBACiBydW4teG1sdGVzdDogeG1sd2YveG1sd2YgdGVzdHMvWE1MLVRlc3QtU3VpdGUKIAl0ZXN0cy94bWx0ZXN0LnNoCiAKLS5TVUZGSVhFUzogLmMgLmxvIC5vCisuU1VGRklYRVM6IC5jIC5jcHAgLmxvIC5vCiAKKy5jcHAubzoKKwkkKENYWENPTVBJTEUpIC1vICRAIC1jICQ8CiAuYy5vOgogCSQoQ09NUElMRSkgLW8gJEAgLWMgJDwKIC5jLmxvOgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDU4NWJjYzEuLmZkYTI4MmEgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNSArMSw1IEBACiAKLSAgICAgICAgICAgICAgICAgICAgICAgIEV4cGF0LCBSZWxlYXNlIDIuMC4wCisgICAgICAgICAgICAgICAgICAgICAgICBFeHBhdCwgUmVsZWFzZSAyLjAuMQogCiBUaGlzIGlzIEV4cGF0LCBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBYTUwsIHdyaXR0ZW4gYnkgSmFtZXMgQ2xhcmsuCiBFeHBhdCBpcyBhIHN0cmVhbS1vcmllbnRlZCBYTUwgcGFyc2VyLiAgVGhpcyBtZWFucyB0aGF0IHlvdSByZWdpc3RlcgpAQCAtMjUsOCArMjUsOCBAQAogSWYgeW91IGFyZSBidWlsZGluZyBFeHBhdCBmcm9tIGEgY2hlY2stb3V0IGZyb20gdGhlIENWUyByZXBvc2l0b3J5LAogeW91IG5lZWQgdG8gcnVuIGEgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIHRoZSBjb25maWd1cmUgc2NyaXB0IHVzaW5nIHRoZQogR05VIGF1dG9jb25mIGFuZCBsaWJ0b29sIHRvb2xzLiAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gaGF2ZQotYXV0b2NvbmYgMi41MiBvciBuZXdlciBhbmQgbGlidG9vbCAxLjQgb3IgbmV3ZXIuICBSdW4gdGhlIHNjcmlwdCBsaWtlCi10aGlzOgorYXV0b2NvbmYgMi41MiBvciBuZXdlciBhbmQgbGlidG9vbCAxLjQgb3IgbmV3ZXIgKDEuNSBvciBuZXdlciBwcmVmZXJyZWQpLgorUnVuIHRoZSBzY3JpcHQgbGlrZSB0aGlzOgogCiAgICAgICAgIC4vYnVpbGRjb25mLnNoCiAKQEAgLTUzLDYgKzUzLDEwIEBACiBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBhbmQgdGhlIG92ZXItYWxsIGJ5dGUgaW5kZXg6CiAKICAgICAgICAgLi9jb25maWd1cmUgQ1BQRkxBR1M9LURYTUxfTEFSR0VfU0laRQorICAgICAgICAKK0hvd2V2ZXIsIHN1Y2ggYSBtb2RpZmljYXRpb24gd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2UgdG8gdGhlIEFCSQorYW5kIGlzIHRoZXJlZm9yZSBub3QgcmVjb21tZW5kZWQgZm9yIGdlbmVyYWwgdXNlIC0gZS5nLiBhcyBwYXJ0IG9mCithIExpbnV4IGRpc3RyaWJ1dGlvbiAtIGJ1dCByYXRoZXIgZm9yIGJ1aWxkcyB3aXRoIHNwZWNpYWwgcmVxdWlyZW1lbnRzLgogCiBBZnRlciBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LCB0aGUgIm1ha2UiIGNvbW1hbmQgd2lsbCBidWlsZAogdGhpbmdzIGFuZCAibWFrZSBpbnN0YWxsIiB3aWxsIGluc3RhbGwgdGhpbmdzIGludG8gdGhlaXIgcHJvcGVyCkBAIC02Miw3ICs2Niw3IEBACiAKIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBidWlsZGluZyBFeHBhdCB0byBwcm92aWRlIGRvY3VtZW50CiBpbmZvcm1hdGlvbiBpbiBVVEYtMTYgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgVVRGLTgsIGZvbGxvdyB0aGVzZQotaW5zdHJ1Y3Rpb25zOgoraW5zdHJ1Y3Rpb25zIChhZnRlciBoYXZpbmcgcnVuICJtYWtlIGRpc3RjbGVhbiIpOgogCiAgICAgICAgIDEuIEZvciBVVEYtMTYgb3V0cHV0IGFzIHVuc2lnbmVkIHNob3J0IChhbmQgdmVyc2lvbi9lcnJvcgogICAgICAgICAgICBzdHJpbmdzIGFzIGNoYXIpLCBydW46CkBAIC04Niw4ICs5MCwyMyBAQAogICAgICAgICAgICAoTm90ZSB0aGUgYWRkaXRpb25hbCAidyIgaW4gdGhlIGxpYnJhcnkgbmFtZS4pCiAKICAgICAgICAgMy4gUnVuICJtYWtlIGJ1aWxkbGliIiAod2hpY2ggYnVpbGRzIHRoZSBsaWJyYXJ5IG9ubHkpLgorICAgICAgICAgICBPciwgdG8gc2F2ZSBzdGVwIDIsIHJ1biAibWFrZSBidWlsZGxpYiBMSUJSQVJZPWxpYmV4cGF0dy5sYSIuCiAKICAgICAgICAgNC4gUnVuICJtYWtlIGluc3RhbGxsaWIiICh3aGljaCBpbnN0YWxscyB0aGUgbGlicmFyeSBvbmx5KS4KKyAgICAgICAgICAgT3IsIGlmIHN0ZXAgMiB3YXMgb21pdHRlZCwgcnVuICJtYWtlIGluc3RhbGxsaWIgTElCUkFSWT1saWJleHBhdHcubGEiLgorICAgICAgICAgICAKK1VzaW5nIERFU1RESVIgb3IgSU5TVEFMTF9ST09UIGlzIGVuYWJsZWQsIHdpdGggSU5TVEFMTF9ST09UIGJlaW5nIHRoZSBkZWZhdWx0Cit2YWx1ZSBmb3IgREVTVERJUiwgYW5kIHRoZSByZXN0IG9mIHRoZSBtYWtlIGZpbGUgdXNpbmcgb25seSBERVNURElSLgorSXQgd29ya3MgYXMgZm9sbG93czoKKyAgICQgbWFrZSBpbnN0YWxsIERFU1RESVI9L3BhdGgvdG8vaW1hZ2UKK292ZXJyaWRlcyB0aGUgaW4tbWFrZWZpbGUgc2V0IERFU1RESVIsIHdoaWxlIGJvdGgKKyAgICQgSU5TVEFMTF9ST09UPS9wYXRoL3RvL2ltYWdlIG1ha2UgaW5zdGFsbAorICAgJCBtYWtlIGluc3RhbGwgSU5TVEFMTF9ST09UPS9wYXRoL3RvL2ltYWdlCit1c2UgREVTVERJUj0kKElOU1RBTExfUk9PVCksIGV2ZW4gaWYgREVTVERJUiBldmVudHVhbGx5IGlzIGRlZmluZWQgaW4gdGhlCitlbnZpcm9ubWVudCwgYmVjYXVzZSB2YXJpYWJsZS1zZXR0aW5nIHByaW9yaXR5IGlzCisxKSBjb21tYW5kbGluZQorMikgaW4tbWFrZWZpbGUKKzMpIGVudmlyb25tZW50ICAgICAgICAgICAKIAogTm90ZSBmb3IgU29sYXJpcyB1c2VyczogIFRoZSAiYXIiIGNvbW1hbmQgaXMgdXN1YWxseSBsb2NhdGVkIGluCiAiL3Vzci9jY3MvYmluIiwgd2hpY2ggaXMgbm90IGluIHRoZSBkZWZhdWx0IFBBVEguICBZb3Ugd2lsbCBuZWVkIHRvCmRpZmYgLS1naXQgYS9hbWlnYS9NYWtlZmlsZSBiL2FtaWdhL01ha2VmaWxlCmluZGV4IDYxYmE1OWMuLjg0NTBkZDUgMTAwNjQ0Ci0tLSBhL2FtaWdhL01ha2VmaWxlCisrKyBiL2FtaWdhL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiB0b29sZGlyID0gU0RLOkxvY2FsL0MKIHN0YXRpY2xpYmRpciA9IFNESzpMb2NhbC9jbGliMi9saWIKIHN0YXRpY2luY2x1ZGVkaXIgPSBTREs6TG9jYWwvY2xpYjIvaW5jbHVkZQotc2hhcmVkbGliZGlyID0gTElCUzoKK3NoYXJlZGxpYmRpciA9IFNESzpMb2NhbC9MaWJzCiBzaGFyZWRpbmNsdWRlZGlyID0gU0RLOkxvY2FsL2NvbW1vbi9pbmNsdWRlCiAKIApAQCAtMzcsMTUgKzM3LDE1IEBACiBoZWxwOgogCUBlY2hvICJSZXF1aXJlczoiCiAJQGVjaG8gIiBBbWlnYU9TIDQuMCIKLQlAZWNobyAiIFNESyA1MS4xNSIKLQlAZWNobyAiIGNsaWIyIDEuMTk4IgorCUBlY2hvICIgU0RLIDUxLjIyIgorCUBlY2hvICIgY2xpYjIgMS4yMDIiCiAJQGVjaG8gIiIKIAlAZWNobyAiVGFyZ2V0czoiCiAJQGVjaG8gIiBhbGwgLSBtYWtlIGV4cGF0IGxpYnJhcmllcywgeG1sd2YsIGV4YW1wbGVzIGFuZCBydW4gdGVzdCBzdWl0ZSIKIAlAZWNobyAiIGluc3RhbGwgLSBpbnN0YWxsIGV4cGF0IGxpYnJhcmllcyBhbmQgdG9vbHMgaW50byBTREsiCiAKIGFsbDoKLQktbWFrZWRpciBsaWIgbGlicworCS1tYWtlZGlyIGZvcmNlIGxpYiBsaWJzCiAJJChNQUtFKSBzdGF0aWNsaWIKIAkkKE1BS0UpIHNoYXJlZGxpYgogCkBAIC02Myw3ICs2Myw3IEBACiAJLWRlbGV0ZSBsaWJzLyM/Lm8gcXVpZXQKIAogaW5zdGFsbDoKLQljb3B5IGxpYi94bWx3ZiAkKHRvb2xkaXIpIHF1aWV0CisJY29weSBsaWJzL3htbHdmICQodG9vbGRpcikgcXVpZXQKIAljb3B5IC9saWIvZXhwYXQuaCAvbGliL2V4cGF0X2V4dGVybmFsLmggJChzdGF0aWNpbmNsdWRlZGlyKSBxdWlldAogCWNvcHkgbGliL2xpYmV4cGF0LmEgJChzdGF0aWNsaWJkaXIpIHF1aWV0CiAJY29weSBsaWJzL2V4cGF0LmxpYnJhcnkgJChzaGFyZWRsaWJkaXIpIHF1aWV0CkBAIC03NiwxOCArNzYsMjEgQEAKIAogTERGTEFHUyA9CiBMSUJTID0KLUxPQ0FMX0NGTEFHUyA9IC1ETkRFQlVHIC1PMgorQ0ZMQUdTID0gLUROREVCVUcgLU8yCiBMVEZMQUdTID0gLWNycwogU1RSSVBGTEFHUyA9IC1SLmNvbW1lbnQKIExBVU5DSCA9CiAKIGlmZXEgKCQoTUFLRUNNREdPQUxTKSwgc3RhdGljbGliKQorIENGTEFHUyArPSAtbWNydD1jbGliMgorIExERkxBR1MgKz0gLW1jcnQ9Y2xpYjIKICBMSUJTICs9ICQoU1RBVElDTElCKQogIElOQ0xVREVTID0gLUkuLi9saWIKIGVuZGlmCiAKIGlmZXEgKCQoTUFLRUNNREdPQUxTKSwgc2hhcmVkbGliKQotTE9DQUxfQ0ZMQUdTICs9IC1EQU1JR0FfU0hBUkVEX0xJQiAtRF9fVVNFX0lOTElORV9fCisgQ0ZMQUdTICs9IC1tY3J0PW5ld2xpYiAtRF9fVVNFX0lOTElORV9fCisgTERGTEFHUyArPSAtbWNydD1uZXdsaWIKICBJTkNMVURFUyA9IC1JLiAtSWluY2x1ZGUgLUlpbmNsdWRlL2xpYnJhcmllcyAtSS4uL2xpYgogIExBVU5DSCA9ICQoREVTVERJUikvbGF1bmNoLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hbWlnYS9SRUFETUUudHh0IGIvYW1pZ2EvUkVBRE1FLnR4dAppbmRleCBjYTc0MjIyLi4xNDk1MThmIDEwMDY0NAotLS0gYS9hbWlnYS9SRUFETUUudHh0CisrKyBiL2FtaWdhL1JFQURNRS50eHQKQEAgLTE0LDYgKzE0LDE2IEBACiAKIEhJU1RPUlkKID09PT09PT0KKzQuMiAgLSB1cGRhdGVkIHRvIGNvcnJlc3BvbmQgdG8gRXhwYXQgMi4wLjEgcmVsZWFzZQorICAgICAtIGJ1bXBlZCBjb3B5cmlnaHQgYmFubmVycyBhbmQgdmVyc2lvbnMKKyAgICAgLSBzaW1wbGlmaWVkIGFtaWdhY29uZmlnLmgKKyAgICAgLSB1cGRhdGVkIGluY2x1ZGUvbGlicmFyaWVzL2V4cGF0LmggZmlsZQorICAgICAtIG1vZGlmaWVkIGxhdW5jaC5jIHRvIHVzZSBjb250cnVjdG9yL2RlY29uc3RydWN0b3IKKyAgICAgLSByZW1vdmVkIG5lZWQgZm9yIGFtaWdhX21haW4oKSBmcm9tIGV4cGF0IHV0aWxpdGllcworCis0LjEgIC0gZml4ZWQgbWVtb3J5IGZyZWVpbmcgYnVnIGluIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24KKyAgICAgLSBub3cgYWxsb2NhdGVzIHNoYXJlZCBtZW1vcnkKKwogNC4wICAtIHVwZGF0ZWQgZm9yIGNvcnJlc3BvbmRpbmcgRXhwYXQgMi4wIHJlbGVhc2UKICAgICAgLSBzb21lIG1pbm9yIENWUyByZWxhdGVkIGNoYW5nZXMKIApkaWZmIC0tZ2l0IGEvYW1pZ2EvZXhwYXRfbGliLmMgYi9hbWlnYS9leHBhdF9saWIuYwppbmRleCA3MGY5MDc0Li4wMzljNDhkIDEwMDY0NAotLS0gYS9hbWlnYS9leHBhdF9saWIuYworKysgYi9hbWlnYS9leHBhdF9saWIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBFeHBhdCBtYWludGFpbmVycy4KKyoqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3IEV4cGF0IG1haW50YWluZXJzLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0yNyw4ICsyNyw4IEBACiAjZGVmaW5lIExJQk5BTUUJCSJleHBhdC5saWJyYXJ5IgogI2RlZmluZSBMSUJQUkkJCTAKICNkZWZpbmUgVkVSU0lPTgkJNAotI2RlZmluZSBSRVZJU0lPTgkwCi0jZGVmaW5lIFZTVFJJTkcJCSJleHBhdC5saWJyYXJ5IDQuMCAoMjcuMTIuMjAwNSkiICAvKiBkZC5tbS55eXl5ICovCisjZGVmaW5lIFJFVklTSU9OCTIKKyNkZWZpbmUgVlNUUklORwkJImV4cGF0LmxpYnJhcnkgNC4yICgyLjYuMjAwNykiICAvKiBkZC5tbS55eXl5ICovCiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIF9fYXR0cmlidXRlX18oKHVzZWQpKSB2ZXJzdGFnID0gIlwwJFZFUjogIiBWU1RSSU5HOwpkaWZmIC0tZ2l0IGEvYW1pZ2EvZXhwYXRfdmVjdG9ycy5jIGIvYW1pZ2EvZXhwYXRfdmVjdG9ycy5jCmluZGV4IDExMTYzMTMuLjE0ZmIzYmUgMTAwNjQ0Ci0tLSBhL2FtaWdhL2V4cGF0X3ZlY3RvcnMuYworKysgYi9hbWlnYS9leHBhdF92ZWN0b3JzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgRXhwYXQgbWFpbnRhaW5lcnMuCisqKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBFeHBhdCBtYWludGFpbmVycy4KICoqCiAqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICoqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpkaWZmIC0tZ2l0IGEvYW1pZ2EvaW5jbHVkZS9saWJyYXJpZXMvZXhwYXQuaCBiL2FtaWdhL2luY2x1ZGUvbGlicmFyaWVzL2V4cGF0LmgKaW5kZXggY2RkMjExZS4uMWI1NzM4NyAxMDA2NDQKLS0tIGEvYW1pZ2EvaW5jbHVkZS9saWJyYXJpZXMvZXhwYXQuaAorKysgYi9hbWlnYS9pbmNsdWRlL2xpYnJhcmllcy9leHBhdC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBMSUJSQVJJRVNfRVhQQVRfSAogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgRXhwYXQgbWFpbnRhaW5lcnMuCisqKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBFeHBhdCBtYWludGFpbmVycy4KICoqCiAqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICoqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtNTI3LDcgKzUyNyw5IEBACiAgIFhNTF9GRUFUVVJFX0NPTlRFWFRfQllURVMsCiAgIFhNTF9GRUFUVVJFX01JTl9TSVpFLAogICBYTUxfRkVBVFVSRV9TSVpFT0ZfWE1MX0NIQVIsCi0gIFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfTENIQVIKKyAgWE1MX0ZFQVRVUkVfU0laRU9GX1hNTF9MQ0hBUiwKKyAgWE1MX0ZFQVRVUkVfTlMsCisgIFhNTF9GRUFUVVJFX0xBUkdFX1NJWkUKIH07CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTU0Miw3ICs1NDQsNyBAQAogCiAjZGVmaW5lIFhNTF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWE1MX01JTk9SX1ZFUlNJT04gMAotI2RlZmluZSBYTUxfTUlDUk9fVkVSU0lPTiAwCisjZGVmaW5lIFhNTF9NSUNST19WRVJTSU9OIDEKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FtaWdhL2luY2x1ZGUvcHJvdG8vZXhwYXQuaCBiL2FtaWdhL2luY2x1ZGUvcHJvdG8vZXhwYXQuaAppbmRleCA1YjhiYTE1Li45MGJmNjJjIDEwMDY0NAotLS0gYS9hbWlnYS9pbmNsdWRlL3Byb3RvL2V4cGF0LmgKKysrIGIvYW1pZ2EvaW5jbHVkZS9wcm90by9leHBhdC5oCkBAIC0xLDE2ICsxLDYgQEAKICNpZm5kZWYgUFJPVE9fRVhQQVRfSAogI2RlZmluZSBQUk9UT19FWFBBVF9ICiAKLS8qCi0qKgkkSWQ6IGV4cGF0LmgsdiAxLjEgMjAwNS8xMi8yNCAwNjo0NTozNiBzc29saWUgRXhwICQKLSoqCUluY2x1ZGVzIFJlbGVhc2UgNTAuMQotKioKLSoqCVByb3RvdHlwZS9pbmxpbmUvcHJhZ21hIGhlYWRlciBmaWxlIGNvbWJvCi0qKgotKioJKEMpIENvcHlyaWdodCAyMDAzLTIwMDUgQW1pZ2EsIEluYy4KLSoqCSAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0qLwotCiAjaWZuZGVmIExJQlJBUklFU19FWFBBVF9ICiAjaW5jbHVkZSA8bGlicmFyaWVzL2V4cGF0Lmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FtaWdhL2xhdW5jaC5jIGIvYW1pZ2EvbGF1bmNoLmMKaW5kZXggMTFiYmYxYy4uNzNlNTI2ZSAxMDA2NDQKLS0tIGEvYW1pZ2EvbGF1bmNoLmMKKysrIGIvYW1pZ2EvbGF1bmNoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgRXhwYXQgbWFpbnRhaW5lcnMuCisqKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBFeHBhdCBtYWludGFpbmVycy4KICoqCiAqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICoqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtMjgsMjcgKzI4LDE3IEBACiBzdHJ1Y3QgRXhwYXRJRmFjZSogSUV4cGF0ID0gMDsKIAogCi1pbnQgYW1pZ2FfbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpOwotdm9pZCBjbGVhbnVwKCk7Cit2b2lkIHNldHVwKCkgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKTsKK3ZvaWQgY2xlYW51cCgpIF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IpKTsKIAogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit2b2lkIHNldHVwKCkKIHsKLQlpbnQgcmVzdWx0ID0gLTE7Ci0KLQlhdGV4aXQoY2xlYW51cCk7Ci0KLQlFeHBhdEJhc2UgPSBPcGVuTGlicmFyeSgiZXhwYXQubGlicmFyeSIsIDIpOwotCWlmICggRXhwYXRCYXNlICE9IDAgKSAgewotCQlJRXhwYXQgPSAoc3RydWN0IEV4cGF0SUZhY2UqKUdldEludGVyZmFjZShFeHBhdEJhc2UsICJtYWluIiwgMSwgTlVMTCk7Ci0JCWlmICggSUV4cGF0ICE9IDAgKSAgewotCQkJcmVzdWx0ID0gYW1pZ2FfbWFpbihhcmdjLCBhcmd2KTsKLQkJfQorCUV4cGF0QmFzZSA9IE9wZW5MaWJyYXJ5KCJleHBhdC5saWJyYXJ5IiwgNCk7CisJSUV4cGF0ID0gKHN0cnVjdCBFeHBhdElGYWNlKilHZXRJbnRlcmZhY2UoRXhwYXRCYXNlLCAibWFpbiIsIDEsIE5VTEwpOworCWlmICggSUV4cGF0ID09IDAgKSAgeworCQlEZWJ1Z1ByaW50RigiQ2FuJ3Qgb3BlbiBleHBhdC5saWJyYXJ5XG4iKTsKIAl9Ci0KLQljbGVhbnVwKCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwogfQogCiAKZGlmZiAtLWdpdCBhL2FtaWdhL3N0ZGxpYi5jIGIvYW1pZ2Evc3RkbGliLmMKaW5kZXggNGE3Y2E3MS4uOGMzMWYyMyAxMDA2NDQKLS0tIGEvYW1pZ2Evc3RkbGliLmMKKysrIGIvYW1pZ2Evc3RkbGliLmMKQEAgLTEsNSArMSw1IEBACiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgRXhwYXQgbWFpbnRhaW5lcnMuCisqKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBFeHBhdCBtYWludGFpbmVycy4KICoqCiAqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICoqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtMzAsNyArMzAsNyBAQAogewogCXVpbnQzMiBzaXplID0gc2l6ZW9mKHVpbnQzMikgKyBsZW47CiAKLQl1aW50MzIgKm1lbSA9IEFsbG9jTWVtKHNpemUsIE1FTUZfQU5ZKTsKKwl1aW50MzIgKm1lbSA9IEFsbG9jTWVtKHNpemUsIE1FTUZfU0hBUkVEKTsKIAlpZiAoIG1lbSAhPSAwICkgIHsKIAkJKm1lbSA9IHNpemU7CiAJCSsrbWVtOwpAQCAtNjcsOCArNjcsOCBAQAogdm9pZCBmcmVlICh2b2lkICogbWVtKQogewogCWlmICggbWVtICE9IDAgKSAgewotCQl1aW50MzIgc2l6ZSA9ICooKCh1aW50MzIqKW1lbSkgLSAxKTsKLQkJRnJlZU1lbShtZW0sIHNpemUpOworCQl1aW50MzIgKiBzaXplX3B0ciA9ICgodWludDMyKiltZW0pIC0gMTsKKwkJRnJlZU1lbShzaXplX3B0ciwgKnNpemVfcHRyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlOTdhZjI4Li4wMWJhN2E5IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkgZm9yIGV4cGF0IDIuMC4wLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkgZm9yIGV4cGF0IDIuMC4xLgogIwogIyBSZXBvcnQgYnVncyB0byA8ZXhwYXQtYnVnc0BsaWJleHBhdC5vcmc+LgogIwpAQCAtNDIzLDggKzQyMyw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0nZXhwYXQnCiBQQUNLQUdFX1RBUk5BTUU9J2V4cGF0JwotUEFDS0FHRV9WRVJTSU9OPScyLjAuMCcKLVBBQ0tBR0VfU1RSSU5HPSdleHBhdCAyLjAuMCcKK1BBQ0tBR0VfVkVSU0lPTj0nMi4wLjEnCitQQUNLQUdFX1NUUklORz0nZXhwYXQgMi4wLjEnCiBQQUNLQUdFX0JVR1JFUE9SVD0nZXhwYXQtYnVnc0BsaWJleHBhdC5vcmcnCiAKIGFjX3VuaXF1ZV9maWxlPSJNYWtlZmlsZS5pbiIKQEAgLTk1NCw3ICs5NTQsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGV4cGF0IDIuMC4wIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGV4cGF0IDIuMC4xIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgZXhwYXQgMi4wLjA6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBleHBhdCAyLjAuMToiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xMTUyLDcgKzExNTIsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLWV4cGF0IGNvbmZpZ3VyZSAyLjAuMAorZXhwYXQgY29uZmlndXJlIDIuMC4xCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKIAogQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMTE2Niw3ICsxMTY2LDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBleHBhdCAkYXNfbWUgMi4wLjAsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgZXhwYXQgJGFzX21lIDIuMC4xLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTE1MzQsNyArMTUzNCw3IEBACiAKIAogTElCQ1VSUkVOVD02Ci1MSUJSRVZJU0lPTj0wCitMSUJSRVZJU0lPTj0yCiBMSUJBR0U9NQogCiAgICAgICAgICAgYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBleHBhdF9jb25maWcuaCIKQEAgLTE5MzYyLDggKzE5MzYyLDggQEAKIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgT0xEQ0ZMQUdTPSIkQ0ZMQUdTIC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc3RyaWN0LXByb3RvdHlwZXMiCiAgICAgQ0ZMQUdTPSIkT0xEQ0ZMQUdTIC1mZXhjZXB0aW9ucyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBnY2MgYWNjZXB0cyAtZmV4Y2VwdGlvbnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGdjYyBhY2NlcHRzIC1mZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjYKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZmV4Y2VwdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1mZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjYKICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKIC8qIGNvbmZkZWZzLmguICAqLwogX0FDRU9GCkBAIC0xOTM3NCwxNCArMTkzNzQsMTQgQEAKIGludAogbWFpbiAoKQogewotKHZvaWQpMQorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCiAgIGFjX3N0YXR1cz0kPwogICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgogICBybSAtZiBjb25mdGVzdC5lcjEKQEAgLTE5Mzk1LDcgKzE5Mzk1LDcgQEAKICAgYWNfc3RhdHVzPSQ/CiAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwogICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQogICAoZXZhbCAkYWNfdHJ5KSAyPiY1CiAgIGFjX3N0YXR1cz0kPwpAQCAtMTk0MTAsNyArMTk0MTAsOSBAQAogZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQogZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgQ0ZMQUdTPSIkT0xEQ0ZMQUdTIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgQ1hYRkxBR1M9YGVjaG8gIiRDRkxBR1MiIHwgc2VkICdzLyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzLy8nYAogZmkKIAogZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKQEAgLTIxMjE5LDcgKzIxMjIxLDcgQEAKIH0gPiY1CiBjYXQgPiY1IDw8X0NTRU9GCiAKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgZXhwYXQgJGFzX21lIDIuMC4wLCB3aGljaCB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgZXhwYXQgJGFzX21lIDIuMC4xLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTIxMjc5LDcgKzIxMjgxLDcgQEAKIAogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKIGFjX2NzX3ZlcnNpb249IlxcCi1leHBhdCBjb25maWcuc3RhdHVzIDIuMC4wCitleHBhdCBjb25maWcuc3RhdHVzIDIuMC4xCiBjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCiAgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KaW5kZXggOWQzYTZmNy4uMjRiY2I0MCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmluCisrKyBiL2NvbmZpZ3VyZS5pbgpAQCAtNDUsNyArNDUsNyBAQAogZG5sCiAKIExJQkNVUlJFTlQ9NgotTElCUkVWSVNJT049MAorTElCUkVWSVNJT049MgogTElCQUdFPTUKIAogQUNfQ09ORklHX0hFQURFUihleHBhdF9jb25maWcuaCkKQEAgLTcyLDEwICs3MiwxMSBAQAogICAgIGRubAogICAgIE9MRENGTEFHUz0iJENGTEFHUyAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIgogICAgIENGTEFHUz0iJE9MRENGTEFHUyAtZmV4Y2VwdGlvbnMiCi0gICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgZ2NjIGFjY2VwdHMgLWZleGNlcHRpb25zKQotICAgIEFDX1RSWV9DT01QSUxFKCwodm9pZCkxLAorICAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBhY2NlcHRzIC1mZXhjZXB0aW9ucykKKyAgICBBQ19UUllfTElOSyggLCAsCiAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpLAogICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pOyBDRkxBR1M9IiRPTERDRkxBR1MiKQorICAgIENYWEZMQUdTPWBlY2hvICIkQ0ZMQUdTIiB8IHNlZCAncy8gLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcy8vJ2AKIGZpCiAKIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2NvbmZ0b29scy9QcmludFBhdGggYi9jb25mdG9vbHMvUHJpbnRQYXRoCmluZGV4IDg2OWYyYWEuLmU4NTU5YTMgMTAwNzU1Ci0tLSBhL2NvbmZ0b29scy9QcmludFBhdGgKKysrIGIvY29uZnRvb2xzL1ByaW50UGF0aApAQCAtNDUsMTEgKzQ1LDExIEBACiAjCiAjIEZpcnN0IG9mIGFsbCwgYWxsIE9TLzIgcHJvZ3JhbXMgaGF2ZSB0aGUgJy5leGUnIGV4dGVuc2lvbi4KICMgTmV4dCwgd2UgYWRqdXN0IFBBVEggKG9yIHdoYXQgd2FzIGdpdmVuIHRvIHVzIGFzIFBBVEgpIHRvCi0jIGJlIHdoaXRlc3BhY2Ugc2VwZXJhdGVkIGRpcmVjdG9yaWVzLgorIyBiZSB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBkaXJlY3Rvcmllcy4KICMgRmluYWxseSwgd2UgdHJ5IHRvIGRldGVybWluZSB0aGUgYmVzdCBmbGFnIHRvIHVzZSBmb3IKICMgdGVzdC9bXSB0byBsb29rIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuIE9TLzIganVzdCBoYXMgJy1yJwogIyBidXQgd2l0aCBvdGhlciBPU3MsIHdlIGRvIHNvbWUgZnVubnkgc3R1ZmYgdG8gY2hlY2sgdG8gc2VlCi0jIGlmIHRlc3QvW10ga25vd3MgYWJvdXQgLXgsIHdoaWNoIGlzIHRoZSBwcmVmZXJlZCBmbGFnLgorIyBpZiB0ZXN0L1tdIGtub3dzIGFib3V0IC14LCB3aGljaCBpcyB0aGUgcHJlZmVycmVkIGZsYWcuCiAjIwogCiBpZiBbICJ4JG9zIiA9ICJ4T1MvMiIgXQpkaWZmIC0tZ2l0IGEvY29uZnRvb2xzL2NvbmZpZy5ndWVzcyBiL2NvbmZ0b29scy9jb25maWcuZ3Vlc3MKaW5kZXggNmNmYWMyOC4uMzk2NDgyZCAxMDA3NTUKLS0tIGEvY29uZnRvb2xzL2NvbmZpZy5ndWVzcworKysgYi9jb25mdG9vbHMvY29uZmlnLmd1ZXNzCkBAIC0xLDkgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KICMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuCiAKLXRpbWVzdGFtcD0nMjAwMi0wMy0yMCcKK3RpbWVzdGFtcD0nMjAwNi0wNy0wMicKIAogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTcsMTcgKzE4LDE0IEBACiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KICMKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGhpcyBmaWxlIGNvbnRhaW5zIGNoYW5nZXMgZm9yIEFwYWNoZSwgY2xlYXJseSBtYXJrZWQgYmVsb3cuCi0jIFRoZXNlIGNoYW5nZXMgYXJlIGhlcmVieSBkb25hdGVkIHRvIHRoZSBwdWJsaWMgZG9tYWluLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgogIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKQEAgLTU4LDcgKzU2LDcgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KQEAgLTcxLDExICs2OSwxMSBAQAogd2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCiAgIGNhc2UgJDEgaW4KICAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQotICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCAwIDs7CisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CiAgICAgLS12ZXJzaW9uIHwgLXYgKQotICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgMCA7OworICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKICAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgMCA7OworICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKICAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKICAgICAgICBzaGlmdDsgYnJlYWsgOzsKICAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCkBAIC05MywzMCArOTEsNDIgQEAKICAgZXhpdCAxCiBmaQogCit0cmFwICdleGl0IDEnIDEgMiAxNQogCi1kdW1teT1kdW1teS0kJAotdHJhcCAncm0gLWYgJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXk7IGV4aXQgMScgMSAyIDE1CisjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCisjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCisjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKKyMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KIAotIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4KICMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKICMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KIAotc2V0X2NjX2Zvcl9idWlsZD0nY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgotICwsKSAgICBlY2hvICJpbnQgZHVtbXkoKXt9IiA+ICRkdW1teS5jIDsKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOwogCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KLQkgICgkYyAkZHVtbXkuYyAtYyAtbyAkZHVtbXkubykgPi9kZXYvbnVsbCAyPiYxIDsKLQkgIGlmIHRlc3QgJD8gPSAwIDsgdGhlbgorCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCiAJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOwogCSAgZmkgOwogCWRvbmUgOwotCXJtIC1mICRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgOwogCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCiAJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOwogCWZpCiAJOzsKICAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OwogICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKLWVzYWMnCitlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKIAogIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KICMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQpAQCAtMTQ3LDYgKzE1Nyw3IEBACiAJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCiAJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCiAJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CiAJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKIAkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKIAkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OwpAQCAtMTcyLDE1OSArMTgzLDEyOCBAQAogCQk7OwogCWVzYWMKIAkjIFRoZSBPUyByZWxlYXNlCi0JcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCiAJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CiAJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CiAJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgogCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgotCWV4aXQgMCA7OwotICAgIGFtaWdhOk9wZW5CU0Q6KjoqKQotCWVjaG8gbTY4ay11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgYXJjOk9wZW5CU0Q6KjoqKQotCWVjaG8gbWlwc2VsLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBocDMwMDpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG1hYzY4azpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG1hY3BwYzpPcGVuQlNEOio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG12bWU2OGs6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBtdm1lODhrOk9wZW5CU0Q6KjoqKQotCWVjaG8gbTg4ay11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgbXZtZXBwYzpPcGVuQlNEOio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHBtYXg6T3BlbkJTRDoqOiopCi0JZWNobyBtaXBzZWwtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHNnaTpPcGVuQlNEOio6KikKLQllY2hvIG1pcHNlYi11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgc3VuMzpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHdncmlzYzpPcGVuQlNEOio6KikKLQllY2hvIG1pcHNlbC11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6T3BlbkJTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIGFscGhhOk9TRjE6KjoqKQotCWlmIHRlc3QgJFVOQU1FX1JFTEVBU0UgPSAiVjQuMCI7IHRoZW4KKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKIAkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKLQlmaQorCQk7OworCSo1LiopCisJICAgICAgICBVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgogCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgogCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCiAJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCiAJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCi0JY2F0IDw8RU9GID4kZHVtbXkucwotCS5kYXRhCi1cJExmb3JtYXQ6Ci0JLmJ5dGUgMzcsMTAwLDQ1LDM3LDEyMCwxMCwwCSMgIiVkLSV4XG4iCi0KLQkudGV4dAotCS5nbG9ibCBtYWluCi0JLmFsaWduIDQKLQkuZW50IG1haW4KLW1haW46Ci0JLmZyYW1lIFwkMzAsMTYsXCQyNiwwCi0JbGRncCBcJDI5LDAoXCQyNykKLQkucHJvbG9ndWUgMQotCS5sb25nIDB4NDdlMDNkODAgIyBpbXBsdmVyIFwkMAotCWxkYSBcJDIsLTEKLQkubG9uZyAweDQ3ZTIwYzIxICMgYW1hc2sgXCQyLFwkMQotCWxkYSBcJDE2LFwkTGZvcm1hdAotCW1vdiBcJDAsXCQxNwotCW5vdCBcJDEsXCQxOAotCWpzciBcJDI2LHByaW50ZgotCWxkZ3AgXCQyOSwwKFwkMjYpCi0JbW92IDAsXCQxNgotCWpzciBcJDI2LGV4aXQKLQkuZW5kIG1haW4KLUVPRgotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQkkQ0NfRk9SX0JVSUxEICRkdW1teS5zIC1vICRkdW1teSAyPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuCi0JCWNhc2UgYC4vJGR1bW15YCBpbgotCQkJMC0wKQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhIgotCQkJCTs7Ci0JCQkxLTApCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiCi0JCQkJOzsKLQkJCTEtMSkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiCi0JCQkJOzsKLQkJCTEtMTAxKQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiCi0JCQkJOzsKLQkJCTItMzAzKQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IgotCQkJCTs7Ci0JCQkyLTMwNykKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciCi0JCQkJOzsKLQkJCTItMTMwNykKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiCi0JCQkJOzsKLQkJZXNhYwotCWZpCi0Jcm0gLWYgJGR1bW15LnMgJGR1bW15Ci0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKLQlleGl0IDAgOzsKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CiAgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKIAkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CiAJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCiAJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CiAJZWNobyBhbHBoYS1wYy1pbnRlcml4Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKIAllY2hvIGFscGhhLWRlYy13aW5udDMuNQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKIAllY2hvIG02OGstdW5rbm93bi1zeXN2NAotCWV4aXQgMDs7CisJZXhpdCA7OwogICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKLQlleGl0IDAgOzsKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQXBhY2hlIGNoYW5nZXMKLSMKLSMgICAqOk9TLzM5MDoqOiopCi0jICAgICAgZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgotIyAgICAgIGV4aXQgMCA7OwotICAgICo6T1MzOTA6KjoqIHwgKjpPUy8zOTA6KjoqKQotICAgICAgIGVjaG8gczM5MC1pYm0tb3MzOTAKLSAgICAgICBleGl0IDAgOzsgCi0gICAgKjpPUzQwMDoqOiogfCAqOk9TLzQwMDoqOiopIAotICAgICAgIGVjaG8gYXM0MDAtaWJtLW9zNDAwCi0gICAgICAgZXhpdCAwIDs7Ci0gICAgKjpPUy8yOio6KikKLSAgICAgICBlY2hvICJpMzg2LXBjLW9zMl9lbXgiCi0gICAgICAgZXhpdCAwOzsKLSMKLSMgZW5kIEFwYWNoZSBjaGFuZ2VzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZXhpdCA7OwogICAgICo6T1MvMzkwOio6KikKIAllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKICAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCiAJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMDs7CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OwogICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCiAJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAotCWV4aXQgMDs7CisJZXhpdCA7OwogICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQogCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCiAJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgpAQCAtMzMyLDI1ICszMTIsMzIgQEAKIAllbHNlCiAJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAogCWZpCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIE5JTEUqOio6KjpkY29zeCkKIAllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CiAgICAgc3VuNEg6U3VuT1M6NS4qOiopCiAJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpODZwYzpTdW5PUzo1Lio6KikKIAllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgc3VuNCo6U3VuT1M6Nio6KikKIAkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQogCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CiAJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KIAllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzoqOiopCiAJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgogCSAgICBTZXJpZXMqfFM0KikKQEAgLTM1OSwxMCArMzQ2LDEwIEBACiAJZXNhYwogCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KIAllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW4zKjpTdW5PUzoqOiopCiAJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgc3VuKjoqOjQuMkJTRDoqKQogCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCiAJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MwpAQCAtMzc0LDEwICszNjEsMTAgQEAKIAkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CiAJCTs7CiAJZXNhYwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBhdXNocDpTdW5PUzoqOiopCiAJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCiAgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CiAgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgpAQCAtMzg4LDM3ICszNzUsNDAgQEAKICAgICAjIGJlIG5vIHByb2JsZW0uCiAgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCiAgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCiAJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCiAgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCiAgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OwogICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKICAgICAgICAgZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCiAgICAgICAgIGVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgcG93ZXJwYzptYWNodGVuOio6KikKIAllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgUklTQyo6TWFjaDoqOiopCiAJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSSVNDKjpVTFRSSVg6KjoqKQogCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBWQVgqOlVMVFJJWCo6KjoqKQogCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQogCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwpAQCAtNDQyLDI3ICs0MzIsMzMgQEAKIAkgIGV4aXQgKC0xKTsKIAl9CiBFT0YKLQkkQ0NfRk9SX0JVSUxEICRkdW1teS5jIC1vICRkdW1teSBcCi0JICAmJiAuLyRkdW1teSBgZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCBcCi0JICAmJiBybSAtZiAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi0Jcm0gLWYgJGR1bW15LmMgJGR1bW15CisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCiAJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OwogICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCiAJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azpDWC9VWDo3KjoqKQogCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azoqOjQqOlI0KikKIAllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbTg4azoqOjMqOlIzKikKIAllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQVZpaU9OOmRndXg6KjoqKQogICAgICAgICAjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcwogICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYApAQCAtNDc4LDI5ICs0NzQsMjkgQEAKIAllbHNlCiAJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQogCWZpCi0gCWV4aXQgMCA7OworIAlleGl0IDs7CiAgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKIAllY2hvIG04OGstZG9scGhpbi1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBNODgqOio6UjMqOiopCiAJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMwogCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKIAllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCiAJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpJUklYKjoqOiopCiAJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCi0JZWNobyByb21wLWlibS1haXggICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCi0JZXhpdCAwIDs7ICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKICAgICBpKjg2OkFJWDoqOiopCiAJZWNobyBpMzg2LWlibS1haXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaWE2NDpBSVg6KjoqKQogCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgogCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYApAQCAtNTA4LDcgKzUwNCw3IEBACiAJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CiAJZmkKIAllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpBSVg6MjozKQogCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCkBAIC01MjMsMTUgKzUxOSwxOCBAQAogCQkJZXhpdCgwKTsKIAkJCX0KIEVPRgotCQkkQ0NfRk9SX0JVSUxEICRkdW1teS5jIC1vICRkdW1teSAmJiAuLyRkdW1teSAmJiBybSAtZiAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi0JCXJtIC1mICRkdW1teS5jICRkdW1teQotCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKIAllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKIAllbHNlCiAJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKIAlmaQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOkFJWDoqOls0NV0pCiAJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCiAJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCkBAIC01NDUsMjggKzU0NCwyOCBAQAogCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQogCWZpCiAJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOkFJWDoqOiopCiAJZWNobyByczYwMDAtaWJtLWFpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKIAllY2hvIHJvbXAtaWJtLWJzZDQuNAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAogCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KLQlleGl0IDAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCiAgICAgKjpCT1NYOio6KikKIAllY2hvIHJzNjAwMC1idWxsLWJvc3gKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKIAllY2hvIG02OGstYnVsbC1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCiAJZWNobyBtNjhrLWhwLWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQogCWVjaG8gbTY4ay1ocC1ic2Q0LjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQogCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAogCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCkBAIC02MjIsMTcgKzYyMSwzNyBAQAogICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7CiAgICAgICAgICAgICAgIH0KIEVPRgotCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAkZHVtbXkuYyAtbyAkZHVtbXkgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YC4vJGR1bW15YAotCQkgICAgaWYgdGVzdCAteiAiJEhQX0FSQ0giOyB0aGVuIEhQX0FSQ0g9aHBwYTsgZmkKLQkJICAgIHJtIC1mICRkdW1teS5jICRkdW1teQorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKIAkJZmkgOzsKIAllc2FjCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQogCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaWE2NDpIUC1VWDoqOiopCiAJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCiAJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAzMDUwKjpISS1VWDoqOiopCiAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCkBAIC02NjAsMTM0ICs2NzksMTc5IEBACiAJICBleGl0ICgwKTsKIAl9CiBFT0YKLQkkQ0NfRk9SX0JVSUxEICRkdW1teS5jIC1vICRkdW1teSAmJiAuLyRkdW1teSAmJiBybSAtZiAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi0Jcm0gLWYgJGR1bW15LmMgJGR1bW15CisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCiAJZWNobyBocHBhMS4xLWhwLWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKIAllY2hvIGhwcGExLjEtaHAtb3NmCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGhwOD8/Ok9TRjE6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1vc2YKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaSo4NjpPU0YxOio6KikKIAlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCiAJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtawogCWVsc2UKIAkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQogCWZpCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKIAllY2hvIGhwcGExLjEtaHAtbGl0ZXMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKIAllY2hvIGMxLWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQogCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwogCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAogCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCiAJZmkKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCiAJZWNobyBjMzQtY29udmV4LWJzZAotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OwogICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKIAllY2hvIGMzOC1jb252ZXgtYnNkCi0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKIAllY2hvIGM0LWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBDUkFZKlktTVA6KjoqOiopCiAJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAogCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAogCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKIAkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIENSQVkqVFM6KjoqOiopCiAJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDAgOzsKLSAgICBDUkFZKlQzRDoqOio6KikKLQllY2hvIGFscGhhLWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQ1JBWSpUM0U6KjoqOiopCiAJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIENSQVkqU1YxOio6KjoqKQogCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OwogICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQogCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCiAgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKICAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKICAgICAgICAgZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKICAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgc3BhcmMqOkJTRC9PUzoqOiopCiAJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6QlNEL09TOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOkZyZWVCU0Q6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCi0JZXhpdCAwIDs7CisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHBjOTgpCisJCWVjaG8gaTM4Ni11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKICAgICBpKjpDWUdXSU4qOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpKjpNSU5HVyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisgICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OwogICAgIGkqOlBXKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCi0JZXhpdCAwIDs7Ci0gICAgeDg2OkludGVyaXgqOjMqKQotCWVjaG8gaTM4Ni1wYy1pbnRlcml4MwotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICB4ODY6SW50ZXJpeCo6WzM0NTZdKikKKwllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgRU02NFQ6SW50ZXJpeCo6WzM0NTZdKikKKwllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKICAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKIAkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CiAJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKIAkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/Ci0JZWNobyBpMzg2LXBjLWludGVyaXgKLQlleGl0IDAgOzsKKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKICAgICBpKjpVV0lOKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OwogICAgIHAqOkNZR1dJTio6KikKIAllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBwcmVwKjpTdW5PUzo1Lio6KikKIAllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCiAJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OwogICAgIGkqODY6TWluaXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBhcm0qOkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyBjcmlzLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICBpYTY0OkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICBtNjgqOkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgbWlwczpMaW51eDoqOiopCiAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCkBAIC04MDQsMTYgKzg2OCw0NSBAQAogCSNlbmRpZgogCSNlbmRpZgogRU9GCi0JZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgXkNQVT1gCi0Jcm0gLWYgJGR1bW15LmMKLQl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIGVjaG8gIiR7Q1BVfS1wYy1saW51eC1nbnUiICYmIGV4aXQgMAorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KIAk7OworICAgIG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzNjQKKwkjdW5kZWYgbWlwczY0ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzNjRlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwczY0CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eQ1BVL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CiAgICAgcHBjOkxpbnV4Oio6KikKIAllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgcHBjNjQ6TGludXg6KjoqKQogCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGFscGhhOkxpbnV4Oio6KikKIAljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgogCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKQEAgLTgyNyw3ICs5MjAsNyBAQAogCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgbGQuc28uMSA+L2Rldi9udWxsCiAJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKIAkjIExvb2sgZm9yIENQVSBsZXZlbAogCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCkBAIC04MzUsMjIgKzkyOCwyOCBAQAogCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CiAJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKIAllc2FjCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCiAJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICBzaCo6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICB4ODZfNjQ6TGludXg6KjoqKQogCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGkqODY6TGludXg6KjoqKQogCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCiAJIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudApAQCAtODY4LDE1ICs5NjcsMTUgQEAKIAkJOzsKIAkgIGEub3V0LWkzODYtbGludXgpCiAJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKLQkJZXhpdCAwIDs7CQkKKwkJZXhpdCA7OwogCSAgY29mZi1pMzg2KQogCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWNvZmYiCi0JCWV4aXQgMCA7OworCQlleGl0IDs7CiAJICAiIikKIAkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCiAJCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgogCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgotCQlleGl0IDAgOzsKKwkJZXhpdCA7OwogCWVzYWMKIAkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKQEAgLTg5MywyNCArOTkyLDMzIEBACiAJTElCQz1nbnVsaWJjMQogCSMgZW5kaWYKIAkjZWxzZQotCSNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisJI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX1BHSSkgfHwgZGVmaW5lZChfX1NVTlBST19DKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKQogCUxJQkM9Z251CiAJI2Vsc2UKIAlMSUJDPWdudWFvdXQKIAkjZW5kaWYKIAkjZW5kaWYKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgogRU9GCi0JZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgXkxJQkM9YAotCXJtIC1mICRkdW1teS5jCi0JdGVzdCB4IiR7TElCQ30iICE9IHggJiYgZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IiAmJiBleGl0IDAKLQl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIGVjaG8gIiR7VEVOVEFUSVZFfSIgJiYgZXhpdCAwCisJZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJworCSAgICAvXkxJQkMveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7TElCQ30iICE9IHggJiYgeworCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJCWV4aXQKKwl9CisJdGVzdCB4IiR7VEVOVEFUSVZFfSIgIT0geCAmJiB7IGVjaG8gIiR7VEVOVEFUSVZFfSI7IGV4aXQ7IH0KIAk7OwogICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCiAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KIAkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCiAJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KIAllY2hvIGkzODYtc2VxdWVudC1zeXN2NAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQogICAgICAgICAjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCiAgICAgICAgICMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KQEAgLTkxOCw3ICsxMDI2LDI3IEBACiAJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgogICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKICAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQogCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAogCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgpAQCAtOTI2LDk5ICsxMDU0LDEwMCBAQAogCWVsc2UKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KIAlmaQotCWV4aXQgMCA7OwotICAgIGkqODY6Kjo1Ols3OF0qKQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgogCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCiAJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OwogCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKIAkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKIAllc2FjCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGkqODY6KjozLjI6KikKIAlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCiAJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKIAllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KLQkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxlZ3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKLQkJKC9iaW4vdW5hbWUgLVh8ZWdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgotCQkoL2Jpbi91bmFtZSAtWHxlZ3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKIAkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgotCQkoL2Jpbi91bmFtZSAtWHxlZ3JlcCAnXk1hY2hpbmUuKlBlbnQgP0lJJyA+L2Rldi9udWxsKSBcCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAogCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2Ci0JCSgvYmluL3VuYW1lIC1YfGVncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCiAJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKIAllbHNlCiAJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKIAlmaQotCWV4aXQgMCA7OwotICAgIGkqODY6KkRPUzoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgcGM6KjoqOiopCiAJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CiAgICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CiAgICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGkzODYuCiAJZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKLSAgICAgICAgZXhpdCAwIDs7CisgICAgICAgIGV4aXQgOzsKICAgICBJbnRlbDpNYWNoOjMqOiopCiAJZWNobyBpMzg2LXBjLW1hY2gzCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBhcmFnb246KjoqOiopCiAJZWNobyBpODYwLWludGVsLW9zZjEKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAogCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCiAJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CiAJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgogCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKIAlmaQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBtaW5pKjpDVElYOlNZUyo1OiopCiAJIyAibWluaWZyYW1lIgogCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgotCWV4aXQgMCA7OwotICAgIE02OCo6KjpSM1ZbNTY3XSo6KikKLQl0ZXN0IC1yIC9zeXNWNjggJiYgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JyAmJiBleGl0IDAgOzsKLSAgICAzWzM0XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjApCisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQogCU9TX1JFTD0nJwogCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAogCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCiAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH0gJiYgZXhpdCAwCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQogCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAotCSAgJiYgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9ICYmIGV4aXQgMCA7OworCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKICAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKICAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0gICAgICAgICAgJiYgZWNobyBpNDg2LW5jci1zeXN2NCAmJiBleGl0IDAgOzsKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKICAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKIAllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKIAllY2hvIG02OGstYXRhcmktc3lzdjQKLQlleGl0IDAgOzsKLSAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKLQllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQogCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCiAJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC4wKjoqKQogCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgU01bQkVdUzpVTklYX1NWOio6KikKIAllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKIAllY2hvIG1pcHMtc25pLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFJNKjpTSU5JWC0qOio6KikKIAllY2hvIG1pcHMtc25pLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6U0lOSVgtKjoqOiopCiAJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KIAkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKQEAgLTEwMjYsNjEgKzExNTUsNzIgQEAKIAllbHNlCiAJCWVjaG8gbnMzMmstc25pLXN5c3YKIAlmaQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAogICAgICAgICAgICAgICAgICAgICAgICMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KICAgICAgICAgZWNobyBpNTg2LXVuaXN5cy1zeXN2NAotICAgICAgICBleGl0IDAgOzsKKyAgICAgICAgZXhpdCA7OwogICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQogCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KIAkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KIAllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOio6KjpGVFgqKQogCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgogCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CiAgICAgKjpWT1M6KjoqKQogCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgogCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBtYzY4KjpBL1VYOio6KikKIAllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBuZXdzKjpORVdTLU9TOjYqOiopCiAJZWNobyBtaXBzLXNvbnktbmV3c29zNgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKIAlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KIAkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KIAllbHNlCiAJICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQogCWZpCi0gICAgICAgIGV4aXQgMCA7OworICAgICAgICBleGl0IDs7CiAgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgogCWVjaG8gcG93ZXJwYy1iZS1iZW9zCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KIAllY2hvIHBvd2VycGMtYXBwbGUtYmVvcwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgogCWVjaG8gaTU4Ni1wYy1iZW9zCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFNYLTQ6U1VQRVItVVg6KjoqKQogCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBTWC01OlNVUEVSLVVYOio6KikKIAllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIFBvd2VyKjpSaGFwc29keToqOiopCiAJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOlJoYXBzb2R5Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6RGFyd2luOio6KikKLQllY2hvIGB1bmFtZSAtcGAtYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCiAJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKIAlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCkBAIC0xMDg4LDIyICsxMjI4LDI1IEBACiAJCVVOQU1FX01BQ0hJTkU9cGMKIAlmaQogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpRTlg6Kjo0KikKIAllY2hvIGkzODYtcGMtcW54Ci0JZXhpdCAwIDs7Ci0gICAgTlNSLVtHS0xOUFRWV106Tk9OU1RPUF9LRVJORUw6KjoqKQorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQogCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6Tm9uU3RvcC1VWDoqOiopCiAJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQlMyMDAwOlBPU0lYKjoqOiopCiAJZWNobyBiczIwMDAtc2llbWVucy1zeXN2Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6UGxhbjk6KjoqKQogCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgogCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CkBAIC0xMTE0LDM2ICsxMjU3LDQ3IEBACiAJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgogCWZpCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKLQlleGl0IDAgOzsKLSAgICBpKjg2Ok9TLzI6KjoqKQotCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5Ci0JIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpUT1BTLTEwOio6KikKIAllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6VEVORVg6KjoqKQogCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQogCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQogCWVjaG8gcGRwMTAteGtsLXRvcHMyMAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOlRPUFMtMjA6KjoqKQogCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpJVFM6KjoqKQogCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKLQlleGl0IDAgOzsKLSAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKLQlleGl0IDAgOzsKLSAgICBpKjg2OmF0aGVvczoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisgICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisgICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKIGVzYWMKIAogI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCkBAIC0xMTc1LDcgKzEzMjksNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQotICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4Iik7IGV4aXQgKDApOworICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKQEAgLTEyNjQsMTIgKzE0MTgsMTIgQEAKIH0KIEVPRgogCi0kQ0NfRk9SX0JVSUxEICRkdW1teS5jIC1vICRkdW1teSAyPi9kZXYvbnVsbCAmJiAuLyRkdW1teSAmJiBybSAtZiAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi1ybSAtZiAkZHVtbXkuYyAkZHVtbXkKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAKICMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KIAotdGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0IDA7IH0KK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQogCiAjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCiAKQEAgLTEyNzgsMjIgKzE0MzIsMjIgQEAKICAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgogICAgIGMxKikKIAllY2hvIGMxLWNvbnZleC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgYzIqKQogCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwogCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAogCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCiAJZmkKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgYzM0KikKIAllY2hvIGMzNC1jb252ZXgtYnNkCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGMzOCopCiAJZWNobyBjMzgtY29udmV4LWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBjNCopCiAJZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGVzYWMKIGZpCiAKQEAgLTEzMDQsNyArMTQ1OCw5IEBACiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91CiBkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KIAotICAgIGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29uZmlnLworICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5ndWVzcworYW5kCisgIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy8qY2hlY2tvdXQqL2NvbmZpZy9jb25maWcvY29uZmlnLnN1YgogCiBJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKIHNlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCmRpZmYgLS1naXQgYS9jb25mdG9vbHMvY29uZmlnLnN1YiBiL2NvbmZ0b29scy9jb25maWcuc3ViCmluZGV4IDA0M2Q0NWIuLmZhYjBhYTMgMTAwNzU1Ci0tLSBhL2NvbmZ0b29scy9jb25maWcuc3ViCisrKyBiL2NvbmZ0b29scy9jb25maWcuc3ViCkBAIC0xLDkgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4KIAotdGltZXN0YW1wPScyMDAyLTAzLTA3JwordGltZXN0YW1wPScyMDA2LTA5LTIwJwogCiAjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KICMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQpAQCAtMjEsMTggKzIyLDE0IEBACiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0KKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIwogIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CiAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQogIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUaGlzIGZpbGUgY29udGFpbnMgY2hhbmdlcyBmb3IgQXBhY2hlLCBjbGVhcmx5IG1hcmtlZCBiZWxvdy4KLSMgVGhlc2UgY2hhbmdlcyBhcmUgaGVyZWJ5IGRvbmF0ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKICMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgpAQCAtNzUsNyArNzIsNyBAQAogdmVyc2lvbj0iXAogR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCiAKLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KQEAgLTg4LDExICs4NSwxMSBAQAogd2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCiAgIGNhc2UgJDEgaW4KICAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQotICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCAwIDs7CisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CiAgICAgLS12ZXJzaW9uIHwgLXYgKQotICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgMCA7OworICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKICAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgMCA7OworICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKICAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKICAgICAgICBzaGlmdDsgYnJlYWsgOzsKICAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCkBAIC0xMDQsNyArMTAxLDcgQEAKICAgICAqbG9jYWwqKQogICAgICAgICMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVzLgogICAgICAgIGVjaG8gJDEKLSAgICAgICBleGl0IDA7OworICAgICAgIGV4aXQgOzsKIAogICAgICogKQogICAgICAgIGJyZWFrIDs7CkBAIC0xMjMsMjggKzEyMCwxMiBAQAogIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAogY2FzZSAkbWF5YmVfb3MgaW4KLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCB3aW5kb3dzMzItKiB8IHJ0bWstbm92YSopCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LXVjbGliYyogfCBcCisgIHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQogICAgIG9zPS0kbWF5YmVfb3MKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAogICAgIDs7Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgY2hhbmdlcyBmb3IgQXBhY2hlCi0jCi0gIHRwZiB8IG9zMzkwIHwgdm1jbXMpCi0gICAgb3M9LSRtYXliZV9vcwotICAgIGJhc2ljX21hY2hpbmU9czM5MDsKLSAgICA7OwotICBvczQwMCkKLSAgICBvcz0tJG1heWJlX29zCi0gICAgYmFzaWNfbWFjaGluZT1hczQwMDsKLSAgICA7OwotICBtdnMpCi0gICAgb3M9LW12cwotICAgIGJhc2ljX21hY2hpbmU9aTM3MDsKLSAgICA7OwotIwotIyBlbmQgQXBhY2hlIGNoYW5nZXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAqKQogICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKICAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KQEAgLTE2Nyw3ICsxNDgsNyBAQAogCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCiAJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKIAktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKLQktYXBwbGUgfCAtYXhpcykKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5KQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OwpAQCAtMTkyLDYgKzE3MywxMCBAQAogCS1oaXV4KikKIAkJb3M9LWhpdXh3ZTIKIAkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CiAJLXNjbzUpCiAJCW9zPS1zY28zLjJ2NQogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCkBAIC0yMDgsNiArMTkzLDEwIEBACiAJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKIAkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OwogCS1zY28qKQogCQlvcz0tc2NvMy4ydjIKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYApAQCAtMjUxLDMxICsyNDAsNTIgQEAKIAl8IGEyOWsgXAogCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKIAl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAotCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKKwl8IGJmaW4gXAogCXwgYzR4IHwgY2xpcHBlciBcCi0JfCBkMTB2IHwgZDMwdiB8IGRzcDE2eHggXAotCXwgZnIzMCBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZnIzMCB8IGZydiBcCiAJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAogCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCi0JfCBtMzJyIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgfCBtY29yZSBcCi0JfCBtaXBzIHwgbWlwczE2IHwgbWlwczY0IHwgbWlwczY0ZWwgfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAotCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgfCBtaXBzNjR2cjQzMDAgXAotCXwgbWlwczY0dnI0MzAwZWwgfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCi0JfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAotCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5pb3MgfCBuaW9zMiBcCiAJfCBuczE2ayB8IG5zMzJrIFwKLQl8IG9wZW5yaXNjIHwgb3IzMiBcCisJfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCiAJfCBweXJhbWlkIFwKLQl8IHNoIHwgc2hbMzRdIHwgc2hbMzRdZWIgfCBzaGJlIHwgc2hsZSB8IHNoNjQgXAotCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSB8IHNwYXJjdjkgfCBzcGFyY3Y5YiBcCi0JfCBzdHJvbmdhcm0gXAotCXwgdGFob2UgfCB0aHVtYiB8IHRpYzgwIHwgdHJvbiBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCiAJfCB2ODUwIHwgdjg1MGUgXAogCXwgd2UzMmsgXAotCXwgeDg2IHwgeHNjYWxlIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHNjYWxlIHwgeHNjYWxlZVtibF0gfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAogCXwgejhrKQogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKQEAgLTI4Niw2ICsyOTYsOSBAQAogCQk7OwogCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQogCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CiAKIAkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJwogCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZApAQCAtMzA0LDM4ICszMTcsNTkgQEAKIAl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAogCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKIAl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAotCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm12Ki0qIFwKLQl8IGF2ci0qIFwKLQl8IGJzMjAwMC0qIFwKLQl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM1NHgtKiBcCi0JfCBjbGlwcGVyLSogfCBjeWRyYS0qIFwKLQl8IGQxMHYtKiB8IGQzMHYtKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIHwgYXZyMzItKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCiAJfCBlbHhzaS0qIFwKLQl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZyMzAtKiB8IGZ4ODAtKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCiAJfCBoODMwMC0qIHwgaDg1MDAtKiBcCiAJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKLQl8IG0zMnItKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCiAJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAotCXwgbTg4MTEwLSogfCBtODhrLSogfCBtY29yZS0qIFwKLQl8IG1pcHMtKiB8IG1pcHMxNi0qIHwgbWlwczY0LSogfCBtaXBzNjRlbC0qIHwgbWlwczY0b3Jpb24tKiBcCi0JfCBtaXBzNjRvcmlvbmVsLSogfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAotCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiBcCi0JfCBtaXBzbGUtKiB8IG1pcHNlbC0qIHwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKIAl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAogCXwgb3Jpb24tKiBcCiAJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKIAl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCiAJfCBweXJhbWlkLSogXAogCXwgcm9tcC0qIHwgcnM2MDAwLSogXAotCXwgc2gtKiB8IHNoWzM0XS0qIHwgc2hbMzRdZWItKiB8IHNoYmUtKiB8IHNobGUtKiB8IHNoNjQtKiBcCi0JfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogfCBzcGFyY2xpdGUtKiBcCi0JfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKLQl8IHRhaG9lLSogfCB0aHVtYi0qIHwgdGljMzAtKiB8IHRpYzU0eC0qIHwgdGljODAtKiB8IHRyb24tKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0cm9uLSogXAogCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKIAl8IHdlMzJrLSogXAotCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c3Rvcm15MTYtKiBcCi0JfCB4dGVuc2EtKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhLSogXAogCXwgeW1wLSogXAogCXwgejhrLSopCiAJCTs7CkBAIC0zNTUsNiArMzg5LDkgQEAKIAkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAogCQlvcz0tdWRpCiAJCTs7CisgICAgCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OwogCWFkb2JlNjhrKQogCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQogCQlvcz0tc2NvdXQKQEAgLTM2OSw2ICs0MDYsMTIgQEAKIAkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKIAkJb3M9LWJzZAogCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJYW1kYWhsKQogCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKIAkJb3M9LXN5c3YKQEAgLTQyOCwxMiArNDcxLDI3IEBACiAJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKIAkJb3M9LXVuaWNvcwogCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2YykKKwkJYmFzaWNfbWFjaGluZT1jcjE2Yy11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKIAljcmRzIHwgdW5vcykKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKIAkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CiAJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKIAkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKIAkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OwogCWRhMzAgfCBkYTMwLSopCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCiAJCTs7CkBAIC00NTYsNiArNTE0LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQogCQlvcz0tc3lzdjMKIAkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CiAJZHB4MjAgfCBkcHgyMC0qKQogCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCiAJCW9zPS1ib3N4CkBAIC02MzQsMTAgKzY5Niw2IEBACiAJbWlwczMqKQogCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCiAJCTs7Ci0JbW1peCopCi0JCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAotCQlvcz0tbW1peHdhcmUKLQkJOzsKIAltb25pdG9yKQogCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCiAJCW9zPS1jb2ZmCkBAIC02NTAsNiArNzA4LDkgQEAKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCiAJCW9zPS1tc2RvcwogCQk7OworCW1zMS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCisJCTs7CiAJbXZzKQogCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCiAJCW9zPS1tdnMKQEAgLTcyNSw5ICs3ODYsMTIgQEAKIAkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQogCQlvcz0tcHJvZWxmCiAJCTs7Ci0Jb3IzMiB8IG9yMzItKikKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCiAJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCi0JCW9zPS1jb2ZmCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCiAJCTs7CiAJT1NFNjgwMDAgfCBvc2U2ODAwMCkKIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KQEAgLTc1MSw0OSArODE1LDYxIEBACiAJcGJiKQogCQliYXNpY19tYWNoaW5lPW02OGstdHRpCiAJCTs7Ci0gICAgICAgIHBjNTMyIHwgcGM1MzItKikKKwlwYzUzMiB8IHBjNTMyLSopCiAJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKIAkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OwogCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKIAkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCiAJCTs7Ci0JcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbikKKwlwZW50aXVtcHJvIHwgcDYgfCA2eDg2IHwgYXRobG9uIHwgYXRobG9uXyopCiAJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwogCQk7OwotCXBlbnRpdW1paSB8IHBlbnRpdW0yKQorCXBlbnRpdW1paSB8IHBlbnRpdW0yIHwgcGVudGl1bWlpaSB8IHBlbnRpdW0zKQogCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKIAkJOzsKKwlwZW50aXVtNCkKKwkJYmFzaWNfbWFjaGluZT1pNzg2LXBjCisJCTs7CiAJcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQogCQliYXNpY19tYWNoaW5lPWk1ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKIAlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCiAJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwotCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKikKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQogCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKIAlwbikKIAkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAogCQk7OwogCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQogCQk7OwogCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KLQkgICAgICAgIDs7CisJCTs7CiAJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCi0JICAgICAgICA7OworCQk7OwogCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7CiAJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KLQkgICAgICAgIDs7CisJCTs7CiAJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKIAlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KLQkgICAgICAgIDs7CisJCTs7CiAJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKQEAgLTgwNCw2ICs4ODAsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KIAkJb3M9LXB3MzIKIAkJOzsKKwlyZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKIAlyb202OGspCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKIAkJb3M9LWNvZmYKQEAgLTgyNCwxNSArOTA0LDIwIEBACiAJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKIAkJb3M9LXVkaQogCQk7OwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGNoYW5nZXMgZm9yIEFwYWNoZQotIwotCWFzNDAwKikKLQkJYmFzaWNfbWFjaGluZT1hczQwMC1pYm0KKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KIAkJOzsKLSMgCi0jIGVuZCBBcGFjaGUgY2hhbmdlcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CiAJc2VxdWVudCkKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKIAkJOzsKQEAgLTg0MCw2ICs5MjUsOSBAQAogCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKIAkJb3M9LWhtcwogCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CiAJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKIAkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCiAJCW9zPS12eHdvcmtzCkBAIC04OTgsNyArOTg2LDcgQEAKIAlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgogCQk7OwotICAgICAgICBzdjEpCisJc3YxKQogCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKQEAgLTkwNiwxMCArOTk0LDYgQEAKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKIAkJb3M9LWR5bml4CiAJCTs7Ci0JdDNkKQotCQliYXNpY19tYWNoaW5lPWFscGhhLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwogCXQzZSkKIAkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CiAJCW9zPS11bmljb3MKQEAgLTkyMiw2ICsxMDA2LDE0IEBACiAJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KIAkJb3M9LWNvZmYKIAkJOzsKKwl0aWM1NXggfCBjNTV4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4IHwgYzZ4KikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CiAJdHgzOSkKIAkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCiAJCTs7CkBAIC05MzUsNiArMTAyNywxMCBAQAogCXRvd2VyIHwgdG93ZXItMzIpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKIAkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKIAl1ZGkyOWspCiAJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKIAkJb3M9LXVkaQpAQCAtOTU2LDggKzEwNTIsOCBAQAogCQlvcz0tdm1zCiAJCTs7CiAJdnBwKnx2eHx2eC0qKQotICAgICAgICAgICAgICAgYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKLSAgICAgICAgICAgICAgIDs7CisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CiAJdnh3b3Jrczk2MCkKIAkJYmFzaWNfbWFjaGluZT1pOTYwLXdycwogCQlvcz0tdnh3b3JrcwpAQCAtOTc4LDExICsxMDc0LDExIEBACiAJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCiAJCW9zPS1wcm9lbGYKIAkJOzsKLQl3aW5kb3dzMzIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0td2luZG93czMyLW1zdmNydAorCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgogCQk7OwotICAgICAgICB4cHMgfCB4cHMxMDApCisJeHBzIHwgeHBzMTAwKQogCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKIAkJOzsKIAl5bXApCkBAIC0xMDEyLDYgKzExMDgsOSBAQAogCXJvbXApCiAJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KIAkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKIAlyczYwMDApCiAJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQogCQk7OwpAQCAtMTAyOCwxNiArMTEyNywxMyBAQAogCXdlMzJrKQogCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAogCQk7OwotCXNoMyB8IHNoNCB8IHNoM2ViIHwgc2g0ZWIpCisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQogCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KIAkJOzsKLQlzaDY0KQotCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgotCQk7OwotCXNwYXJjIHwgc3BhcmN2OSB8IHNwYXJjdjliKQorCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQogCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgogCQk7OwotICAgICAgICBjeWRyYSkKKwljeWRyYSkKIAkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCiAJCTs7CiAJb3Jpb24pCkBAIC0xMDUyLDEwICsxMTQ4LDYgQEAKIAlwbWFjIHwgcG1hYy1tcHcpCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQogCQk7OwotCWM0eCopCi0JCWJhc2ljX21hY2hpbmU9YzR4LW5vbmUKLQkJb3M9LWNvZmYKLQkJOzsKIAkqLXVua25vd24pCiAJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCiAJCTs7CkBAIC0xMTAwLDE0ICsxMTkyLDYgQEAKIAktZ251L2xpbnV4KikKIAkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKIAkJOzsKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBjaGFuZ2VzIGZvciBBcGFjaGUKLSMKLQktb3MyX2VteCB8IC10cGYqIHwgLW9zMzkwKiB8IC12bWNtcyogfCAtb3M0MDAqICkKLSAgICAgICAgCTs7Ci0jCi0jIGVuZCBBcGFjaGUgY2hhbmdlcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KIAkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgogCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCkBAIC0xMTE5LDE4ICsxMjAzLDIzIEBACiAJICAgICAgfCAtYW9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKLQkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLW5ldGJzZCogfCAtb3BlbmJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiBcCi0JICAgICAgfCAtbHlueG9zKiB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAogCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKIAkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKIAkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCiAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAotCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAotCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKIAkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKIAkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCi0JICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKikKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyopCiAJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCQk7OwogCS1xbngqKQpAQCAtMTE0MiwxNiArMTIzMSwyMSBAQAogCQkJOzsKIAkJZXNhYwogCQk7OworCS1udG8tcW54KikKKwkJOzsKIAktbnRvKikKLQkJb3M9LW50by1xbngKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCiAJCTs7CiAJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAotCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKIAkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQogCQk7OwogCS1tYWMqKQogCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCiAJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKIAktbGludXgqKQogCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCiAJCTs7CkBAIC0xMTY0LDYgKzEyNTgsOSBAQAogCS1vcGVuZWQqKQogCQlvcz0tb3BlbmVkaXRpb24KIAkJOzsKKyAgICAgICAgLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CiAJLXdpbmNlKikKIAkJb3M9LXdpbmNlCiAJCTs7CkBAIC0xMTg1LDYgKzEyODIsOSBAQAogCS1hdGhlb3MqKQogCQlvcz0tYXRoZW9zCiAJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CiAJLTM4NmJzZCkKIAkJb3M9LWJzZAogCQk7OwpAQCAtMTE5NSw3ICsxMjk1LDcgQEAKIAkJb3M9LXJ0bWstbm92YQogCQk7OwogCS1uczIgKQotCSAgICAgICAgb3M9LW5leHRzdGVwMgorCQlvcz0tbmV4dHN0ZXAyCiAJCTs7CiAJLW5zayopCiAJCW9zPS1uc2sKQEAgLTEyMDcsNiArMTMwNyw5IEBACiAJLXNpbml4KikKIAkJb3M9LXN5c3Y0CiAJCTs7CisgICAgICAgIC10cGYqKQorCQlvcz0tdHBmCisJCTs7CiAJLXRyaXRvbiopCiAJCW9zPS1zeXN2MwogCQk7OwpAQCAtMTIzNCw4ICsxMzM3LDE3IEBACiAJLXhlbml4KQogCQlvcz0teGVuaXgKIAkJOzsKLSAgICAgICAgLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKLQkgICAgICAgIG9zPS1taW50CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCiAJCTs7CiAJLW5vbmUpCiAJCTs7CkBAIC0xMjU5LDYgKzEzNzEsMTIgQEAKICMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCiAKIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAgICAgICAgc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworICAgICAgICBzcHUtKikKKwkJb3M9LWVsZgorCQk7OwogCSotYWNvcm4pCiAJCW9zPS1yaXNjaXgxLjIKIAkJOzsKQEAgLTEyNjgsMTEgKzEzODYsMTQgQEAKIAlhcm0qLXNlbWkpCiAJCW9zPS1hb3V0CiAJCTs7CisgICAgICAgIGM0eC0qIHwgdGljNHgtKikKKyAgICAgICAgCW9zPS1jb2ZmCisJCTs7CiAJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgogCXBkcDEwLSopCiAJCW9zPS10b3BzMjAKIAkJOzsKLSAgICAgICAgcGRwMTEtKikKKwlwZHAxMS0qKQogCQlvcz0tbm9uZQogCQk7OwogCSotZGVjIHwgdmF4LSopCkBAIC0xMzExLDMzICsxNDMyLDE1IEBACiAJKi1iZSkKIAkJb3M9LWJlb3MKIAkJOzsKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBjaGFuZ2VzIGZvciBBcGFjaGUKLSMKLSMJKi1pYm0pCi0jCQlvcz0tYWl4Ci0jCQk7OwotIworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OwogCSotaWJtKQotCQljYXNlICRiYXNpY19tYWNoaW5lIGluCi0JCQlzMzkwKikKLQkJCQlvcz0tb3MzOTA7Ci0JCQkJOzsKLQkJCWkzNzAqKQotCQkJCW9zPS1tdnM7Ci0JCQkJOzsKLQkJCWFzNDAwKikKLQkJCQlvcz0tb3M0MDA7Ci0JCQkJOzsKLQkJCSopCi0JCQkJb3M9LWFpeAotCQkJCTs7Ci0JCWVzYWMKLSAgICAgICAgICAgICAgICA7OwotIyAKLSMgZW5kIEFwYWNoZSBjaGFuZ2VzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQorCQlvcz0tYWl4CisJCTs7CisgICAgCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OwogCSotd2VjKQogCQlvcz0tcHJvZWxmCiAJCTs7CkBAIC0xMzg5LDE5ICsxNDkyLDE5IEBACiAJKi1uZXh0KQogCQlvcz0tbmV4dHN0ZXAzCiAJCTs7Ci0gICAgICAgICotZ291bGQpCisJKi1nb3VsZCkKIAkJb3M9LXN5c3YKIAkJOzsKLSAgICAgICAgKi1oaWdobGV2ZWwpCisJKi1oaWdobGV2ZWwpCiAJCW9zPS1ic2QKIAkJOzsKIAkqLWVuY29yZSkKIAkJb3M9LWJzZAogCQk7OwotICAgICAgICAqLXNnaSkKKwkqLXNnaSkKIAkJb3M9LWlyaXgKIAkJOzsKLSAgICAgICAgKi1zaWVtZW5zKQorCSotc2llbWVucykKIAkJb3M9LXN5c3Y0CiAJCTs7CiAJKi1tYXNzY29tcCkKQEAgLTE0NzAsMTAgKzE1NzMsMTYgQEAKIAkJCS1tdnMqIHwgLW9wZW5lZCopCiAJCQkJdmVuZG9yPWlibQogCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OwogCQkJLXB0eCopCiAJCQkJdmVuZG9yPXNlcXVlbnQKIAkJCQk7OwotCQkJLXZ4c2ltKiB8IC12eHdvcmtzKikKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKIAkJCQl2ZW5kb3I9d3JzCiAJCQkJOzsKIAkJCS1hdXgqKQpAQCAtMTQ5Nyw3ICsxNjA2LDcgQEAKIGVzYWMKIAogZWNobyAkYmFzaWNfbWFjaGluZSRvcwotZXhpdCAwCitleGl0CiAKICMgTG9jYWwgdmFyaWFibGVzOgogIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCmRpZmYgLS1naXQgYS9kb2MvcmVmZXJlbmNlLmh0bWwgYi9kb2MvcmVmZXJlbmNlLmh0bWwKaW5kZXggZTgxMmM3ZC4uYTMxNTg3MCAxMDA2NDQKLS0tIGEvZG9jL3JlZmVyZW5jZS5odG1sCisrKyBiL2RvYy9yZWZlcmVuY2UuaHRtbApAQCAtMTksNyArMTksNyBAQAogICAgICAgPHRkIGNsYXNzPSJiYW5uZXIiPjxoMT5UaGUgRXhwYXQgWE1MIFBhcnNlcjwvaDE+PC90ZD4KICAgICA8L3RyPgogICAgIDx0cj4KLSAgICAgIDx0ZCBjbGFzcz0icmVsZWFzZW5vIj5SZWxlYXNlIDIuMC4wPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0icmVsZWFzZW5vIj5SZWxlYXNlIDIuMC4xPC90ZD4KICAgICAgIDx0ZD48L3RkPgogICAgIDwvdHI+CiAgIDwvdGFibGU+CkBAIC0zODQsNyArMzg0LDcgQEAKIHVzdWFsbHkgYmUgZG9uZSB3aXRoIHRoZSA8Y29kZT4tbGV4cGF0PC9jb2RlPiBhcmd1bWVudC4gIE90aGVyd2lzZSwKIHlvdSdsbCBuZWVkIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBFeHBhdCBoZWFkZXIKIGFuZCB0aGUgbGlua2VyIHdoZXJlIHRvIGZpbmQgdGhlIEV4cGF0IGxpYnJhcnkuICBZb3UgbWF5IGFsc28gbmVlZCB0bwotdGFrZSBzdGVwcyB0byB0ZWxsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRvIGZpbmQgdGhpcyBsaWJhcnkgYXQKK3Rha2Ugc3RlcHMgdG8gdGVsbCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aGVyZSB0byBmaW5kIHRoaXMgbGlicmFyeSBhdAogcnVuIHRpbWUuPC9wPgogCiA8cD5PbiBhIFVuaXgtYmFzZWQgc3lzdGVtLCBoZXJlJ3Mgd2hhdCBhIE1ha2VmaWxlIG1pZ2h0IGxvb2sgbGlrZSB3aGVuCkBAIC0xMTAzLDggKzExMDMsMTAgQEAKIDx1bD4KICAgPGxpPiB0aGUgZW5kIGVsZW1lbnQgaGFuZGxlciBmb3IgZW1wdHkgZWxlbWVudHMgd2hlbiBzdG9wcGVkIGluIHRoZQogICAgICAgIHN0YXJ0IGVsZW1lbnQgaGFuZGxlciw8L2xpPgotICA8bGk+IGVuZCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaGFuZGxlciB3aGVuIHN0b3BwZWQgaW4gdGhlIGVuZAorICA8bGk+IHRoZSBlbmQgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGhhbmRsZXIgd2hlbiBzdG9wcGVkIGluIHRoZSBlbmQKICAgICAgICBlbGVtZW50IGhhbmRsZXIsPC9saT4KKyAgPGxpPiB0aGUgY2hhcmFjdGVyIGRhdGEgaGFuZGxlciB3aGVuIHN0b3BwZWQgaW4gdGhlIGNoYXJhY3RlciBkYXRhIGhhbmRsZXIKKyAgICAgICB3aGlsZSBtYWtpbmcgbXVsdGlwbGUgY2FsbC1iYWNrcyBvbiBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgY2hhcmFjdGVycyw8L2xpPgogPC91bD4KIGFuZCBwb3NzaWJseSBvdGhlcnMuPC9wPgogCkBAIC0xMjg4LDcgKzEyOTAsMTAgQEAKIHRvIGRlYWwgd2l0aCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIEEgc2luZ2xlIGJsb2NrIG9mIGNvbnRpZ3VvdXMgdGV4dAogZnJlZSBvZiBtYXJrdXAgbWF5IHN0aWxsIHJlc3VsdCBpbiBhIHNlcXVlbmNlIG9mIGNhbGxzIHRvIHRoaXMgaGFuZGxlci4KIEluIG90aGVyIHdvcmRzLCBpZiB5b3UncmUgc2VhcmNoaW5nIGZvciBhIHBhdHRlcm4gaW4gdGhlIHRleHQsIGl0IG1heQotYmUgc3BsaXQgYWNyb3NzIGNhbGxzIHRvIHRoaXMgaGFuZGxlci48L3A+CitiZSBzcGxpdCBhY3Jvc3MgY2FsbHMgdG8gdGhpcyBoYW5kbGVyLiBOb3RlOiBTZXR0aW5nIHRoaXMgaGFuZGxlciB0byBOVUxMCittYXkgPGVtPk5PVCBpbW1lZGlhdGVseTwvZW0+IHRlcm1pbmF0ZSBjYWxsLWJhY2tzIGlmIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5Citwcm9jZXNzaW5nIHN1Y2ggYSBzaW5nbGUgYmxvY2sgb2YgY29udGlndW91cyBtYXJrdXAtZnJlZSB0ZXh0LCBhcyB0aGUgcGFyc2VyCit3aWxsIGNvbnRpbnVlIGNhbGxpbmcgYmFjayB1bnRpbCB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyByZWFjaGVkLjwvcD4KIDwvZGl2PgogCiA8ZGl2IGNsYXNzPSJoYW5kbGVyIj4KQEAgLTIyMTksNyArMjIyNCw5IEBACiAgIFhNTF9GRUFUVVJFX0NPTlRFWFRfQllURVMsCiAgIFhNTF9GRUFUVVJFX01JTl9TSVpFLAogICBYTUxfRkVBVFVSRV9TSVpFT0ZfWE1MX0NIQVIsCi0gIFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfTENIQVIKKyAgWE1MX0ZFQVRVUkVfU0laRU9GX1hNTF9MQ0hBUiwKKyAgWE1MX0ZFQVRVUkVfTlMsCisgIFhNTF9GRUFUVVJFX0xBUkdFX1NJWkUKIH07CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2RvYy94bWx3Zi4xIGIvZG9jL3htbHdmLjEKaW5kZXggOTA3ZDZjMy4uMTc0NzE5YSAxMDA2NDQKLS0tIGEvZG9jL3htbHdmLjEKKysrIGIvZG9jL3htbHdmLjEKQEAgLTEwMiw3ICsxMDIsNyBAQAogLlRQCiBcZkItbVxmUgogT3V0cHV0cyBzb21lIHN0cmFuZ2Ugc29ydCBvZiBYTUwgZmlsZSB0aGF0IGNvbXBsZXRlbHkKLWRlc2NyaWJlcyB0aGUgdGhlIGlucHV0IGZpbGUsIGluY2x1ZGluZyBjaGFyYWN0ZXIgcG9zdGl0aW9ucy4KK2Rlc2NyaWJlcyB0aGUgaW5wdXQgZmlsZSwgaW5jbHVkaW5nIGNoYXJhY3RlciBwb3NpdGlvbnMuCiBSZXF1aXJlcyBcZkItZFxmUiB0byBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlLgogLlRQCiBcZkItblxmUgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZWxlbWVudHMuYyBiL2V4YW1wbGVzL2VsZW1lbnRzLmMKaW5kZXggNDIxYTFjZS4uNmI4Zjg1NSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvZWxlbWVudHMuYworKysgYi9leGFtcGxlcy9lbGVtZW50cy5jCkBAIC04LDYgKzgsMTAgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImV4cGF0LmgiCiAKKyNpZiBkZWZpbmVkKF9fYW1pZ2Fvc19fKSAmJiBkZWZpbmVkKF9fVVNFX0lOTElORV9fKQorI2luY2x1ZGUgPHByb3RvL2V4cGF0Lmg+CisjZW5kaWYKKwogI2lmZGVmIFhNTF9MQVJHRV9TSVpFCiAjaWYgZGVmaW5lZChYTUxfVVNFX01TQ19FWFRFTlNJT05TKSAmJiBfTVNDX1ZFUiA8IDE0MDAKICNkZWZpbmUgWE1MX0ZNVF9JTlRfTU9EICJJNjQiCkBAIC0zNiwxNCArNDAsOCBAQAogICAqZGVwdGhQdHIgLT0gMTsKIH0KIAotI2lmZGVmIEFNSUdBX1NIQVJFRF9MSUIKLSNpbmNsdWRlIDxwcm90by9leHBhdC5oPgotaW50Ci1hbWlnYV9tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0jZWxzZQogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0jZW5kaWYKIHsKICAgY2hhciBidWZbQlVGU0laXTsKICAgWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOwpAQCAtNTIsNyArNTAsNyBAQAogICBYTUxfU2V0VXNlckRhdGEocGFyc2VyLCAmZGVwdGgpOwogICBYTUxfU2V0RWxlbWVudEhhbmRsZXIocGFyc2VyLCBzdGFydEVsZW1lbnQsIGVuZEVsZW1lbnQpOwogICBkbyB7Ci0gICAgc2l6ZV90IGxlbiA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHN0ZGluKTsKKyAgICBpbnQgbGVuID0gKGludClmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBzdGRpbik7CiAgICAgZG9uZSA9IGxlbiA8IHNpemVvZihidWYpOwogICAgIGlmIChYTUxfUGFyc2UocGFyc2VyLCBidWYsIGxlbiwgZG9uZSkgPT0gWE1MX1NUQVRVU19FUlJPUikgewogICAgICAgZnByaW50ZihzdGRlcnIsCmRpZmYgLS1naXQgYS9leGFtcGxlcy9lbGVtZW50cy5kc3AgYi9leGFtcGxlcy9lbGVtZW50cy5kc3AKaW5kZXggNTdhYzcwNi4uNjczMDM1OCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvZWxlbWVudHMuZHNwCisrKyBiL2V4YW1wbGVzL2VsZW1lbnRzLmRzcApAQCAtMzcsOCArMzcsOCBAQAogIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KICMgUFJPUCBVc2VfTUZDIDANCiAjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXHdpbjMyXGJpblxSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcUmVsZWFzZS1lbGVtZW50cyINCiAjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQpAQCAtNTEsNyArNTEsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiY2NwMzIubGliIGxpYmV4cGF0TVQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXGxpYlxSZWxlYXNlX3N0YXRpYyINCisjIEFERCBMSU5LMzIgb2RiY2NwMzIubGliIGxpYmV4cGF0TVQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXHdpbjMyXGJpblxSZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJlbGVtZW50cyAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTYyLDggKzYyLDggQEAKICMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXHdpbjMyXGJpblxEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cd2luMzJcdG1wXERlYnVnLWVsZW1lbnRzIg0KICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCkBAIC03NSw3ICs3NSw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjY3AzMi5saWIgbGliZXhwYXRNVC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXGxpYlxEZWJ1Z19zdGF0aWMiDQorIyBBREQgTElOSzMyIG9kYmNjcDMyLmxpYiBsaWJleHBhdE1ULmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvZGVidWcgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cd2luMzJcYmluXERlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS9leGFtcGxlcy9vdXRsaW5lLmMgYi9leGFtcGxlcy9vdXRsaW5lLmMKaW5kZXggODA3ZGRiOC4uM2EzYzgzOCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvb3V0bGluZS5jCisrKyBiL2V4YW1wbGVzL291dGxpbmUuYwpAQCAtMjUsNiArMjUsMTAgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGV4cGF0Lmg+CiAKKyNpZiBkZWZpbmVkKF9fYW1pZ2Fvc19fKSAmJiBkZWZpbmVkKF9fVVNFX0lOTElORV9fKQorI2luY2x1ZGUgPHByb3RvL2V4cGF0Lmg+CisjZW5kaWYKKwogI2lmZGVmIFhNTF9MQVJHRV9TSVpFCiAjaWYgZGVmaW5lZChYTUxfVVNFX01TQ19FWFRFTlNJT05TKSAmJiBfTVNDX1ZFUiA8IDE0MDAKICNkZWZpbmUgWE1MX0ZNVF9JTlRfTU9EICJJNjQiCkBAIC02NSwxNCArNjksOCBAQAogICBEZXB0aC0tOwogfQogCi0jaWZkZWYgQU1JR0FfU0hBUkVEX0xJQgotI2luY2x1ZGUgPHByb3RvL2V4cGF0Lmg+Ci1pbnQKLWFtaWdhX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSNlbHNlCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSNlbmRpZgogewogICBYTUxfUGFyc2VyIHAgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOwogICBpZiAoISBwKSB7CkBAIC04Niw3ICs4NCw3IEBACiAgICAgaW50IGRvbmU7CiAgICAgaW50IGxlbjsKIAotICAgIGxlbiA9IGZyZWFkKEJ1ZmYsIDEsIEJVRkZTSVpFLCBzdGRpbik7CisgICAgbGVuID0gKGludClmcmVhZChCdWZmLCAxLCBCVUZGU0laRSwgc3RkaW4pOwogICAgIGlmIChmZXJyb3Ioc3RkaW4pKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWQgZXJyb3JcbiIpOwogICAgICAgZXhpdCgtMSk7CkBAIC0xMDMsNSArMTAxLDYgQEAKICAgICBpZiAoZG9uZSkKICAgICAgIGJyZWFrOwogICB9CisgIFhNTF9QYXJzZXJGcmVlKHApOwogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL291dGxpbmUuZHNwIGIvZXhhbXBsZXMvb3V0bGluZS5kc3AKaW5kZXggNzA3NWRiZi4uNjJkMTkzMiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvb3V0bGluZS5kc3AKKysrIGIvZXhhbXBsZXMvb3V0bGluZS5kc3AKQEAgLTM3LDggKzM3LDggQEAKICMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlx3aW4zMlxiaW5cUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cd2luMzJcdG1wXFJlbGVhc2Utb3V0bGluZSINCiAjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQpAQCAtNjIsOCArNjIsOCBAQAogIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KICMgUFJPUCBVc2VfTUZDIDANCiAjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgT3V0cHV0X0RpciAiLi5cd2luMzJcYmluXERlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcRGVidWctb3V0bGluZSINCiAjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQpkaWZmIC0tZ2l0IGEvZXhwYXQuZHN3IGIvZXhwYXQuZHN3CmluZGV4IDJkNjJlZWMuLjkyODJkYTUgMTAwNjQ0Ci0tLSBhL2V4cGF0LmRzdworKysgYi9leHBhdC5kc3cKQEAgLTEsMTEwICsxLDExMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUHJvamVjdDogImVsZW1lbnRzIj0uXGV4YW1wbGVzXGVsZW1lbnRzLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0KLVBhY2thZ2U9PDU+Ci17e3sKLX19fQotCi1QYWNrYWdlPTw0Pgote3t7Ci0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5Ci0gICAgUHJvamVjdF9EZXBfTmFtZSBleHBhdF9zdGF0aWMKLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Ci19fX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1Qcm9qZWN0OiAiZXhwYXQiPS5cbGliXGV4cGF0LmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0KLVBhY2thZ2U9PDU+Ci17e3sKLX19fQotCi1QYWNrYWdlPTw0Pgote3t7Ci19fX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1Qcm9qZWN0OiAiZXhwYXRfc3RhdGljIj0uXGxpYlxleHBhdF9zdGF0aWMuZHNwIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVByb2plY3Q6ICJleHBhdHciPS5cbGliXGV4cGF0dy5kc3AgLSBQYWNrYWdlIE93bmVyPTw0PgotCi1QYWNrYWdlPTw1Pgote3t7Ci19fX0KLQotUGFja2FnZT08ND4KLXt7ewotfX19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUHJvamVjdDogImV4cGF0d19zdGF0aWMiPS5cbGliXGV4cGF0d19zdGF0aWMuZHNwIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVByb2plY3Q6ICJvdXRsaW5lIj0uXGV4YW1wbGVzXG91dGxpbmUuZHNwIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKLSAgICBQcm9qZWN0X0RlcF9OYW1lIGV4cGF0Ci0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQotfX19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUHJvamVjdDogInhtbHdmIj0uXHhtbHdmXHhtbHdmLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0KLVBhY2thZ2U9PDU+Ci17e3sKLX19fQotCi1QYWNrYWdlPTw0Pgote3t7Ci0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5Ci0gICAgUHJvamVjdF9EZXBfTmFtZSBleHBhdAotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLUdsb2JhbDoKLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDM+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImVsZW1lbnRzIj0uXGV4YW1wbGVzXGVsZW1lbnRzLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBleHBhdF9zdGF0aWMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiZXhwYXQiPS5cbGliXGV4cGF0LmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiZXhwYXRfc3RhdGljIj0uXGxpYlxleHBhdF9zdGF0aWMuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJleHBhdHciPS5cbGliXGV4cGF0dy5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImV4cGF0d19zdGF0aWMiPS5cbGliXGV4cGF0d19zdGF0aWMuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJvdXRsaW5lIj0uXGV4YW1wbGVzXG91dGxpbmUuZHNwIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGV4cGF0DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInhtbHdmIj0uXHhtbHdmXHhtbHdmLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBleHBhdA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL2V4cGF0X2NvbmZpZy5oIGIvZXhwYXRfY29uZmlnLmgKaW5kZXggNDFjOTYyZi4uM2VhODExYyAxMDA2NDQKLS0tIGEvZXhwYXRfY29uZmlnLmgKKysrIGIvZXhwYXRfY29uZmlnLmgKQEAgLTU2LDEzICs1NiwxMyBAQAogI2RlZmluZSBQQUNLQUdFX05BTUUgImV4cGF0IgogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJleHBhdCAyLjAuMCIKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImV4cGF0IDIuMC4xIgogCiAvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCiAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZXhwYXQiCiAKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4wLjAiCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4wLjEiCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwogI2RlZmluZSBTVERDX0hFQURFUlMgMQpkaWZmIC0tZ2l0IGEvbGliL2FtaWdhY29uZmlnLmggYi9saWIvYW1pZ2Fjb25maWcuaAppbmRleCA2NzgxYTcxLi44NmM2MTE1IDEwMDY0NAotLS0gYS9saWIvYW1pZ2Fjb25maWcuaAorKysgYi9saWIvYW1pZ2Fjb25maWcuaApAQCAtMTAsNjYgKzEwLDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNoZWNrLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQ0hFQ0tfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRExGQ05fSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfTUVNTU9WRSAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTUVNT1JZX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gKi8KLSN1bmRlZiBIQVZFX01NQVAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1RESU5UX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQogCi0vKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImV4cGF0LWJ1Z3NAbWFpbC5saWJleHBhdC5vcmciCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJleHBhdCIKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1NUUklORyAiZXhwYXQgMS45NS44IgotCi0vKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFDS0FHRV9UQVJOQU1FCi0KLS8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMS45NS44IgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLQogLyogd2hldGhlciBieXRlb3JkZXIgaXMgYmlnZW5kaWFuICovCiAjZGVmaW5lIFdPUkRTX0JJR0VORElBTgogCkBAIC04MywxNCArMjksNCBAQAogLyogRGVmaW5lIHRvIG1ha2UgWE1MIE5hbWVzcGFjZXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICovCiAjZGVmaW5lIFhNTF9OUwogCi0vKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KLSN1bmRlZiBjb25zdAotCi0vKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI3VuZGVmIG9mZl90Ci0KLS8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI3VuZGVmIHNpemVfdAotCi0KICNlbmRpZiAgLyogQU1JR0FDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2FzY2lpLmggYi9saWIvYXNjaWkuaAppbmRleCAzMzdlNWJiLi5kMTA1MzBiIDEwMDY0NAotLS0gYS9saWIvYXNjaWkuaAorKysgYi9saWIvYXNjaWkuaApAQCAtODMsMyArODMsMTAgQEAKICNkZWZpbmUgQVNDSUlfTFNRQiAweDVCCiAjZGVmaW5lIEFTQ0lJX1JTUUIgMHg1RAogI2RlZmluZSBBU0NJSV9VTkRFUlNDT1JFIDB4NUYKKyNkZWZpbmUgQVNDSUlfTFBBUkVOIDB4MjgKKyNkZWZpbmUgQVNDSUlfUlBBUkVOIDB4MjkKKyNkZWZpbmUgQVNDSUlfRkYgMHgwQworI2RlZmluZSBBU0NJSV9TTEFTSCAweDJGCisjZGVmaW5lIEFTQ0lJX0hBU0ggMHgyMworI2RlZmluZSBBU0NJSV9QSVBFIDB4N0MKKyNkZWZpbmUgQVNDSUlfQ09NTUEgMHgyQwpkaWZmIC0tZ2l0IGEvbGliL2V4cGF0LmRzcCBiL2xpYi9leHBhdC5kc3AKaW5kZXggZmZlMzA3Zi4uYjMwMzI1MyAxMDA2NDQKLS0tIGEvbGliL2V4cGF0LmRzcAorKysgYi9saWIvZXhwYXQuZHNwCkBAIC0zOCw4ICszOCw4IEBACiAjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQogIyBQUk9QIFVzZV9NRkMgMA0KICMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgT3V0cHV0X0RpciAiLi5cd2luMzJcYmluXFJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXHdpbjMyXHRtcFxSZWxlYXNlIg0KICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkVYUEFUX0VYUE9SVFMiIC9ZdSJzdGRhZnguaCIgL0ZEIC9jDQpAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlXGxpYmV4cGF0LmRsbCINCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXHdpbjMyXGJpblxSZWxlYXNlL2xpYmV4cGF0LmRsbCINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC02NSw4ICs2NSw5IEBACiAjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQogIyBQUk9QIFVzZV9NRkMgMA0KICMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlx3aW4zMlxiaW5cRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXHdpbjMyXHRtcFxEZWJ1ZyINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJFWFBBVF9FWFBPUlRTIiAvWXUic3RkYWZ4LmgiIC9GRCAvR1ogL2MNCiAjIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR1ggL1pJIC9PZCAvRCAiX0RFQlVHIiAvRCAiQ09NUElMRURfRlJPTV9EU1AiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRlIgL0ZEIC9HWiAvYw0KQEAgLTc5LDcgKzgwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL3BkYjpub25lIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRlYnVnXGxpYmV4cGF0LmRsbCINCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9wZGI6bm9uZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLlx3aW4zMlxiaW5cRGVidWcvbGliZXhwYXQuZGxsIg0KIA0KICFFTkRJRiANCiANCkBAIC0xMTUsNiArMTE2LDE0IEBACiANCiBTT1VSQ0U9Llx4bWx0b2suYw0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHhtbHRva19pbXBsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx4bWx0b2tfbnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQpkaWZmIC0tZ2l0IGEvbGliL2V4cGF0LmggYi9saWIvZXhwYXQuaAppbmRleCBjZjExM2VlLi4yMGE4Mjc4IDEwMDY0NAotLS0gYS9saWIvZXhwYXQuaAorKysgYi9saWIvZXhwYXQuaApAQCAtOTgzLDcgKzk4Myw4IEBACiAgIFhNTF9GRUFUVVJFX01JTl9TSVpFLAogICBYTUxfRkVBVFVSRV9TSVpFT0ZfWE1MX0NIQVIsCiAgIFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfTENIQVIsCi0gIFhNTF9GRUFUVVJFX05TCisgIFhNTF9GRUFUVVJFX05TLAorICBYTUxfRkVBVFVSRV9MQVJHRV9TSVpFCiAgIC8qIEFkZGl0aW9uYWwgZmVhdHVyZXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoaXMgZW51bS4gKi8KIH07CiAKQEAgLTEwMDQsNyArMTAwNSw3IEBACiAqLwogI2RlZmluZSBYTUxfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFhNTF9NSU5PUl9WRVJTSU9OIDAKLSNkZWZpbmUgWE1MX01JQ1JPX1ZFUlNJT04gMAorI2RlZmluZSBYTUxfTUlDUk9fVkVSU0lPTiAxCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvbGliL2V4cGF0X2V4dGVybmFsLmggYi9saWIvZXhwYXRfZXh0ZXJuYWwuaAppbmRleCA4YTJkNzA4Li4yYzAzMjg0IDEwMDY0NAotLS0gYS9saWIvZXhwYXRfZXh0ZXJuYWwuaAorKysgYi9saWIvZXhwYXRfZXh0ZXJuYWwuaApAQCAtMzQsOSArMzQsOSBAQAogICAgc3lzdGVtIGhlYWRlcnMgbWF5IGFzc3VtZSB0aGUgY2RlY2wgY29udmVudGlvbi4KICovCiAjaWZuZGVmIFhNTENBTEwKLSNpZiBkZWZpbmVkKFhNTF9VU0VfTVNDX0VYVEVOU0lPTlMpCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgWE1MQ0FMTCBfX2NkZWNsCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9faTM4NikKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pMzg2KSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQogI2RlZmluZSBYTUxDQUxMIF9fYXR0cmlidXRlX18oKGNkZWNsKSkKICNlbHNlCiAvKiBGb3IgYW55IHBsYXRmb3JtIHdoaWNoIHVzZXMgdGhpcyBkZWZpbml0aW9uIGFuZCBzdXBwb3J0cyBtb3JlIHRoYW4KZGlmZiAtLWdpdCBhL2xpYi9leHBhdF9zdGF0aWMuZHNwIGIvbGliL2V4cGF0X3N0YXRpYy5kc3AKaW5kZXggZDgwM2I3Ni4uMWQ2OGZjZSAxMDA2NDQKLS0tIGEvbGliL2V4cGF0X3N0YXRpYy5kc3AKKysrIGIvbGliL2V4cGF0X3N0YXRpYy5kc3AKQEAgLTM3LDggKzM3LDggQEAKICMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlX3N0YXRpYyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZV9zdGF0aWMiDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXHdpbjMyXGJpblxSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcUmVsZWFzZV9zdGF0aWMiDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL1lYIC9GRCAvYw0KICMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkNPTVBJTEVEX0ZST01fRFNQIiAvRkQgL2MNCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KICMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiUmVsZWFzZV9zdGF0aWNcbGliZXhwYXRNVC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlx3aW4zMlxiaW5cUmVsZWFzZS9saWJleHBhdE1ULmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZXhwYXRfc3RhdGljIC0gV2luMzIgRGVidWciDQogDQpAQCAtNjEsOCArNjEsOCBAQAogIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KICMgUFJPUCBVc2VfTUZDIDANCiAjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnX3N0YXRpYyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWdfc3RhdGljIg0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlx3aW4zMlxiaW5cRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXHdpbjMyXHRtcFxEZWJ1Z19zdGF0aWMiDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvWVggL0ZEIC9HWiAvYw0KICMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiQ09NUElMRURfRlJPTV9EU1AiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9GUiAvRkQgL0daIC9jDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkRlYnVnX3N0YXRpY1xsaWJleHBhdE1ULmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXHdpbjMyXGJpblxEZWJ1Z1xsaWJleHBhdE1ULmxpYiINCiANCiAhRU5ESUYgDQogDQpAQCAtOTcsNiArOTcsMTQgQEAKIA0KIFNPVVJDRT0uXHhtbHRvay5jDQogIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sdG9rX2ltcGwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHhtbHRva19ucy5jDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCiANCmRpZmYgLS1naXQgYS9saWIvZXhwYXR3LmRzcCBiL2xpYi9leHBhdHcuZHNwCmluZGV4IDA4NGUwNmQuLmZhNDBkYzUgMTAwNjQ0Ci0tLSBhL2xpYi9leHBhdHcuZHNwCisrKyBiL2xpYi9leHBhdHcuZHNwCkBAIC0zOCw4ICszOCw4IEBACiAjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQogIyBQUk9QIFVzZV9NRkMgMA0KICMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZS13Ig0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlLXciDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXHdpbjMyXGJpblxSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcUmVsZWFzZS13Ig0KICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkVYUEFUX0VYUE9SVFMiIC9ZdSJzdGRhZnguaCIgL0ZEIC9jDQpAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlLXdcbGliZXhwYXR3LmRsbCINCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXHdpbjMyXGJpblxSZWxlYXNlL2xpYmV4cGF0dy5kbGwiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImV4cGF0dyAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTY1LDggKzY1LDggQEAKICMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCiAjIFBST1AgVXNlX01GQyAwDQogIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1Zy13Ig0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1Zy13Ig0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlx3aW4zMlxiaW5cRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXHdpbjMyXHRtcFxEZWJ1Zy13Ig0KICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkVYUEFUX0VYUE9SVFMiIC9ZdSJzdGRhZnguaCIgL0ZEIC9HWiAvYw0KQEAgLTgwLDcgKzgwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL3BkYjpub25lIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRlYnVnLXdcbGliZXhwYXR3LmRsbCINCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9wZGI6bm9uZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLlx3aW4zMlxiaW5cRGVidWcvbGliZXhwYXR3LmRsbCINCiANCiAhRU5ESUYgDQogDQpAQCAtMTE2LDYgKzExNiwxNCBAQAogDQogU09VUkNFPS5ceG1sdG9rLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx4bWx0b2tfaW1wbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sdG9rX25zLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KIA0KZGlmZiAtLWdpdCBhL2xpYi9leHBhdHdfc3RhdGljLmRzcCBiL2xpYi9leHBhdHdfc3RhdGljLmRzcAppbmRleCA5YTQxZTZlLi5mMTNkZDcyIDEwMDY0NAotLS0gYS9saWIvZXhwYXR3X3N0YXRpYy5kc3AKKysrIGIvbGliL2V4cGF0d19zdGF0aWMuZHNwCkBAIC0zNyw4ICszNyw4IEBACiAjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQogIyBQUk9QIFVzZV9NRkMgMA0KICMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZS13X3N0YXRpYyINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZS13X3N0YXRpYyINCisjIFBST1AgT3V0cHV0X0RpciAiLi5cd2luMzJcYmluXFJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXHdpbjMyXHRtcFxSZWxlYXNlLXdfc3RhdGljIg0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL2MNCiAjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJDT01QSUxFRF9GUk9NX0RTUCIgL0QgIlhNTF9VTklDT0RFX1dDSEFSX1QiIC9GRCAvYw0KQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQogIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiJSZWxlYXNlLXdfc3RhdGljXGxpYmV4cGF0d01ULmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXHdpbjMyXGJpblxSZWxlYXNlXGxpYmV4cGF0d01ULmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZXhwYXR3X3N0YXRpYyAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTYxLDExICs2MSwxMSBAQAogIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KICMgUFJPUCBVc2VfTUZDIDANCiAjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnLXdfc3RhdGljIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1Zy13X3N0YXRpYyINCisjIFBST1AgT3V0cHV0X0RpciAiLi5cd2luMzJcYmluXERlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcRGVidWctd19zdGF0aWMiDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiQ09NUElMRURfRlJPTV9EU1AiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9GUiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJDT01QSUxFRF9GUk9NX0RTUCIgL0QgIlhNTF9VTklDT0RFX1dDSEFSX1QiIC9GUiAvRkQgL0daIC9jDQogIyBTVUJUUkFDVCBDUFAgL1lYDQogIyBBREQgQkFTRSBSU0MgL2wgMHgxMDA5IC9kICJfREVCVUciDQogIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkRlYnVnLXdfc3RhdGljXGxpYmV4cGF0d01ULmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXHdpbjMyXGJpblxEZWJ1Z1xsaWJleHBhdHdNVC5saWIiDQogDQogIUVORElGIA0KIA0KQEAgLTk3LDYgKzk3LDE0IEBACiANCiBTT1VSQ0U9Llx4bWx0b2suYw0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHhtbHRva19pbXBsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx4bWx0b2tfbnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQogDQpkaWZmIC0tZ2l0IGEvbGliL2ludGVybmFsLmggYi9saWIvaW50ZXJuYWwuaAppbmRleCBmZjA1NmM2Li5kZDU0NTQ4IDEwMDY0NAotLS0gYS9saWIvaW50ZXJuYWwuaAorKysgYi9saWIvaW50ZXJuYWwuaApAQCAtMjAsNyArMjAsNyBAQAogICAgICAgICAgYW5kIHRoZXJlZm9yZSBzdWJqZWN0IHRvIGNoYW5nZS4KICovCiAKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQogLyogV2UnbGwgdXNlIHRoaXMgdmVyc2lvbiBieSBkZWZhdWx0IG9ubHkgd2hlcmUgd2Uga25vdyBpdCBoZWxwcy4KIAogICAgcmVncGFybSgpIGdlbmVyYXRlcyB3YXJuaW5ncyBvbiBTb2xhcmlzIGJveGVzLiAgIFNlZSBTRiBidWcgIzY5Mjg3OC4KZGlmZiAtLWdpdCBhL2xpYi9saWJleHBhdC5kZWYgYi9saWIvbGliZXhwYXQuZGVmCmluZGV4IGQ4ZjM5N2IuLjM5MjBiYmMgMTAwNjQ0Ci0tLSBhL2xpYi9saWJleHBhdC5kZWYKKysrIGIvbGliL2xpYmV4cGF0LmRlZgpAQCAtMSw2ICsxLDYgQEAKIDsgREVGIGZpbGUgZm9yIE1TIFZDKysKLUxJQlJBUlkgICBMSUJFWFBBVAotREVTQ1JJUFRJT04gIkltcGxlbWVudHMgYW4gWE1MIHBhcnNlci4iCisKK0xJQlJBUlkKIEVYUE9SVFMKICAgWE1MX0RlZmF1bHRDdXJyZW50IEAxCiAgIFhNTF9FcnJvclN0cmluZyBAMgpkaWZmIC0tZ2l0IGEvbGliL2xpYmV4cGF0dy5kZWYgYi9saWIvbGliZXhwYXR3LmRlZgppbmRleCA0OWQwYzI5Li4zOTIwYmJjIDEwMDY0NAotLS0gYS9saWIvbGliZXhwYXR3LmRlZgorKysgYi9saWIvbGliZXhwYXR3LmRlZgpAQCAtMSw2ICsxLDYgQEAKIDsgREVGIGZpbGUgZm9yIE1TIFZDKysKLUxJQlJBUlkgICBMSUJFWFBBVFcKLURFU0NSSVBUSU9OICJJbXBsZW1lbnRzIGFuIFhNTCBwYXJzZXIuIgorCitMSUJSQVJZCiBFWFBPUlRTCiAgIFhNTF9EZWZhdWx0Q3VycmVudCBAMQogICBYTUxfRXJyb3JTdHJpbmcgQDIKZGlmZiAtLWdpdCBhL2xpYi94bWxwYXJzZS5jIGIvbGliL3htbHBhcnNlLmMKaW5kZXggMDRmOGI5MS4uOTRlMzFkZSAxMDA2NDQKLS0tIGEvbGliL3htbHBhcnNlLmMKKysrIGIvbGliL3htbHBhcnNlLmMKQEAgLTE0LDEwICsxNCwxMyBAQAogI2luY2x1ZGUgIm1hY2NvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChfX2FtaWdhb3M0X18pCiAjaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCiAjZWxpZiBkZWZpbmVkKEhBVkVfRVhQQVRfQ09ORklHX0gpCiAjaW5jbHVkZSA8ZXhwYXRfY29uZmlnLmg+CiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCisjaW5jbHVkZSAiYXNjaWkuaCIKICNpbmNsdWRlICJleHBhdC5oIgogCiAjaWZkZWYgWE1MX1VOSUNPREUKQEAgLTI2LDcgKzI5LDggQEAKICNkZWZpbmUgWG1sR2V0SW50ZXJuYWxFbmNvZGluZyBYbWxHZXRVdGYxNkludGVybmFsRW5jb2RpbmcKICNkZWZpbmUgWG1sR2V0SW50ZXJuYWxFbmNvZGluZ05TIFhtbEdldFV0ZjE2SW50ZXJuYWxFbmNvZGluZ05TCiAjZGVmaW5lIFhtbEVuY29kZSBYbWxVdGYxNkVuY29kZQotI2RlZmluZSBNVVNUX0NPTlZFUlQoZW5jLCBzKSAoIShlbmMpLT5pc1V0ZjE2IHx8ICgoKHVuc2lnbmVkIGxvbmcpcykgJiAxKSkKKy8qIFVzaW5nIHBvaW50ZXIgc3VidHJhY3Rpb24gdG8gY29udmVydCB0byBpbnRlZ2VyIHR5cGUuICovCisjZGVmaW5lIE1VU1RfQ09OVkVSVChlbmMsIHMpICghKGVuYyktPmlzVXRmMTYgfHwgKCgoY2hhciAqKShzKSAtIChjaGFyICopTlVMTCkgJiAxKSkKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgSUNIQVI7CiAjZWxzZQogI2RlZmluZSBYTUxfRU5DT0RFX01BWCBYTUxfVVRGOF9FTkNPREVfTUFYCkBAIC02NjUsMTAgKzY2OSwxMiBAQAogfQogCiBzdGF0aWMgY29uc3QgWE1MX0NoYXIgaW1wbGljaXRDb250ZXh0W10gPSB7Ci0gICd4JywgJ20nLCAnbCcsICc9JywgJ2gnLCAndCcsICd0JywgJ3AnLCAnOicsICcvJywgJy8nLAotICAndycsICd3JywgJ3cnLCAnLicsICd3JywgJzMnLCAnLicsICdvJywgJ3InLCAnZycsICcvJywKLSAgJ1gnLCAnTScsICdMJywgJy8nLCAnMScsICc5JywgJzknLCAnOCcsICcvJywKLSAgJ24nLCAnYScsICdtJywgJ2UnLCAncycsICdwJywgJ2EnLCAnYycsICdlJywgJ1wwJworICBBU0NJSV94LCBBU0NJSV9tLCBBU0NJSV9sLCBBU0NJSV9FUVVBTFMsIEFTQ0lJX2gsIEFTQ0lJX3QsIEFTQ0lJX3QsIEFTQ0lJX3AsCisgIEFTQ0lJX0NPTE9OLCBBU0NJSV9TTEFTSCwgQVNDSUlfU0xBU0gsIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX3csIAorICBBU0NJSV9QRVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwgQVNDSUlfbywgQVNDSUlfciwgQVNDSUlfZywKKyAgQVNDSUlfU0xBU0gsIEFTQ0lJX1gsIEFTQ0lJX00sIEFTQ0lJX0wsIEFTQ0lJX1NMQVNILCBBU0NJSV8xLCBBU0NJSV85LAorICBBU0NJSV85LCBBU0NJSV84LCBBU0NJSV9TTEFTSCwgQVNDSUlfbiwgQVNDSUlfYSwgQVNDSUlfbSwgQVNDSUlfZSwKKyAgQVNDSUlfcywgQVNDSUlfcCwgQVNDSUlfYSwgQVNDSUlfYywgQVNDSUlfZSwgJ1wwJwogfTsKIAogWE1MX1BhcnNlciBYTUxDQUxMCkBAIC03NjEsNyArNzY3LDcgQEAKICAgdW5rbm93bkVuY29kaW5nSGFuZGxlciA9IE5VTEw7CiAgIHVua25vd25FbmNvZGluZ0hhbmRsZXJEYXRhID0gTlVMTDsKIAotICBuYW1lc3BhY2VTZXBhcmF0b3IgPSAnISc7CisgIG5hbWVzcGFjZVNlcGFyYXRvciA9IEFTQ0lJX0VYQ0w7CiAgIG5zID0gWE1MX0ZBTFNFOwogICBuc190cmlwbGV0cyA9IFhNTF9GQUxTRTsKIApAQCAtMTk0OCw2ICsxOTU0LDkgQEAKICNpZmRlZiBYTUxfTlMKICAgICB7WE1MX0ZFQVRVUkVfTlMsICAgICAgICAgICAgICAgWE1MX0woIlhNTF9OUyIpLCAwfSwKICNlbmRpZgorI2lmZGVmIFhNTF9MQVJHRV9TSVpFCisgICAge1hNTF9GRUFUVVJFX0xBUkdFX1NJWkUsICAgICAgIFhNTF9MKCJYTUxfTEFSR0VfU0laRSIpLCAwfSwKKyNlbmRpZiAgICAKICAgICB7WE1MX0ZFQVRVUkVfRU5ELCAgICAgICAgICAgICAgTlVMTCwgMH0KICAgfTsKIApAQCAtMjU0MSwyNyArMjU1MCwzMCBAQAogICAgICAgfQogICAgICAgKm5leHRQdHIgPSBlbmQ7CiAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6Ci0gICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKLSAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7Ci0gICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOwotICAgICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7Ci0gICAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoZGF0YVB0ciAtIChJQ0hBUiAqKWRhdGFCdWYpKTsKLSAgICAgICAgICAgIGlmIChzID09IG5leHQpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKmV2ZW50UFAgPSBzOworICAgIGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOiAKKyAgICAgIHsKKyAgICAgICAgWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyIGNoYXJEYXRhSGFuZGxlciA9IGNoYXJhY3RlckRhdGFIYW5kbGVyOworICAgICAgICBpZiAoY2hhckRhdGFIYW5kbGVyKSB7CisgICAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgIElDSEFSICpkYXRhUHRyID0gKElDSEFSICopZGF0YUJ1ZjsKKyAgICAgICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7CisgICAgICAgICAgICAgICpldmVudEVuZFBQID0gczsKKyAgICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1ZikpOworICAgICAgICAgICAgICBpZiAocyA9PSBuZXh0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAqZXZlbnRQUCA9IHM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNoYXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUxfQ2hhciAqKXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKFhNTF9DaGFyICopbmV4dCAtIChYTUxfQ2hhciAqKXMpKTsKICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWE1MX0NoYXIgKilzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChYTUxfQ2hhciAqKW5leHQgLSAoWE1MX0NoYXIgKilzKSk7CisgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQorICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwogICAgICAgfQotICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBYTUxfVE9LX1BJOgogICAgICAgaWYgKCFyZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyc2VyLCBlbmMsIHMsIG5leHQpKQpAQCAtMjgwNiw3ICsyODE4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwogICAgICAgICAgIHVyaUhhc2ggPSBDSEFSX0hBU0godXJpSGFzaCwgYyk7CiAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCpzKysgIT0gWE1MX1QoJzonKSkKKyAgICAgICAgd2hpbGUgKCpzKysgIT0gWE1MX1QoQVNDSUlfQ09MT04pKQogICAgICAgICAgIDsKICAgICAgICAgZG8geyAgLyogY29waWVzIG51bGwgdGVybWluYXRvciAqLwogICAgICAgICAgIGNvbnN0IFhNTF9DaGFyIGMgPSAqczsKQEAgLTI4ODAsNyArMjg5Miw3IEBACiAgICAgaWYgKCFiaW5kaW5nKQogICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWDsKICAgICBsb2NhbFBhcnQgPSB0YWdOYW1lUHRyLT5zdHI7Ci0gICAgd2hpbGUgKCpsb2NhbFBhcnQrKyAhPSBYTUxfVCgnOicpKQorICAgIHdoaWxlICgqbG9jYWxQYXJ0KysgIT0gWE1MX1QoQVNDSUlfQ09MT04pKQogICAgICAgOwogICB9CiAgIGVsc2UgaWYgKGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nKSB7CkBAIC0yOTM1LDE3ICsyOTQ3LDIxIEBACiAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmksIEJJTkRJTkcgKipiaW5kaW5nc1B0cikKIHsKICAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIHhtbE5hbWVzcGFjZVtdID0gewotICAgICdoJywgJ3QnLCAndCcsICdwJywgJzonLCAnLycsICcvJywKLSAgICAndycsICd3JywgJ3cnLCAnLicsICd3JywgJzMnLCAnLicsICdvJywgJ3InLCAnZycsICcvJywKLSAgICAnWCcsICdNJywgJ0wnLCAnLycsICcxJywgJzknLCAnOScsICc4JywgJy8nLAotICAgICduJywgJ2EnLCAnbScsICdlJywgJ3MnLCAncCcsICdhJywgJ2MnLCAnZScsICdcMCcKKyAgICBBU0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBBU0NJSV9wLCBBU0NJSV9DT0xPTiwgQVNDSUlfU0xBU0gsIEFTQ0lJX1NMQVNILAorICAgIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX1BFUklPRCwgQVNDSUlfdywgQVNDSUlfMywgQVNDSUlfUEVSSU9ELAorICAgIEFTQ0lJX28sIEFTQ0lJX3IsIEFTQ0lJX2csIEFTQ0lJX1NMQVNILCBBU0NJSV9YLCBBU0NJSV9NLCBBU0NJSV9MLCAKKyAgICBBU0NJSV9TTEFTSCwgQVNDSUlfMSwgQVNDSUlfOSwgQVNDSUlfOSwgQVNDSUlfOCwgQVNDSUlfU0xBU0gsCisgICAgQVNDSUlfbiwgQVNDSUlfYSwgQVNDSUlfbSwgQVNDSUlfZSwgQVNDSUlfcywgQVNDSUlfcCwgQVNDSUlfYSwgQVNDSUlfYywKKyAgICBBU0NJSV9lLCAnXDAnCiAgIH07CiAgIHN0YXRpYyBjb25zdCBpbnQgeG1sTGVuID0gCiAgICAgKGludClzaXplb2YoeG1sTmFtZXNwYWNlKS9zaXplb2YoWE1MX0NoYXIpIC0gMTsKICAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIHhtbG5zTmFtZXNwYWNlW10gPSB7Ci0gICAgJ2gnLCAndCcsICd0JywgJ3AnLCAnOicsICcvJywgJy8nLAotICAgICd3JywgJ3cnLCAndycsICcuJywgJ3cnLCAnMycsICcuJywgJ28nLCAncicsICdnJywgJy8nLAotICAgICcyJywgJzAnLCAnMCcsICcwJywgJy8nLCAneCcsICdtJywgJ2wnLCAnbicsICdzJywgJy8nLCAnXDAnCisgICAgQVNDSUlfaCwgQVNDSUlfdCwgQVNDSUlfdCwgQVNDSUlfcCwgQVNDSUlfQ09MT04sIEFTQ0lJX1NMQVNILCBBU0NJSV9TTEFTSCwKKyAgICBBU0NJSV93LCBBU0NJSV93LCBBU0NJSV93LCBBU0NJSV9QRVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwKKyAgICBBU0NJSV9vLCBBU0NJSV9yLCBBU0NJSV9nLCBBU0NJSV9TTEFTSCwgQVNDSUlfMiwgQVNDSUlfMCwgQVNDSUlfMCwgCisgICAgQVNDSUlfMCwgQVNDSUlfU0xBU0gsIEFTQ0lJX3gsIEFTQ0lJX20sIEFTQ0lJX2wsIEFTQ0lJX24sIEFTQ0lJX3MsIAorICAgIEFTQ0lJX1NMQVNILCAnXDAnCiAgIH07CiAgIHN0YXRpYyBjb25zdCBpbnQgeG1sbnNMZW4gPSAKICAgICAoaW50KXNpemVvZih4bWxuc05hbWVzcGFjZSkvc2l6ZW9mKFhNTF9DaGFyKSAtIDE7CkBAIC0yOTYyLDEzICsyOTc4LDEzIEBACiAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkRFQ0xBUklOR19QUkVGSVg7CiAKICAgaWYgKHByZWZpeC0+bmFtZQotICAgICAgJiYgcHJlZml4LT5uYW1lWzBdID09IFhNTF9UKCd4JykKLSAgICAgICYmIHByZWZpeC0+bmFtZVsxXSA9PSBYTUxfVCgnbScpCi0gICAgICAmJiBwcmVmaXgtPm5hbWVbMl0gPT0gWE1MX1QoJ2wnKSkgeworICAgICAgJiYgcHJlZml4LT5uYW1lWzBdID09IFhNTF9UKEFTQ0lJX3gpCisgICAgICAmJiBwcmVmaXgtPm5hbWVbMV0gPT0gWE1MX1QoQVNDSUlfbSkKKyAgICAgICYmIHByZWZpeC0+bmFtZVsyXSA9PSBYTUxfVChBU0NJSV9sKSkgewogCiAgICAgLyogTm90IGFsbG93ZWQgdG8gYmluZCB4bWxucyAqLwotICAgIGlmIChwcmVmaXgtPm5hbWVbM10gPT0gWE1MX1QoJ24nKQotICAgICAgICAmJiBwcmVmaXgtPm5hbWVbNF0gPT0gWE1MX1QoJ3MnKQorICAgIGlmIChwcmVmaXgtPm5hbWVbM10gPT0gWE1MX1QoQVNDSUlfbikKKyAgICAgICAgJiYgcHJlZml4LT5uYW1lWzRdID09IFhNTF9UKEFTQ0lJX3MpCiAgICAgICAgICYmIHByZWZpeC0+bmFtZVs1XSA9PSBYTUxfVCgnXDAnKSkKICAgICAgIHJldHVybiBYTUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTE5TOwogCkBAIC0zMTIyLDI2ICszMTM4LDI5IEBACiAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6Ci0gICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKLSAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7Ci0gICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOwotICAgICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7Ci0gICAgICAgICAgICAqZXZlbnRFbmRQUCA9IG5leHQ7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoZGF0YVB0ciAtIChJQ0hBUiAqKWRhdGFCdWYpKTsKLSAgICAgICAgICAgIGlmIChzID09IG5leHQpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKmV2ZW50UFAgPSBzOworICAgICAgeworICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIgY2hhckRhdGFIYW5kbGVyID0gY2hhcmFjdGVyRGF0YUhhbmRsZXI7CisgICAgICAgIGlmIChjaGFyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAgICBpZiAoTVVTVF9DT05WRVJUKGVuYywgcykpIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOworICAgICAgICAgICAgICBYbWxDb252ZXJ0KGVuYywgJnMsIG5leHQsICZkYXRhUHRyLCAoSUNIQVIgKilkYXRhQnVmRW5kKTsKKyAgICAgICAgICAgICAgKmV2ZW50RW5kUFAgPSBuZXh0OworICAgICAgICAgICAgICBjaGFyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGRhdGFQdHIgLSAoSUNIQVIgKilkYXRhQnVmKSk7CisgICAgICAgICAgICAgIGlmIChzID09IG5leHQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICpldmVudFBQID0gczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhNTF9DaGFyICopcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoWE1MX0NoYXIgKiluZXh0IC0gKFhNTF9DaGFyICopcykpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUxfQ2hhciAqKXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKFhNTF9DaGFyICopbmV4dCAtIChYTUxfQ2hhciAqKXMpKTsKKyAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CiAgICAgICB9Ci0gICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKICAgICAgICpldmVudFBQID0gbmV4dDsKQEAgLTM2MjgsMjMgKzM2NDcsMjcgQEAKICAgICAgICAgIFhNTF9Cb29sIGhhdmVNb3JlKQogewogI2lmZGVmIFhNTF9EVEQKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGV4dGVybmFsU3Vic2V0TmFtZVtdID0geyAnIycgLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBleHRlcm5hbFN1YnNldE5hbWVbXSA9IHsgQVNDSUlfSEFTSCAsICdcMCcgfTsKICNlbmRpZiAvKiBYTUxfRFREICovCi0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUNEQVRBW10gPSB7ICdDJywgJ0QnLCAnQScsICdUJywgJ0EnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEW10gPSB7ICdJJywgJ0QnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEUkVGW10gPSB7ICdJJywgJ0QnLCAnUicsICdFJywgJ0YnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEUkVGU1tdID0geyAnSScsICdEJywgJ1InLCAnRScsICdGJywgJ1MnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUVOVElUWVtdID0geyAnRScsICdOJywgJ1QnLCAnSScsICdUJywgJ1knLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUVOVElUSUVTW10gPQotICAgICAgeyAnRScsICdOJywgJ1QnLCAnSScsICdUJywgJ0knLCAnRScsICdTJywgJ1wwJyB9OworICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVDREFUQVtdID0gCisgICAgICB7IEFTQ0lJX0MsIEFTQ0lJX0QsIEFTQ0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0EsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlSURbXSA9IHsgQVNDSUlfSSwgQVNDSUlfRCwgJ1wwJyB9OworICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVJRFJFRltdID0KKyAgICAgIHsgQVNDSUlfSSwgQVNDSUlfRCwgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfRiwgJ1wwJyB9OworICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVJRFJFRlNbXSA9CisgICAgICB7IEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsIEFTQ0lJX1MsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlRU5USVRZW10gPQorICAgICAgeyBBU0NJSV9FLCBBU0NJSV9OLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9ZLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUVOVElUSUVTW10gPSB7IEFTQ0lJX0UsIEFTQ0lJX04sCisgICAgICBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9FLCBBU0NJSV9TLCAnXDAnIH07CiAgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZU5NVE9LRU5bXSA9IHsKLSAgICAgICdOJywgJ00nLCAnVCcsICdPJywgJ0snLCAnRScsICdOJywgJ1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVOTVRPS0VOU1tdID0gewotICAgICAgJ04nLCAnTScsICdUJywgJ08nLCAnSycsICdFJywgJ04nLCAnUycsICdcMCcgfTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIG5vdGF0aW9uUHJlZml4W10gPSB7Ci0gICAgICAnTicsICdPJywgJ1QnLCAnQScsICdUJywgJ0knLCAnTycsICdOJywgJygnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBlbnVtVmFsdWVTZXBbXSA9IHsgJ3wnLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBlbnVtVmFsdWVTdGFydFtdID0geyAnKCcsICdcMCcgfTsKKyAgICAgIEFTQ0lJX04sIEFTQ0lJX00sIEFTQ0lJX1QsIEFTQ0lJX08sIEFTQ0lJX0ssIEFTQ0lJX0UsIEFTQ0lJX04sICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlTk1UT0tFTlNbXSA9IHsgQVNDSUlfTiwgQVNDSUlfTSwgQVNDSUlfVCwKKyAgICAgIEFTQ0lJX08sIEFTQ0lJX0ssIEFTQ0lJX0UsIEFTQ0lJX04sIEFTQ0lJX1MsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIG5vdGF0aW9uUHJlZml4W10gPSB7IEFTQ0lJX04sIEFTQ0lJX08sIEFTQ0lJX1QsCisgICAgICBBU0NJSV9BLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9PLCBBU0NJSV9OLCBBU0NJSV9MUEFSRU4sICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGVudW1WYWx1ZVNlcFtdID0geyBBU0NJSV9QSVBFLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBlbnVtVmFsdWVTdGFydFtdID0geyBBU0NJSV9MUEFSRU4sICdcMCcgfTsKIAogICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwogICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAKQEAgLTM5NTAsMTEgKzM5NzMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGFyc2VyKSkKICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKICAgICAgICAgaWYgKGF0dGxpc3REZWNsSGFuZGxlciAmJiBkZWNsQXR0cmlidXRlVHlwZSkgewotICAgICAgICAgIGlmICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0gWE1MX1QoJygnKQotICAgICAgICAgICAgICB8fCAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKCdOJykKLSAgICAgICAgICAgICAgICAgICYmIGRlY2xBdHRyaWJ1dGVUeXBlWzFdID09IFhNTF9UKCdPJykpKSB7CisgICAgICAgICAgaWYgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxfVChBU0NJSV9MUEFSRU4pCisgICAgICAgICAgICAgIHx8ICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0gWE1MX1QoQVNDSUlfTikKKyAgICAgICAgICAgICAgICAgICYmIGRlY2xBdHRyaWJ1dGVUeXBlWzFdID09IFhNTF9UKEFTQ0lJX08pKSkgewogICAgICAgICAgICAgLyogRW51bWVyYXRlZCBvciBOb3RhdGlvbiB0eXBlICovCi0gICAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJyknKSkKKyAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVChBU0NJSV9SUEFSRU4pKQogICAgICAgICAgICAgICAgIHx8ICFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKICAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CiAgICAgICAgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IHRlbXBQb29sLnN0YXJ0OwpAQCAtMzk4NywxMSArNDAxMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSwgWE1MX0ZBTFNFLCBhdHRWYWwsIHBhcnNlcikpCiAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CiAgICAgICAgIGlmIChhdHRsaXN0RGVjbEhhbmRsZXIgJiYgZGVjbEF0dHJpYnV0ZVR5cGUpIHsKLSAgICAgICAgICBpZiAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKCcoJykKLSAgICAgICAgICAgICAgfHwgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxfVCgnTicpCi0gICAgICAgICAgICAgICAgICAmJiBkZWNsQXR0cmlidXRlVHlwZVsxXSA9PSBYTUxfVCgnTycpKSkgeworICAgICAgICAgIGlmICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0gWE1MX1QoQVNDSUlfTFBBUkVOKQorICAgICAgICAgICAgICB8fCAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKEFTQ0lJX04pCisgICAgICAgICAgICAgICAgICAmJiBkZWNsQXR0cmlidXRlVHlwZVsxXSA9PSBYTUxfVChBU0NJSV9PKSkpIHsKICAgICAgICAgICAgIC8qIEVudW1lcmF0ZWQgb3IgTm90YXRpb24gdHlwZSAqLwotICAgICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCcpJykpCisgICAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoQVNDSUlfUlBBUkVOKSkKICAgICAgICAgICAgICAgICB8fCAhcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCiAgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwogICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSB0ZW1wUG9vbC5zdGFydDsKQEAgLTQzMTgsMTQgKzQzNDEsMTQgQEAKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfU0VRVUVOQ0U6Ci0gICAgICBpZiAoZ3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdID09ICd8JykKKyAgICAgIGlmIChncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPT0gQVNDSUlfUElQRSkKICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9TWU5UQVg7Ci0gICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSAnLCc7CisgICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSBBU0NJSV9DT01NQTsKICAgICAgIGlmIChkdGQtPmluX2VsZGVjbCAmJiBlbGVtZW50RGVjbEhhbmRsZXIpCiAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CiAgICAgICBicmVhazsKICAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NIT0lDRToKLSAgICAgIGlmIChncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPT0gJywnKQorICAgICAgaWYgKGdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0YXRlLmxldmVsXSA9PSBBU0NJSV9DT01NQSkKICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9TWU5UQVg7CiAgICAgICBpZiAoZHRkLT5pbl9lbGRlY2wKICAgICAgICAgICAmJiAhZ3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdCkBAIC00MzM3LDcgKzQzNjAsNyBAQAogICAgICAgICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKQogICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CiAgICAgICB9Ci0gICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSAnfCc7CisgICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSBBU0NJSV9QSVBFOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBYTUxfUk9MRV9QQVJBTV9FTlRJVFlfUkVGOgogI2lmZGVmIFhNTF9EVEQKQEAgLTUyNjcsNyArNTI5MCw3IEBACiAgIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwogICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKICAgZm9yIChuYW1lID0gZWxlbWVudFR5cGUtPm5hbWU7ICpuYW1lOyBuYW1lKyspIHsKLSAgICBpZiAoKm5hbWUgPT0gWE1MX1QoJzonKSkgeworICAgIGlmICgqbmFtZSA9PSBYTUxfVChBU0NJSV9DT0xPTikpIHsKICAgICAgIFBSRUZJWCAqcHJlZml4OwogICAgICAgY29uc3QgWE1MX0NoYXIgKnM7CiAgICAgICBmb3IgKHMgPSBlbGVtZW50VHlwZS0+bmFtZTsgcyAhPSBuYW1lOyBzKyspIHsKQEAgLTUzMTQsMTIgKzUzMzcsMTIgQEAKICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOwogICAgIGlmICghbnMpCiAgICAgICA7Ci0gICAgZWxzZSBpZiAobmFtZVswXSA9PSBYTUxfVCgneCcpCi0gICAgICAgICYmIG5hbWVbMV0gPT0gWE1MX1QoJ20nKQotICAgICAgICAmJiBuYW1lWzJdID09IFhNTF9UKCdsJykKLSAgICAgICAgJiYgbmFtZVszXSA9PSBYTUxfVCgnbicpCi0gICAgICAgICYmIG5hbWVbNF0gPT0gWE1MX1QoJ3MnKQotICAgICAgICAmJiAobmFtZVs1XSA9PSBYTUxfVCgnXDAnKSB8fCBuYW1lWzVdID09IFhNTF9UKCc6JykpKSB7CisgICAgZWxzZSBpZiAobmFtZVswXSA9PSBYTUxfVChBU0NJSV94KQorICAgICAgICAmJiBuYW1lWzFdID09IFhNTF9UKEFTQ0lJX20pCisgICAgICAgICYmIG5hbWVbMl0gPT0gWE1MX1QoQVNDSUlfbCkKKyAgICAgICAgJiYgbmFtZVszXSA9PSBYTUxfVChBU0NJSV9uKQorICAgICAgICAmJiBuYW1lWzRdID09IFhNTF9UKEFTQ0lJX3MpCisgICAgICAgICYmIChuYW1lWzVdID09IFhNTF9UKCdcMCcpIHx8IG5hbWVbNV0gPT0gWE1MX1QoQVNDSUlfQ09MT04pKSkgewogICAgICAgaWYgKG5hbWVbNV0gPT0gWE1MX1QoJ1wwJykpCiAgICAgICAgIGlkLT5wcmVmaXggPSAmZHRkLT5kZWZhdWx0UHJlZml4OwogICAgICAgZWxzZQpAQCAtNTMzMCw3ICs1MzUzLDcgQEAKICAgICAgIGludCBpOwogICAgICAgZm9yIChpID0gMDsgbmFtZVtpXTsgaSsrKSB7CiAgICAgICAgIC8qIGF0dHJpYnV0ZXMgd2l0aG91dCBwcmVmaXggYXJlICpub3QqIGluIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSAqLwotICAgICAgICBpZiAobmFtZVtpXSA9PSBYTUxfVCgnOicpKSB7CisgICAgICAgIGlmIChuYW1lW2ldID09IFhNTF9UKEFTQ0lJX0NPTE9OKSkgewogICAgICAgICAgIGludCBqOwogICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJmR0ZC0+cG9vbCwgbmFtZVtqXSkpCkBAIC01MzUyLDcgKzUzNzUsNyBAQAogICByZXR1cm4gaWQ7CiB9CiAKLSNkZWZpbmUgQ09OVEVYVF9TRVAgWE1MX1QoJ1xmJykKKyNkZWZpbmUgQ09OVEVYVF9TRVAgWE1MX1QoQVNDSUlfRkYpCiAKIHN0YXRpYyBjb25zdCBYTUxfQ2hhciAqCiBnZXRDb250ZXh0KFhNTF9QYXJzZXIgcGFyc2VyKQpAQCAtNTM2NCw3ICs1Mzg3LDcgQEAKICAgaWYgKGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nKSB7CiAgICAgaW50IGk7CiAgICAgaW50IGxlbjsKLSAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJz0nKSkpCisgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKEFTQ0lJX0VRVUFMUykpKQogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGVuID0gZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmctPnVyaUxlbjsKICAgICBpZiAobmFtZXNwYWNlU2VwYXJhdG9yKQpAQCAtNTM5MCw3ICs1NDEzLDcgQEAKICAgICBmb3IgKHMgPSBwcmVmaXgtPm5hbWU7ICpzOyBzKyspCiAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJz0nKSkpCisgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKEFTQ0lJX0VRVUFMUykpKQogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGVuID0gcHJlZml4LT5iaW5kaW5nLT51cmlMZW47CiAgICAgaWYgKG5hbWVzcGFjZVNlcGFyYXRvcikKQEAgLTU0NDIsNyArNTQ2NSw3IEBACiAgICAgICBjb250ZXh0ID0gczsKICAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCpzID09IFhNTF9UKCc9JykpIHsKKyAgICBlbHNlIGlmICgqcyA9PSBYTUxfVChBU0NJSV9FUVVBTFMpKSB7CiAgICAgICBQUkVGSVggKnByZWZpeDsKICAgICAgIGlmIChwb29sTGVuZ3RoKCZ0ZW1wUG9vbCkgPT0gMCkKICAgICAgICAgcHJlZml4ID0gJmR0ZC0+ZGVmYXVsdFByZWZpeDsKZGlmZiAtLWdpdCBhL2xpYi94bWxyb2xlLmMgYi9saWIveG1scm9sZS5jCmluZGV4IDM3ODJmMWUuLjljNWUyNWIgMTAwNjQ0Ci0tLSBhL2xpYi94bWxyb2xlLmMKKysrIGIvbGliL3htbHJvbGUuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgIm1hY2NvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChfX2FtaWdhb3M0X18pCiAjaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCiAjZWxzZQogI2lmZGVmIEhBVkVfRVhQQVRfQ09ORklHX0gKICNpbmNsdWRlIDxleHBhdF9jb25maWcuaD4KQEAgLTUzLDEyICs1NSwxNiBAQAogICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsICdcMCcgfTsKIHN0YXRpYyBjb25zdCBjaGFyIEtXX0lEUkVGU1tdID0gewogICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsIEFTQ0lJX1MsICdcMCcgfTsKKyNpZmRlZiBYTUxfRFRECiBzdGF0aWMgY29uc3QgY2hhciBLV19JR05PUkVbXSA9IHsKICAgICBBU0NJSV9JLCBBU0NJSV9HLCBBU0NJSV9OLCBBU0NJSV9PLCBBU0NJSV9SLCBBU0NJSV9FLCAnXDAnIH07CisjZW5kaWYKIHN0YXRpYyBjb25zdCBjaGFyIEtXX0lNUExJRURbXSA9IHsKICAgICBBU0NJSV9JLCBBU0NJSV9NLCBBU0NJSV9QLCBBU0NJSV9MLCBBU0NJSV9JLCBBU0NJSV9FLCBBU0NJSV9ELCAnXDAnIH07CisjaWZkZWYgWE1MX0RURAogc3RhdGljIGNvbnN0IGNoYXIgS1dfSU5DTFVERVtdID0gewogICAgIEFTQ0lJX0ksIEFTQ0lJX04sIEFTQ0lJX0MsIEFTQ0lJX0wsIEFTQ0lJX1UsIEFTQ0lJX0QsIEFTQ0lJX0UsICdcMCcgfTsKKyNlbmRpZgogc3RhdGljIGNvbnN0IGNoYXIgS1dfTkRBVEFbXSA9IHsKICAgICBBU0NJSV9OLCBBU0NJSV9ELCBBU0NJSV9BLCBBU0NJSV9ULCBBU0NJSV9BLCAnXDAnIH07CiBzdGF0aWMgY29uc3QgY2hhciBLV19OTVRPS0VOW10gPSB7CmRpZmYgLS1naXQgYS9saWIveG1sdG9rLmMgYi9saWIveG1sdG9rLmMKaW5kZXggMjZjZWU0ZC4uMDY4YWZkZSAxMDA2NDQKLS0tIGEvbGliL3htbHRvay5jCisrKyBiL2xpYi94bWx0b2suYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgIm1hY2NvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChfX2FtaWdhb3M0X18pCiAjaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCiAjZWxzZQogI2lmZGVmIEhBVkVfRVhQQVRfQ09ORklHX0gKICNpbmNsdWRlIDxleHBhdF9jb25maWcuaD4KQEAgLTI5NSw3ICsyOTcsOSBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFJFRklYKGlkZW50KSBub3JtYWxfICMjIGlkZW50CisjZGVmaW5lIFhNTF9UT0tfSU1QTF9DCiAjaW5jbHVkZSAieG1sdG9rX2ltcGwuYyIKKyN1bmRlZiBYTUxfVE9LX0lNUExfQwogCiAjdW5kZWYgTUlOQlBDCiAjdW5kZWYgQllURV9UWVBFCkBAIC02OTIsNyArNjk2LDkgQEAKICNkZWZpbmUgSVNfTk1TVFJUX0NIQVIoZW5jLCBwLCBuKSAoMCkKICNkZWZpbmUgSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcCkgTElUVExFMl9JU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKQogCisjZGVmaW5lIFhNTF9UT0tfSU1QTF9DCiAjaW5jbHVkZSAieG1sdG9rX2ltcGwuYyIKKyN1bmRlZiBYTUxfVE9LX0lNUExfQwogCiAjdW5kZWYgTUlOQlBDCiAjdW5kZWYgQllURV9UWVBFCkBAIC04MzEsNyArODM3LDkgQEAKICNkZWZpbmUgSVNfTk1TVFJUX0NIQVIoZW5jLCBwLCBuKSAoMCkKICNkZWZpbmUgSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcCkgQklHMl9JU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKQogCisjZGVmaW5lIFhNTF9UT0tfSU1QTF9DCiAjaW5jbHVkZSAieG1sdG9rX2ltcGwuYyIKKyN1bmRlZiBYTUxfVE9LX0lNUExfQwogCiAjdW5kZWYgTUlOQlBDCiAjdW5kZWYgQllURV9UWVBFCkBAIC0xNjEwLDcgKzE2MTgsOSBAQAogCiAjZGVmaW5lIE5TKHgpIHgKICNkZWZpbmUgbnMoeCkgeAorI2RlZmluZSBYTUxfVE9LX05TX0MKICNpbmNsdWRlICJ4bWx0b2tfbnMuYyIKKyN1bmRlZiBYTUxfVE9LX05TX0MKICN1bmRlZiBOUwogI3VuZGVmIG5zCiAKQEAgLTE2MTksNyArMTYyOSw5IEBACiAjZGVmaW5lIE5TKHgpIHggIyMgTlMKICNkZWZpbmUgbnMoeCkgeCAjIyBfbnMKIAorI2RlZmluZSBYTUxfVE9LX05TX0MKICNpbmNsdWRlICJ4bWx0b2tfbnMuYyIKKyN1bmRlZiBYTUxfVE9LX05TX0MKIAogI3VuZGVmIE5TCiAjdW5kZWYgbnMKZGlmZiAtLWdpdCBhL2xpYi94bWx0b2tfaW1wbC5jIGIvbGliL3htbHRva19pbXBsLmMKaW5kZXggYWVmZDQ3MS4uZDI4YjQ5MiAxMDA2NDQKLS0tIGEvbGliL3htbHRva19pbXBsLmMKKysrIGIvbGliL3htbHRva19pbXBsLmMKQEAgLTIsNiArMiw5IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAorLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkISAqLworI2lmZGVmIFhNTF9UT0tfSU1QTF9DCisKICNpZm5kZWYgSVNfSU5WQUxJRF9DSEFSCiAjZGVmaW5lIElTX0lOVkFMSURfQ0hBUihlbmMsIHB0ciwgbikgKDApCiAjZW5kaWYKQEAgLTE3NDEsMTMgKzE3NDQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAogICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTiAqcG9zKQogewotICB3aGlsZSAocHRyICE9IGVuZCkgeworICAvLyBCRUdJTiBhbmRyb2lkLWNoYW5nZWQKKyAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAvLyBFTkQgYW5kcm9pZC1jaGFuZ2VkCiAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CiAjZGVmaW5lIExFQURfQ0FTRShuKSBcCiAgICAgY2FzZSBCVF9MRUFEICMjIG46IFwKLSAgICAgIGlmIChlbmQgLSBwdHIgPCBuKSB7IFwKLSAgICAgICAgcmV0dXJuOyBcCi0gICAgICB9IFwKICAgICAgIHB0ciArPSBuOyBcCiAgICAgICBicmVhazsKICAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQpAQCAtMTc4MCwzICsxNzgyLDQgQEAKICN1bmRlZiBDSEVDS19OTVNUUlRfQ0FTRQogI3VuZGVmIENIRUNLX05NU1RSVF9DQVNFUwogCisjZW5kaWYgLyogWE1MX1RPS19JTVBMX0MgKi8KZGlmZiAtLWdpdCBhL2xpYi94bWx0b2tfbnMuYyBiL2xpYi94bWx0b2tfbnMuYwppbmRleCBkMmY4OTM4Li5jM2I4OGZkIDEwMDY0NAotLS0gYS9saWIveG1sdG9rX25zLmMKKysrIGIvbGliL3htbHRva19ucy5jCkBAIC0xLDMgKzEsMTAgQEAKKy8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQhICovCisjaWZkZWYgWE1MX1RPS19OU19DCisKIGNvbnN0IEVOQ09ESU5HICoKIE5TKFhtbEdldFV0ZjhJbnRlcm5hbEVuY29kaW5nKSh2b2lkKQogewpAQCAtMTA0LDMgKzExMSw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmUpOwogfQorCisjZW5kaWYgLyogWE1MX1RPS19OU19DICovCmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmsvYmVuY2htYXJrLmMgYi90ZXN0cy9iZW5jaG1hcmsvYmVuY2htYXJrLmMKaW5kZXggODYyNjZhMC4uMGYwZmQxOCAxMDA2NDQKLS0tIGEvdGVzdHMvYmVuY2htYXJrL2JlbmNobWFyay5jCisrKyBiL3Rlc3RzL2JlbmNobWFyay9iZW5jaG1hcmsuYwpAQCAtNCw2ICs0LDEwIEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgImV4cGF0LmgiCiAKKyNpZiBkZWZpbmVkKF9fYW1pZ2Fvc19fKSAmJiBkZWZpbmVkKF9fVVNFX0lOTElORV9fKQorI2luY2x1ZGUgPHByb3RvL2V4cGF0Lmg+CisjZW5kaWYKKwogI2lmZGVmIFhNTF9MQVJHRV9TSVpFCiAjZGVmaW5lIFhNTF9GTVRfSU5UX01PRCAibGwiCiAjZWxzZQpAQCAtMTgsMTMgKzIyLDcgQEAKICAgZXhpdChyYyk7CiB9CiAKLSNpZmRlZiBBTUlHQV9TSEFSRURfTElCCi0jaW5jbHVkZSA8cHJvdG8vZXhwYXQuaD4KLWludAotYW1pZ2FfbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotI2Vsc2UKIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSAKLSNlbmRpZgogewogICBYTUxfUGFyc2VyICBwYXJzZXI7CiAgIGNoYXIgICAgICAgICpYTUxCdWYsICpYTUxCdWZFbmQsICpYTUxCdWZQdHI7CkBAIC03MiwxNSArNzAsMTYgQEAKICAgZmlsZVNpemUgPSBmcmVhZCAoWE1MQnVmLCBzaXplb2YgKGNoYXIpLCBmaWxlQXR0ci5zdF9zaXplLCBmZCk7CiAgIGZjbG9zZSAoZmQpOwogICAKKyAgaWYgKG5zKQorICAgIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGVOUyhOVUxMLCAnIScpOworICBlbHNlCisgICAgcGFyc2VyID0gWE1MX1BhcnNlckNyZWF0ZShOVUxMKTsKKwogICBpID0gMDsKICAgWE1MQnVmRW5kID0gWE1MQnVmICsgZmlsZVNpemU7CiAgIHdoaWxlIChpIDwgbnJPZkxvb3BzKSB7CiAgICAgWE1MQnVmUHRyID0gWE1MQnVmOwogICAgIGlzRmluYWwgPSAwOwotICAgIGlmIChucykKLSAgICAgIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGVOUyhOVUxMLCAnIScpOwotICAgIGVsc2UKLSAgICAgIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CiAgICAgdHN0YXJ0ID0gY2xvY2soKTsKICAgICBkbyB7CiAgICAgICBpbnQgcGFyc2VCdWZmZXJTaXplID0gWE1MQnVmRW5kIC0gWE1MQnVmUHRyOwpAQCAtMTAyLDEwICsxMDEsMTEgQEAKICAgICB9IHdoaWxlICghaXNGaW5hbCk7CiAgICAgdGVuZCA9IGNsb2NrKCk7CiAgICAgY3B1VGltZSArPSAoKGRvdWJsZSkgKHRlbmQgLSB0c3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOwotICAgIFhNTF9QYXJzZXJGcmVlIChwYXJzZXIpOworICAgIFhNTF9QYXJzZXJSZXNldChwYXJzZXIsIE5VTEwpOwogICAgIGkrKzsKICAgfQogCisgIFhNTF9QYXJzZXJGcmVlIChwYXJzZXIpOwogICBmcmVlIChYTUxCdWYpOwogICAgICAgCiAgIHByaW50ZiAoIiVkIGxvb3BzLCB3aXRoIGJ1ZmZlciBzaXplICVkLiBBdmVyYWdlIHRpbWUgcGVyIGxvb3A6ICVmXG4iLCAKZGlmZiAtLWdpdCBhL3Rlc3RzL21pbmljaGVjay5jIGIvdGVzdHMvbWluaWNoZWNrLmMKaW5kZXggMjVmYmY4NS4uZDJmNDI5NSAxMDA2NDQKLS0tIGEvdGVzdHMvbWluaWNoZWNrLmMKKysrIGIvdGVzdHMvbWluaWNoZWNrLmMKQEAgLTgyLDEyICs4Miw2IEBACiAgICAgcmV0dXJuIHJ1bm5lcjsKIH0KIAotdm9pZAotc3J1bm5lcl9zZXRfZm9ya19zdGF0dXMoU1J1bm5lciAqcnVubmVyLCBpbnQgc3RhdHVzKQotewotICAgIC8qIFdlIGlnbm9yZSB0aGlzLiAqLwotfQotCiBzdGF0aWMgam1wX2J1ZiBlbnY7CiAKIHN0YXRpYyBjaGFyIGNvbnN0ICpfY2hlY2tfY3VycmVudF9mdW5jdGlvbiA9IE5VTEw7CkBAIC0xNjQsNiArMTU4LDEyIEBACiB2b2lkCiBfZmFpbF91bmxlc3MoaW50IGNvbmRpdGlvbiwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNoYXIgKm1zZykKIHsKKyAgICAvKiBBbHdheXMgcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2Ugc28gaXQgaXNuJ3QgbG9zdC4gIEluIHRoaXMgY2FzZSwKKyAgICAgICB3ZSBoYXZlIGEgZmFpbHVyZSwgc28gdGhlcmUncyBubyByZWFzb24gdG8gYmUgcXVpZXQgYWJvdXQgd2hhdAorICAgICAgIGl0IGlzLgorICAgICovCisgICAgaWYgKG1zZyAhPSBOVUxMKQorICAgICAgICBwcmludGYoIiVzIiwgbXNnKTsKICAgICBsb25nam1wKGVudiwgMSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL21pbmljaGVjay5oIGIvdGVzdHMvbWluaWNoZWNrLmgKaW5kZXggYzhhMWQ1ZS4uZjg0NmJlYSAxMDA2NDQKLS0tIGEvdGVzdHMvbWluaWNoZWNrLmgKKysrIGIvdGVzdHMvbWluaWNoZWNrLmgKQEAgLTE4LDYgKzE4LDEzIEBACiAjZGVmaW5lIENLX05PUk1BTCAgMQogI2RlZmluZSBDS19WRVJCT1NFIDIKIAorLyogV29ya2Fyb3VuZCBmb3IgVHJ1NjQgVW5peCBzeXN0ZW1zIHdoZXJlIHRoZSBDIGNvbXBpbGVyIGhhcyBhIHdvcmtpbmcKKyAgIF9fZnVuY19fLCBidXQgdGhlIEMrKyBjb21waWxlciBvbmx5IGhhcyBhIHdvcmtpbmcgX19GVU5DVElPTl9fLiAgVGhpcworICAgY291bGQgYmUgZml4ZWQgaW4gY29uZmlndXJlLmluLCBidXQgaXQncyBub3Qgd29ydGggaXQgcmlnaHQgbm93LiAqLworI2lmIGRlZmluZWQoX19vc2ZfXykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCisjZW5kaWYKKwogI2RlZmluZSBTVEFSVF9URVNUKHRlc3RuYW1lKSBzdGF0aWMgdm9pZCB0ZXN0bmFtZSh2b2lkKSB7IFwKICAgICBfY2hlY2tfc2V0X3Rlc3RfaW5mbyhfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsgICBcCiAgICAgewpAQCAtMzUsNyArNDIsNiBAQAogCiBzdHJ1Y3QgU1J1bm5lciB7CiAgICAgU3VpdGUgKnN1aXRlOwotICAgIGludCBmb3JraW5nOwogICAgIGludCBuY2hlY2tzOwogICAgIGludCBuZmFpbHVyZXM7CiB9OwpAQCAtNzQsNyArODAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjYXNlX3RlYXJkb3duX2Z1bmN0aW9uKTsKIHZvaWQgdGNhc2VfYWRkX3Rlc3QoVENhc2UgKnRjLCB0Y2FzZV90ZXN0X2Z1bmN0aW9uIHRlc3QpOwogU1J1bm5lciAqc3J1bm5lcl9jcmVhdGUoU3VpdGUgKnN1aXRlKTsKLXZvaWQgc3J1bm5lcl9zZXRfZm9ya19zdGF0dXMoU1J1bm5lciAqcnVubmVyLCBpbnQgZm9ya2luZyk7CiB2b2lkIHNydW5uZXJfcnVuX2FsbChTUnVubmVyICpydW5uZXIsIGludCB2ZXJib3NpdHkpOwogaW50IHNydW5uZXJfbnRlc3RzX2ZhaWxlZChTUnVubmVyICpydW5uZXIpOwogdm9pZCBzcnVubmVyX2ZyZWUoU1J1bm5lciAqcnVubmVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bnRlc3RzLmMgYi90ZXN0cy9ydW50ZXN0cy5jCmluZGV4IDA4OGZlNmYuLjM1MjFjMDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3J1bnRlc3RzLmMKKysrIGIvdGVzdHMvcnVudGVzdHMuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgImNoYXJkYXRhLmgiCiAjaW5jbHVkZSAibWluaWNoZWNrLmgiCiAKLSNpZmRlZiBBTUlHQV9TSEFSRURfTElCCisjaWYgZGVmaW5lZChfX2FtaWdhb3NfXykgJiYgZGVmaW5lZChfX1VTRV9JTkxJTkVfXykKICNpbmNsdWRlIDxwcm90by9leHBhdC5oPgogI2VuZGlmCiAKQEAgLTUzLDEwICs1MywxMiBAQAogX3htbF9mYWlsdXJlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKIHsKICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICBlbnVtIFhNTF9FcnJvciBlcnIgPSBYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcik7CiAgICAgc3ByaW50ZihidWZmZXIsCi0gICAgICAgICAgICAiXG4gICAgJXMgKGxpbmUgJSIgWE1MX0ZNVF9JTlRfTU9EICJ1LCBvZmZzZXQgJSJcCi0gICAgICAgICAgICAgICAgWE1MX0ZNVF9JTlRfTU9EICJ1KVxuICAgIHJlcG9ydGVkIGZyb20gJXMsIGxpbmUgJWQiLAotICAgICAgICAgICAgWE1MX0Vycm9yU3RyaW5nKFhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSksCisgICAgICAgICAgICAiICAgICVkOiAlcyAobGluZSAlIiBYTUxfRk1UX0lOVF9NT0QgInUsIG9mZnNldCAlIlwKKyAgICAgICAgICAgICAgICBYTUxfRk1UX0lOVF9NT0QgInUpXG4gICAgcmVwb3J0ZWQgZnJvbSAlcywgbGluZSAlZFxuIiwKKyAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgIFhNTF9FcnJvclN0cmluZyhlcnIpLAogICAgICAgICAgICAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHBhcnNlciksCiAgICAgICAgICAgICBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcihwYXJzZXIpLAogICAgICAgICAgICAgZmlsZSwgbGluZSk7CkBAIC0zNjIsNyArMzY0LDcgQEAKIAogU1RBUlRfVEVTVCh0ZXN0X3V0ZjE2X2xlX2VwaWxvZ19uZXdsaW5lKQogewotICAgIGludCBmaXJzdF9jaHVua19ieXRlcyA9IDE3OworICAgIHVuc2lnbmVkIGludCBmaXJzdF9jaHVua19ieXRlcyA9IDE3OwogICAgIGNoYXIgdGV4dFtdID0gCiAgICAgICAgICJceEZGXHhGRSIgICAgICAgICAgICAgICAgICAgICAgLyogQk9NICovCiAgICAgICAgICI8XDAwMGVcMDAwL1wwMDA+XDAwMCIgICAgICAgICAgLyogZG9jdW1lbnQgZWxlbWVudCAqLwpAQCAtOTgyLDYgKzk4NCw4MiBAQAogfQogRU5EX1RFU1QKIAorc3RhdGljIGNoYXIgKmxvbmdfY2hhcmFjdGVyX2RhdGFfdGV4dCA9CisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48cz4iCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkiCisgICAgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIKKyAgICAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IgorICAgICI8L3M+IjsKKworc3RhdGljIFhNTF9Cb29sIHJlc3VtYWJsZSA9IFhNTF9GQUxTRTsKKworc3RhdGljIHZvaWQKK2NsZWFyaW5nX2Fib3J0aW5nX2NoYXJhY3Rlcl9oYW5kbGVyKHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnMsIGludCBsZW4pCit7CisgICAgWE1MX1N0b3BQYXJzZXIocGFyc2VyLCByZXN1bWFibGUpOworICAgIFhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIE5VTEwpOworfQorCisvKiBSZWdyZXNzaW9uIHRlc3QgZm9yIFNGIGJ1ZyAjMTUxNTI2NjogbWlzc2luZyBjaGVjayBvZiBzdG9wcGVkCisgICBwYXJzZXIgaW4gZG9Db250ZXh0KCkgJ2ZvcicgbG9vcC4gKi8KK1NUQVJUX1RFU1QodGVzdF9zdG9wX3BhcnNlcl9iZXR3ZWVuX2NoYXJfZGF0YV9jYWxscykKK3sKKyAgICAvKiBUaGUgc2FtcGxlIGRhdGEgbXVzdCBiZSBiaWcgZW5vdWdoIHRoYXQgdGhlcmUgYXJlIHR3byBjYWxscyB0bworICAgICAgIHRoZSBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyIGZyb20gd2l0aGluIHRoZSBpbm5lciAiZm9yIiBsb29wIG9mCisgICAgICAgdGhlIFhNTF9UT0tfREFUQV9DSEFSUyBjYXNlIGluIGRvQ29udGVudCgpLCBhbmQgdGhlIGNoYXJhY3RlcgorICAgICAgIGhhbmRsZXIgbXVzdCBzdG9wIHRoZSBwYXJzZXIgYW5kIGNsZWFyIHRoZSBjaGFyYWN0ZXIgZGF0YQorICAgICAgIGhhbmRsZXIuCisgICAgKi8KKyAgICBjaGFyICp0ZXh0ID0gbG9uZ19jaGFyYWN0ZXJfZGF0YV90ZXh0OworCisgICAgWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKHBhcnNlciwgY2xlYXJpbmdfYWJvcnRpbmdfY2hhcmFjdGVyX2hhbmRsZXIpOworICAgIHJlc3VtYWJsZSA9IFhNTF9GQUxTRTsKKyAgICBpZiAoWE1MX1BhcnNlKHBhcnNlciwgdGV4dCwgc3RybGVuKHRleHQpLCBYTUxfVFJVRSkgIT0gWE1MX1NUQVRVU19FUlJPUikKKyAgICAgICAgeG1sX2ZhaWx1cmUocGFyc2VyKTsKKyAgICBpZiAoWE1MX0dldEVycm9yQ29kZShwYXJzZXIpICE9IFhNTF9FUlJPUl9BQk9SVEVEKQorICAgICAgICB4bWxfZmFpbHVyZShwYXJzZXIpOworfQorRU5EX1RFU1QKKworLyogUmVncmVzc2lvbiB0ZXN0IGZvciBTRiBidWcgIzE1MTUyNjY6IG1pc3NpbmcgY2hlY2sgb2Ygc3RvcHBlZAorICAgcGFyc2VyIGluIGRvQ29udGV4dCgpICdmb3InIGxvb3AuICovCitTVEFSVF9URVNUKHRlc3Rfc3VzcGVuZF9wYXJzZXJfYmV0d2Vlbl9jaGFyX2RhdGFfY2FsbHMpCit7CisgICAgLyogVGhlIHNhbXBsZSBkYXRhIG11c3QgYmUgYmlnIGVub3VnaCB0aGF0IHRoZXJlIGFyZSB0d28gY2FsbHMgdG8KKyAgICAgICB0aGUgY2hhcmFjdGVyIGRhdGEgaGFuZGxlciBmcm9tIHdpdGhpbiB0aGUgaW5uZXIgImZvciIgbG9vcCBvZgorICAgICAgIHRoZSBYTUxfVE9LX0RBVEFfQ0hBUlMgY2FzZSBpbiBkb0NvbnRlbnQoKSwgYW5kIHRoZSBjaGFyYWN0ZXIKKyAgICAgICBoYW5kbGVyIG11c3Qgc3RvcCB0aGUgcGFyc2VyIGFuZCBjbGVhciB0aGUgY2hhcmFjdGVyIGRhdGEKKyAgICAgICBoYW5kbGVyLgorICAgICovCisgICAgY2hhciAqdGV4dCA9IGxvbmdfY2hhcmFjdGVyX2RhdGFfdGV4dDsKKworICAgIFhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIGNsZWFyaW5nX2Fib3J0aW5nX2NoYXJhY3Rlcl9oYW5kbGVyKTsKKyAgICByZXN1bWFibGUgPSBYTUxfVFJVRTsKKyAgICBpZiAoWE1MX1BhcnNlKHBhcnNlciwgdGV4dCwgc3RybGVuKHRleHQpLCBYTUxfVFJVRSkgIT0gWE1MX1NUQVRVU19TVVNQRU5ERUQpCisgICAgICAgIHhtbF9mYWlsdXJlKHBhcnNlcik7CisgICAgaWYgKFhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSAhPSBYTUxfRVJST1JfTk9ORSkKKyAgICAgICAgeG1sX2ZhaWx1cmUocGFyc2VyKTsKK30KK0VORF9URVNUCisKIAogLyoKICAqIE5hbWVzcGFjZXMgdGVzdHMuCkBAIC0xMTc2LDcgKzEyNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnB1YmxpY0lkKSAKIHsKLSAgICBpbnQgY2FsbG5vID0gMSArIChpbnQpWE1MX0dldFVzZXJEYXRhKHBhcnNlcik7CisgICAgbG9uZyBjYWxsbm8gPSAxICsgKGxvbmcpWE1MX0dldFVzZXJEYXRhKHBhcnNlcik7CiAgICAgY2hhciAqdGV4dDsKICAgICBYTUxfUGFyc2VyIHAyOwogCkBAIC0xMzgwLDYgKzE0NTgsOCBAQAogICAgIHRjYXNlX2FkZF90ZXN0KHRjX2Jhc2ljLCB0ZXN0X2R0ZF9kZWZhdWx0X2hhbmRsaW5nKTsKICAgICB0Y2FzZV9hZGRfdGVzdCh0Y19iYXNpYywgdGVzdF9lbXB0eV9uc193aXRob3V0X25hbWVzcGFjZXMpOwogICAgIHRjYXNlX2FkZF90ZXN0KHRjX2Jhc2ljLCB0ZXN0X25zX2luX2F0dHJpYnV0ZV9kZWZhdWx0X3dpdGhvdXRfbmFtZXNwYWNlcyk7CisgICAgdGNhc2VfYWRkX3Rlc3QodGNfYmFzaWMsIHRlc3Rfc3RvcF9wYXJzZXJfYmV0d2Vlbl9jaGFyX2RhdGFfY2FsbHMpOworICAgIHRjYXNlX2FkZF90ZXN0KHRjX2Jhc2ljLCB0ZXN0X3N1c3BlbmRfcGFyc2VyX2JldHdlZW5fY2hhcl9kYXRhX2NhbGxzKTsKIAogICAgIHN1aXRlX2FkZF90Y2FzZShzLCB0Y19uYW1lc3BhY2UpOwogICAgIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUodGNfbmFtZXNwYWNlLApAQCAtMTQwMiwxNiArMTQ4MiwxMCBAQAogfQogCiAKLSNpZmRlZiBBTUlHQV9TSEFSRURfTElCCi1pbnQKLWFtaWdhX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSNlbHNlCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSNlbmRpZgogewogICAgIGludCBpLCBuZjsKLSAgICBpbnQgZm9ya2luZyA9IDAsIGZvcmtpbmdfc2V0ID0gMDsKICAgICBpbnQgdmVyYm9zaXR5ID0gQ0tfTk9STUFMOwogICAgIFN1aXRlICpzID0gbWFrZV9zdWl0ZSgpOwogICAgIFNSdW5uZXIgKnNyID0gc3J1bm5lcl9jcmVhdGUocyk7CkBAIC0xNDI1LDIxICsxNDk5LDExIEBACiAgICAgICAgICAgICB2ZXJib3NpdHkgPSBDS19WRVJCT1NFOwogICAgICAgICBlbHNlIGlmIChzdHJjbXAob3B0LCAiLXEiKSA9PSAwIHx8IHN0cmNtcChvcHQsICItLXF1aWV0IikgPT0gMCkKICAgICAgICAgICAgIHZlcmJvc2l0eSA9IENLX1NJTEVOVDsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKG9wdCwgIi1mIikgPT0gMCB8fCBzdHJjbXAob3B0LCAiLS1mb3JrIikgPT0gMCkgewotICAgICAgICAgICAgZm9ya2luZyA9IDE7Ci0gICAgICAgICAgICBmb3JraW5nX3NldCA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKG9wdCwgIi1uIikgPT0gMCB8fCBzdHJjbXAob3B0LCAiLS1uby1mb3JrIikgPT0gMCkgewotICAgICAgICAgICAgZm9ya2luZyA9IDA7Ci0gICAgICAgICAgICBmb3JraW5nX3NldCA9IDE7Ci0gICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJ1bnRlc3RzOiB1bmtub3duIG9wdGlvbiAnJXMnXG4iLCBvcHQpOwogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGZvcmtpbmdfc2V0KQotICAgICAgICBzcnVubmVyX3NldF9mb3JrX3N0YXR1cyhzciwgZm9ya2luZyA/IENLX0ZPUksgOiBDS19OT0ZPUkspOwogICAgIGlmICh2ZXJib3NpdHkgIT0gQ0tfU0lMRU5UKQogICAgICAgICBwcmludGYoIkV4cGF0IHZlcnNpb246ICVzXG4iLCBYTUxfRXhwYXRWZXJzaW9uKCkpOwogICAgIHNydW5uZXJfcnVuX2FsbChzciwgdmVyYm9zaXR5KTsKZGlmZiAtLWdpdCBhL3dpbjMyL01BTklGRVNULnR4dCBiL3dpbjMyL01BTklGRVNULnR4dAppbmRleCBlNTc5YzY5Li5iN2NkMzk1IDEwMDY0NAotLS0gYS93aW4zMi9NQU5JRkVTVC50eHQKKysrIGIvd2luMzIvTUFOSUZFU1QudHh0CkBAIC02LDI0ICs2LDIyIEBACiB1c2UgRXhwYXQgaW4gdGhlaXIgYXBwbGljYXRpb25zLiAgSW4gdGhlIGxpc3QgYmVsb3csIDx0b3A+IGlzIHRoZQogZGlyZWN0b3J5IHlvdSBzcGVjaWZpZWQgdG8gdGhlIGluc3RhbGxlci4KIAotICAgIERpcmVjdG9yeSAgICAgICAgICAgQ29udGVudHMKLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIDx0b3A+XCAgICAgICAgICAgICAgVGhlIFhNTCB3ZWxsLWZvcm1lZG5lc3MgY2hlY2tlciBhbmQgc29tZSBnZW5lcmFsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmaWxlcy4KKyAgRGlyZWN0b3J5ICAgICAgICAgICBDb250ZW50cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgPHRvcD5cICAgICAgICAgICAgICBTb21lIGdlbmVyYWwgaW5mb3JtYXRpb24gZmlsZXMuCiAKLSAgICA8dG9wPlxEb2NcICAgICAgICAgIEFQSSBkb2N1bWVudGF0aW9uIGZvciBkZXZlbG9wZXJzLgorICA8dG9wPlxEb2NcICAgICAgICAgIEFQSSBkb2N1bWVudGF0aW9uIGZvciBkZXZlbG9wZXJzLgogCi0gICAgPHRvcD5cTGlic1wgICAgICAgICBQcmUtY29tcGlsZWQgZHluYW1pYyBsaWJyYXJpZXMgZm9yIGRldmVsb3BlcnMuCisgIDx0b3A+XEJpblwgICAgICAgICAgUHJlLWNvbXBpbGVkIGR5bmFtaWMgbGlicmFyaWVzIGZvciBkZXZlbG9wZXJzLgorICAgICAgICAgICAgICAgICAgICAgIFByZS1jb21waWxlZCBzdGF0aWMgbGlicmFyaWVzIGZvciBkZXZlbG9wZXJzICgqTVQubGliKS4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgWE1MIHdlbGwtZm9ybWVkbmVzcyBjaGVja2VyIHhtbHdmLgogCi0gICAgPHRvcD5cU3RhdGljTGlic1wgICBQcmUtY29tcGlsZWQgc3RhdGljIGxpYnJhcmllcyBmb3IgZGV2ZWxvcGVycy4KKyAgPHRvcD5cU291cmNlXCAgICAgICBTb3VyY2UgY29kZSwgd2hpY2ggbWF5IGludGVyZXN0IHNvbWUgZGV2ZWxvcGVycywKKyAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgYSB3b3Jrc3BhY2UgZm9yIE1pY3Jvc2Z0IFZpc3VhbCBDKysuCisgICAgICAgICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGluY2x1ZGVzIHRoZSBwYXJzZXIsIHRoZSB3ZWxsLQorICAgICAgICAgICAgICAgICAgICAgIGZvcm1lZG5lc3MgY2hlY2tlciwgYW5kIGEgY291cGxlIG9mIHNtYWxsIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KIAotICAgIDx0b3A+XFNvdXJjZVwgICAgICAgU291cmNlIGNvZGUsIHdoaWNoIG1heSBpbnRlcmVzdCBzb21lIGRldmVsb3BlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgYSB3b3Jrc3BhY2UgZm9yIE1pY3Jvc2Z0IFZpc3VhbCBDKysuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgaW5jbHVkZXMgdGhlIHBhcnNlciwgdGhlIHdlbGwtCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtZWRuZXNzIGNoZWNrZXIsIGFuZCBhIGNvdXBsZSBvZiBzbWFsbCBzYW1wbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KLQotICAgIDx0b3A+XFNvdXJjZVxiY2I1XCAgUHJvamVjdCBmaWxlcyBmb3IgQm9ybGFuZCBDKysgQnVpbGRlciA1IGFuZCBCQ0MKLSAgICAgICAgICAgICAgICAgICAgICAgIDUuNS4KKyAgPHRvcD5cU291cmNlXGJjYjVcICBQcm9qZWN0IGZpbGVzIGZvciBCb3JsYW5kIEMrKyBCdWlsZGVyIDUgYW5kIEJDQyA1LjUuCiAKIApkaWZmIC0tZ2l0IGEvd2luMzIvUkVBRE1FLnR4dCBiL3dpbjMyL1JFQURNRS50eHQKaW5kZXggMmNhZDc2Ny4uNzdhOTRiYyAxMDA2NDQKLS0tIGEvd2luMzIvUkVBRE1FLnR4dAorKysgYi93aW4zMi9SRUFETUUudHh0CkBAIC0xNiw2ICsxNiwxMSBAQAogKiBNUyBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMiwgMjAwMywgMjAwNToKICAgVGhlIFZDKysgNiB3b3Jrc3BhY2UgZmlsZSAoZXhwYXQuZHN3KSBhbmQgcHJvamVjdCBmaWxlcyAoLmRzcCkKICAgY2FuIGJlIG9wZW5lZCBhbmQgaW1wb3J0ZWQgaW4gVlMuTkVUIHdpdGhvdXQgcHJvYmxlbXMuCisKKyogQWxsIE1TIEMvQysrIGNvbXBpbGVyczoKKyAgVGhlIG91dHB1dCBmb3IgYWxsIHByb2plY3RzIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSB3aW4zMlxiaW4KKyAgZGlyZWN0b3J5LCBpbnRlcm1lZGlhdGUgZmlsZXMgd2lsbCBiZSBsb2NhdGVkIGluIHByb2plY3Qtc3BlY2lmaWMKKyAgc3ViZGlyZWN0b3JpZXMgb2Ygd2luMzJcdG1wLgogICAKICogQ3JlYXRpbmcgTWluR1cgZHluYW1pYyBsaWJyYXJpZXMgZnJvbSBNUyBWQysrIERMTHM6CiAgIApkaWZmIC0tZ2l0IGEvd2luMzIvZXhwYXQuaXNzIGIvd2luMzIvZXhwYXQuaXNzCmluZGV4IDVmZjgwOGMuLjQwMGIzMTUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2V4cGF0LmlzcworKysgYi93aW4zMi9leHBhdC5pc3MKQEAgLTUsMjAgKzUsMjMgQEAKIDsgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyB1c2VkIHdpdGggSW5ubyBTZXR1cCAyLjAuMTkuCiAKIFtTZXR1cF0KLUFwcE5hbWU9ZXhwYXQKK0FwcE5hbWU9RXhwYXQKIEFwcElkPWV4cGF0Ci1BcHBWZXJzaW9uPTIuMC4wCi1BcHBWZXJOYW1lPWV4cGF0IDIuMC4wCitBcHBWZXJzaW9uPTIuMC4xCitBcHBWZXJOYW1lPUV4cGF0IDIuMC4xCiBBcHBDb3B5cmlnaHQ9Q29weXJpZ2h0IKkgMTk5OC0yMDA2IFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyLCBDbGFyayBDb29wZXIsIGFuZCB0aGUgRXhwYXQgbWFpbnRhaW5lcnMKLURlZmF1bHREaXJOYW1lPXtzZH1cRXhwYXQtMi4wLjAKIEFwcFB1Ymxpc2hlcj1UaGUgRXhwYXQgRGV2ZWxvcGVycwogQXBwUHVibGlzaGVyVVJMPWh0dHA6Ly93d3cubGliZXhwYXQub3JnLwogQXBwU3VwcG9ydFVSTD1odHRwOi8vd3d3LmxpYmV4cGF0Lm9yZy8KIEFwcFVwZGF0ZXNVUkw9aHR0cDovL3d3dy5saWJleHBhdC5vcmcvCi1Vbmluc3RhbGxEaXNwbGF5TmFtZT1FeHBhdCBYTUwgUGFyc2VyICh2ZXJzaW9uIDIuMC4wKQorVW5pbnN0YWxsRGlzcGxheU5hbWU9RXhwYXQgWE1MIFBhcnNlciAyLjAuMQorVmVyc2lvbkluZm9WZXJzaW9uPTIuMC4xCisKK0RlZmF1bHREaXJOYW1lPXtwZn1cRXhwYXQgMi4wLjEKIFVuaW5zdGFsbEZpbGVzRGlyPXthcHB9XFVuaW5zdGFsbAogCi1Db21wcmVzc2lvbj1iemlwLzkKK0NvbXByZXNzaW9uPWx6bWEKK1NvbGlkQ29tcHJlc3Npb249eWVzCiBTb3VyY2VEaXI9Li4KIE91dHB1dERpcj13aW4zMgogRGlzYWJsZVN0YXJ0dXBQcm9tcHQ9eWVzCkBAIC0yNyw0MyArMzAsMzkgQEAKIERpc2FibGVSZWFkeVBhZ2U9eWVzCiAKIFtGaWxlc10KLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHhtbHdmXFJlbGVhc2VcKi5leGU7ICAgICAgICBEZXN0RGlyOiAie2FwcH0iCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB3aW4zMlxNQU5JRkVTVC50eHQ7ICAgICAgICAgRGVzdERpcjogInthcHB9IgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogQ2hhbmdlczsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfSI7IERlc3ROYW1lOiBDaGFuZ2VzLnR4dAotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogQ09QWUlORzsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfSI7IERlc3ROYW1lOiBDT1BZSU5HLnR4dAotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogUkVBRE1FOyAgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfSI7IERlc3ROYW1lOiBSRUFETUUudHh0Ci1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBkb2NcKi5odG1sOyAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XERvYyIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGRvY1wqLmNzczsgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cRG9jIgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogZG9jXCoucG5nOyAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxEb2MiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZVwqLmRsbDsgICAgICAgICAgRGVzdERpcjogInthcHB9XExpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZVwqLmxpYjsgICAgICAgICAgRGVzdERpcjogInthcHB9XExpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZS13XCouZGxsOyAgICAgICAgRGVzdERpcjogInthcHB9XExpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZS13XCoubGliOyAgICAgICAgRGVzdERpcjogInthcHB9XExpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZV9zdGF0aWNcKi5saWI7ICAgRGVzdERpcjogInthcHB9XFN0YXRpY0xpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcUmVsZWFzZS13X3N0YXRpY1wqLmxpYjsgRGVzdERpcjogInthcHB9XFN0YXRpY0xpYnMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBleHBhdC5kc3c7ICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZSIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHdpbjMyXFJFQURNRS50eHQ7ICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlIgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLmJwKjsgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcYmNiNSIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGJjYjVcKi5tYWs7ICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXGJjYjUiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBiY2I1XCouZGVmOyAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLnR4dDsgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcYmNiNSIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGJjYjVcKi5iYXQ7ICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXGJjYjUiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcKi5jOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcKi5oOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcKi5kZWY7ICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcKi5kc3A7ICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBleGFtcGxlc1wqLmM7ICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxleGFtcGxlcyIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGV4YW1wbGVzXCouZHNwOyAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXGV4YW1wbGVzIgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogdGVzdHNcKi5jOyAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcdGVzdHMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1wqLmNwcDsgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0cyIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHRlc3RzXCouaDsgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXHRlc3RzIgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogdGVzdHNcUkVBRE1FLnR4dDsgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcdGVzdHMiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1xiZW5jaG1hcmtcKi5jOyAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0c1xiZW5jaG1hcmsiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1xiZW5jaG1hcmtcKi5kcyo7ICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0c1xiZW5jaG1hcmsiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1xiZW5jaG1hcmtcUkVBRE1FLnR4dDsgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0c1xiZW5jaG1hcmsiCi1GbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB4bWx3ZlwqLmMqOyAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx4bWx3ZiIKLUZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHhtbHdmXCouaDsgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXHhtbHdmIgotRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogeG1sd2ZcKi5kc3A7ICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VceG1sd2YiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB3aW4zMlxiaW5cUmVsZWFzZVx4bWx3Zi5leGU7ICBEZXN0RGlyOiAie2FwcH1cQmluIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogd2luMzJcTUFOSUZFU1QudHh0OyAgICAgICAgICAgRGVzdERpcjogInthcHB9IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogQ2hhbmdlczsgICAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9IjsgRGVzdE5hbWU6IENoYW5nZXMudHh0CitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBDT1BZSU5HOyAgICAgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH0iOyBEZXN0TmFtZTogQ09QWUlORy50eHQKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IFJFQURNRTsgICAgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfSI7IERlc3ROYW1lOiBSRUFETUUudHh0CitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBkb2NcKi5odG1sOyAgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cRG9jIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogZG9jXCouY3NzOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XERvYyIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGRvY1wqLnBuZzsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxEb2MiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB3aW4zMlxiaW5cUmVsZWFzZVwqLmRsbDsgICAgICBEZXN0RGlyOiAie2FwcH1cQmluIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogd2luMzJcYmluXFJlbGVhc2VcKi5saWI7ICAgICAgRGVzdERpcjogInthcHB9XEJpbiIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGV4cGF0LmRzdzsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2UiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB3aW4zMlxSRUFETUUudHh0OyAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLmJwKjsgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLm1hazsgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLmRlZjsgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLnR4dDsgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogYmNiNVwqLmJhdDsgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxiY2I1IgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogbGliXCouYzsgICAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBsaWJcKi5oOyAgICAgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXGxpYiIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IGxpYlwqLmRlZjsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcbGliIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogbGliXCouZHNwOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxsaWIiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiBleGFtcGxlc1wqLmM7ICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXGV4YW1wbGVzIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogZXhhbXBsZXNcKi5kc3A7ICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVxleGFtcGxlcyIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHRlc3RzXCouYzsgICAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcdGVzdHMiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1wqLmNwcDsgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXHRlc3RzIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogdGVzdHNcKi5oOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0cyIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHRlc3RzXFJFQURNRS50eHQ7ICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcdGVzdHMiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB0ZXN0c1xiZW5jaG1hcmtcKi5jOyAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXHRlc3RzXGJlbmNobWFyayIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHRlc3RzXGJlbmNobWFya1wqLmRzKjsgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VcdGVzdHNcYmVuY2htYXJrIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogdGVzdHNcYmVuY2htYXJrXFJFQURNRS50eHQ7ICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx0ZXN0c1xiZW5jaG1hcmsiCitGbGFnczogaWdub3JldmVyc2lvbjsgU291cmNlOiB4bWx3ZlwqLmMqOyAgICAgICAgICAgICAgICAgICBEZXN0RGlyOiAie2FwcH1cU291cmNlXHhtbHdmIgorRmxhZ3M6IGlnbm9yZXZlcnNpb247IFNvdXJjZTogeG1sd2ZcKi5oOyAgICAgICAgICAgICAgICAgICAgRGVzdERpcjogInthcHB9XFNvdXJjZVx4bWx3ZiIKK0ZsYWdzOiBpZ25vcmV2ZXJzaW9uOyBTb3VyY2U6IHhtbHdmXCouZHNwOyAgICAgICAgICAgICAgICAgIERlc3REaXI6ICJ7YXBwfVxTb3VyY2VceG1sd2YiCiAKIFtNZXNzYWdlc10KIFdlbGNvbWVMYWJlbDE9V2VsY29tZSB0byB0aGUgRXhwYXQgWE1MIFBhcnNlciBTZXR1cCBXaXphcmQKZGlmZiAtLWdpdCBhL3htbHdmL2NvZGVwYWdlLmMgYi94bWx3Zi9jb2RlcGFnZS5jCmluZGV4IGU2MTBjN2MuLjU3ZTQ4ZmYgMTAwNjQ0Ci0tLSBhL3htbHdmL2NvZGVwYWdlLmMKKysrIGIveG1sd2YvY29kZXBhZ2UuYwpAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgImNvZGVwYWdlLmgiCiAKLSNpZmRlZiBXSU4zMgorI2lmIChkZWZpbmVkKFdJTjMyKSB8fCAoZGVmaW5lZChfX1dBVENPTUNfXykgJiYgZGVmaW5lZChfX05UX18pKSkKICNkZWZpbmUgU1RSSUNUIDEKICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCiAKZGlmZiAtLWdpdCBhL3htbHdmL3JlYWRmaWxlbWFwLmMgYi94bWx3Zi9yZWFkZmlsZW1hcC5jCmluZGV4IDQyYjVlMDMuLjA4OGRkYTUgMTAwNjQ0Ci0tLSBhL3htbHdmL3JlYWRmaWxlbWFwLmMKKysrIGIveG1sd2YvcmVhZGZpbGVtYXAuYwpAQCAtOCw2ICs4LDE0IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2lmZGVmIF9fV0FUQ09NQ19fCisjaWZuZGVmIF9fTElOVVhfXworI2luY2x1ZGUgPGlvLmg+CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjZW5kaWYKKwogI2lmZGVmIF9fQkVPU19fCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKQEAgLTU3LDkgKzY1LDE3IEBACiAgICAgcmV0dXJuIDA7CiAgIH0KICAgbmJ5dGVzID0gc2Iuc3Rfc2l6ZTsKKyAgLyogbWFsbG9jIHdpbGwgcmV0dXJuIE5VTEwgd2l0aCBuYnl0ZXMgPT0gMCwgaGFuZGxlIGZpbGVzIHdpdGggc2l6ZSAwICovCisgIGlmIChuYnl0ZXMgPT0gMCkgeworICAgIHN0YXRpYyBjb25zdCBjaGFyIGMgPSAnXDAnOworICAgIHByb2Nlc3NvcigmYywgMCwgbmFtZSwgYXJnKTsKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIDE7CisgIH0KICAgcCA9IG1hbGxvYyhuYnl0ZXMpOwogICBpZiAoIXApIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBuYW1lKTsKKyAgICBjbG9zZShmZCk7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgbiA9IHJlYWQoZmQsIHAsIG5ieXRlcyk7CmRpZmYgLS1naXQgYS94bWx3Zi91bml4ZmlsZW1hcC5jIGIveG1sd2YvdW5peGZpbGVtYXAuYwppbmRleCAyMjA0OGM4Li45M2FkY2UzIDEwMDY0NAotLS0gYS94bWx3Zi91bml4ZmlsZW1hcC5jCisrKyBiL3htbHdmL3VuaXhmaWxlbWFwLmMKQEAgLTQ0LDYgKzQ0LDEzIEBACiAgIH0KIAogICBuYnl0ZXMgPSBzYi5zdF9zaXplOworICAvKiBtbWFwIGZhaWxzIGZvciB6ZXJvIGxlbmd0aCBmaWxlcyAqLworICBpZiAobmJ5dGVzID09IDApIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBjID0gJ1wwJzsKKyAgICBwcm9jZXNzb3IoJmMsIDAsIG5hbWUsIGFyZyk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAxOworICB9CiAgIHAgPSAodm9pZCAqKW1tYXAoKGNhZGRyX3QpMCwgKHNpemVfdCluYnl0ZXMsIFBST1RfUkVBRCwKICAgICAgICAgICAgICAgICAgICBNQVBfRklMRXxNQVBfUFJJVkFURSwgZmQsIChvZmZfdCkwKTsKICAgaWYgKHAgPT0gKHZvaWQgKiktMSkgewpkaWZmIC0tZ2l0IGEveG1sd2YveG1sZmlsZS5jIGIveG1sd2YveG1sZmlsZS5jCmluZGV4IDg4YmIzOTYuLjk5ZWVlYWEgMTAwNjQ0Ci0tLSBhL3htbHdmL3htbGZpbGUuYworKysgYi94bWx3Zi94bWxmaWxlLmMKQEAgLTEyLDggKzEyLDEwIEBACiAjaW5jbHVkZSAid2luY29uZmlnLmgiCiAjZWxpZiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCiAjaW5jbHVkZSAibWFjY29uZmlnLmgiCi0jZWxpZiBkZWZpbmVkKF9fYW1pZ2FvczRfXykKKyNlbGlmIGRlZmluZWQoX19hbWlnYW9zX18pCiAjaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCiAjZWxpZiBkZWZpbmVkKEhBVkVfRVhQQVRfQ09ORklHX0gpCiAjaW5jbHVkZSA8ZXhwYXRfY29uZmlnLmg+CiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwpAQCAtMjMsMTEgKzI1LDExIEBACiAjaW5jbHVkZSAieG1sdGNoYXIuaCIKICNpbmNsdWRlICJmaWxlbWFwLmgiCiAKLSNpZmRlZiBfTVNDX1ZFUgorI2lmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCAoZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX19MSU5VWF9fKSkpCiAjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgogCi0jaWZkZWYgQU1JR0FfU0hBUkVEX0xJQgorI2lmIGRlZmluZWQoX19hbWlnYW9zX18pICYmIGRlZmluZWQoX19VU0VfSU5MSU5FX18pCiAjaW5jbHVkZSA8cHJvdG8vZXhwYXQuaD4KICNlbmRpZgogCkBAIC02OSwxNCArNzEsMTUgQEAKICAgZWxzZQogICAgIGZ0cHJpbnRmKHN0ZGVyciwgVCgiJXM6ICh1bmtub3duIG1lc3NhZ2UgJWQpXG4iKSwgZmlsZW5hbWUsIGNvZGUpOwogfQotCisgCisvKiBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgZ2l2ZSBwcm9ibGVtcyBvbiBmaWxlcyBsYXJnZXIgdGhhbiBJTlRfTUFYLiAqLwogc3RhdGljIHZvaWQKIHByb2Nlc3NGaWxlKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLAogICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmZpbGVuYW1lLCB2b2lkICphcmdzKQogewogICBYTUxfUGFyc2VyIHBhcnNlciA9ICgoUFJPQ0VTU19BUkdTICopYXJncyktPnBhcnNlcjsKICAgaW50ICpyZXRQdHIgPSAoKFBST0NFU1NfQVJHUyAqKWFyZ3MpLT5yZXRQdHI7Ci0gIGlmIChYTUxfUGFyc2UocGFyc2VyLCAoY29uc3QgY2hhciAqKWRhdGEsIHNpemUsIDEpID09IFhNTF9TVEFUVVNfRVJST1IpIHsKKyAgaWYgKFhNTF9QYXJzZShwYXJzZXIsIChjb25zdCBjaGFyICopZGF0YSwgKGludClzaXplLCAxKSA9PSBYTUxfU1RBVFVTX0VSUk9SKSB7CiAgICAgcmVwb3J0RXJyb3IocGFyc2VyLCBmaWxlbmFtZSk7CiAgICAgKnJldFB0ciA9IDA7CiAgIH0KQEAgLTg0LDcgKzg3LDcgQEAKICAgICAqcmV0UHRyID0gMTsKIH0KIAotI2lmZGVmIFdJTjMyCisjaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19XQVRDT01DX18pKQogCiBzdGF0aWMgaW50CiBpc0FzY2lpTGV0dGVyKFhNTF9DaGFyIGMpCkBAIC0xMDIsNyArMTA1LDcgQEAKICAgKnRvRnJlZSA9IDA7CiAgIGlmICghYmFzZQogICAgICAgfHwgKnN5c3RlbUlkID09IFQoJy8nKQotI2lmZGVmIFdJTjMyCisjaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19XQVRDT01DX18pKQogICAgICAgfHwgKnN5c3RlbUlkID09IFQoJ1xcJykKICAgICAgIHx8IChpc0FzY2lpTGV0dGVyKHN5c3RlbUlkWzBdKSAmJiBzeXN0ZW1JZFsxXSA9PSBUKCc6JykpCiAjZW5kaWYKQEAgLTExNiw3ICsxMTksNyBAQAogICBzID0gKnRvRnJlZTsKICAgaWYgKHRjc3JjaHIocywgVCgnLycpKSkKICAgICBzID0gdGNzcmNocihzLCBUKCcvJykpICsgMTsKLSNpZmRlZiBXSU4zMgorI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSkKICAgaWYgKHRjc3JjaHIocywgVCgnXFwnKSkpCiAgICAgcyA9IHRjc3JjaHIocywgVCgnXFwnKSkgKyAxOwogI2VuZGlmCmRpZmYgLS1naXQgYS94bWx3Zi94bWx3Zi5jIGIveG1sd2YveG1sd2YuYwppbmRleCAyZGU5YjkyLi40MWE0MzNkIDEwMDY0NAotLS0gYS94bWx3Zi94bWx3Zi5jCisrKyBiL3htbHdmL3htbHdmLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCi0jaWZkZWYgQU1JR0FfU0hBUkVEX0xJQgorI2lmIGRlZmluZWQoX19hbWlnYW9zX18pICYmIGRlZmluZWQoX19VU0VfSU5MSU5FX18pCiAjaW5jbHVkZSA8cHJvdG8vZXhwYXQuaD4KICNlbmRpZgogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgcCA9IGF0dHM7CiAgIHdoaWxlICgqcCkKICAgICArK3A7Ci0gIG5BdHRzID0gKHAgLSBhdHRzKSA+PiAxOworICBuQXR0cyA9IChpbnQpKChwIC0gYXR0cykgPj4gMSk7CiAgIGlmIChuQXR0cyA+IDEpCiAgICAgcXNvcnQoKHZvaWQgKilhdHRzLCBuQXR0cywgc2l6ZW9mKFhNTF9DaGFyICopICogMiwgYXR0Y21wKTsKICAgd2hpbGUgKCphdHRzKSB7CkBAIC0xODksNyArMTg5LDcgQEAKICAgcCA9IGF0dHM7CiAgIHdoaWxlICgqcCkKICAgICArK3A7Ci0gIG5BdHRzID0gKHAgLSBhdHRzKSA+PiAxOworICBuQXR0cyA9IChpbnQpKChwIC0gYXR0cykgPj4gMSk7CiAgIGlmIChuQXR0cyA+IDEpCiAgICAgcXNvcnQoKHZvaWQgKilhdHRzLCBuQXR0cywgc2l6ZW9mKFhNTF9DaGFyICopICogMiwgbnNhdHRjbXApOwogICB3aGlsZSAoKmF0dHMpIHsKQEAgLTM1MCw3ICszNTAsNyBAQAogICAgIGZwdXR0cyhUKCI+XG4iKSwgZnApOwogICAgIGRvIHsKICAgICAgIGZ0cHJpbnRmKGZwLCBUKCI8YXR0cmlidXRlIG5hbWU9XCIlc1wiIHZhbHVlPVwiIiksIGF0dHNbMF0pOwotICAgICAgY2hhcmFjdGVyRGF0YShmcCwgYXR0c1sxXSwgdGNzbGVuKGF0dHNbMV0pKTsKKyAgICAgIGNoYXJhY3RlckRhdGEoZnAsIGF0dHNbMV0sIChpbnQpdGNzbGVuKGF0dHNbMV0pKTsKICAgICAgIGlmIChhdHRzID49IHNwZWNpZmllZEF0dHNFbmQpCiAgICAgICAgIGZwdXR0cyhUKCJcIiBkZWZhdWx0ZWQ9XCJ5ZXNcIi8+XG4iKSwgZnApOwogICAgICAgZWxzZSBpZiAoYXR0cyA9PSBpZEF0dFB0cikKQEAgLTM4MSw3ICszODEsNyBAQAogICBYTUxfUGFyc2VyIHBhcnNlciA9IChYTUxfUGFyc2VyKSB1c2VyRGF0YTsKICAgRklMRSAqZnAgPSAoRklMRSAqKVhNTF9HZXRVc2VyRGF0YShwYXJzZXIpOwogICBmdHByaW50ZihmcCwgVCgiPHBpIHRhcmdldD1cIiVzXCIgZGF0YT1cIiIpLCB0YXJnZXQpOwotICBjaGFyYWN0ZXJEYXRhKGZwLCBkYXRhLCB0Y3NsZW4oZGF0YSkpOworICBjaGFyYWN0ZXJEYXRhKGZwLCBkYXRhLCAoaW50KXRjc2xlbihkYXRhKSk7CiAgIHB1dHRjKFQoJyInKSwgZnApOwogICBtZXRhTG9jYXRpb24ocGFyc2VyKTsKICAgZnB1dHRzKFQoIi8+XG4iKSwgZnApOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAgIFhNTF9QYXJzZXIgcGFyc2VyID0gKFhNTF9QYXJzZXIpIHVzZXJEYXRhOwogICBGSUxFICpmcCA9IChGSUxFICopWE1MX0dldFVzZXJEYXRhKHBhcnNlcik7CiAgIGZwdXR0cyhUKCI8Y29tbWVudCBkYXRhPVwiIiksIGZwKTsKLSAgY2hhcmFjdGVyRGF0YShmcCwgZGF0YSwgdGNzbGVuKGRhdGEpKTsKKyAgY2hhcmFjdGVyRGF0YShmcCwgZGF0YSwgKGludCl0Y3NsZW4oZGF0YSkpOwogICBwdXR0YyhUKCciJyksIGZwKTsKICAgbWV0YUxvY2F0aW9uKHBhcnNlcik7CiAgIGZwdXR0cyhUKCIvPlxuIiksIGZwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogICAgIGZ0cHJpbnRmKGZwLCBUKCIgcHVibGljPVwiJXNcIiIpLCBwdWJsaWNJZCk7CiAgIGlmIChzeXN0ZW1JZCkgewogICAgIGZwdXR0cyhUKCIgc3lzdGVtPVwiIiksIGZwKTsKLSAgICBjaGFyYWN0ZXJEYXRhKGZwLCBzeXN0ZW1JZCwgdGNzbGVuKHN5c3RlbUlkKSk7CisgICAgY2hhcmFjdGVyRGF0YShmcCwgc3lzdGVtSWQsIChpbnQpdGNzbGVuKHN5c3RlbUlkKSk7CiAgICAgcHV0dGMoVCgnIicpLCBmcCk7CiAgIH0KICAgbWV0YUxvY2F0aW9uKHBhcnNlcik7CkBAIC01MDMsNyArNTAzLDcgQEAKICAgICBpZiAocHVibGljSWQpCiAgICAgICBmdHByaW50ZihmcCwgVCgiIHB1YmxpYz1cIiVzXCIiKSwgcHVibGljSWQpOwogICAgIGZwdXR0cyhUKCIgc3lzdGVtPVwiIiksIGZwKTsKLSAgICBjaGFyYWN0ZXJEYXRhKGZwLCBzeXN0ZW1JZCwgdGNzbGVuKHN5c3RlbUlkKSk7CisgICAgY2hhcmFjdGVyRGF0YShmcCwgc3lzdGVtSWQsIChpbnQpdGNzbGVuKHN5c3RlbUlkKSk7CiAgICAgcHV0dGMoVCgnIicpLCBmcCk7CiAgICAgZnRwcmludGYoZnAsIFQoIiBub3RhdGlvbj1cIiVzXCIiKSwgbm90YXRpb25OYW1lKTsKICAgICBtZXRhTG9jYXRpb24ocGFyc2VyKTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogICAgIGlmIChwdWJsaWNJZCkKICAgICAgIGZ0cHJpbnRmKGZwLCBUKCIgcHVibGljPVwiJXNcIiIpLCBwdWJsaWNJZCk7CiAgICAgZnB1dHRzKFQoIiBzeXN0ZW09XCIiKSwgZnApOwotICAgIGNoYXJhY3RlckRhdGEoZnAsIHN5c3RlbUlkLCB0Y3NsZW4oc3lzdGVtSWQpKTsKKyAgICBjaGFyYWN0ZXJEYXRhKGZwLCBzeXN0ZW1JZCwgKGludCl0Y3NsZW4oc3lzdGVtSWQpKTsKICAgICBwdXR0YyhUKCciJyksIGZwKTsKICAgICBtZXRhTG9jYXRpb24ocGFyc2VyKTsKICAgICBmcHV0dHMoVCgiLz5cbiIpLCBmcCk7CkBAIC01MzMsNyArNTMzLDcgQEAKICAgICBmdHByaW50ZihmcCwgVCgiIHByZWZpeD1cIiVzXCIiKSwgcHJlZml4KTsKICAgaWYgKHVyaSkgewogICAgIGZwdXR0cyhUKCIgbnM9XCIiKSwgZnApOwotICAgIGNoYXJhY3RlckRhdGEoZnAsIHVyaSwgdGNzbGVuKHVyaSkpOworICAgIGNoYXJhY3RlckRhdGEoZnAsIHVyaSwgKGludCl0Y3NsZW4odXJpKSk7CiAgICAgZnB1dHRzKFQoIlwiLz5cbiIpLCBmcCk7CiAgIH0KICAgZWxzZQpAQCAtNTc2LDcgKzU3Niw3IEBACiAgICAgaWYgKCFzKQogICAgICAgcmV0dXJuIDA7CiAgICAgY3AgKj0gMTA7Ci0gICAgY3AgKz0gcyAtIGRpZ2l0czsKKyAgICBjcCArPSAoaW50KShzIC0gZGlnaXRzKTsKICAgICBpZiAoY3AgPj0gMHgxMDAwMCkKICAgICAgIHJldHVybiAwOwogICB9CkBAIC02MDcsNyArNjA3LDcgQEAKICAgY29uc3QgWE1MX0ZlYXR1cmUgKmZlYXR1cmVzID0gWE1MX0dldEZlYXR1cmVMaXN0KCk7CiAgIHdoaWxlICgoY2ggPSAqcykgIT0gMCkgewogICAgIGlmIChjaCA9PSAnLycKLSNpZmRlZiBXSU4zMgorI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSkKICAgICAgICAgfHwgY2ggPT0gJ1xcJwogI2VuZGlmCiAgICAgICAgICkKQEAgLTYzOSwxMyArNjM5LDggQEAKICAgZXhpdChyYyk7CiB9CiAKLSNpZmRlZiBBTUlHQV9TSEFSRURfTElCCi1pbnQKLWFtaWdhX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSNlbHNlCiBpbnQKIHRtYWluKGludCBhcmdjLCBYTUxfQ2hhciAqKmFyZ3YpCi0jZW5kaWYKIHsKICAgaW50IGksIGo7CiAgIGNvbnN0IFhNTF9DaGFyICpvdXRwdXREaXIgPSBOVUxMOwpAQCAtNzc3LDE3ICs3NzIsMjggQEAKICAgICAgIFhNTF9TZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKHBhcnNlciwgbm9wUHJvY2Vzc2luZ0luc3RydWN0aW9uKTsKICAgICB9CiAgICAgZWxzZSBpZiAob3V0cHV0RGlyKSB7CisgICAgICBjb25zdCBYTUxfQ2hhciAqIGRlbGltID0gVCgiLyIpOwogICAgICAgY29uc3QgWE1MX0NoYXIgKmZpbGUgPSB1c2VTdGRpbiA/IFQoIlNURElOIikgOiBhcmd2W2ldOwotICAgICAgaWYgKHRjc3JjaHIoZmlsZSwgVCgnLycpKSkKLSAgICAgICAgZmlsZSA9IHRjc3JjaHIoZmlsZSwgVCgnLycpKSArIDE7Ci0jaWZkZWYgV0lOMzIKLSAgICAgIGlmICh0Y3NyY2hyKGZpbGUsIFQoJ1xcJykpKQotICAgICAgICBmaWxlID0gdGNzcmNocihmaWxlLCBUKCdcXCcpKSArIDE7CisgICAgICBpZiAoIXVzZVN0ZGluKSB7CisgICAgICAgIC8qIEp1bXAgYWZ0ZXIgbGFzdCAoYmFjaylzbGFzaCAqLworICAgICAgICBjb25zdCBYTUxfQ2hhciAqIGxhc3REZWxpbSA9IHRjc3JjaHIoZmlsZSwgZGVsaW1bMF0pOworICAgICAgICBpZiAobGFzdERlbGltKQorICAgICAgICAgIGZpbGUgPSBsYXN0RGVsaW0gKyAxOworI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSkKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKiB3aW5EZWxpbSA9IFQoIlxcIik7CisgICAgICAgICAgbGFzdERlbGltID0gdGNzcmNocihmaWxlLCB3aW5EZWxpbVswXSk7CisgICAgICAgICAgaWYgKGxhc3REZWxpbSkgeworICAgICAgICAgICAgZmlsZSA9IGxhc3REZWxpbSArIDE7CisgICAgICAgICAgICBkZWxpbSA9IHdpbkRlbGltOworICAgICAgICAgIH0KKyAgICAgICAgfQogI2VuZGlmCisgICAgICB9CiAgICAgICBvdXROYW1lID0gKFhNTF9DaGFyICopbWFsbG9jKCh0Y3NsZW4ob3V0cHV0RGlyKSArIHRjc2xlbihmaWxlKSArIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKFhNTF9DaGFyKSk7CiAgICAgICB0Y3NjcHkob3V0TmFtZSwgb3V0cHV0RGlyKTsKLSAgICAgIHRjc2NhdChvdXROYW1lLCBUKCIvIikpOworICAgICAgdGNzY2F0KG91dE5hbWUsIGRlbGltKTsKICAgICAgIHRjc2NhdChvdXROYW1lLCBmaWxlKTsKICAgICAgIGZwID0gdGZvcGVuKG91dE5hbWUsIFQoIndiIikpOwogICAgICAgaWYgKCFmcCkgewpkaWZmIC0tZ2l0IGEveG1sd2YveG1sd2YuZHNwIGIveG1sd2YveG1sd2YuZHNwCmluZGV4IGE2MzliYzYuLmNiY2ZmNDMgMTAwNjQ0Ci0tLSBhL3htbHdmL3htbHdmLmRzcAorKysgYi94bWx3Zi94bWx3Zi5kc3AKQEAgLTEsMTM5ICsxLDEzOSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ4bWx3ZiIgLSBQYWNrYWdlIE93bmVyPTw0PgotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAotIyAqKiBETyBOT1QgRURJVCAqKgotCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKLQotQ0ZHPXhtbHdmIC0gV2luMzIgUmVsZWFzZQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCi0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJ4bWx3Zi5tYWsiLgotIU1FU1NBR0UgCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKLSFNRVNTQUdFIAotIU1FU1NBR0UgTk1BS0UgL2YgInhtbHdmLm1hayIgQ0ZHPSJ4bWx3ZiAtIFdpbjMyIFJlbGVhc2UiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgotIU1FU1NBR0UgCi0hTUVTU0FHRSAieG1sd2YgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgInhtbHdmIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCi0hTUVTU0FHRSAKLQotIyBCZWdpbiBQcm9qZWN0Ci0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKLUNQUD1jbC5leGUKLVJTQz1yYy5leGUKLQotIUlGICAiJChDRkcpIiA9PSAieG1sd2YgLSBXaW4zMiBSZWxlYXNlIgotCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxSZWxlYXNlIgotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlxSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLiIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxSZWxlYXNlIgotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKLSMgUFJPUCBUYXJnZXRfRGlyICIuIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0kgIi4uXGxpYiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDT01QSUxFRF9GUk9NX0RTUCIgL0ZEIC9jCi0jIFNVQlRSQUNUIENQUCAvWVggL1ljIC9ZdQotIyBBREQgQkFTRSBSU0MgL2wgMHg4MDkgL2QgIk5ERUJVRyIKLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotQlNDMzI9YnNjbWFrZS5leGUKLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbwotIyBBREQgQlNDMzIgL25vbG9nbwotTElOSzMyPWxpbmsuZXhlCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2Ci0jIEFERCBMSU5LMzIgc2V0YXJndi5vYmoga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiUmVsZWFzZVx4bWx3Zi5leGUiCi0jIFNVQlRSQUNUIExJTkszMiAvbm9kZWZhdWx0bGliCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ4bWx3ZiAtIFdpbjMyIERlYnVnIgotCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxEZWJ1ZyIKLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIi5cRGVidWciCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIuIgotIyBQUk9QIFVzZV9NRkMgMAotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQotIyBQUk9QIE91dHB1dF9EaXIgIi5cRGVidWciCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxEZWJ1ZyIKLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCi0jIFBST1AgVGFyZ2V0X0RpciAiLiIKLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR1ggL1pJIC9PZCAvSSAiLi5cbGliIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkNPTVBJTEVEX0ZST01fRFNQIiAvRkQgL2MKLSMgU1VCVFJBQ1QgQ1BQIC9GciAvWVgKLSMgQUREIEJBU0UgUlNDIC9sIDB4ODA5IC9kICJfREVCVUciCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKLUJTQzMyPWJzY21ha2UuZXhlCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KLSMgQUREIEJTQzMyIC9ub2xvZ28KLUxJTkszMj1saW5rLmV4ZQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBzZXRhcmd2Lm9iaiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWdceG1sd2YuZXhlIgotCi0hRU5ESUYgCi0KLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAieG1sd2YgLSBXaW4zMiBSZWxlYXNlIgotIyBOYW1lICJ4bWx3ZiAtIFdpbjMyIERlYnVnIgotIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQ7Zm9yO2Y5MCIKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY29kZXBhZ2UuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmVhZGZpbGVtYXAuYwotIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx1bml4ZmlsZW1hcC5jCi0jIFBST1AgRXhjbHVkZV9Gcm9tX0J1aWxkIDEKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHdpbjMyZmlsZW1hcC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx4bWxmaWxlLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHhtbHdmLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEVuZCBHcm91cAotIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGNvZGVwYWdlLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHhtbGZpbGUuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ceG1sdGNoYXIuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ4bWx3ZiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQorDQorQ0ZHPXhtbHdmIC0gV2luMzIgUmVsZWFzZQ0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAieG1sd2YubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgInhtbHdmLm1hayIgQ0ZHPSJ4bWx3ZiAtIFdpbjMyIFJlbGVhc2UiDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgInhtbHdmIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAieG1sd2YgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAieG1sd2YgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIi5cUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICIuXFJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlx3aW4zMlxiaW5cUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cd2luMzJcdG1wXFJlbGVhc2UteG1sd2YiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiLiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0kgIi4uXGxpYiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJDT01QSUxFRF9GUk9NX0RTUCIgL0ZEIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYIC9ZYyAvWXUNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSU5LMzIgc2V0YXJndi5vYmoga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYNCisjIFNVQlRSQUNUIExJTkszMiAvbm9kZWZhdWx0bGliDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInhtbHdmIC0gV2luMzIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICIuXERlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIi4iDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiLi5cd2luMzJcYmluXERlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlx3aW4zMlx0bXBcRGVidWcteG1sd2YiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiLiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HWCAvWkkgL09kIC9JICIuLlxsaWIiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiQ09NUElMRURfRlJPTV9EU1AiIC9GRCAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9GciAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIHNldGFyZ3Yub2JqIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAieG1sd2YgLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAieG1sd2YgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0O2ZvcjtmOTAiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvZGVwYWdlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxyZWFkZmlsZW1hcC5jDQorIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdW5peGZpbGVtYXAuYw0KKyMgUFJPUCBFeGNsdWRlX0Zyb21fQnVpbGQgMQ0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHdpbjMyZmlsZW1hcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sZmlsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sd2YuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sO2ZpO2ZkIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxjb2RlcGFnZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sZmlsZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ceG1sdGNoYXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtjbnQ7cnRmO2dpZjtqcGc7anBlZztqcGUiDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQo=