ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZmb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwIGIvZnBkZnNkay9zcmMvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKaW5kZXggNmJhYWQxMS4uNTY3MTBiOSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZmZvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKQEAgLTQwLDYgKzQwLDE4IEBACiAgIFVubG9hZFBhZ2UocGFnZSk7CiB9CiAKK1RFU1RfRihGUERGRm9ybUZpbGxFbWJlZGRlcnRlc3QsIEJVR181MDczMTYpIHsKKyAgRW1iZWRkZXJUZXN0VGltZXJIYW5kbGluZ0RlbGVnYXRlIGRlbGVnYXRlOworICBTZXREZWxlZ2F0ZSgmZGVsZWdhdGUpOworCisgIEVYUEVDVF9UUlVFKE9wZW5Eb2N1bWVudCgidGVzdGluZy9yZXNvdXJjZXMvYnVnXzUwNzMxNi5wZGYiKSk7CisgIEZQREZfUEFHRSBwYWdlID0gTG9hZEFuZENhY2hlUGFnZSgyKTsKKyAgRVhQRUNUX05FKG51bGxwdHIsIHBhZ2UpOworICBEb09wZW5BY3Rpb25zKCk7CisgIGRlbGVnYXRlLkFkdmFuY2VUaW1lKDQwMDApOworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCiBURVNUX0YoRlBERkZvcm1GaWxsRW1iZWRkZXJ0ZXN0LCBCVUdfNTE0NjkwKSB7CiAgIEVYUEVDVF9UUlVFKE9wZW5Eb2N1bWVudCgidGVzdGluZy9yZXNvdXJjZXMvaGVsbG9fd29ybGQucGRmIikpOwogICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnNka19tZ3IuY3BwIGIvZnBkZnNkay9zcmMvZnNka19tZ3IuY3BwCmluZGV4IDRkM2QwMWYuLjRhNTU2MjIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZzZGtfbWdyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mc2RrX21nci5jcHAKQEAgLTY2NCwxNSArNjY0LDIyIEBACiB9CiAKIENQREZTREtfUGFnZVZpZXc6On5DUERGU0RLX1BhZ2VWaWV3KCkgeworICAvLyBpZiB0aGVyZSBpcyBhIGZvY3VzZWQgYW5ub3Qgb24gdGhlIHBhZ2UsIHdlIHNob3VsZCBraWxsIHRoZSBmb2N1cyBmaXJzdC4KKyAgaWYgKENQREZTREtfQW5ub3QqIGZvY3VzZWRBbm5vdCA9IG1fcFNES0RvYy0+R2V0Rm9jdXNBbm5vdCgpKSB7CisgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbV9meEFubm90QXJyYXkuR2V0U2l6ZSgpOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgQ1BERlNES19Bbm5vdCogcEFubm90ID0gKENQREZTREtfQW5ub3QqKW1fZnhBbm5vdEFycmF5LkdldEF0KGkpOworICAgICAgaWYgKHBBbm5vdCA9PSBmb2N1c2VkQW5ub3QpIHsKKyAgICAgICAgS2lsbEZvY3VzQW5ub3QoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisKICAgQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7Ci0gIGludCBuQW5ub3RDb3VudCA9IG1fZnhBbm5vdEFycmF5LkdldFNpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQW5ub3RDb3VudDsgaSsrKSB7CisgIENQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisgIEFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsKKyAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbV9meEFubm90QXJyYXkuR2V0U2l6ZSgpOyBpIDwgY291bnQ7IGkrKykgewogICAgIENQREZTREtfQW5ub3QqIHBBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX2Z4QW5ub3RBcnJheS5HZXRBdChpKTsKLSAgICAvLyBpZiB0aGVyZSBpcyBhIGZvY3VzZWQgYW5ub3Qgb24gdGhlIHBhZ2UsIHdlIHNob3VsZCBraWxsIHRoZSBmb2N1cyBmaXJzdC4KLSAgICBpZiAocEFubm90ID09IG1fcFNES0RvYy0+R2V0Rm9jdXNBbm5vdCgpKQotICAgICAgS2lsbEZvY3VzQW5ub3QoKTsKLSAgICBDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOwotICAgIEFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsKICAgICBwQW5ub3RIYW5kbGVyTWdyLT5SZWxlYXNlQW5ub3QocEFubm90KTsKICAgfQogICBtX2Z4QW5ub3RBcnJheS5SZW1vdmVBbGwoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAgYi90ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuY3BwCmluZGV4IGQ2MjgxMGQuLjE1MTk4N2YgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5jcHAKKysrIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmNwcApAQCAtMjMyLDYgKzIzMiw3IEBACiAgIGZvcm1maWxsaW5mby0+dmVyc2lvbiA9IDE7CiAgIGZvcm1maWxsaW5mby0+RkZJX1NldFRpbWVyID0gU2V0VGltZXJUcmFtcG9saW5lOwogICBmb3JtZmlsbGluZm8tPkZGSV9LaWxsVGltZXIgPSBLaWxsVGltZXJUcmFtcG9saW5lOworICBmb3JtZmlsbGluZm8tPkZGSV9HZXRQYWdlID0gR2V0UGFnZVRyYW1wb2xpbmU7CiAgIGZvcm1maWxsaW5mby0+bV9wSnNQbGF0Zm9ybSA9IHBsYXRmb3JtOwogCiAgIGZvcm1faGFuZGxlXyA9IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvbm1lbnQoZG9jdW1lbnRfLCBmb3JtZmlsbGluZm8pOwpAQCAtMjcwLDYgKzI3MSwxNSBAQAogICByZXR1cm4gcGFnZTsKIH0KIAorRlBERl9QQUdFIEVtYmVkZGVyVGVzdDo6TG9hZEFuZENhY2hlUGFnZShpbnQgcGFnZV9udW1iZXIpIHsKKyAgRlBERl9QQUdFIHBhZ2UgPSBkZWxlZ2F0ZV8tPkdldFBhZ2UoZm9ybV9oYW5kbGVfLCBkb2N1bWVudF8sIHBhZ2VfbnVtYmVyKTsKKyAgaWYgKCFwYWdlKSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKyAgRk9STV9Eb1BhZ2VBQWN0aW9uKHBhZ2UsIGZvcm1faGFuZGxlXywgRlBERlBBR0VfQUFDVElPTl9PUEVOKTsKKyAgcmV0dXJuIHBhZ2U7Cit9CisKIEZQREZfQklUTUFQIEVtYmVkZGVyVGVzdDo6UmVuZGVyUGFnZShGUERGX1BBR0UgcGFnZSkgewogICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KEZQREZfR2V0UGFnZVdpZHRoKHBhZ2UpKTsKICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oRlBERl9HZXRQYWdlSGVpZ2h0KHBhZ2UpKTsKQEAgLTI4Niw2ICsyOTYsMjIgQEAKICAgRlBERl9DbG9zZVBhZ2UocGFnZSk7CiB9CiAKK0ZQREZfUEFHRSBFbWJlZGRlclRlc3Q6OkRlbGVnYXRlOjpHZXRQYWdlKEZQREZfRk9STUhBTkRMRSBmb3JtX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFnZV9pbmRleCkgeworICBhdXRvIGl0ID0gbV9wYWdlTWFwLmZpbmQocGFnZV9pbmRleCk7CisgIGlmIChpdCAhPSBtX3BhZ2VNYXAuZW5kKCkpIHsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgfQorICBGUERGX1BBR0UgcGFnZSA9IEZQREZfTG9hZFBhZ2UoZG9jdW1lbnQsIHBhZ2VfaW5kZXgpOworICBpZiAoIXBhZ2UpIHsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorICBtX3BhZ2VNYXBbcGFnZV9pbmRleF0gPSBwYWdlOworICBGT1JNX09uQWZ0ZXJMb2FkUGFnZShwYWdlLCBmb3JtX2hhbmRsZSk7CisgIHJldHVybiBwYWdlOworfQorCiAvLyBzdGF0aWMKIHZvaWQgRW1iZWRkZXJUZXN0OjpVbnN1cHBvcnRlZEhhbmRsZXJUcmFtcG9saW5lKFVOU1VQUE9SVF9JTkZPKiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpIHsKQEAgLTMxNyw2ICszNDMsMTQgQEAKICAgcmV0dXJuIHRlc3QtPmRlbGVnYXRlXy0+S2lsbFRpbWVyKGlkKTsKIH0KIAorLy8gc3RhdGljCitGUERGX1BBR0UgRW1iZWRkZXJUZXN0OjpHZXRQYWdlVHJhbXBvbGluZShGUERGX0ZPUk1GSUxMSU5GTyogaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFnZV9pbmRleCkgeworICBFbWJlZGRlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxFbWJlZGRlclRlc3QqPihpbmZvKTsKKyAgcmV0dXJuIHRlc3QtPmRlbGVnYXRlXy0+R2V0UGFnZSh0ZXN0LT5tX3BGb3JtZmlsbGluZm8sIGRvY3VtZW50LCBwYWdlX2luZGV4KTsKK30KKwogLy8gQ2FuJ3QgdXNlIGd0ZXN0LXByb3ZpZGVkIG1haW4gc2luY2Ugd2UgbmVlZCB0byBzdGFzaCB0aGUgcGF0aCB0byB0aGUKIC8vIGV4ZWN1dGFibGUgaW4gb3JkZXIgdG8gZmluZCB0aGUgZXh0ZXJuYWwgVjggYmluYXJ5IGRhdGEgZmlsZXMuCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKaW5kZXggNGJkOWQ5Ny4uZjQ5MGY4MiAxMDA2NDQKLS0tIGEvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKKysrIGIvdGVzdGluZy9lbWJlZGRlcl90ZXN0LmgKQEAgLTUsNiArNSw3IEBACiAjaWZuZGVmIFRFU1RJTkdfRU1CRURERVJfVEVTVF9IXwogI2RlZmluZSBURVNUSU5HX0VNQkVEREVSX1RFU1RfSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICIuLi9wdWJsaWMvZnBkZl9kYXRhYXZhaWwuaCIKQEAgLTQzLDYgKzQ0LDE0IEBACiAKICAgICAvLyBFcXVpdmFsZW50IHRvIEZQREZfRk9STUZJTExJTkZPOjpGRklfS2lsbFRpbWVyKCkuCiAgICAgdmlydHVhbCB2b2lkIEtpbGxUaW1lcihpbnQgaWQpIHt9CisKKyAgICAvLyBFcXVpdmFsZW50IHRvIEZQREZfRk9STUZJTExJTkZPOjpGRklfR2V0UGFnZSgpLgorICAgIHZpcnR1YWwgRlBERl9QQUdFIEdldFBhZ2UoRlBERl9GT1JNSEFORExFIGZvcm1faGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlBERl9ET0NVTUVOVCBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWdlX2luZGV4KTsKKworICAgcHJpdmF0ZToKKyAgICBzdGQ6Om1hcDxpbnQsIEZQREZfUEFHRT4gbV9wYWdlTWFwOwogICB9OwogCiAgIEVtYmVkZGVyVGVzdCgpOwpAQCAtNzIsNiArODEsMTAgQEAKICAgLy8gTG9hZCBhIHNwZWNpZmljIHBhZ2Ugb2YgdGhlIG9wZW4gZG9jdW1lbnQuCiAgIHZpcnR1YWwgRlBERl9QQUdFIExvYWRQYWdlKGludCBwYWdlX251bWJlcik7CiAKKyAgLy8gTG9hZCBhIHNwZWNpZmljIHBhZ2Ugb2YgdGhlIG9wZW4gZG9jdW1lbnQgdXNpbmcgZGVsZWdhdGVfLT5HZXRQYWdlLgorICAvLyBkZWxlZ2F0ZV8tPkdldFBhZ2UgYWxzbyBjYWNoZXMgbG9hZGVkIHBhZ2UuCisgIHZpcnR1YWwgRlBERl9QQUdFIExvYWRBbmRDYWNoZVBhZ2UoaW50IHBhZ2VfbnVtYmVyKTsKKwogICAvLyBDb252ZXJ0IGEgbG9hZGVkIHBhZ2UgaW50byBhIGJpdG1hcC4KICAgdmlydHVhbCBGUERGX0JJVE1BUCBSZW5kZXJQYWdlKEZQREZfUEFHRSBwYWdlKTsKIApAQCAtMTA2LDYgKzExOSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2VjcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXJDYWxsYmFjayBmbik7CiAgIHN0YXRpYyB2b2lkIEtpbGxUaW1lclRyYW1wb2xpbmUoRlBERl9GT1JNRklMTElORk8qIGluZm8sIGludCBpZCk7CisgIHN0YXRpYyBGUERGX1BBR0UgR2V0UGFnZVRyYW1wb2xpbmUoRlBERl9GT1JNRklMTElORk8qIGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlBERl9ET0NVTUVOVCBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFnZV9pbmRleCk7CiB9OwogCiAjZW5kaWYgIC8vIFRFU1RJTkdfRU1CRURERVJfVEVTVF9IXwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzUwNzMxNi5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z181MDczMTYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzZjgxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z181MDczMTYuaW4KQEAgLTAsMCArMSwxMjYgQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvT3BlbkFjdGlvbiA0IDAgUgorICAvQWNyb0Zvcm0gMyAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMworICAvS2lkcyBbNiAwIFIgNyAwIFIgOCAwIFIgXQorPj4KK2VuZG9iagore3tvYmplY3QgMyAwfX0gPDwKKyAgL0NPIFsxMSAwIFJdCisgIC9GaWVsZHMgWzExIDAgUiA5IDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDQgMH19IDw8CisgIC9UeXBlIC9BY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKyAgL0pTIDUgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCA1IDB9fSA8PD4+CitzdHJlYW0KK3ZhciBpID0gMDsKK2Z1bmN0aW9uIHJ1bigpCit7CisgIHQgPSB0aGlzLmdldEZpZWxkKCd0eHROYW1lMScpOworICB0MiA9IHRoaXMuZ2V0RmllbGQoJ3R4dE5hbWUyJyk7CisgIHQyLnNldEZvY3VzKCk7CisgIHQuc2V0Rm9jdXMoKTsKKyAgdC52YWx1ZT0nRyc7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZSgpeworICBpZiAoaT09MSl7CisgICAgdGhpcy5yZW1vdmVGaWVsZCgndHh0TmFtZTInKTsKKyAgfQorICBpKys7Cit9CisKK2FwcC5zZXRUaW1lT3V0KCdydW4oKScsMjAwMCk7CitlbmRzdHJlYW0KK2VuZG9iagore3tvYmplY3QgNiAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQorICAvUmVzb3VyY2VzIDw8Pj4KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDcgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyA8PD4+Cis+PgorZW5kb2JqCit7e29iamVjdCA4IDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgPDw+PgorICAvQW5ub3RzIFs5IDAgUiAxMSAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA5IDB9fSA8PAorICAvRlQgL1R4CisgIC9UeXBlIC9Bbm5vdAorICAvU3VidHlwZSAvV2lkZ2V0CisgIC9UICh0eHROYW1lMikKKyAgL0YgNAorICAvQVAgPDwvTiAxMCAwIFI+PgorICAvUmVjdCBbMjAgMjAgNDAwIDYwXQorPj4KK2VuZG9iagore3tvYmplY3QgMTAgMH19IDw8CisgIC9UeXBlIC9YT2JqZWN0CisgIC9TdWJ0eXBlIC9Gb3JtCisgIC9Gb3JtVHlwZSAxCis+PgorZW5kb2JqCit7e29iamVjdCAxMSAwfX0gPDwKKyAgL0ZUIC9UeAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1dpZGdldAorICAvVCAodHh0TmFtZTEpCisgIC9GIDQKKyAgL0FQIDw8L04gMTIgMCBSPj4KKyAgL1JlY3QgWzIwMCAyMDAgNDAwIDI2MF0KKyAgL0FBIDEzIDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgMTIgMH19IDw8CisgIC9UeXBlIC9YT2JqZWN0CisgIC9TdWJ0eXBlIC9Gb3JtCisgIC9Gb3JtVHlwZSAxCis+PgorZW5kb2JqCit7e29iamVjdCAxMyAwfX0gPDwKKyAgL0MgMTQgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxNCAwfX0gPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgMTUgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxNSAwfX0gPDw+Pgorc3RyZWFtCit0aGlzLmdldEZpZWxkKCd0eHROYW1lMicpLnZhbHVlPSdCJzsKK3RoaXMucGFnZU51bT0xOworcmVtb3ZlKCk7CitlbmRzdHJlYW0KK2VuZG9iagore3t4cmVmfX0KK3RyYWlsZXIgPDwKKyAgL1NpemUgMTUKKyAgL1Jvb3QgMSAwIFIKKz4+Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzUwNzMxNi5wZGYgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNTA3MzE2LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2M3MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzUwNzMxNi5wZGYKQEAgLTAsMCArMSwxNDUgQEAKKyVQREYtMS43CisloPKk9AorMSAwIG9iaiA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL09wZW5BY3Rpb24gNCAwIFIKKyAgL0Fjcm9Gb3JtIDMgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMworICAvS2lkcyBbNiAwIFIgNyAwIFIgOCAwIFIgXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvQ08gWzExIDAgUl0KKyAgL0ZpZWxkcyBbMTEgMCBSIDkgMCBSXQorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyA1IDAgUgorPj4KK2VuZG9iagorNSAwIG9iaiA8PD4+CitzdHJlYW0KK3ZhciBpID0gMDsKK2Z1bmN0aW9uIHJ1bigpCit7CisgIHQgPSB0aGlzLmdldEZpZWxkKCd0eHROYW1lMScpOworICB0MiA9IHRoaXMuZ2V0RmllbGQoJ3R4dE5hbWUyJyk7CisgIHQyLnNldEZvY3VzKCk7CisgIHQuc2V0Rm9jdXMoKTsKKyAgdC52YWx1ZT0nRyc7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZSgpeworICBpZiAoaT09MSl7CisgICAgdGhpcy5yZW1vdmVGaWVsZCgndHh0TmFtZTInKTsKKyAgfQorICBpKys7Cit9CisKK2FwcC5zZXRUaW1lT3V0KCdydW4oKScsMjAwMCk7CitlbmRzdHJlYW0KK2VuZG9iagorNiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgPDw+PgorPj4KK2VuZG9iagorNyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgPDw+PgorPj4KK2VuZG9iagorOCAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgPDw+PgorICAvQW5ub3RzIFs5IDAgUiAxMSAwIFJdCis+PgorZW5kb2JqCis5IDAgb2JqIDw8CisgIC9GVCAvVHgKKyAgL1R5cGUgL0Fubm90CisgIC9TdWJ0eXBlIC9XaWRnZXQKKyAgL1QgKHR4dE5hbWUyKQorICAvRiA0CisgIC9BUCA8PC9OIDEwIDAgUj4+CisgIC9SZWN0IFsyMCAyMCA0MDAgNjBdCis+PgorZW5kb2JqCisxMCAwIG9iaiA8PAorICAvVHlwZSAvWE9iamVjdAorICAvU3VidHlwZSAvRm9ybQorICAvRm9ybVR5cGUgMQorPj4KK2VuZG9iagorMTEgMCBvYmogPDwKKyAgL0ZUIC9UeAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1dpZGdldAorICAvVCAodHh0TmFtZTEpCisgIC9GIDQKKyAgL0FQIDw8L04gMTIgMCBSPj4KKyAgL1JlY3QgWzIwMCAyMDAgNDAwIDI2MF0KKyAgL0FBIDEzIDAgUgorPj4KK2VuZG9iagorMTIgMCBvYmogPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKz4+CitlbmRvYmoKKzEzIDAgb2JqIDw8CisgIC9DIDE0IDAgUgorPj4KK2VuZG9iagorMTQgMCBvYmogPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgMTUgMCBSCis+PgorZW5kb2JqCisxNSAwIG9iaiA8PD4+CitzdHJlYW0KK3RoaXMuZ2V0RmllbGQoJ3R4dE5hbWUyJykudmFsdWU9J0InOwordGhpcy5wYWdlTnVtPTE7CityZW1vdmUoKTsKK2VuZHN0cmVhbQorZW5kb2JqCit4cmVmCiswIDE2CiswMDAwMDAwMDAwIDY1NTM1IGYgCiswMDAwMDAwMDE1IDAwMDAwIG4gCiswMDAwMDAwMTA2IDAwMDAwIG4gCiswMDAwMDAwMTgyIDAwMDAwIG4gCiswMDAwMDAwMjQzIDAwMDAwIG4gCiswMDAwMDAwMzA5IDAwMDAwIG4gCiswMDAwMDAwNjAyIDAwMDAwIG4gCiswMDAwMDAwNjk3IDAwMDAwIG4gCiswMDAwMDAwNzkyIDAwMDAwIG4gCiswMDAwMDAwOTEyIDAwMDAwIG4gCiswMDAwMDAxMDQzIDAwMDAwIG4gCiswMDAwMDAxMTEzIDAwMDAwIG4gCiswMDAwMDAxMjYxIDAwMDAwIG4gCiswMDAwMDAxMzMxIDAwMDAwIG4gCiswMDAwMDAxMzY1IDAwMDAwIG4gCiswMDAwMDAxNDMzIDAwMDAwIG4gCit0cmFpbGVyIDw8CisgIC9TaXplIDE1CisgIC9Sb290IDEgMCBSCis+Pgorc3RhcnR4cmVmCisxNTM0CislJUVPRgo=