ZGlmZiAtLWdpdCBhL0JVSUxELmduIGIvQlVJTEQuZ24KaW5kZXggNDA3NGM3NS4uYmFiNTdiOSAxMDA2NDQKLS0tIGEvQlVJTEQuZ24KKysrIGIvQlVJTEQuZ24KQEAgLTg4NiwxNSArODg2LDIxIEBACiAgICAgInRlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAiLAogICAgICJ0ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuaCIsCiAgICAgInRlc3RpbmcvZW1iZWRkZXJfdGVzdF9tb2NrX2RlbGVnYXRlLmgiLAorICAgICJ0ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfdGltZXJfaGFuZGxpbmdfZGVsZWdhdGUuaCIsCiAgICAgInRlc3RpbmcvZnhfc3RyaW5nX3Rlc3RoZWxwZXJzLmNwcCIsCiAgICAgInRlc3RpbmcvZnhfc3RyaW5nX3Rlc3RoZWxwZXJzLmgiLAogICBdCiAgIGRlcHMgPSBbCiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCisgICAgIi8vdjg6djhfbGlicGxhdGZvcm0iLAogICAgICI6cGRmaXVtIiwKICAgXQotICBpbmNsdWRlX2RpcnMgPSBbICIuIiBdCisgIGluY2x1ZGVfZGlycyA9IFsKKyAgICAiLy92OCIsCisgICAgIi8vdjgvaW5jbHVkZSIsCisgICAgIi4iCisgIF0KICAgY29uZmlncyAtPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpjaHJvbWl1bV9jb2RlIiBdCiAgIGNvbmZpZ3MgKz0gWwogICAgICI6cGRmaXVtX2NvbmZpZyIsCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmZm9ybWZpbGxfZW1iZWRkZXJ0ZXN0LmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwCmluZGV4IGI0Y2MxMTEuLjYxNWFkYTkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgIi4uLy4uL3B1YmxpYy9mcGRmX2Zvcm1maWxsLmgiCiAjaW5jbHVkZSAiLi4vLi4vdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgiCiAjaW5jbHVkZSAiLi4vLi4vdGVzdGluZy9lbWJlZGRlcl90ZXN0X21vY2tfZGVsZWdhdGUuaCIKKyNpbmNsdWRlICIuLi8uLi90ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfdGltZXJfaGFuZGxpbmdfZGVsZWdhdGUuaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKIApAQCAtMTksNiArMjAsOCBAQAogICBFbWJlZGRlclRlc3RNb2NrRGVsZWdhdGUgbW9jazsKICAgRVhQRUNUX0NBTEwobW9jaywgQWxlcnQoXywgXywgXywgXykpLlRpbWVzKDApOwogICBFWFBFQ1RfQ0FMTChtb2NrLCBVbnN1cHBvcnRlZEhhbmRsZXIoXykpLlRpbWVzKDApOworICBFWFBFQ1RfQ0FMTChtb2NrLCBTZXRUaW1lcihfLCBfKSkuVGltZXMoMCk7CisgIEVYUEVDVF9DQUxMKG1vY2ssIEtpbGxUaW1lcihfKSkuVGltZXMoMCk7CiAgIFNldERlbGVnYXRlKCZtb2NrKTsKIAogICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoInRlc3RpbmcvcmVzb3VyY2VzL2hlbGxvX3dvcmxkLnBkZiIpKTsKQEAgLTI2LDMgKzI5LDE1IEBACiAgIEVYUEVDVF9ORShudWxscHRyLCBwYWdlKTsKICAgVW5sb2FkUGFnZShwYWdlKTsKIH0KKworVEVTVF9GKEZQREZGb3JtRmlsbEVtYmVkZGVydGVzdCwgQlVHXzQ4NzkyOCkgeworICBFbWJlZGRlclRlc3RUaW1lckhhbmRsaW5nRGVsZWdhdGUgZGVsZWdhdGU7CisgIFNldERlbGVnYXRlKCZkZWxlZ2F0ZSk7CisKKyAgRVhQRUNUX1RSVUUoT3BlbkRvY3VtZW50KCJ0ZXN0aW5nL3Jlc291cmNlcy9idWdfNDg3OTI4LnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgRVhQRUNUX05FKG51bGxwdHIsIHBhZ2UpOworICBEb09wZW5BY3Rpb25zKCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDUwMDApOworICBVbmxvYWRQYWdlKHBhZ2UpOworfQpkaWZmIC0tZ2l0IGEvcGRmaXVtLmd5cCBiL3BkZml1bS5neXAKaW5kZXggN2YxZDkwOC4uYzgyMTVlNyAxMDA2NDQKLS0tIGEvcGRmaXVtLmd5cAorKysgYi9wZGZpdW0uZ3lwCkBAIC04NTIsMTAgKzg1MiwxMiBAQAogICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKKyAgICAgICAgJzwoREVQVEgpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djhfbGlicGxhdGZvcm0nLAogICAgICAgICAncGRmaXVtJywKICAgICAgIF0sCiAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPChERVBUSCknCisgICAgICAgICc8KERFUFRIKScsCisgICAgICAgICc8KERFUFRIKS92OCcsCiAgICAgICBdLAogICAgICAgJ3NvdXJjZXMnOiBbCiAgICAgICAgICdjb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2RlY29kZV9lbWJlZGRlcnRlc3QuY3BwJywKQEAgLTg3MCw2ICs4NzIsNyBAQAogICAgICAgICAndGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcCcsCiAgICAgICAgICd0ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuaCcsCiAgICAgICAgICd0ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfbW9ja19kZWxlZ2F0ZS5oJywKKyAgICAgICAgJ3Rlc3RpbmcvZW1iZWRkZXJfdGVzdF90aW1lcl9oYW5kbGluZ19kZWxlZ2F0ZS5oJywKICAgICAgICAgJ3Rlc3RpbmcvZnhfc3RyaW5nX3Rlc3RoZWxwZXJzLmNwcCcsCiAgICAgICAgICd0ZXN0aW5nL2Z4X3N0cmluZ190ZXN0aGVscGVycy5oJywKICAgICAgIF0sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuY3BwIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcAppbmRleCA3MGMzMmFmLi44NDU3YTc5IDEwMDY0NAotLS0gYS90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuY3BwCisrKyBiL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICIuLi9wdWJsaWMvZnBkZl90ZXh0LmgiCiAjaW5jbHVkZSAiLi4vcHVibGljL2ZwZGZ2aWV3LmgiCiAjaW5jbHVkZSAidGVzdGluZy9nbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLmgiCisjaW5jbHVkZSAidjgvaW5jbHVkZS9saWJwbGF0Zm9ybS9saWJwbGF0Zm9ybS5oIgogI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIKIAogI2lmZGVmIF9XSU4zMgpAQCAtOTQsNTggKzk1LDYgQEAKIAogfSAgLy8gbmFtZXNwYWNlCiAKLWNsYXNzIEVtYmVkZGVyVGVzdERlZmF1bHREZWxlZ2F0ZSA6IHB1YmxpYyBFbWJlZGRlclRlc3Q6OkRlbGVnYXRlIHsKLSBwdWJsaWM6Ci0gIGludCBBbGVydChGUERGX1dJREVTVFJJTkcsIEZQREZfV0lERVNUUklORywgaW50LCBpbnQpIG92ZXJyaWRlIHsKLSAgICBwcmludGYoIkZvcm1fQWxlcnQgY2FsbGVkLlxuIik7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICB2b2lkIFVuc3VwcG9ydGVkSGFuZGxlcihpbnQgdHlwZSkgewotICAgIHN0ZDo6c3RyaW5nIGZlYXR1cmUgPSAiVW5rbm93biI7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9ET0NfWEZBRk9STToKLSAgICAgICAgZmVhdHVyZSA9ICJYRkEiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19QT1JUQUJMRUNPTExFQ1RJT046Ci0gICAgICAgIGZlYXR1cmUgPSAiUG9ydGZvbGlvc19QYWNrYWdlcyI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfRE9DX0FUVEFDSE1FTlQ6Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9BVFRBQ0hNRU5UOgotICAgICAgICBmZWF0dXJlID0gIkF0dGFjaG1lbnQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TRUNVUklUWToKLSAgICAgICAgZmVhdHVyZSA9ICJSaWdodHNfTWFuYWdlbWVudCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfRE9DX1NIQVJFRFJFVklFVzoKLSAgICAgICAgZmVhdHVyZSA9ICJTaGFyZWRfUmV2aWV3IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9BQ1JPQkFUOgotICAgICAgY2FzZSBGUERGX1VOU1BfRE9DX1NIQVJFREZPUk1fRklMRVNZU1RFTToKLSAgICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0VNQUlMOgotICAgICAgICBmZWF0dXJlID0gIlNoYXJlZF9Gb3JtIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF8zREFOTk9UOgotICAgICAgICBmZWF0dXJlID0gIjNEIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9NT1ZJRToKLSAgICAgICAgZmVhdHVyZSA9ICJNb3ZpZSI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfU09VTkQ6Ci0gICAgICAgIGZlYXR1cmUgPSAiU291bmQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NDUkVFTl9NRURJQToKLSAgICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NDUkVFTl9SSUNITUVESUE6Ci0gICAgICAgIGZlYXR1cmUgPSAiU2NyZWVuIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9TSUc6Ci0gICAgICAgIGZlYXR1cmUgPSAiRGlnaXRhbF9TaWduYXR1cmUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcHJpbnRmKCJVbnN1cHBvcnRlZCBmZWF0dXJlOiAlcy5cbiIsIGZlYXR1cmUuY19zdHIoKSk7Ci0gIH0KLX07Ci0KIGNsYXNzIFRlc3RMb2FkZXIgewogIHB1YmxpYzoKICAgVGVzdExvYWRlcihjb25zdCBjaGFyKiBwQnVmLCBzaXplX3QgbGVuKTsKQEAgLTE4Myw3ICsxMzIsNyBAQAogICBtZW1zZXQoJmhpbnRzXywgMCwgc2l6ZW9mKGhpbnRzXykpOwogICBtZW1zZXQoJmZpbGVfYWNjZXNzXywgMCwgc2l6ZW9mKGZpbGVfYWNjZXNzXykpOwogICBtZW1zZXQoJmZpbGVfYXZhaWxfLCAwLCBzaXplb2YoZmlsZV9hdmFpbF8pKTsKLSAgZGVmYXVsdF9kZWxlZ2F0ZV8gPSBuZXcgRW1iZWRkZXJUZXN0RGVmYXVsdERlbGVnYXRlKCk7CisgIGRlZmF1bHRfZGVsZWdhdGVfID0gbmV3IEVtYmVkZGVyVGVzdDo6RGVsZWdhdGUoKTsKICAgZGVsZWdhdGVfID0gZGVmYXVsdF9kZWxlZ2F0ZV87CiB9CiAKQEAgLTE5Myw5ICsxNDIsMTUgQEAKIAogdm9pZCBFbWJlZGRlclRlc3Q6OlNldFVwKCkgewogICAgIHY4OjpWODo6SW5pdGlhbGl6ZUlDVSgpOwotICAgIC8vIEJ5IGVuYWJsaW5nIHByZWRpY2F0YmxlIG1vZGUsIFY4IHdvbid0IHBvc3QgYW55IGJhY2tncm91bmQgdGFza3MuCisKKyAgICBwbGF0Zm9ybV8gPSB2ODo6cGxhdGZvcm06OkNyZWF0ZURlZmF1bHRQbGF0Zm9ybSgpOworICAgIHY4OjpWODo6SW5pdGlhbGl6ZVBsYXRmb3JtKHBsYXRmb3JtXyk7CisgICAgdjg6OlY4OjpJbml0aWFsaXplKCk7CisKKyAgICAvLyBCeSBlbmFibGluZyBwcmVkaWN0YWJsZSBtb2RlLCBWOCB3b24ndCBwb3N0IGFueSBiYWNrZ3JvdW5kIHRhc2tzLgogICAgIGNvbnN0IGNoYXIgcHJlZGljdGFibGVfZmxhZ1tdID0gIi0tcHJlZGljdGFibGUiOwotICAgIHY4OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKHByZWRpY3RhYmxlX2ZsYWcsIHN0cmxlbihwcmVkaWN0YWJsZV9mbGFnKSk7CisgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcocHJlZGljdGFibGVfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihwcmVkaWN0YWJsZV9mbGFnKSkpOwogCiAjaWZkZWYgVjhfVVNFX0VYVEVSTkFMX1NUQVJUVVBfREFUQQogICAgIEFTU0VSVF9UUlVFKEdldEV4dGVybmFsRGF0YShnX2V4ZV9wYXRoXywgIm5hdGl2ZXNfYmxvYi5iaW4iLCAmbmF0aXZlc18pKTsKQEAgLTIyMSw2ICsxNzYsOCBAQAogICB9CiAgIEZQREZBdmFpbF9EZXN0cm95KGF2YWlsXyk7CiAgIEZQREZfRGVzdHJveUxpYnJhcnkoKTsKKyAgdjg6OlY4OjpTaHV0ZG93blBsYXRmb3JtKCk7CisgIGRlbGV0ZSBwbGF0Zm9ybV87CiAgIGRlbGV0ZSBsb2FkZXJfOwogICBmcmVlKGZpbGVfY29udGVudHNfKTsKIH0KQEAgLTI2Miw2ICsyMTksOCBAQAogICBGUERGX0ZPUk1GSUxMSU5GTyogZm9ybWZpbGxpbmZvID0gc3RhdGljX2Nhc3Q8RlBERl9GT1JNRklMTElORk8qPih0aGlzKTsKICAgbWVtc2V0KGZvcm1maWxsaW5mbywgMCwgc2l6ZW9mKEZQREZfRk9STUZJTExJTkZPKSk7CiAgIGZvcm1maWxsaW5mby0+dmVyc2lvbiA9IDE7CisgIGZvcm1maWxsaW5mby0+RkZJX1NldFRpbWVyID0gU2V0VGltZXJUcmFtcG9saW5lOworICBmb3JtZmlsbGluZm8tPkZGSV9LaWxsVGltZXIgPSBLaWxsVGltZXJUcmFtcG9saW5lOwogICBmb3JtZmlsbGluZm8tPm1fcEpzUGxhdGZvcm0gPSBwbGF0Zm9ybTsKIAogICBmb3JtX2hhbmRsZV8gPSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb25tZW50KGRvY3VtZW50XywgZm9ybWZpbGxpbmZvKTsKQEAgLTMzMyw2ICsyOTIsMTkgQEAKICAgcmV0dXJuIHRlc3QtPmRlbGVnYXRlXy0+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