ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwCmluZGV4IGExNDI1MTUuLjNhNmE3NDQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9mcGRmZm9ybWZpbGxfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMTU3LDQgKzE1NywyNiBAQAogICBFWFBFQ1RfRVEoMlUsIGFsZXJ0cy5zaXplKCkpOwogfQogCitURVNUX0YoRlBERkZvcm1GaWxsRW1iZWRkZXJ0ZXN0LCBCVUdfNjM0NzE2KSB7CisgIEVtYmVkZGVyVGVzdFRpbWVySGFuZGxpbmdEZWxlZ2F0ZSBkZWxlZ2F0ZTsKKyAgU2V0RGVsZWdhdGUoJmRlbGVnYXRlKTsKKworICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoImJ1Z182MzQ3MTYucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBFWFBFQ1RfVFJVRShwYWdlKTsKKyAgRG9PcGVuQWN0aW9ucygpOworCisgIC8vIFRpbWVycyBmaXJlIGF0IG1vc3Qgb25jZSBwZXIgQWR2YW5jZVRpbWUoKSwgYWxsb3cgaW50ZXJ2YWxzCisgIC8vIHRvIGZpcmUgc2V2ZXJhbCB0aW1lcyBpZiBwb3NzaWJsZS4KKyAgZGVsZWdhdGUuQWR2YW5jZVRpbWUoMTAwMCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDEwMDApOworICBkZWxlZ2F0ZS5BZHZhbmNlVGltZSgxMDAwKTsKKyAgZGVsZWdhdGUuQWR2YW5jZVRpbWUoMTAwMCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDEwMDApOworICBVbmxvYWRQYWdlKHBhZ2UpOworCisgIGNvbnN0IGF1dG8mIGFsZXJ0cyA9IGRlbGVnYXRlLkdldEFsZXJ0cygpOworICBFWFBFQ1RfRVEoMlUsIGFsZXJ0cy5zaXplKCkpOworfQorCiAjZW5kaWYgIC8vIFBERl9FTkFCTEVfVjgKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvamF2YXNjcmlwdC9KU19PYmplY3QuY3BwIGIvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKaW5kZXggOWVjMzE2My4uYjY1Njk5YSAxMDA2NDQKLS0tIGEvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKKysrIGIvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgIG1fcFJ1bnRpbWUocFJ1bnRpbWUpLAogICAgICAgbV9wQXBwKHBBcHApIHsKICAgQ0ZYX1N5c3RlbUhhbmRsZXIqIHBIYW5kbGVyID0gbV9wQXBwLT5HZXRTeXNIYW5kbGVyKCk7Ci0gIG1fblRpbWVySUQgPSBwSGFuZGxlci0+U2V0VGltZXIoZHdFbGFwc2UsIFRpbWVyUHJvYyk7CisgIG1fblRpbWVySUQgPSBwSGFuZGxlci0+U2V0VGltZXIoZHdFbGFwc2UsIFRyaWdnZXIpOwogICAoKkdldEdsb2JhbFRpbWVyTWFwKCkpW21fblRpbWVySURdID0gdGhpczsKICAgbV9wUnVudGltZS0+QWRkT2JzZXJ2ZXIodGhpcyk7CiB9CkBAIC05OSwyMyArOTksMTkgQEAKICAgQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gR2V0UnVudGltZSgpOwogICBpZiAocFJ1bnRpbWUpCiAgICAgcFJ1bnRpbWUtPlJlbW92ZU9ic2VydmVyKHRoaXMpOwotICBLaWxsSlNUaW1lcigpOwotfQogCi12b2lkIENKU19UaW1lcjo6S2lsbEpTVGltZXIoKSB7Ci0gIGlmIChtX25UaW1lcklEKSB7Ci0gICAgaWYgKG1fYlZhbGlkKSB7Ci0gICAgICBDRlhfU3lzdGVtSGFuZGxlciogcEhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsKLSAgICAgIHBIYW5kbGVyLT5LaWxsVGltZXIobV9uVGltZXJJRCk7Ci0gICAgfQotICAgIEdldEdsb2JhbFRpbWVyTWFwKCktPmVyYXNlKG1fblRpbWVySUQpOwotICAgIG1fblRpbWVySUQgPSAwOwotICB9CisgIGlmICghbV9uVGltZXJJRCkKKyAgICByZXR1cm47CisKKyAgaWYgKG1fYlZhbGlkKQorICAgIG1fcEFwcC0+R2V0U3lzSGFuZGxlcigpLT5LaWxsVGltZXIobV9uVGltZXJJRCk7CisKKyAgR2V0R2xvYmFsVGltZXJNYXAoKS0+ZXJhc2UobV9uVGltZXJJRCk7CiB9CiAKIC8vIHN0YXRpYwotdm9pZCBDSlNfVGltZXI6OlRpbWVyUHJvYyhpbnQgaWRFdmVudCkgewotICBhdXRvIGl0ID0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZmluZChpZEV2ZW50KTsKK3ZvaWQgQ0pTX1RpbWVyOjpUcmlnZ2VyKGludCBuVGltZXJJRCkgeworICBhdXRvIGl0ID0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZmluZChuVGltZXJJRCk7CiAgIGlmIChpdCA9PSBHZXRHbG9iYWxUaW1lck1hcCgpLT5lbmQoKSkKICAgICByZXR1cm47CiAKQEAgLTEyOCwxMiArMTI0LDI0IEBACiAgICAgcFRpbWVyLT5tX3BFbWJlZE9iai0+VGltZXJQcm9jKHBUaW1lcik7CiAKICAgLy8gVGltZXIgcHJvYyBtYXkgaGF2ZSBkZXN0cm95ZWQgdGltZXIsIGZpbmQgaXQgYWdhaW4uCi0gIGl0ID0gR2V0R2xvYmFsVGltZXJNYXAoKS0+ZmluZChpZEV2ZW50KTsKKyAgaXQgPSBHZXRHbG9iYWxUaW1lck1hcCgpLT5maW5kKG5UaW1lcklEKTsKICAgaWYgKGl0ID09IEdldEdsb2JhbFRpbWVyTWFwKCktPmVuZCgpKQogICAgIHJldHVybjsKIAogICBwVGltZXIgPSBpdC0+c2Vjb25kOwogICBwVGltZXItPm1fYlByb2Nlc3NpbmcgPSBmYWxzZTsKKyAgaWYgKHBUaW1lci0+SXNPbmVTaG90KCkpCisgICAgcFRpbWVyLT5tX3BFbWJlZE9iai0+Q2FuY2VsUHJvYyhwVGltZXIpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQ0pTX1RpbWVyOjpDYW5jZWwoaW50IG5UaW1lcklEKSB7CisgIGF1dG8gaXQgPSBHZXRHbG9iYWxUaW1lck1hcCgpLT5maW5kKG5UaW1lcklEKTsKKyAgaWYgKGl0ID09IEdldEdsb2JhbFRpbWVyTWFwKCktPmVuZCgpKQorICAgIHJldHVybjsKKworICBDSlNfVGltZXIqIHBUaW1lciA9IGl0LT5zZWNvbmQ7CisgIHBUaW1lci0+bV9wRW1iZWRPYmotPkNhbmNlbFByb2MocFRpbWVyKTsKIH0KIAogLy8gc3RhdGljCmRpZmYgLS1naXQgYS9mcGRmc2RrL2phdmFzY3JpcHQvSlNfT2JqZWN0LmggYi9mcGRmc2RrL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgKaW5kZXggMTQ2YTdjOS4uYWVjOTRjMCAxMDA2NDQKLS0tIGEvZnBkZnNkay9qYXZhc2NyaXB0L0pTX09iamVjdC5oCisrKyBiL2ZwZGZzZGsvamF2YXNjcmlwdC9KU19PYmplY3QuaApAQCAtMTgsMTIgKzE4LDE0IEBACiBjbGFzcyBDSlNfT2JqZWN0OwogY2xhc3MgQ0pTX1RpbWVyOwogY2xhc3MgQ1BERkRvY19FbnZpcm9ubWVudDsKKwogY2xhc3MgQ0pTX0VtYmVkT2JqIHsKICBwdWJsaWM6CiAgIGV4cGxpY2l0IENKU19FbWJlZE9iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOwogICB2aXJ0dWFsIH5DSlNfRW1iZWRPYmooKTsKIAogICB2aXJ0dWFsIHZvaWQgVGltZXJQcm9jKENKU19UaW1lciogcFRpbWVyKSB7fQorICB2aXJ0dWFsIHZvaWQgQ2FuY2VsUHJvYyhDSlNfVGltZXIqIHBUaW1lcikge30KIAogICBDSlNfT2JqZWN0KiBHZXRKU09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcEpTT2JqZWN0OyB9CiAKQEAgLTc2LDE1ICs3OCwxNSBAQAogICAgICAgICAgICAgdWludDMyX3QgZHdUaW1lT3V0KTsKICAgfkNKU19UaW1lcigpIG92ZXJyaWRlOwogCi0gIHZvaWQgS2lsbEpTVGltZXIoKTsKKyAgc3RhdGljIHZvaWQgVHJpZ2dlcihpbnQgblRpbWVySUQpOworICBzdGF0aWMgdm9pZCBDYW5jZWwoaW50IG5UaW1lcklEKTsKIAotICBpbnQgR2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fblR5cGU7IH0KKyAgYm9vbCBJc09uZVNob3QoKSBjb25zdCB7IHJldHVybiBtX25UeXBlID09IDE7IH0KICAgdWludDMyX3QgR2V0VGltZU91dCgpIGNvbnN0IHsgcmV0dXJuIG1fZHdUaW1lT3V0OyB9CisgIGludCBHZXRUaW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV9uVGltZXJJRDsgfQogICBDSlNfUnVudGltZSogR2V0UnVudGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYlZhbGlkID8gbV9wUnVudGltZSA6IG51bGxwdHI7IH0KICAgQ0ZYX1dpZGVTdHJpbmcgR2V0SlNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3dKU2NyaXB0OyB9CiAKLSAgc3RhdGljIHZvaWQgVGltZXJQcm9jKGludCBpZEV2ZW50KTsKLQogIHByaXZhdGU6CiAgIHVzaW5nIFRpbWVyTWFwID0gc3RkOjptYXA8RlhfVUlOVCwgQ0pTX1RpbWVyKj47CiAgIHN0YXRpYyBUaW1lck1hcCogR2V0R2xvYmFsVGltZXJNYXAoKTsKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuY3BwIGIvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5jcHAKaW5kZXggMTA3NzYyOS4uMzI5YjYyNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5jcHAKKysrIGIvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5jcHAKQEAgLTMxLDE2ICszMSwxMiBAQAogSU1QTEVNRU5UX0pTX0NMQVNTKENKU19UaW1lck9iaiwgVGltZXJPYmopCiAKIFRpbWVyT2JqOjpUaW1lck9iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpCi0gICAgOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KSwgbV9wVGltZXIobnVsbHB0cikge30KKyAgICA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpLCBtX25UaW1lcklEKDApIHt9CiAKIFRpbWVyT2JqOjp+VGltZXJPYmooKSB7fQogCiB2b2lkIFRpbWVyT2JqOjpTZXRUaW1lcihDSlNfVGltZXIqIHBUaW1lcikgewotICBtX3BUaW1lciA9IHBUaW1lcjsKLX0KLQotQ0pTX1RpbWVyKiBUaW1lck9iajo6R2V0VGltZXIoKSBjb25zdCB7Ci0gIHJldHVybiBtX3BUaW1lcjsKKyAgbV9uVGltZXJJRCA9IHBUaW1lci0+R2V0VGltZXJJRCgpOwogfQogCiAjZGVmaW5lIEpTX1NUUl9WSUVXRVJUWVBFIEwicGRmaXVtIgpAQCAtNDczLDIwICs0NjksNyBAQAogICBpZiAoIXBUaW1lck9iaikKICAgICByZXR1cm47CiAKLSAgQ0pTX1RpbWVyKiBwVGltZXIgPSBwVGltZXJPYmotPkdldFRpbWVyKCk7Ci0gIGlmICghcFRpbWVyKQotICAgIHJldHVybjsKLQotICBwVGltZXItPktpbGxKU1RpbWVyKCk7Ci0gIGF1dG8gaXRlciA9IHN0ZDo6ZmluZF9pZihtX1RpbWVycy5iZWdpbigpLCBtX1RpbWVycy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVGltZXJdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDSlNfVGltZXI+JiB0aGF0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwVGltZXIgPT0gdGhhdC5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotCi0gIGlmIChpdGVyICE9IG1fVGltZXJzLmVuZCgpKQotICAgIG1fVGltZXJzLmVyYXNlKGl0ZXIpOwotCi0gIHBUaW1lck9iai0+U2V0VGltZXIobnVsbHB0cik7CisgIENKU19UaW1lcjo6Q2FuY2VsKHBUaW1lck9iai0+R2V0VGltZXJJRCgpKTsKIH0KIAogRlhfQk9PTCBhcHA6OmV4ZWNNZW51SXRlbShJSlNfQ29udGV4dCogY2MsCkBAIC00OTgsMjAgKzQ4MSwxOCBAQAogCiB2b2lkIGFwcDo6VGltZXJQcm9jKENKU19UaW1lciogcFRpbWVyKSB7CiAgIENKU19SdW50aW1lKiBwUnVudGltZSA9IHBUaW1lci0+R2V0UnVudGltZSgpOworICBpZiAocFJ1bnRpbWUgJiYgKCFwVGltZXItPklzT25lU2hvdCgpIHx8IHBUaW1lci0+R2V0VGltZU91dCgpID4gMCkpCisgICAgUnVuSnNTY3JpcHQocFJ1bnRpbWUsIHBUaW1lci0+R2V0SlNjcmlwdCgpKTsKK30KIAotICBzd2l0Y2ggKHBUaW1lci0+R2V0VHlwZSgpKSB7Ci0gICAgY2FzZSAwOiAgLy8gaW50ZXJ2YWwKLSAgICAgIGlmIChwUnVudGltZSkKLSAgICAgICAgUnVuSnNTY3JpcHQocFJ1bnRpbWUsIHBUaW1lci0+R2V0SlNjcmlwdCgpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgIGlmIChwVGltZXItPkdldFRpbWVPdXQoKSA+IDApIHsKLSAgICAgICAgaWYgKHBSdW50aW1lKQotICAgICAgICAgIFJ1bkpzU2NyaXB0KHBSdW50aW1lLCBwVGltZXItPkdldEpTY3JpcHQoKSk7Ci0gICAgICAgIHBUaW1lci0+S2lsbEpTVGltZXIoKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Cit2b2lkIGFwcDo6Q2FuY2VsUHJvYyhDSlNfVGltZXIqIHBUaW1lcikgeworICBhdXRvIGl0ZXIgPSBzdGQ6OmZpbmRfaWYobV9UaW1lcnMuYmVnaW4oKSwgbV9UaW1lcnMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRpbWVyXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q0pTX1RpbWVyPiYgdGhhdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcFRpbWVyID09IHRoYXQuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICBpZiAoaXRlciAhPSBtX1RpbWVycy5lbmQoKSkKKyAgICBtX1RpbWVycy5lcmFzZShpdGVyKTsKIH0KIAogdm9pZCBhcHA6OlJ1bkpzU2NyaXB0KENKU19SdW50aW1lKiBwUnVudGltZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdzU2NyaXB0KSB7CmRpZmYgLS1naXQgYS9mcGRmc2RrL2phdmFzY3JpcHQvYXBwLmggYi9mcGRmc2RrL2phdmFzY3JpcHQvYXBwLmgKaW5kZXggYzZjZGE1NS4uYmIwODNjZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9qYXZhc2NyaXB0L2FwcC5oCisrKyBiL2ZwZGZzZGsvamF2YXNjcmlwdC9hcHAuaApAQCAtMjAsMTIgKzIwLDExIEBACiAgIFRpbWVyT2JqKENKU19PYmplY3QqIHBKU09iamVjdCk7CiAgIH5UaW1lck9iaigpIG92ZXJyaWRlOwogCi0gcHVibGljOgogICB2b2lkIFNldFRpbWVyKENKU19UaW1lciogcFRpbWVyKTsKLSAgQ0pTX1RpbWVyKiBHZXRUaW1lcigpIGNvbnN0OworICBpbnQgR2V0VGltZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fblRpbWVySUQ7IH0KIAogIHByaXZhdGU6Ci0gIENKU19UaW1lciogbV9wVGltZXI7CisgIGludCBtX25UaW1lcklEOyAgLy8gV2VhayByZWZlcmVuY2UgdG8gdGltZXIgdGhyb3VnaCBnbG9iYWwgbWFwLgogfTsKIAogY2xhc3MgQ0pTX1RpbWVyT2JqIDogcHVibGljIENKU19PYmplY3QgewpAQCAtMTU4LDYgKzE1Nyw3IEBACiAgcHJpdmF0ZToKICAgLy8gQ0pTX0VtYmVkT2JqCiAgIHZvaWQgVGltZXJQcm9jKENKU19UaW1lciogcFRpbWVyKSBvdmVycmlkZTsKKyAgdm9pZCBDYW5jZWxQcm9jKENKU19UaW1lciogcFRpbWVyKSBvdmVycmlkZTsKICAgdm9pZCBSdW5Kc1NjcmlwdChDSlNfUnVudGltZSogcFJ1bnRpbWUsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c1NjcmlwdCk7CiAKICAgdm9pZCBDbGVhclRpbWVyQ29tbW9uKGNvbnN0IENKU19WYWx1ZSYgcGFyYW0pOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzYzNDcxNi5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z182MzQ3MTYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NWRhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z182MzQ3MTYuaW4KQEAgLTAsMCArMSwxMjYgQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvQWNyb0Zvcm0gNiAwIFIKKyAgL05hbWVzIDw8L0phdmFTY3JpcHQgMTMgMCBSPj4KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbNCAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyAgPDw+PgorPj4KK2VuZG9iagore3tvYmplY3QgNiAwfX0gPDwKKyAgL0RSIDw8CisgICAgL0ZvbnQgPDwvSGVsdiA3IDAgUj4+CisgID4+CisgIC9EQSAoL0hlbHYgMCBUZiAwIGcpCisgIC9GaWVsZHMgWzUgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgNyAwfX0gPDwKKyAgL1R5cGUgL0ZvbnQKKyAgL1N1YnR5cGUgL1R5cGUxCisgIC9CYXNlRm9udCAvSGVsdmV0aWNhCisgIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCis+PgorZW5kb2JqCit7e29iamVjdCA4IDB9fSA8PAorICAvVHlwZSAvWE9iamVjdAorICAvU3VidHlwZSAvRm9ybQorICAvRm9ybVR5cGUgMQorICAvTWF0cml4IFsxIDAgMCAxIDAgMF0KKyAgL0JCb3ggWzAgMCA3NS45MDcgMjguNDcyXQorICAvUmVzb3VyY2VzICA8PAorICAgIC9Gb250IDw8L0ZYRjAgNyAwIFI+PgorICA+PgorPj4KK3N0cmVhbQorcQorUQorCisKK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCAxMSAwfX0gPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgNTAgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxMyAwfX0gPDwKKyAgL05hbWVzIFsoc3RhcnREZWxheSkgMTEgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgNTAgMH19IDw8Cis+Pgorc3RyZWFtCit2YXIgdGltZU91dCA9IDA7Cit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAyNCo0KTsKK3ZhciBkb2MgPSB0aGlzOworCitmdW5jdGlvbiBteUZ1bmN0aW9uKCkgeworICB0cnkgeworICAgIC8vIEZyZWUgdGhlIFRpbWVyIE9iamVjdHMKKyAgICBhcHAuY2xlYXJUaW1lT3V0KHRpbWVPdXQpOworICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgZm9yICh2YXIgaj0wOyBqPGFycmF5W2ldLmxlbmd0aDsgaisrKSB7CisgICAgICAgIGFwcC5jbGVhclRpbWVPdXQoYXJyYXlbaV1bal0pOworICAgICAgfQorICAgIH0KKworICAgIC8vIFRyaWdnZXIgdGhlIEdhcmJhZ2UgQ29sbGVjdGlvbgorICAgIGFycmF5Lmxlbmd0aCA9IDA7CisgICAgYXJyYXkucHVzaChuZXcgQXJyYXlCdWZmZXIoMTAyNCoxMDI0KSk7CisgICAgYXJyYXkubGVuZ3RoPTA7CisgICAgYXJyYXkubGVuZ3RoPTEwMjQqNDsKKyAgICB2YXIgc3RyID0gJ0FBJzsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCA7IGkrKykgeworICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxMDsgaisrICkgeworICAgICAgICBkb2MuYWRkSWNvbihzdHIgKyAiLSIgKyBzdHIgKyBzdHIgKyBzdHIgKyBzdHIgKyBzdHIsIGRvYy5pY29ucyk7CisgICAgICB9CisgICAgfQorICB9IGNhdGNoKGVycikgeworICAgIGFwcC5hbGVydChlcnIpOworICB9Cit9CisKK2Z1bmN0aW9uIG1haW4oKSB7CisgIHRyeSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggOyBpKyspIHsKKyAgICAgIGlmIChpID09IGFycmF5Lmxlbmd0aCAvIDIpIHsKKyAgICAgICAgdGltZU91dCA9IGFwcC5zZXRUaW1lT3V0KCJteUZ1bmN0aW9uKCkiLCAxMDAwKTsKKyAgICAgIH0KKyAgICAgIGFycmF5W2ldID0gbmV3IEFycmF5KDQpOworICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheVtpXS5sZW5ndGggOyBqKysgKSB7CisgICAgICAgIGFycmF5W2ldW2pdID0gYXBwLnNldFRpbWVPdXQoImFhYWFhYWFhYWEoKSIsIDEwMDAwMCk7CisgICAgICB9CisgICAgfQorICB9IGNhdGNoKGVycikgeworICAgIGFwcC5hbGVydChlcnIpOworICB9Cit9CisKKy8vIEV4ZWN1dGUgdGhlIEpTLgorYXBwLnNldFRpbWVPdXQoIm1haW4oKSIsIDEwMDApOworCisvLyBCZSBzdXJlIGFsbCBvZiB0aGlzIGNvZGUgcmFuIHRvIGNvbXBsZXRpb24uCithcHAuYWxlcnQoImRvbmUiKTsKK2VuZHN0cmVhbQorZW5kb2JqCit7e3hyZWZ9fQordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorPj4KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9idWdfNjM0NzE2LnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z182MzQ3MTYucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzBiOWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNjM0NzE2LnBkZgpAQCAtMCwwICsxLDE4MCBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvQWNyb0Zvcm0gNiAwIFIKKyAgL05hbWVzIDw8L0phdmFTY3JpcHQgMTMgMCBSPj4KKz4+CitlbmRvYmoKKzIgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2VzCisgIC9Db3VudCAxCisgIC9LaWRzIFs0IDAgUl0KKz4+CitlbmRvYmoKKzQgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQorICAvQ3JvcEJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgIDw8Pj4KKz4+CitlbmRvYmoKKzYgMCBvYmogPDwKKyAgL0RSIDw8CisgICAgL0ZvbnQgPDwvSGVsdiA3IDAgUj4+CisgID4+CisgIC9EQSAoL0hlbHYgMCBUZiAwIGcpCisgIC9GaWVsZHMgWzUgMCBSXQorPj4KK2VuZG9iagorNyAwIG9iaiA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKKyAgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKKz4+CitlbmRvYmoKKzggMCBvYmogPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKyAgL01hdHJpeCBbMSAwIDAgMSAwIDBdCisgIC9CQm94IFswIDAgNzUuOTA3IDI4LjQ3Ml0KKyAgL1Jlc291cmNlcyAgPDwKKyAgICAvRm9udCA8PC9GWEYwIDcgMCBSPj4KKyAgPj4KKz4+CitzdHJlYW0KK3EKK1EKKworCitlbmRzdHJlYW0KK2VuZG9iagorMTEgMCBvYmogPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgNTAgMCBSCis+PgorZW5kb2JqCisxMyAwIG9iaiA8PAorICAvTmFtZXMgWyhzdGFydERlbGF5KSAxMSAwIFJdCis+PgorZW5kb2JqCis1MCAwIG9iaiA8PAorPj4KK3N0cmVhbQordmFyIHRpbWVPdXQgPSAwOwordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMjQqNCk7Cit2YXIgZG9jID0gdGhpczsKKworZnVuY3Rpb24gbXlGdW5jdGlvbigpIHsKKyAgdHJ5IHsKKyAgICAvLyBGcmVlIHRoZSBUaW1lciBPYmplY3RzCisgICAgYXBwLmNsZWFyVGltZU91dCh0aW1lT3V0KTsKKyAgICBmb3IgKHZhciBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgIGZvciAodmFyIGo9MDsgajxhcnJheVtpXS5sZW5ndGg7IGorKykgeworICAgICAgICBhcHAuY2xlYXJUaW1lT3V0KGFycmF5W2ldW2pdKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUcmlnZ2VyIHRoZSBHYXJiYWdlIENvbGxlY3Rpb24KKyAgICBhcnJheS5sZW5ndGggPSAwOworICAgIGFycmF5LnB1c2gobmV3IEFycmF5QnVmZmVyKDEwMjQqMTAyNCkpOworICAgIGFycmF5Lmxlbmd0aD0wOworICAgIGFycmF5Lmxlbmd0aD0xMDI0KjQ7CisgICAgdmFyIHN0ciA9ICdBQSc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggOyBpKyspIHsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7IGorKyApIHsKKyAgICAgICAgZG9jLmFkZEljb24oc3RyICsgIi0iICsgc3RyICsgc3RyICsgc3RyICsgc3RyICsgc3RyLCBkb2MuaWNvbnMpOworICAgICAgfQorICAgIH0KKyAgfSBjYXRjaChlcnIpIHsKKyAgICBhcHAuYWxlcnQoZXJyKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYWluKCkgeworICB0cnkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoIDsgaSsrKSB7CisgICAgICBpZiAoaSA9PSBhcnJheS5sZW5ndGggLyAyKSB7CisgICAgICAgIHRpbWVPdXQgPSBhcHAuc2V0VGltZU91dCgibXlGdW5jdGlvbigpIiwgMTAwMCk7CisgICAgICB9CisgICAgICBhcnJheVtpXSA9IG5ldyBBcnJheSg0KTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXlbaV0ubGVuZ3RoIDsgaisrICkgeworICAgICAgICBhcnJheVtpXVtqXSA9IGFwcC5zZXRUaW1lT3V0KCJhYWFhYWFhYWFhKCkiLCAxMDAwMDApOworICAgICAgfQorICAgIH0KKyAgfSBjYXRjaChlcnIpIHsKKyAgICBhcHAuYWxlcnQoZXJyKTsKKyAgfQorfQorCisvLyBFeGVjdXRlIHRoZSBKUy4KK2FwcC5zZXRUaW1lT3V0KCJtYWluKCkiLCAxMDAwKTsKKworLy8gQmUgc3VyZSBhbGwgb2YgdGhpcyBjb2RlIHJhbiB0byBjb21wbGV0aW9uLgorYXBwLmFsZXJ0KCJkb25lIik7CitlbmRzdHJlYW0KK2VuZG9iagoreHJlZgorMCA1MQorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDExOCAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDE4MSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDMwMiAwMDAwMCBuIAorMDAwMDAwMDQwNCAwMDAwMCBuIAorMDAwMDAwMDUwOSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDcwMSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDc2OSAwMDAwMCBuIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDgyMiAwMDAwMCBuIAordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorPj4KK3N0YXJ0eHJlZgorMjAzNgorJSVFT0YK