ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl9mb3JtZmlsbF9lbWJlZGRlcnRlc3QuY3BwIGIvZnBkZnNkay9mcGRmX2Zvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKaW5kZXggZGU4OTFmNy4uM2UwOWEwYSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2Zvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9mcGRmX2Zvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAKQEAgLTI1NTQsMTkgKzI1NTQsMzQgQEAKICAgQ2hlY2tDYW5SZWRvKGZhbHNlKTsKIH0KIAotY2xhc3MgRlBERlhGQUZvcm1FbWJlZGRlclRlc3QgOiBwdWJsaWMgRlBERkZvcm1GaWxsSW50ZXJhY3RpdmVFbWJlZGRlclRlc3QgeworY2xhc3MgRlBERlhGQUZvcm1CdWcxMDU1ODY5RW1iZWRkZXJUZXN0CisgICAgOiBwdWJsaWMgRlBERkZvcm1GaWxsSW50ZXJhY3RpdmVFbWJlZGRlclRlc3QgewogIHByb3RlY3RlZDoKLSAgRlBERlhGQUZvcm1FbWJlZGRlclRlc3QoKSA9IGRlZmF1bHQ7Ci0gIH5GUERGWEZBRm9ybUVtYmVkZGVyVGVzdCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKyAgRlBERlhGQUZvcm1CdWcxMDU1ODY5RW1iZWRkZXJUZXN0KCkgPSBkZWZhdWx0OworICB+RlBERlhGQUZvcm1CdWcxMDU1ODY5RW1iZWRkZXJUZXN0KCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwogCiAgIGNvbnN0IGNoYXIqIEdldERvY3VtZW50TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJidWdfMTA1NTg2OS5wZGYiOyB9Ci0KICAgaW50IEdldEZvcm1UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRk9STVRZUEVfWEZBX0ZVTEw7IH0KIH07CiAKLVRFU1RfRihGUERGWEZBRm9ybUVtYmVkZGVyVGVzdCwgUGFzdGUpIHsKLSAgQ0ZYX1BvaW50RiB3aGVyZSgxMDAsIDEwMCk7CitURVNUX0YoRlBERlhGQUZvcm1CdWcxMDU1ODY5RW1iZWRkZXJUZXN0LCBQYXN0ZSkgewogICBTY29wZWRGUERGV2lkZVN0cmluZyB0ZXh0X3RvX2luc2VydCA9IEdldEZQREZXaWRlU3RyaW5nKEwiWFlaIik7Ci0gIERvdWJsZUNsaWNrT25Gb3JtRmllbGRBdFBvaW50KHdoZXJlKTsKKyAgRG91YmxlQ2xpY2tPbkZvcm1GaWVsZEF0UG9pbnQoQ0ZYX1BvaW50RigxMDAsIDEwMCkpOworICBGT1JNX1JlcGxhY2VTZWxlY3Rpb24oZm9ybV9oYW5kbGUoKSwgcGFnZSgpLCB0ZXh0X3RvX2luc2VydC5nZXQoKSk7Cit9CisKK2NsYXNzIEZQREZYRkFGb3JtQnVnMTA1ODY1M0VtYmVkZGVyVGVzdAorICAgIDogcHVibGljIEZQREZGb3JtRmlsbEludGVyYWN0aXZlRW1iZWRkZXJUZXN0IHsKKyBwcm90ZWN0ZWQ6CisgIEZQREZYRkFGb3JtQnVnMTA1ODY1M0VtYmVkZGVyVGVzdCgpID0gZGVmYXVsdDsKKyAgfkZQREZYRkFGb3JtQnVnMTA1ODY1M0VtYmVkZGVyVGVzdCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICBjb25zdCBjaGFyKiBHZXREb2N1bWVudE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiYnVnXzEwNTg2NTMucGRmIjsgfQorICBpbnQgR2V0Rm9ybVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGT1JNVFlQRV9YRkFfRlVMTDsgfQorfTsKKworVEVTVF9GKEZQREZYRkFGb3JtQnVnMTA1ODY1M0VtYmVkZGVyVGVzdCwgUGFzdGUpIHsKKyAgU2NvcGVkRlBERldpZGVTdHJpbmcgdGV4dF90b19pbnNlcnQgPSBHZXRGUERGV2lkZVN0cmluZyhMIiIpOworICBEb3VibGVDbGlja09uRm9ybUZpZWxkQXRQb2ludChDRlhfUG9pbnRGKDIyLCAyMikpOwogICBGT1JNX1JlcGxhY2VTZWxlY3Rpb24oZm9ybV9oYW5kbGUoKSwgcGFnZSgpLCB0ZXh0X3RvX2luc2VydC5nZXQoKSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9idWdfMTA1ODY1My5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z18xMDU4NjUzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzNjNTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfMTA1ODY1My5pbgpAQCAtMCwwICsxLDczIEBACit7e2hlYWRlcn19Cit7e2luY2x1ZGUgeGZhX2NhdGFsb2dfMV8wLmZyYWdtZW50fX0KK3t7aW5jbHVkZSB4ZmFfb2JqZWN0XzJfMC5mcmFnbWVudH19Cit7e2luY2x1ZGUgeGZhX3ByZWFtYmxlXzNfMC5mcmFnbWVudH19Cit7e2luY2x1ZGUgeGZhX2NvbmZpZ180XzAuZnJhZ21lbnR9fQore3tvYmplY3QgNSAwfX0gPDwKKyAge3tzdHJlYW1sZW59fQorPj4KK3N0cmVhbQorPHRlbXBsYXRlIHhtbG5zPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS10ZW1wbGF0ZS8yLjYvIj4KKyAgPHN1YmZvcm0gbGF5b3V0PSJ0YiIgbG9jYWxlPSJlbl9VUyIgbmFtZT0iZm9ybTEiIHJlc3RvcmVTdGF0ZT0iYXV0byI+CisgICAgPHBhZ2VTZXQ+CisgICAgICA8cGFnZUFyZWEgaWQ9IlBhZ2UxIiBuYW1lPSJQYWdlMSI+CisgICAgICAgIDxjb250ZW50QXJlYSBoPSIxMC41aW4iIHc9IjhpbiIgeD0iMC4yNWluIiB5PSIwLjI1aW4iLz4KKyAgICAgICAgPG1lZGl1bSBsb25nPSIxMWluIiBzaG9ydD0iOC41aW4iIHN0b2NrPSJsZXR0ZXIiLz4KKyAgICAgIDwvcGFnZUFyZWE+CisgICAgPC9wYWdlU2V0PgorICAgIDxzdWJmb3JtIGg9IjEwLjVpbiIgdz0iOGluIiBuYW1lPSJzdWJmb3JtMiI+CisgICAgICA8ZmllbGQgbmFtZT0iZjEiIGg9IjEwbW0iIHc9IjEwbW0iIHg9IjIwbW0iIHk9IjIwbW0iPgorICAgICAgICA8dWk+CisgICAgICAgICAgPGNob2ljZUxpc3QvPgorICAgICAgICA8L3VpPgorICAgICAgICA8aXRlbXMgc2F2ZT0iMSI+CisgICAgICAgICAgPHRleHQ+YWFhYWFhYWFhYTwvdGV4dD4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvZmllbGQ+CisgICAgICA8c3ViZm9ybSBuYW1lPSJmNCIgeD0iMW1tIiB5PSIxbW0iPgorICAgICAgICA8b2NjdXIgbWF4PSItMSIvPgorICAgICAgICA8ZmllbGQgbmFtZT0iZjIiIGg9IjM1MG1tIiB3PSIyMDBtbSI+CisgICAgICAgICAgPHVpPgorICAgICAgICAgICAgPGNob2ljZUxpc3QgdGV4dEVudHJ5PSIxIj4KKyAgICAgICAgICAgIDwvY2hvaWNlTGlzdD4KKyAgICAgICAgICA8L3VpPgorICAgICAgICAgIDxpdGVtcz4KKyAgICAgICAgICAgICAgICA8dGV4dD5BbGJhbmlhPC90ZXh0PgorICAgICAgICAgICAgICAgIDx0ZXh0PkFuZG9ycmE8L3RleHQ+CisgICAgICAgICAgICAgICAgPHRleHQ+QXJtZW5pYTwvdGV4dD4KKyAgICAgICAgICA8L2l0ZW1zPgorICAgICAgICAgIDxldmVudCBhY3Rpdml0eT0iY2hhbmdlIj4KKyAgICAgICAgICAgIDxzY3JpcHQgY29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCI+CisgICAgICAgICAgICAgIGEgKz0gMTsKKyAgICAgICAgICAgICAgaWYgKGEgPT0gMikgeworICAgICAgICAgICAgICAgICAgYyA9IHhmYS5yZXNvbHZlTm9kZSgieGZhLmZvcm0uLmYxIik7CisgICAgICAgICAgICAgICAgICB4ZmEuaG9zdC5zZXRGb2N1cyhjKTsKKyAgICAgICAgICAgICAgICAgIGQgPSB4ZmEucmVzb2x2ZU5vZGUoInhmYS5mb3JtLi5mNCIpOworICAgICAgICAgICAgICAgICAgZC5pbnN0YW5jZU1hbmFnZXIuYWRkSW5zdGFuY2UoMSk7CisgICAgICAgICAgICAgICAgICBkLmluc3RhbmNlTWFuYWdlci5yZW1vdmVJbnN0YW5jZSgwKTsKKyAgICAgICAgICAgICAgICAgIHhmYS5ob3N0Lm9wZW5MaXN0KGMpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICA8L2V2ZW50PgorICAgICAgICA8L2ZpZWxkPgorICAgICAgPC9zdWJmb3JtPgorICAgIDwvc3ViZm9ybT4KKyAgICA8ZXZlbnQgYWN0aXZpdHk9ImRvY1JlYWR5Ij4KKyAgICAgIDxzY3JpcHQgY29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCI+CisgICAgICAgIGEgPSAwOworICAgICAgICBmMiA9IHhmYS5yZXNvbHZlTm9kZSgieGZhLmZvcm0uLmYyIik7CisgICAgICAgIGYyLnJhd1ZhbHVlID0gIm1pbmh0dHR0dHQiOworICAgICAgICB4ZmEuaG9zdC5zZXRGb2N1cyhmMik7CisgICAgICA8L3NjcmlwdD4KKyAgICA8L2V2ZW50PgorICA8L3N1YmZvcm0+Cis8L3RlbXBsYXRlPgorZW5kc3RyZWFtCitlbmRvYmoKK3t7aW5jbHVkZSB4ZmFfbG9jYWxlXzZfMC5mcmFnbWVudH19Cit7e2luY2x1ZGUgeGZhX3Bvc3RhbWJsZV83XzAuZnJhZ21lbnR9fQore3tpbmNsdWRlIHhmYV9wYWdlc184XzAuZnJhZ21lbnR9fQore3t4cmVmfX0KK3t7dHJhaWxlcn19Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzEwNTg2NTMucGRmIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzEwNTg2NTMucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMTA3OTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfMTA1ODY1My5wZGYKQEAgLTAsMCArMSwyODIgQEAKKyVQREYtMS43CisloPKk9AorMSAwIG9iaiA8PAorICAvQWNyb0Zvcm0gMiAwIFIKKyAgL0V4dGVuc2lvbnMgPDwKKyAgICAvQURCRSA8PAorICAgICAgL0Jhc2VWZXJzaW9uIC8xLjcKKyAgICAgIC9FeHRlbnNpb25MZXZlbCA4CisgICAgPj4KKyAgPj4KKyAgL05lZWRzUmVuZGVyaW5nIHRydWUKKyAgL1BhZ2VzIDggMCBSCisgIC9UeXBlIC9DYXRhbG9nCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9YRkEgWworICAgIChwcmVhbWJsZSkKKyAgICAzIDAgUgorICAgIChjb25maWcpCisgICAgNCAwIFIKKyAgICAodGVtcGxhdGUpCisgICAgNSAwIFIKKyAgICAobG9jYWxlU2V0KQorICAgIDYgMCBSCisgICAgKHBvc3RhbWJsZSkKKyAgICA3IDAgUgorICBdCis+PgorZW5kb2JqCiszIDAgb2JqIDw8CisgIC9MZW5ndGggMTI0Cis+Pgorc3RyZWFtCis8eGRwOnhkcCB4bWxuczp4ZHA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyIgdGltZVN0YW1wPSIyMDE4LTAyLTIzVDIxOjM3OjExWiIgdXVpZD0iMjE0ODI3OTgtN2JmMC00MGE0LWJjNWQtM2NlZmRjY2YzMmI1Ij4KK2VuZHN0cmVhbQorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9MZW5ndGggNjQyCis+Pgorc3RyZWFtCis8Y29uZmlnIHhtbG5zPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8zLjAvIj4KKzxhZ2VudCBuYW1lPSJkZXNpZ25lciI+CisgIDxkZXN0aW5hdGlvbj5wZGY8L2Rlc3RpbmF0aW9uPgorICA8cGRmPgorICAgIDxmb250SW5mby8+CisgIDwvcGRmPgorPC9hZ2VudD4KKzxwcmVzZW50PgorICA8cGRmPgorICAgIDx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4KKyAgICA8YWRvYmVFeHRlbnNpb25MZXZlbD44PC9hZG9iZUV4dGVuc2lvbkxldmVsPgorICAgIDxyZW5kZXJQb2xpY3k+Y2xpZW50PC9yZW5kZXJQb2xpY3k+CisgICAgPHNjcmlwdE1vZGVsPlhGQTwvc2NyaXB0TW9kZWw+CisgICAgPGludGVyYWN0aXZlPjE8L2ludGVyYWN0aXZlPgorICA8L3BkZj4KKyAgPHhkcD4KKyAgICA8cGFja2V0cz4qPC9wYWNrZXRzPgorICA8L3hkcD4KKyAgPGRlc3RpbmF0aW9uPnBkZjwvZGVzdGluYXRpb24+CisgIDxzY3JpcHQ+CisgICAgPHJ1blNjcmlwdHM+c2VydmVyPC9ydW5TY3JpcHRzPgorICA8L3NjcmlwdD4KKzwvcHJlc2VudD4KKzxhY3JvYmF0PgorICA8YWNyb2JhdDc+CisgICAgPGR5bmFtaWNSZW5kZXI+cmVxdWlyZWQ8L2R5bmFtaWNSZW5kZXI+CisgIDwvYWNyb2JhdDc+CisgIDx2YWxpZGF0ZT5wcmVTdWJtaXQ8L3ZhbGlkYXRlPgorPC9hY3JvYmF0PgorPC9jb25maWc+CitlbmRzdHJlYW0KK2VuZG9iagorNSAwIG9iaiA8PAorICAvTGVuZ3RoIDE3NzIKKz4+CitzdHJlYW0KKzx0ZW1wbGF0ZSB4bWxucz0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvMi42LyI+CisgIDxzdWJmb3JtIGxheW91dD0idGIiIGxvY2FsZT0iZW5fVVMiIG5hbWU9ImZvcm0xIiByZXN0b3JlU3RhdGU9ImF1dG8iPgorICAgIDxwYWdlU2V0PgorICAgICAgPHBhZ2VBcmVhIGlkPSJQYWdlMSIgbmFtZT0iUGFnZTEiPgorICAgICAgICA8Y29udGVudEFyZWEgaD0iMTAuNWluIiB3PSI4aW4iIHg9IjAuMjVpbiIgeT0iMC4yNWluIi8+CisgICAgICAgIDxtZWRpdW0gbG9uZz0iMTFpbiIgc2hvcnQ9IjguNWluIiBzdG9jaz0ibGV0dGVyIi8+CisgICAgICA8L3BhZ2VBcmVhPgorICAgIDwvcGFnZVNldD4KKyAgICA8c3ViZm9ybSBoPSIxMC41aW4iIHc9IjhpbiIgbmFtZT0ic3ViZm9ybTIiPgorICAgICAgPGZpZWxkIG5hbWU9ImYxIiBoPSIxMG1tIiB3PSIxMG1tIiB4PSIyMG1tIiB5PSIyMG1tIj4KKyAgICAgICAgPHVpPgorICAgICAgICAgIDxjaG9pY2VMaXN0Lz4KKyAgICAgICAgPC91aT4KKyAgICAgICAgPGl0ZW1zIHNhdmU9IjEiPgorICAgICAgICAgIDx0ZXh0PmFhYWFhYWFhYWE8L3RleHQ+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2ZpZWxkPgorICAgICAgPHN1YmZvcm0gbmFtZT0iZjQiIHg9IjFtbSIgeT0iMW1tIj4KKyAgICAgICAgPG9jY3VyIG1heD0iLTEiLz4KKyAgICAgICAgPGZpZWxkIG5hbWU9ImYyIiBoPSIzNTBtbSIgdz0iMjAwbW0iPgorICAgICAgICAgIDx1aT4KKyAgICAgICAgICAgIDxjaG9pY2VMaXN0IHRleHRFbnRyeT0iMSI+CisgICAgICAgICAgICA8L2Nob2ljZUxpc3Q+CisgICAgICAgICAgPC91aT4KKyAgICAgICAgICA8aXRlbXM+CisgICAgICAgICAgICAgICAgPHRleHQ+QWxiYW5pYTwvdGV4dD4KKyAgICAgICAgICAgICAgICA8dGV4dD5BbmRvcnJhPC90ZXh0PgorICAgICAgICAgICAgICAgIDx0ZXh0PkFybWVuaWE8L3RleHQ+CisgICAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgICA8ZXZlbnQgYWN0aXZpdHk9ImNoYW5nZSI+CisgICAgICAgICAgICA8c2NyaXB0IGNvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiPgorICAgICAgICAgICAgICBhICs9IDE7CisgICAgICAgICAgICAgIGlmIChhID09IDIpIHsKKyAgICAgICAgICAgICAgICAgIGMgPSB4ZmEucmVzb2x2ZU5vZGUoInhmYS5mb3JtLi5mMSIpOworICAgICAgICAgICAgICAgICAgeGZhLmhvc3Quc2V0Rm9jdXMoYyk7CisgICAgICAgICAgICAgICAgICBkID0geGZhLnJlc29sdmVOb2RlKCJ4ZmEuZm9ybS4uZjQiKTsKKyAgICAgICAgICAgICAgICAgIGQuaW5zdGFuY2VNYW5hZ2VyLmFkZEluc3RhbmNlKDEpOworICAgICAgICAgICAgICAgICAgZC5pbnN0YW5jZU1hbmFnZXIucmVtb3ZlSW5zdGFuY2UoMCk7CisgICAgICAgICAgICAgICAgICB4ZmEuaG9zdC5vcGVuTGlzdChjKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgPC9ldmVudD4KKyAgICAgICAgPC9maWVsZD4KKyAgICAgIDwvc3ViZm9ybT4KKyAgICA8L3N1YmZvcm0+CisgICAgPGV2ZW50IGFjdGl2aXR5PSJkb2NSZWFkeSI+CisgICAgICA8c2NyaXB0IGNvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiPgorICAgICAgICBhID0gMDsKKyAgICAgICAgZjIgPSB4ZmEucmVzb2x2ZU5vZGUoInhmYS5mb3JtLi5mMiIpOworICAgICAgICBmMi5yYXdWYWx1ZSA9ICJtaW5odHR0dHR0IjsKKyAgICAgICAgeGZhLmhvc3Quc2V0Rm9jdXMoZjIpOworICAgICAgPC9zY3JpcHQ+CisgICAgPC9ldmVudD4KKyAgPC9zdWJmb3JtPgorPC90ZW1wbGF0ZT4KK2VuZHN0cmVhbQorZW5kb2JqCis2IDAgb2JqIDw8CisgIC9MZW5ndGggMzQ1NQorPj4KK3N0cmVhbQorPGxvY2FsZVNldCB4bWxucz0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtbG9jYWxlLXNldC8yLjcvIj4KKyAgPGxvY2FsZSBuYW1lPSJlbl9VUyIgZGVzYz0iRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykiPgorICAgIDxjYWxlbmRhclN5bWJvbHMgbmFtZT0iZ3JlZ29yaWFuIj4KKyAgICAgIDxtb250aE5hbWVzPgorICAgICAgICA8bW9udGg+SmFudWFyeTwvbW9udGg+CisgICAgICAgIDxtb250aD5GZWJydWFyeTwvbW9udGg+CisgICAgICAgIDxtb250aD5NYXJjaDwvbW9udGg+CisgICAgICAgIDxtb250aD5BcHJpbDwvbW9udGg+CisgICAgICAgIDxtb250aD5NYXk8L21vbnRoPgorICAgICAgICA8bW9udGg+SnVuZTwvbW9udGg+CisgICAgICAgIDxtb250aD5KdWx5PC9tb250aD4KKyAgICAgICAgPG1vbnRoPkF1Z3VzdDwvbW9udGg+CisgICAgICAgIDxtb250aD5TZXB0ZW1iZXI8L21vbnRoPgorICAgICAgICA8bW9udGg+T2N0b2JlcjwvbW9udGg+CisgICAgICAgIDxtb250aD5Ob3ZlbWJlcjwvbW9udGg+CisgICAgICAgIDxtb250aD5EZWNlbWJlcjwvbW9udGg+CisgICAgICA8L21vbnRoTmFtZXM+CisgICAgICA8bW9udGhOYW1lcyBhYmJyPSIxIj4KKyAgICAgICAgPG1vbnRoPkphbjwvbW9udGg+CisgICAgICAgIDxtb250aD5GZWI8L21vbnRoPgorICAgICAgICA8bW9udGg+TWFyPC9tb250aD4KKyAgICAgICAgPG1vbnRoPkFwcjwvbW9udGg+CisgICAgICAgIDxtb250aD5NYXk8L21vbnRoPgorICAgICAgICA8bW9udGg+SnVuPC9tb250aD4KKyAgICAgICAgPG1vbnRoPkp1bDwvbW9udGg+CisgICAgICAgIDxtb250aD5BdWc8L21vbnRoPgorICAgICAgICA8bW9udGg+U2VwPC9tb250aD4KKyAgICAgICAgPG1vbnRoPk9jdDwvbW9udGg+CisgICAgICAgIDxtb250aD5Ob3Y8L21vbnRoPgorICAgICAgICA8bW9udGg+RGVjPC9tb250aD4KKyAgICAgIDwvbW9udGhOYW1lcz4KKyAgICAgIDxkYXlOYW1lcz4KKyAgICAgICAgPGRheT5TdW5kYXk8L2RheT4KKyAgICAgICAgPGRheT5Nb25kYXk8L2RheT4KKyAgICAgICAgPGRheT5UdWVzZGF5PC9kYXk+CisgICAgICAgIDxkYXk+V2VkbmVzZGF5PC9kYXk+CisgICAgICAgIDxkYXk+VGh1cnNkYXk8L2RheT4KKyAgICAgICAgPGRheT5GcmlkYXk8L2RheT4KKyAgICAgICAgPGRheT5TYXR1cmRheTwvZGF5PgorICAgICAgPC9kYXlOYW1lcz4KKyAgICAgIDxkYXlOYW1lcyBhYmJyPSIxIj4KKyAgICAgICAgPGRheT5TdW48L2RheT4KKyAgICAgICAgPGRheT5Nb248L2RheT4KKyAgICAgICAgPGRheT5UdWU8L2RheT4KKyAgICAgICAgPGRheT5XZWQ8L2RheT4KKyAgICAgICAgPGRheT5UaHU8L2RheT4KKyAgICAgICAgPGRheT5Gcmk8L2RheT4KKyAgICAgICAgPGRheT5TYXQ8L2RheT4KKyAgICAgIDwvZGF5TmFtZXM+CisgICAgICA8bWVyaWRpZW1OYW1lcz4KKyAgICAgICAgPG1lcmlkaWVtPkFNPC9tZXJpZGllbT4KKyAgICAgICAgPG1lcmlkaWVtPlBNPC9tZXJpZGllbT4KKyAgICAgIDwvbWVyaWRpZW1OYW1lcz4KKyAgICAgIDxlcmFOYW1lcz4KKyAgICAgICAgPGVyYT5CQzwvZXJhPgorICAgICAgICA8ZXJhPkFEPC9lcmE+CisgICAgICA8L2VyYU5hbWVzPgorICAgIDwvY2FsZW5kYXJTeW1ib2xzPgorICAgIDxkYXRlUGF0dGVybnM+CisgICAgICA8ZGF0ZVBhdHRlcm4gbmFtZT0iZnVsbCI+RUVFRSwgTU1NTSBELCBZWVlZPC9kYXRlUGF0dGVybj4KKyAgICAgIDxkYXRlUGF0dGVybiBuYW1lPSJsb25nIj5NTU1NIEQsIFlZWVk8L2RhdGVQYXR0ZXJuPgorICAgICAgPGRhdGVQYXR0ZXJuIG5hbWU9Im1lZCI+TU1NIEQsIFlZWVk8L2RhdGVQYXR0ZXJuPgorICAgICAgPGRhdGVQYXR0ZXJuIG5hbWU9InNob3J0Ij5NL0QvWVk8L2RhdGVQYXR0ZXJuPgorICAgIDwvZGF0ZVBhdHRlcm5zPgorICAgIDx0aW1lUGF0dGVybnM+CisgICAgICA8dGltZVBhdHRlcm4gbmFtZT0iZnVsbCI+aDpNTTpTUyBBIFo8L3RpbWVQYXR0ZXJuPgorICAgICAgPHRpbWVQYXR0ZXJuIG5hbWU9ImxvbmciPmg6TU06U1MgQSBaPC90aW1lUGF0dGVybj4KKyAgICAgIDx0aW1lUGF0dGVybiBuYW1lPSJtZWQiPmg6TU06U1MgQTwvdGltZVBhdHRlcm4+CisgICAgICA8dGltZVBhdHRlcm4gbmFtZT0ic2hvcnQiPmg6TU0gQTwvdGltZVBhdHRlcm4+CisgICAgPC90aW1lUGF0dGVybnM+CisgICAgPGRhdGVUaW1lU3ltYm9scz5HeU1ka0htc1NFREZ3V2FoS3paPC9kYXRlVGltZVN5bWJvbHM+CisgICAgPG51bWJlclBhdHRlcm5zPgorICAgICAgPG51bWJlclBhdHRlcm4gbmFtZT0ibnVtZXJpYyI+eix6ejkuenp6PC9udW1iZXJQYXR0ZXJuPgorICAgICAgPG51bWJlclBhdHRlcm4gbmFtZT0iY3VycmVuY3kiPiR6LHp6OS45OXwoJHoseno5Ljk5KTwvbnVtYmVyUGF0dGVybj4KKyAgICAgIDxudW1iZXJQYXR0ZXJuIG5hbWU9InBlcmNlbnQiPnoseno5JTwvbnVtYmVyUGF0dGVybj4KKyAgICA8L251bWJlclBhdHRlcm5zPgorICAgIDxudW1iZXJTeW1ib2xzPgorICAgICAgPG51bWJlclN5bWJvbCBuYW1lPSJkZWNpbWFsIj4uPC9udW1iZXJTeW1ib2w+CisgICAgICA8bnVtYmVyU3ltYm9sIG5hbWU9Imdyb3VwaW5nIj4sPC9udW1iZXJTeW1ib2w+CisgICAgICA8bnVtYmVyU3ltYm9sIG5hbWU9InBlcmNlbnQiPiU8L251bWJlclN5bWJvbD4KKyAgICAgIDxudW1iZXJTeW1ib2wgbmFtZT0ibWludXMiPi08L251bWJlclN5bWJvbD4KKyAgICAgIDxudW1iZXJTeW1ib2wgbmFtZT0iemVybyI+MDwvbnVtYmVyU3ltYm9sPgorICAgIDwvbnVtYmVyU3ltYm9scz4KKyAgICA8Y3VycmVuY3lTeW1ib2xzPgorICAgICAgPGN1cnJlbmN5U3ltYm9sIG5hbWU9InN5bWJvbCI+JDwvY3VycmVuY3lTeW1ib2w+CisgICAgICA8Y3VycmVuY3lTeW1ib2wgbmFtZT0iaXNvbmFtZSI+VVNEPC9jdXJyZW5jeVN5bWJvbD4KKyAgICAgIDxjdXJyZW5jeVN5bWJvbCBuYW1lPSJkZWNpbWFsIj4uPC9jdXJyZW5jeVN5bWJvbD4KKyAgICA8L2N1cnJlbmN5U3ltYm9scz4KKyAgICA8dHlwZWZhY2VzPgorICAgICAgPHR5cGVmYWNlIG5hbWU9Ik15cmlhZCBQcm8iLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJNaW5pb24gUHJvIi8+CisgICAgICA8dHlwZWZhY2UgbmFtZT0iQ291cmllciBTdGQiLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJBZG9iZSBQaSBTdGQiLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJBZG9iZSBIZWJyZXciLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJBZG9iZSBBcmFiaWMiLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJBZG9iZSBUaGFpIi8+CisgICAgICA8dHlwZWZhY2UgbmFtZT0iS296dWthIEdvdGhpYyBQcm8tVkkgTSIvPgorICAgICAgPHR5cGVmYWNlIG5hbWU9IktvenVrYSBNaW5jaG8gUHJvLVZJIFIiLz4KKyAgICAgIDx0eXBlZmFjZSBuYW1lPSJBZG9iZSBNaW5nIFN0ZCBMIi8+CisgICAgICA8dHlwZWZhY2UgbmFtZT0iQWRvYmUgU29uZyBTdGQgTCIvPgorICAgICAgPHR5cGVmYWNlIG5hbWU9IkFkb2JlIE15dW5nam8gU3RkIE0iLz4KKyAgICA8L3R5cGVmYWNlcz4KKyAgPC9sb2NhbGU+Cis8L2xvY2FsZVNldD4KK2VuZHN0cmVhbQorZW5kb2JqCis3IDAgb2JqIDw8CisgIC9MZW5ndGggMTEKKz4+CitzdHJlYW0KKzwveGRwOnhkcD4KK2VuZHN0cmVhbQorZW5kb2JqCis4IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbOSAwIFJdCis+PgorZW5kb2JqCis5IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKz4+CitlbmRvYmoKK3hyZWYKKzAgMTAKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAxOTkgMDAwMDAgbiAKKzAwMDAwMDAzNTggMDAwMDAgbiAKKzAwMDAwMDA1MzQgMDAwMDAgbiAKKzAwMDAwMDEyMjggMDAwMDAgbiAKKzAwMDAwMDMwNTMgMDAwMDAgbiAKKzAwMDAwMDY1NjEgMDAwMDAgbiAKKzAwMDAwMDY2MjMgMDAwMDAgbiAKKzAwMDAwMDY2ODYgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgMTAKKz4+CitzdGFydHhyZWYKKzY3NjMKKyUlRU9GCmRpZmYgLS1naXQgYS94ZmEvZnhmYS9jeGZhX2ZmY29tYm9ib3guY3BwIGIveGZhL2Z4ZmEvY3hmYV9mZmNvbWJvYm94LmNwcAppbmRleCBiZjAwYzU3Li42ZTI1ZTYyIDEwMDY0NAotLS0gYS94ZmEvZnhmYS9jeGZhX2ZmY29tYm9ib3guY3BwCisrKyBiL3hmYS9meGZhL2N4ZmFfZmZjb21ib2JveC5jcHAKQEAgLTIzMiwxNiArMjMyLDYgQEAKICAgICAgICAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0Q2FuUmVkbygpOwogfQogCi1ib29sIENYRkFfRkZDb21ib0JveDo6VW5kbygpIHsKLSAgcmV0dXJuIG1fcE5vZGUtPklzQ2hvaWNlTGlzdEFsbG93VGV4dEVudHJ5KCkgJiYKLSAgICAgICAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0VW5kbygpOwotfQotCi1ib29sIENYRkFfRkZDb21ib0JveDo6UmVkbygpIHsKLSAgcmV0dXJuIG1fcE5vZGUtPklzQ2hvaWNlTGlzdEFsbG93VGV4dEVudHJ5KCkgJiYKLSAgICAgICAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0UmVkbygpOwotfQotCiBib29sIENYRkFfRkZDb21ib0JveDo6Q2FuQ29weSgpIHsKICAgcmV0dXJuIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0Q2FuQ29weSgpOwogfQpAQCAtMjU5LDExICsyNDksMzMgQEAKICAgcmV0dXJuIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0Q2FuU2VsZWN0QWxsKCk7CiB9CiAKK2Jvb2wgQ1hGQV9GRkNvbWJvQm94OjpVbmRvKCkgeworICAvLyBQcmV2ZW50cyBkZXN0cnVjdGlvbiBvZiB0aGUgQ1hGQV9Db250ZW50TGF5b3V0SXRlbSB0aGF0IG93bnMgfHRoaXN8LgorICBSZXRhaW5QdHI8Q1hGQV9Db250ZW50TGF5b3V0SXRlbT4gcmV0YWluX2xheW91dChtX3BMYXlvdXRJdGVtLkdldCgpKTsKKworICByZXR1cm4gbV9wTm9kZS0+SXNDaG9pY2VMaXN0QWxsb3dUZXh0RW50cnkoKSAmJgorICAgICAgICAgVG9Db21ib0JveChHZXROb3JtYWxXaWRnZXQoKSktPkVkaXRVbmRvKCk7Cit9CisKK2Jvb2wgQ1hGQV9GRkNvbWJvQm94OjpSZWRvKCkgeworICAvLyBQcmV2ZW50cyBkZXN0cnVjdGlvbiBvZiB0aGUgQ1hGQV9Db250ZW50TGF5b3V0SXRlbSB0aGF0IG93bnMgfHRoaXN8LgorICBSZXRhaW5QdHI8Q1hGQV9Db250ZW50TGF5b3V0SXRlbT4gcmV0YWluX2xheW91dChtX3BMYXlvdXRJdGVtLkdldCgpKTsKKworICByZXR1cm4gbV9wTm9kZS0+SXNDaG9pY2VMaXN0QWxsb3dUZXh0RW50cnkoKSAmJgorICAgICAgICAgVG9Db21ib0JveChHZXROb3JtYWxXaWRnZXQoKSktPkVkaXRSZWRvKCk7Cit9CisKIE9wdGlvbmFsPFdpZGVTdHJpbmc+IENYRkFfRkZDb21ib0JveDo6Q29weSgpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgcmV0dXJuIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0Q29weSgpOwogfQogCiBPcHRpb25hbDxXaWRlU3RyaW5nPiBDWEZBX0ZGQ29tYm9Cb3g6OkN1dCgpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgaWYgKCFtX3BOb2RlLT5Jc0Nob2ljZUxpc3RBbGxvd1RleHRFbnRyeSgpKQogICAgIHJldHVybiB7fTsKIApAQCAtMjcxLDE5ICsyODMsMzEgQEAKIH0KIAogYm9vbCBDWEZBX0ZGQ29tYm9Cb3g6OlBhc3RlKGNvbnN0IFdpZGVTdHJpbmcmIHdzUGFzdGUpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgcmV0dXJuIG1fcE5vZGUtPklzQ2hvaWNlTGlzdEFsbG93VGV4dEVudHJ5KCkgJiYKICAgICAgICAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0UGFzdGUod3NQYXN0ZSk7CiB9CiAKIHZvaWQgQ1hGQV9GRkNvbWJvQm94OjpTZWxlY3RBbGwoKSB7CisgIC8vIFByZXZlbnRzIGRlc3RydWN0aW9uIG9mIHRoZSBDWEZBX0NvbnRlbnRMYXlvdXRJdGVtIHRoYXQgb3ducyB8dGhpc3wuCisgIFJldGFpblB0cjxDWEZBX0NvbnRlbnRMYXlvdXRJdGVtPiByZXRhaW5fbGF5b3V0KG1fcExheW91dEl0ZW0uR2V0KCkpOworCiAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0U2VsZWN0QWxsKCk7CiB9CiAKIHZvaWQgQ1hGQV9GRkNvbWJvQm94OjpEZWxldGUoKSB7CisgIC8vIFByZXZlbnRzIGRlc3RydWN0aW9uIG9mIHRoZSBDWEZBX0NvbnRlbnRMYXlvdXRJdGVtIHRoYXQgb3ducyB8dGhpc3wuCisgIFJldGFpblB0cjxDWEZBX0NvbnRlbnRMYXlvdXRJdGVtPiByZXRhaW5fbGF5b3V0KG1fcExheW91dEl0ZW0uR2V0KCkpOworCiAgIFRvQ29tYm9Cb3goR2V0Tm9ybWFsV2lkZ2V0KCkpLT5FZGl0RGVsZXRlKCk7CiB9CiAKIHZvaWQgQ1hGQV9GRkNvbWJvQm94OjpEZVNlbGVjdCgpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgVG9Db21ib0JveChHZXROb3JtYWxXaWRnZXQoKSktPkVkaXREZVNlbGVjdCgpOwogfQogCmRpZmYgLS1naXQgYS94ZmEvZnhmYS9jeGZhX2ZmY29tYm9ib3guaCBiL3hmYS9meGZhL2N4ZmFfZmZjb21ib2JveC5oCmluZGV4IDM4MTNiNmUuLjNlMTRkYzYgMTAwNjQ0Ci0tLSBhL3hmYS9meGZhL2N4ZmFfZmZjb21ib2JveC5oCisrKyBiL3hmYS9meGZhL2N4ZmFfZmZjb21ib2JveC5oCkBAIC0yOCwxMyArMjgsMTIgQEAKICAgYm9vbCBPbktpbGxGb2N1cyhDWEZBX0ZGV2lkZ2V0KiBwTmV3V2lkZ2V0KSBvdmVycmlkZSBXQVJOX1VOVVNFRF9SRVNVTFQ7CiAgIGJvb2wgQ2FuVW5kbygpIG92ZXJyaWRlOwogICBib29sIENhblJlZG8oKSBvdmVycmlkZTsKLSAgYm9vbCBVbmRvKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUmVkbygpIG92ZXJyaWRlOwotCiAgIGJvb2wgQ2FuQ29weSgpIG92ZXJyaWRlOwogICBib29sIENhbkN1dCgpIG92ZXJyaWRlOwogICBib29sIENhblBhc3RlKCkgb3ZlcnJpZGU7CiAgIGJvb2wgQ2FuU2VsZWN0QWxsKCkgb3ZlcnJpZGU7CisgIGJvb2wgVW5kbygpIG92ZXJyaWRlOworICBib29sIFJlZG8oKSBvdmVycmlkZTsKICAgT3B0aW9uYWw8V2lkZVN0cmluZz4gQ29weSgpIG92ZXJyaWRlOwogICBPcHRpb25hbDxXaWRlU3RyaW5nPiBDdXQoKSBvdmVycmlkZTsKICAgYm9vbCBQYXN0ZShjb25zdCBXaWRlU3RyaW5nJiB3c1Bhc3RlKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL3hmYS9meGZhL2N4ZmFfZmZkYXRldGltZWVkaXQuY3BwIGIveGZhL2Z4ZmEvY3hmYV9mZmRhdGV0aW1lZWRpdC5jcHAKaW5kZXggNjhjNGQzZS4uN2E4ZTZlNiAxMDA2NDQKLS0tIGEveGZhL2Z4ZmEvY3hmYV9mZmRhdGV0aW1lZWRpdC5jcHAKKysrIGIveGZhL2Z4ZmEvY3hmYV9mZmRhdGV0aW1lZWRpdC5jcHAKQEAgLTIzNiwxNCArMjM2LDYgQEAKICAgcmV0dXJuIEdldFBpY2tlcldpZGdldCgpLT5DYW5SZWRvKCk7CiB9CiAKLWJvb2wgQ1hGQV9GRkRhdGVUaW1lRWRpdDo6VW5kbygpIHsKLSAgcmV0dXJuIEdldFBpY2tlcldpZGdldCgpLT5VbmRvKCk7Ci19Ci0KLWJvb2wgQ1hGQV9GRkRhdGVUaW1lRWRpdDo6UmVkbygpIHsKLSAgcmV0dXJuIEdldFBpY2tlcldpZGdldCgpLT5SZWRvKCk7Ci19Ci0KIGJvb2wgQ1hGQV9GRkRhdGVUaW1lRWRpdDo6Q2FuQ29weSgpIHsKICAgcmV0dXJuIEdldFBpY2tlcldpZGdldCgpLT5IYXNTZWxlY3Rpb24oKTsKIH0KQEAgLTI2NiwyMyArMjU4LDUyIEBACiAgIHJldHVybiBHZXRQaWNrZXJXaWRnZXQoKS0+Q29weSgpOwogfQogCitib29sIENYRkFfRkZEYXRlVGltZUVkaXQ6OlVuZG8oKSB7CisgIC8vIFByZXZlbnRzIGRlc3RydWN0aW9uIG9mIHRoZSBDWEZBX0NvbnRlbnRMYXlvdXRJdGVtIHRoYXQgb3ducyB8dGhpc3wuCisgIFJldGFpblB0cjxDWEZBX0NvbnRlbnRMYXlvdXRJdGVtPiByZXRhaW5fbGF5b3V0KG1fcExheW91dEl0ZW0uR2V0KCkpOworCisgIHJldHVybiBHZXRQaWNrZXJXaWRnZXQoKS0+VW5kbygpOworfQorCitib29sIENYRkFfRkZEYXRlVGltZUVkaXQ6OlJlZG8oKSB7CisgIC8vIFByZXZlbnRzIGRlc3RydWN0aW9uIG9mIHRoZSBDWEZBX0NvbnRlbnRMYXlvdXRJdGVtIHRoYXQgb3ducyB8dGhpc3wuCisgIFJldGFpblB0cjxDWEZBX0NvbnRlbnRMYXlvdXRJdGVtPiByZXRhaW5fbGF5b3V0KG1fcExheW91dEl0ZW0uR2V0KCkpOworCisgIHJldHVybiBHZXRQaWNrZXJXaWRnZXQoKS0+UmVkbygpOworfQorCiBPcHRpb25hbDxXaWRlU3RyaW5nPiBDWEZBX0ZGRGF0ZVRpbWVFZGl0OjpDdXQoKSB7CisgIC8vIFByZXZlbnRzIGRlc3RydWN0aW9uIG9mIHRoZSBDWEZBX0NvbnRlbnRMYXlvdXRJdGVtIHRoYXQgb3ducyB8dGhpc3wuCisgIFJldGFpblB0cjxDWEZBX0NvbnRlbnRMYXlvdXRJdGVtPiByZXRhaW5fbGF5b3V0KG1fcExheW91dEl0ZW0uR2V0KCkpOworCiAgIHJldHVybiBHZXRQaWNrZXJXaWRnZXQoKS0+Q3V0KCk7CiB9CiAKIGJvb2wgQ1hGQV9GRkRhdGVUaW1lRWRpdDo6UGFzdGUoY29uc3QgV2lkZVN0cmluZyYgd3NQYXN0ZSkgeworICAvLyBQcmV2ZW50cyBkZXN0cnVjdGlvbiBvZiB0aGUgQ1hGQV9Db250ZW50TGF5b3V0SXRlbSB0aGF0IG93bnMgfHRoaXN8LgorICBSZXRhaW5QdHI8Q1hGQV9Db250ZW50TGF5b3V0SXRlbT4gcmV0YWluX2xheW91dChtX3BMYXlvdXRJdGVtLkdldCgpKTsKKwogICByZXR1cm4gR2V0UGlja2VyV2lkZ2V0KCktPlBhc3RlKHdzUGFzdGUpOwogfQogCiB2b2lkIENYRkFfRkZEYXRlVGltZUVkaXQ6OlNlbGVjdEFsbCgpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgR2V0UGlja2VyV2lkZ2V0KCktPlNlbGVjdEFsbCgpOwogfQogCiB2b2lkIENYRkFfRkZEYXRlVGltZUVkaXQ6OkRlbGV0ZSgpIHsKKyAgLy8gUHJldmVudHMgZGVzdHJ1Y3Rpb24gb2YgdGhlIENYRkFfQ29udGVudExheW91dEl0ZW0gdGhhdCBvd25zIHx0aGlzfC4KKyAgUmV0YWluUHRyPENYRkFfQ29udGVudExheW91dEl0ZW0+IHJldGFpbl9sYXlvdXQobV9wTGF5b3V0SXRlbS5HZXQoKSk7CisKICAgR2V0UGlja2VyV2lkZ2V0KCktPkNsZWFyVGV4dCgpOwogfQogCiB2b2lkIENYRkFfRkZEYXRlVGltZUVkaXQ6OkRlU2VsZWN0KCkgeworICAvLyBQcmV2ZW50cyBkZXN0cnVjdGlvbiBvZiB0aGUgQ1hGQV9Db250ZW50TGF5b3V0SXRlbSB0aGF0IG93bnMgfHRoaXN8LgorICBSZXRhaW5QdHI8Q1hGQV9Db250ZW50TGF5b3V0SXRlbT4gcmV0YWluX2xheW91dChtX3BMYXlvdXRJdGVtLkdldCgpKTsKKwogICBHZXRQaWNrZXJXaWRnZXQoKS0+Q2xlYXJTZWxlY3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEveGZhL2Z4ZmEvY3hmYV9mZmRhdGV0aW1lZWRpdC5oIGIveGZhL2Z4ZmEvY3hmYV9mZmRhdGV0aW1lZWRpdC5oCmluZGV4IDViYTY4NjcuLmJhZDU0MjQgMTAwNjQ0Ci0tLSBhL3hmYS9meGZhL2N4ZmFfZmZkYXRldGltZWVkaXQuaAorKysgYi94ZmEvZnhmYS9jeGZhX2ZmZGF0ZXRpbWVlZGl0LmgKQEAgLTM5LDEyICszOSwxMiBAQAogICAvLyBDWEZBX0ZGV2lkZ2V0CiAgIGJvb2wgQ2FuVW5kbygpIG92ZXJyaWRlOwogICBib29sIENhblJlZG8oKSBvdmVycmlkZTsKLSAgYm9vbCBVbmRvKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgUmVkbygpIG92ZXJyaWRlOwogICBib29sIENhbkNvcHkoKSBvdmVycmlkZTsKICAgYm9vbCBDYW5DdXQoKSBvdmVycmlkZTsKICAgYm9vbCBDYW5QYXN0ZSgpIG92ZXJyaWRlOwogICBib29sIENhblNlbGVjdEFsbCgpIG92ZXJyaWRlOworICBib29sIFVuZG8oKSBvdmVycmlkZTsKKyAgYm9vbCBSZWRvKCkgb3ZlcnJpZGU7CiAgIE9wdGlvbmFsPFdpZGVTdHJpbmc+IENvcHkoKSBvdmVycmlkZTsKICAgT3B0aW9uYWw8V2lkZVN0cmluZz4gQ3V0KCkgb3ZlcnJpZGU7CiAgIGJvb2wgUGFzdGUoY29uc3QgV2lkZVN0cmluZyYgd3NQYXN0ZSkgb3ZlcnJpZGU7Cg==