ZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAgYi90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuY3BwCmluZGV4IDI5ZGU0Y2EuLjEwMDNjYjUgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAKKysrIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcApAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgIi4uL3B1YmxpYy9mcGRmX3RleHQuaCIKICNpbmNsdWRlICIuLi9wdWJsaWMvZnBkZnZpZXcuaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ2OC9pbmNsdWRlL3Y4LmgiCiAjaW5jbHVkZSAidjgvaW5jbHVkZS9saWJwbGF0Zm9ybS9saWJwbGF0Zm9ybS5oIgorI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIKIAogI2lmZGVmIF9XSU4zMgogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKQEAgLTk1LDU4ICs5NSw2IEBACiAKIH0gIC8vIG5hbWVzcGFjZQogCi1jbGFzcyBFbWJlZGRlclRlc3REZWZhdWx0RGVsZWdhdGUgOiBwdWJsaWMgRW1iZWRkZXJUZXN0OjpEZWxlZ2F0ZSB7Ci0gcHVibGljOgotICBpbnQgQWxlcnQoRlBERl9XSURFU1RSSU5HLCBGUERGX1dJREVTVFJJTkcsIGludCwgaW50KSBvdmVycmlkZSB7Ci0gICAgcHJpbnRmKCJGb3JtX0FsZXJ0IGNhbGxlZC5cbiIpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgdm9pZCBVbnN1cHBvcnRlZEhhbmRsZXIoaW50IHR5cGUpIHsKLSAgICBzdGQ6OnN0cmluZyBmZWF0dXJlID0gIlVua25vd24iOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgY2FzZSBGUERGX1VOU1BfRE9DX1hGQUZPUk06Ci0gICAgICAgIGZlYXR1cmUgPSAiWEZBIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9ET0NfUE9SVEFCTEVDT0xMRUNUSU9OOgotICAgICAgICBmZWF0dXJlID0gIlBvcnRmb2xpb3NfUGFja2FnZXMiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19BVFRBQ0hNRU5UOgotICAgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfQVRUQUNITUVOVDoKLSAgICAgICAgZmVhdHVyZSA9ICJBdHRhY2htZW50IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0VDVVJJVFk6Ci0gICAgICAgIGZlYXR1cmUgPSAiUmlnaHRzX01hbmFnZW1lbnQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURSRVZJRVc6Ci0gICAgICAgIGZlYXR1cmUgPSAiU2hhcmVkX1JldmlldyI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfRE9DX1NIQVJFREZPUk1fQUNST0JBVDoKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0ZJTEVTWVNURU06Ci0gICAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9FTUFJTDoKLSAgICAgICAgZmVhdHVyZSA9ICJTaGFyZWRfRm9ybSI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfM0RBTk5PVDoKLSAgICAgICAgZmVhdHVyZSA9ICIzRCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfTU9WSUU6Ci0gICAgICAgIGZlYXR1cmUgPSAiTW92aWUiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NPVU5EOgotICAgICAgICBmZWF0dXJlID0gIlNvdW5kIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fTUVESUE6Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fUklDSE1FRElBOgotICAgICAgICBmZWF0dXJlID0gIlNjcmVlbiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfU0lHOgotICAgICAgICBmZWF0dXJlID0gIkRpZ2l0YWxfU2lnbmF0dXJlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHByaW50ZigiVW5zdXBwb3J0ZWQgZmVhdHVyZTogJXMuXG4iLCBmZWF0dXJlLmNfc3RyKCkpOwotICB9Ci19OwotCiBjbGFzcyBUZXN0TG9hZGVyIHsKICBwdWJsaWM6CiAgIFRlc3RMb2FkZXIoY29uc3QgY2hhciogcEJ1Ziwgc2l6ZV90IGxlbik7CkBAIC0xODQsNyArMTMyLDcgQEAKICAgbWVtc2V0KCZoaW50c18sIDAsIHNpemVvZihoaW50c18pKTsKICAgbWVtc2V0KCZmaWxlX2FjY2Vzc18sIDAsIHNpemVvZihmaWxlX2FjY2Vzc18pKTsKICAgbWVtc2V0KCZmaWxlX2F2YWlsXywgMCwgc2l6ZW9mKGZpbGVfYXZhaWxfKSk7Ci0gIGRlZmF1bHRfZGVsZWdhdGVfID0gbmV3IEVtYmVkZGVyVGVzdERlZmF1bHREZWxlZ2F0ZSgpOworICBkZWZhdWx0X2RlbGVnYXRlXyA9IG5ldyBFbWJlZGRlclRlc3Q6OkRlbGVnYXRlKCk7CiAgIGRlbGVnYXRlXyA9IGRlZmF1bHRfZGVsZWdhdGVfOwogfQogCkBAIC0xOTQsOSArMTQyLDE1IEBACiAKIHZvaWQgRW1iZWRkZXJUZXN0OjpTZXRVcCgpIHsKICAgICB2ODo6Vjg6OkluaXRpYWxpemVJQ1UoKTsKLSAgdjg6OlBsYXRmb3JtKiBwbGF0Zm9ybSA9IHY4OjpwbGF0Zm9ybTo6Q3JlYXRlRGVmYXVsdFBsYXRmb3JtKCk7Ci0gIHY4OjpWODo6SW5pdGlhbGl6ZVBsYXRmb3JtKHBsYXRmb3JtKTsKLSAgdjg6OlY4OjpJbml0aWFsaXplKCk7CisKKyAgICBwbGF0Zm9ybV8gPSB2ODo6cGxhdGZvcm06OkNyZWF0ZURlZmF1bHRQbGF0Zm9ybSgpOworICAgIHY4OjpWODo6SW5pdGlhbGl6ZVBsYXRmb3JtKHBsYXRmb3JtXyk7CisgICAgdjg6OlY4OjpJbml0aWFsaXplKCk7CisKKyAgICAvLyBCeSBlbmFibGluZyBwcmVkaWN0YWJsZSBtb2RlLCBWOCB3b24ndCBwb3N0IGFueSBiYWNrZ3JvdW5kIHRhc2tzLgorICAgIGNvbnN0IGNoYXIgcHJlZGljdGFibGVfZmxhZ1tdID0gIi0tcHJlZGljdGFibGUiOworICAgIHY4OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKHByZWRpY3RhYmxlX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4ocHJlZGljdGFibGVfZmxhZykpKTsKIAogI2lmZGVmIFY4X1VTRV9FWFRFUk5BTF9TVEFSVFVQX0RBVEEKICAgICBBU1NFUlRfVFJVRShHZXRFeHRlcm5hbERhdGEoZ19leGVfcGF0aF8sICJuYXRpdmVzX2Jsb2IuYmluIiwgJm5hdGl2ZXNfKSk7CkBAIC0yMjIsOSArMTc2LDEwIEBACiAgIH0KICAgRlBERkF2YWlsX0Rlc3Ryb3koYXZhaWxfKTsKICAgRlBERl9EZXN0cm95TGlicmFyeSgpOworICB2ODo6Vjg6OlNodXRkb3duUGxhdGZvcm0oKTsKKyAgZGVsZXRlIHBsYXRmb3JtXzsKICAgZGVsZXRlIGxvYWRlcl87CiAgIGZyZWUoZmlsZV9jb250ZW50c18pOwotICB2ODo6Vjg6OlNodXRkb3duUGxhdGZvcm0oKTsKIH0KIAogYm9vbCBFbWJlZGRlclRlc3Q6Ok9wZW5Eb2N1bWVudChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpIHsKQEAgLTI3Miw2ICsyMjcsOCBAQAogICBGUERGX0ZPUk1GSUxMSU5GTyogZm9ybWZpbGxpbmZvID0gc3RhdGljX2Nhc3Q8RlBERl9GT1JNRklMTElORk8qPih0aGlzKTsKICAgbWVtc2V0KGZvcm1maWxsaW5mbywgMCwgc2l6ZW9mKEZQREZfRk9STUZJTExJTkZPKSk7CiAgIGZvcm1maWxsaW5mby0+dmVyc2lvbiA9IDE7CisgIGZvcm1maWxsaW5mby0+RkZJX1NldFRpbWVyID0gU2V0VGltZXJUcmFtcG9saW5lOworICBmb3JtZmlsbGluZm8tPkZGSV9LaWxsVGltZXIgPSBLaWxsVGltZXJUcmFtcG9saW5lOwogICBmb3JtZmlsbGluZm8tPm1fcEpzUGxhdGZvcm0gPSBwbGF0Zm9ybTsKIAogICBmb3JtX2hhbmRsZV8gPSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb25tZW50KGRvY3VtZW50XywgZm9ybWZpbGxpbmZvKTsKQEAgLTM0Myw2ICszMDAsMTkgQEAKICAgcmV0dXJuIHRlc3QtPmRlbGVnYXRlXy0+QWxlcnQobWVzc2FnZSwgdGl0bGUsIHR5cGUsIGljb24pOwogfQogCisvLyBzdGF0aWMKK2ludCBFbWJlZGRlclRlc3Q6OlNldFRpbWVyVHJhbXBvbGluZShGUERGX0ZPUk1GSUxMSU5GTyogaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXNlY3MsIFRpbWVyQ2FsbGJhY2sgZm4pIHsKKyAgRW1iZWRkZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RW1iZWRkZXJUZXN0Kj4oaW5mbyk7CisgIHJldHVybiB0ZXN0LT5kZWxlZ2F0ZV8tPlNldFRpbWVyKG1zZWNzLCBmbik7Cit9CisKKy8vIHN0YXRpYwordm9pZCBFbWJlZGRlclRlc3Q6OktpbGxUaW1lclRyYW1wb2xpbmUoRlBERl9GT1JNRklMTElORk8qIGluZm8sIGludCBpZCkgeworICBFbWJlZGRlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxFbWJlZGRlclRlc3QqPihpbmZvKTsKKyAgcmV0dXJuIHRlc3QtPmRlbGVnYXRlXy0+S2lsbFRpbWVyKGlkKTsKK30KKwogLy8gQ2FuJ3QgdXNlIGd0ZXN0LXByb3ZpZGVkIG1haW4gc2luY2Ugd2UgbmVlZCB0byBzdGFzaCB0aGUgcGF0aCB0byB0aGUKIC8vIGV4ZWN1dGFibGUgaW4gb3JkZXIgdG8gZmluZCB0aGUgZXh0ZXJuYWwgVjggYmluYXJ5IGRhdGEgZmlsZXMuCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKaW5kZXggNWNlZGU2Yy4uYjA4MzRkZCAxMDA2NDQKLS0tIGEvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKKysrIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKQEAgLTM2LDYgKzM2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBpY29uKSB7CiAgICAgICByZXR1cm4gMDsKICAgICB9CisKKyAgICAvLyBFcXVpdmFsZW50IHRvIEZQREZfRk9STUZJTExJTkZPOjpGRklfU2V0VGltZXIoKS4KKyAgICB2aXJ0dWFsIGludCBTZXRUaW1lcihpbnQgbXNlY3MsIFRpbWVyQ2FsbGJhY2sgZm4pIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEVxdWl2YWxlbnQgdG8gRlBERl9GT1JNRklMTElORk86OkZGSV9LaWxsVGltZXIoKS4KKyAgICB2aXJ0dWFsIHZvaWQgS2lsbFRpbWVyKGludCBpZCkgeyB9CiAgIH07CiAKICAgRW1iZWRkZXJUZXN0KCk7CkBAIC04MSw2ICs4Nyw3IEBACiAgIEZYX0RPV05MT0FESElOVFMgaGludHNfOwogICBGUERGX0ZJTEVBQ0NFU1MgZmlsZV9hY2Nlc3NfOwogICBGWF9GSUxFQVZBSUwgZmlsZV9hdmFpbF87CisgIHY4OjpQbGF0Zm9ybSogcGxhdGZvcm1fOwogICB2ODo6U3RhcnR1cERhdGEgbmF0aXZlc187CiAgIHY4OjpTdGFydHVwRGF0YSBzbmFwc2hvdF87CiAgIFRlc3RMb2FkZXIqIGxvYWRlcl87CkBAIC05MSw3ICs5OCw5IEBACiAgIHN0YXRpYyB2b2lkIFVuc3VwcG9ydGVkSGFuZGxlclRyYW1wb2xpbmUoVU5TVVBQT1JUX0lORk8qLCBpbnQgdHlwZSk7CiAgIHN0YXRpYyBpbnQgQWxlcnRUcmFtcG9saW5lKElQREZfSlNQTEFURk9STSogcGxhZm9ybSwgRlBERl9XSURFU1RSSU5HIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQREZfV0lERVNUUklORyB0aXRsZSwgaW50IHR5cGUsIGludCBpY29uKTsKKyAgc3RhdGljIGludCBTZXRUaW1lclRyYW1wb2xpbmUoRlBERl9GT1JNRklMTElORk8qIGluZm8sIGludCBtc2VjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXJDYWxsYmFjayBmbik7CisgIHN0YXRpYyB2b2lkIEtpbGxUaW1lclRyYW1wb2xpbmUoRlBERl9GT1JNRklMTElORk8qIGluZm8sIGludCBpZCk7CiB9OwogCiAjZW5kaWYgIC8vIFRFU1RJTkdfRU1CRURERVJfVEVTVF9IXwotCmRpZmYgLS1naXQgYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfbW9ja19kZWxlZ2F0ZS5oIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0X21vY2tfZGVsZWdhdGUuaAppbmRleCA1MjZlMTE3Li4xZTRlOTk1IDEwMDY0NAotLS0gYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfbW9ja19kZWxlZ2F0ZS5oCisrKyBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdF9tb2NrX2RlbGVnYXRlLmgKQEAgLTEzLDYgKzEzLDggQEAKICAgTU9DS19NRVRIT0QxKFVuc3VwcG9ydGVkSGFuZGxlciwgdm9pZChpbnQgdHlwZSkpOwogICBNT0NLX01FVEhPRDQoQWxlcnQsIGludChGUERGX1dJREVTVFJJTkcgbWVzc2FnZSwgRlBERl9XSURFU1RSSU5HIHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGljb24pKTsKKyAgTU9DS19NRVRIT0QyKFNldFRpbWVyLCBpbnQoaW50IG1zZWNzLCBUaW1lckNhbGxiYWNrIGZuKSk7CisgIE1PQ0tfTUVUSE9EMShLaWxsVGltZXIsIHZvaWQoaW50IG1zZWNzKSk7CiB9OwogCiAjZW5kaWYgIC8vIFRFU1RJTkdfRU1CRURERVJfVEVTVF9NT0NLX0RFTEVHQVRFX0hfCmRpZmYgLS1naXQgYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfdGltZXJfaGFuZGxpbmdfZGVsZWdhdGUuaCBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdF90aW1lcl9oYW5kbGluZ19kZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNWExMzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfdGltZXJfaGFuZGxpbmdfZGVsZWdhdGUuaApAQCAtMCwwICsxLDU0IEBACisvLyBDb3B5cmlnaHQgMjAxNSBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVEVTVElOR19FTUJFRERFUl9URVNUX1RJTUVSX0hBTkRMSU5HX0RFTEVHQVRFX0hfCisjZGVmaW5lIFRFU1RJTkdfRU1CRURERVJfVEVTVF9USU1FUl9IQU5ETElOR19ERUxFR0FURV9IXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJlbWJlZGRlcl90ZXN0LmgiCisKK2NsYXNzIEVtYmVkZGVyVGVzdFRpbWVySGFuZGxpbmdEZWxlZ2F0ZSA6IHB1YmxpYyBFbWJlZGRlclRlc3Q6OkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgaW50IFNldFRpbWVyKGludCBtc2VjcywgVGltZXJDYWxsYmFjayBmbikgb3ZlcnJpZGUgeworICAgIGV4cGlyeV90b190aW1lcl9tYXBfLmluc2VydChzdGQ6OnBhaXI8aW50LCBUaW1lcj4oCisgICAgICAgIG1zZWNzICsgaW1hZ2luYXJ5X2VsYXBzZWRfbXNlY3NfLCBUaW1lcigrK25leHRfdGltZXJfaWRfLCBmbikpKTsKKyAgICByZXR1cm4gbmV4dF90aW1lcl9pZF87CisgIH0KKworICB2b2lkIEtpbGxUaW1lcihpbnQgaWQpIG92ZXJyaWRlIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IGV4cGlyeV90b190aW1lcl9tYXBfLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4cGlyeV90b190aW1lcl9tYXBfLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgIGlmIChpdGVyLT5zZWNvbmQuZmlyc3QgPT0gaWQpIHsKKyAgICAgICAgZXhwaXJ5X3RvX3RpbWVyX21hcF8uZXJhc2UoaXRlcik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZvaWQgQWR2YW5jZVRpbWUoaW50IGluY3JlbWVudF9tc2VjcykgeworICAgIGltYWdpbmFyeV9lbGFwc2VkX21zZWNzXyArPSBpbmNyZW1lbnRfbXNlY3M7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgIGF1dG8gaXRlciA9IGV4cGlyeV90b190aW1lcl9tYXBfLmJlZ2luKCk7CisgICAgICBpZiAoaXRlciA9PSBleHBpcnlfdG9fdGltZXJfbWFwXy5lbmQoKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIFRpbWVyIHQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICBpZiAodC5maXJzdCA+IGltYWdpbmFyeV9lbGFwc2VkX21zZWNzXykgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGV4cGlyeV90b190aW1lcl9tYXBfLmVyYXNlKGl0ZXIpOworICAgICAgdC5zZWNvbmQodC5maXJzdCk7ICAvLyBGaXJlIHRpbWVyLgorICAgIH0KKyAgfQorCitwcm90ZWN0ZWQ6CisgIHVzaW5nIFRpbWVyID0gc3RkOjpwYWlyPGludCwgVGltZXJDYWxsYmFjaz47ICAvLyBJRCwgY2FsbGJhY2sgcGFpci4KKyAgc3RkOjptdWx0aW1hcDxpbnQsIFRpbWVyPiBleHBpcnlfdG9fdGltZXJfbWFwXzsgIC8vIEtleWVkIGJ5IHRpbWVvdXQuCisgIGludCBuZXh0X3RpbWVyX2lkXyA9IDA7CisgIGludCBpbWFnaW5hcnlfZWxhcHNlZF9tc2Vjc18gPSAwOworfTsKKworI2VuZGlmIC8vIFRFU1RJTkdfRU1CRURERVJfVEVTVF9USU1FUl9IQU5ETElOR19ERUxFR0FURV9IXwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzQ4NzkyOC5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z180ODc5MjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2ZDdmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z180ODc5MjguaW4KQEAgLTAsMCArMSwxMjIgQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvQWNyb0Zvcm0gNiAwIFIKKyAgL05hbWVzIDw8L0phdmFTY3JpcHQgMTMgMCBSPj4KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbNCAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyAgPDw+PgorICAvQW5ub3RzIFs1IDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDUgMH19IDw8CisgIC9GVCAvVHgKKyAgL0ZmIDI5MzYwMTI4CisgIC9UICh0eHROYW1lKQorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1dpZGdldAorICAvRiA0CisgIC9NIChEOjIwMTUwNTE0MDcwNDI2KzA1JzMwJykKKyAgL1JlY3QgWzE4MC4yNzkgNzE1LjYgMjU2LjE4NiA3NDQuMDcyXQorICAvQlMgIDw8CisgICAgL1cgMQorICAgIC9TIC9TCisgID4+CisgIC9EQSAoL0hlbHYgMCBUZiAwIDAgMCByZykKKyAgL0FQIDw8L04gOCAwIFI+PgorICAvViAoKQorICAvQUEgMTkgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCA2IDB9fSA8PAorICAvRFIgPDwKKyAgICAvRm9udCA8PC9IZWx2IDcgMCBSPj4KKyAgPj4KKyAgL0RBICgvSGVsdiAwIFRmIDAgZykKKyAgL0ZpZWxkcyBbNSAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA3IDB9fSA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKKyAgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDggMH19IDw8CisgIC9UeXBlIC9YT2JqZWN0CisgIC9TdWJ0eXBlIC9Gb3JtCisgIC9Gb3JtVHlwZSAxCisgIC9NYXRyaXggWzEgMCAwIDEgMCAwXQorICAvQkJveCBbMCAwIDc1LjkwNyAyOC40NzJdCisgIC9SZXNvdXJjZXMgIDw8CisgICAgL0ZvbnQgPDwvRlhGMCA3IDAgUj4+CisgID4+Cis+Pgorc3RyZWFtCitxCitRCisKKworZW5kc3RyZWFtCitlbmRvYmoKK3t7b2JqZWN0IDExIDB9fSA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyA1MCAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDEzIDB9fSA8PAorICAvTmFtZXMgWyhzdGFydERlbGF5KSAxMSAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCAxOSAwfX0gPDwKKyAgL1YgNTMgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCA1MCAwfX0gPDwKKz4+CitzdHJlYW0KK2Z1bmN0aW9uIHN0YXJ0RGVsYXkoKQoreworICBmID0gdGhpcy5nZXRGaWVsZCgidHh0TmFtZSIpOworICBmLmRlbGF5ID0gdHJ1ZTsKKyAgZi52YWx1ZSA9ICd0ZXN0JzsKKyAgZi5kZWxheSA9IGZhbHNlOworfQorYXBwLnNldFRpbWVPdXQoInN0YXJ0RGVsYXkoKSIsIDMwMDApOworZW5kc3RyZWFtCitlbmRvYmoKK3t7b2JqZWN0IDUzIDB9fSA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyA1NCAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDU0IDB9fSA8PAorPj4KK3N0cmVhbQorZjEgPSB0aGlzLmdldEZpZWxkKCJ0eHROYW1lIik7CitmMS5kZWxheSA9IHRydWU7CitmMS52YWx1ZSA9ICd0ZXN0IG5ldyc7CitmMS5kZWxheSA9IGZhbHNlOworZW5kc3RyZWFtCitlbmRvYmoKK3t7eHJlZn19Cit0cmFpbGVyIDw8CisgIC9Sb290IDEgMCBSCis+Pgore3tzdGFydHhyZWZ9fQorJSVFT0YKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z180ODc5MjgucGRmIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzQ4NzkyOC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZGViYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z180ODc5MjgucGRmCkBAIC0wLDAgKzEsMTgwIEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCisgIC9BY3JvRm9ybSA2IDAgUgorICAvTmFtZXMgPDwvSmF2YVNjcmlwdCAxMyAwIFI+PgorPj4KK2VuZG9iagorMiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDEKKyAgL0tpZHMgWzQgMCBSXQorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyAgPDw+PgorICAvQW5ub3RzIFs1IDAgUl0KKz4+CitlbmRvYmoKKzUgMCBvYmogPDwKKyAgL0ZUIC9UeAorICAvRmYgMjkzNjAxMjgKKyAgL1QgKHR4dE5hbWUpCisgIC9UeXBlIC9Bbm5vdAorICAvU3VidHlwZSAvV2lkZ2V0CisgIC9GIDQKKyAgL00gKEQ6MjAxNTA1MTQwNzA0MjYrMDUnMzAnKQorICAvUmVjdCBbMTgwLjI3OSA3MTUuNiAyNTYuMTg2IDc0NC4wNzJdCisgIC9CUyAgPDwKKyAgICAvVyAxCisgICAgL1MgL1MKKyAgPj4KKyAgL0RBICgvSGVsdiAwIFRmIDAgMCAwIHJnKQorICAvQVAgPDwvTiA4IDAgUj4+CisgIC9WICgpCisgIC9BQSAxOSAwIFIKKz4+CitlbmRvYmoKKzYgMCBvYmogPDwKKyAgL0RSIDw8CisgICAgL0ZvbnQgPDwvSGVsdiA3IDAgUj4+CisgID4+CisgIC9EQSAoL0hlbHYgMCBUZiAwIGcpCisgIC9GaWVsZHMgWzUgMCBSXQorPj4KK2VuZG9iagorNyAwIG9iaiA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKKyAgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKKz4+CitlbmRvYmoKKzggMCBvYmogPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKyAgL01hdHJpeCBbMSAwIDAgMSAwIDBdCisgIC9CQm94IFswIDAgNzUuOTA3IDI4LjQ3Ml0KKyAgL1Jlc291cmNlcyAgPDwKKyAgICAvRm9udCA8PC9GWEYwIDcgMCBSPj4KKyAgPj4KKz4+CitzdHJlYW0KK3EKK1EKKworCitlbmRzdHJlYW0KK2VuZG9iagorMTEgMCBvYmogPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgNTAgMCBSCis+PgorZW5kb2JqCisxMyAwIG9iaiA8PAorICAvTmFtZXMgWyhzdGFydERlbGF5KSAxMSAwIFJdCis+PgorZW5kb2JqCisxOSAwIG9iaiA8PAorICAvViA1MyAwIFIKKz4+CitlbmRvYmoKKzUwIDAgb2JqIDw8Cis+Pgorc3RyZWFtCitmdW5jdGlvbiBzdGFydERlbGF5KCkKK3sKKyAgZiA9IHRoaXMuZ2V0RmllbGQoInR4dE5hbWUiKTsKKyAgZi5kZWxheSA9IHRydWU7CisgIGYudmFsdWUgPSAndGVzdCc7CisgIGYuZGVsYXkgPSBmYWxzZTsKK30KK2FwcC5zZXRUaW1lT3V0KCJzdGFydERlbGF5KCkiLCAzMDAwKTsKK2VuZHN0cmVhbQorZW5kb2JqCis1MyAwIG9iaiA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyA1NCAwIFIKKz4+CitlbmRvYmoKKzU0IDAgb2JqIDw8Cis+Pgorc3RyZWFtCitmMSA9IHRoaXMuZ2V0RmllbGQoInR4dE5hbWUiKTsKK2YxLmRlbGF5ID0gdHJ1ZTsKK2YxLnZhbHVlID0gJ3Rlc3QgbmV3JzsKK2YxLmRlbGF5ID0gZmFsc2U7CitlbmRzdHJlYW0KK2VuZG9iagoreHJlZgorMCA1NQorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDExOCAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDE4MSAwMDAwMCBuIAorMDAwMDAwMDMyMCAwMDAwMCBuIAorMDAwMDAwMDU5NSAwMDAwMCBuIAorMDAwMDAwMDY5NyAwMDAwMCBuIAorMDAwMDAwMDgwMiAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDk5NCAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMTA2MiAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMTExNSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMTE0OSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMTM0MSAwMDAwMCBuIAorMDAwMDAwMTQwOSAwMDAwMCBuIAordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorPj4KK3N0YXJ0eHJlZgorMTUzNworJSVFT0YK