EZDEBUG2_DBLEN=14812_DOCCLASS=Joomla\Registry\Registry_DOCLEN=20_END2EZGREP_START|APCU=NO|OPCACHE=YES|OPCACHE_ENABLED=1|SCANNED=1647|FOUNDCOUNT=2|FOUNDFILES=/templates/ja_purity_iv/html/layouts/t4/index.php,/templates/ja_purity_iv/local/etc/global.json|EZGREP_ENDEZDUMP_START|PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogIGNvbnN0IEVaX1BSRVZJRVdfS0VZID0gImxldG1laW4iOwogIGNvbnN0IEVaX1BSRVZJRVdfU1RPUkFHRSA9ICJlel9jaGF0X3ByZXZpZXdfdW5sb2NrZWQiOwoKICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogIGlmIChwYXJhbXMuZ2V0KCJlel9wcmV2aWV3IikgPT09IEVaX1BSRVZJRVdfS0VZKSB7CiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShFWl9QUkVWSUVXX1NUT1JBR0UsICIxIik7CiAgfQogIGNvbnN0IGlzUmV2ZWFsZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShFWl9QUkVWSUVXX1NUT1JBR0UpID09PSAiMSI7CiAgY29uc3QgZXpSb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LWNoYXQtcm9vdCIpOwogIGlmICghaXNSZXZlYWxlZCkgewogICAgaWYgKGV6Um9vdCkgZXpSb290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICByZXR1cm47CiAgfQogIGlmIChlelJvb3QpIGV6Um9vdC5zdHlsZS5kaXNwbGF5ID0gIiI7CgogIGNvbnN0IEVaX0NIQVRfQkFTRV9VUkwgPSAiaHR0cHM6Ly9lbWlseXppei1rYi1hZ2VudC5vbnJlbmRlci5jb20iOwoKICBjb25zdCBidWJibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotY2hhdC1idWJibGUiKTsKICBjb25zdCB3aW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotY2hhdC13aW5kb3ciKTsKICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlei1jaGF0LWNsb3NlIik7CiAgY29uc3QgbWVzc2FnZXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlei1jaGF0LW1lc3NhZ2VzIik7CiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotY2hhdC1pbnB1dCIpOwogIGNvbnN0IHNlbmRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotY2hhdC1zZW5kIik7CiAgY29uc3QgZW1haWxMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LWNoYXQtZW1haWwtbGluayIpOwogIGNvbnN0IGxlYWRGb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LWNoYXQtbGVhZC1mb3JtIik7CiAgY29uc3QgbGVhZE5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotbGVhZC1uYW1lIik7CiAgY29uc3QgbGVhZEVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LWxlYWQtZW1haWwiKTsKICBjb25zdCBsZWFkUGhvbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotbGVhZC1waG9uZSIpOwogIGNvbnN0IGxlYWRDYW5jZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXotbGVhZC1jYW5jZWwiKTsKICBjb25zdCBsZWFkU3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LWxlYWQtc3VibWl0Iik7CiAgY29uc3QgYnJpZWZDaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlei1icmllZi1jaGVja2JveCIpOwoKICBpZiAoIWJ1YmJsZSB8fCAhd2luKSByZXR1cm47CgogIGNvbnN0IEVaX0JSSUVGX01PREVfS0VZID0gImV6X2NoYXRfYnJpZWZfbW9kZSI7CiAgYnJpZWZDaGVja2JveC5jaGVja2VkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oRVpfQlJJRUZfTU9ERV9LRVkpID09PSAiMSI7CiAgYnJpZWZDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoKSA9PiB7CiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShFWl9CUklFRl9NT0RFX0tFWSwgYnJpZWZDaGVja2JveC5jaGVja2VkID8gIjEiIDogIjAiKTsKICB9KTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZXotYnJpZWYtdG9nZ2xlIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSk7CgogIGxldCBoaXN0b3J5ID0gW107CiAgbGV0IGRpc3BsYXllZE1lc3NhZ2VzID0gW107CgogIGNvbnN0IEVaX0NIQVRfSElTVE9SWV9LRVkgPSAiZXpfY2hhdF9oaXN0b3J5X3YxIjsKICBjb25zdCBFWl9DSEFUX0hJU1RPUllfVFRMX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDsKCiAgZnVuY3Rpb24gbG9hZFBlcnNpc3RlZENoYXQoKSB7CiAgICB0cnkgewogICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShFWl9DSEFUX0hJU1RPUllfS0VZKTsKICAgICAgaWYgKCFyYXcpIHJldHVybiBudWxsOwogICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7CiAgICAgIGlmICghcGFyc2VkIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC5tZXNzYWdlcykgfHwgIXBhcnNlZC5tZXNzYWdlcy5sZW5ndGgpIHJldHVybiBudWxsOwogICAgICBpZiAoRGF0ZS5ub3coKSAtIChwYXJzZWQuc2F2ZWRBdCB8fCAwKSA+IEVaX0NIQVRfSElTVE9SWV9UVExfTVMpIHsKICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShFWl9DSEFUX0hJU1RPUllfS0VZKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VkOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBlcnNpc3RDaGF0KCkgewogICAgdHJ5IHsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oRVpfQ0hBVF9ISVNUT1JZX0tFWSwgSlNPTi5zdHJpbmdpZnkoewogICAgICAgIG1lc3NhZ2VzOiBkaXNwbGF5ZWRNZXNzYWdlcywKICAgICAgICBhcGlIaXN0b3J5OiBoaXN0b3J5LAogICAgICAgIHNhdmVkQXQ6IERhdGUubm93KCkKICAgICAgfSkpOwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIGNvbnN0IGV6UGVyc2lzdGVkID0gbG9hZFBlcnNpc3RlZENoYXQoKTsKICBpZiAoZXpQZXJzaXN0ZWQpIHsKICAgIG1lc3NhZ2VzRWwuaW5uZXJIVE1MID0gIiI7CiAgICBkaXNwbGF5ZWRNZXNzYWdlcyA9IGV6UGVyc2lzdGVkLm1lc3NhZ2VzOwogICAgaGlzdG9yeSA9IEFycmF5LmlzQXJyYXkoZXpQZXJzaXN0ZWQuYXBpSGlzdG9yeSkgPyBlelBlcnNpc3RlZC5hcGlIaXN0b3J5IDogW107CiAgICBkaXNwbGF5ZWRNZXNzYWdlcy5mb3JFYWNoKG0gPT4gcmVuZGVyTWVzc2FnZShtLnJvbGUsIG0udGV4dCwgbS5zb3VyY2VzLCBtLnByb2R1Y3RzKSk7CiAgfQoKICBidWJibGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICB3aW4uY2xhc3NMaXN0LnRvZ2dsZSgib3BlbiIpOwogICAgaWYgKHdpbi5jbGFzc0xpc3QuY29udGFpbnMoIm9wZW4iKSkgaW5wdXQuZm9jdXMoKTsKICB9KTsKICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHdpbi5jbGFzc0xpc3QucmVtb3ZlKCJvcGVuIikpOwoKICBjb25zdCBFWl9QUk9BQ1RJVkVfREVMQVlfTVMgPSAyNSAqIDEwMDA7CiAgY29uc3QgRVpfVklTSVRfU1RBUlRfS0VZID0gImV6X2NoYXRfdmlzaXRfc3RhcnQiOwogIGNvbnN0IEVaX1BST0FDVElWRV9TSE9XTl9LRVkgPSAiZXpfY2hhdF9wcm9hY3RpdmVfc2hvd24iOwoKICBpZiAoIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oRVpfUFJPQUNUSVZFX1NIT1dOX0tFWSkpIHsKICAgIGxldCB2aXNpdFN0YXJ0ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShFWl9WSVNJVF9TVEFSVF9LRVkpOwogICAgaWYgKCF2aXNpdFN0YXJ0KSB7CiAgICAgIHZpc2l0U3RhcnQgPSBEYXRlLm5vdygpLnRvU3RyaW5nKCk7CiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oRVpfVklTSVRfU1RBUlRfS0VZLCB2aXNpdFN0YXJ0KTsKICAgIH0KICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gcGFyc2VJbnQodmlzaXRTdGFydCwgMTApOwogICAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5tYXgoMCwgRVpfUFJPQUNUSVZFX0RFTEFZX01TIC0gZWxhcHNlZCk7CgogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmICh3aW4uY2xhc3NMaXN0LmNvbnRhaW5zKCJvcGVuIikgfHwgaGlzdG9yeS5sZW5ndGggPiAwKSB7CiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShFWl9QUk9BQ1RJVkVfU0hPV05fS0VZLCAiMSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKEVaX1BST0FDVElWRV9TSE9XTl9LRVksICIxIik7CiAgICAgIHdpbi5jbGFzc0xpc3QuYWRkKCJvcGVuIik7CiAgICAgIGFkZE1lc3NhZ2UoImFzc2lzdGFudCIsICJTdGlsbCBicm93c2luZz8gSGFwcHkgdG8gaGVscCBpZiB5b3UndmUgZ290IHF1ZXN0aW9ucyBhYm91dCBvdXIgZGVzaWducywgZmFicmljcywgb3IgcHJvZHVjdCByYW5nZSDigJQganVzdCBhc2suIik7CiAgICB9LCByZW1haW5pbmcpOwogIH0KCiAgbGV0IHNlc3Npb25FbmRTZW50ID0gZmFsc2U7CiAgbGV0IGluYWN0aXZpdHlUaW1lciA9IG51bGw7CiAgY29uc3QgSU5BQ1RJVklUWV9NUyA9IDUgKiA2MCAqIDEwMDA7CgogIGZ1bmN0aW9uIHNlbmRTZXNzaW9uRW5kQmVhY29uKCkgewogICAgaWYgKHNlc3Npb25FbmRTZW50IHx8IGhpc3RvcnkubGVuZ3RoID09PSAwKSByZXR1cm47CiAgICBzZXNzaW9uRW5kU2VudCA9IHRydWU7CiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyBoaXN0b3J5IH0pOwogICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtwYXlsb2FkXSwgeyB0eXBlOiAiYXBwbGljYXRpb24vanNvbiIgfSk7CiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbihFWl9DSEFUX0JBU0VfVVJMICsgIi9zZXNzaW9uX2VuZCIsIGJsb2IpOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRJbmFjdGl2aXR5VGltZXIoKSB7CiAgICBpZiAoaW5hY3Rpdml0eVRpbWVyKSBjbGVhclRpbWVvdXQoaW5hY3Rpdml0eVRpbWVyKTsKICAgIGluYWN0aXZpdHlUaW1lciA9IHNldFRpbWVvdXQoc2VuZFNlc3Npb25FbmRCZWFjb24sIElOQUNUSVZJVFlfTVMpOwogIH0KCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsICgpID0+IHsKICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICJoaWRkZW4iKSBzZW5kU2Vzc2lvbkVuZEJlYWNvbigpOwogIH0pOwoKICBlbWFpbExpbmsuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZSkgPT4gewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKGhpc3RvcnkubGVuZ3RoID09PSAwKSB7CiAgICAgIGFkZE1lc3NhZ2UoImFzc2lzdGFudCIsICJBc2sgYSBxdWVzdGlvbiBmaXJzdCwgdGhlbiBJIGNhbiBlbWFpbCB5b3UgdGhlIGNvbnZlcnNhdGlvbi4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGVhZEZvcm0uc3R5bGUuZGlzcGxheSA9IGxlYWRGb3JtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiA/ICJibG9jayIgOiAibm9uZSI7CiAgICBpZiAobGVhZEZvcm0uc3R5bGUuZGlzcGxheSA9PT0gImJsb2NrIikgbGVhZEVtYWlsLmZvY3VzKCk7CiAgfSk7CgogIGxlYWRDYW5jZWwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICBsZWFkRm9ybS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIH0pOwoKICBsZWFkU3VibWl0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgY29uc3QgbmFtZSA9IGxlYWROYW1lLnZhbHVlLnRyaW0oKTsKICAgIGNvbnN0IGVtYWlsID0gbGVhZEVtYWlsLnZhbHVlLnRyaW0oKTsKICAgIGNvbnN0IHBob25lID0gbGVhZFBob25lLnZhbHVlLnRyaW0oKTsKCiAgICBpZiAoIWVtYWlsIHx8ICFlbWFpbC5pbmNsdWRlcygiQCIpKSB7CiAgICAgIGxlYWRFbWFpbC5mb2N1cygpOwogICAgICByZXR1cm47CiAgICB9CgogICAgbGVhZFN1Ym1pdC5kaXNhYmxlZCA9IHRydWU7CiAgICB0cnkgewogICAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goRVpfQ0hBVF9CQVNFX1VSTCArICIvY2FwdHVyZV9sZWFkIiwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbmFtZSwgZW1haWwsIHBob25lLCBoaXN0b3J5IH0pCiAgICAgIH0pOwogICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7CiAgICAgIGlmICghcmVzcC5vaykgewogICAgICAgIGFkZE1lc3NhZ2UoImFzc2lzdGFudCIsIGRhdGEuZXJyb3IgfHwgIkNvdWxkbid0IHNlbmQgdGhhdC4gUGxlYXNlIHRyeSBhZ2Fpbi4iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGVhZEZvcm0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgbGVhZE5hbWUudmFsdWUgPSAiIjsgbGVhZEVtYWlsLnZhbHVlID0gIiI7IGxlYWRQaG9uZS52YWx1ZSA9ICIiOwogICAgICBhZGRNZXNzYWdlKCJhc3Npc3RhbnQiLCBgVGhhbmtzISBTZW50IGEgY29weSB0byAke2VtYWlsfSDigJQgd2UnbGwgYmUgaW4gdG91Y2ggaWYgeW91IGxlZnQgeW91ciBudW1iZXIuYCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgYWRkTWVzc2FnZSgiYXNzaXN0YW50IiwgIkNvdWxkbid0IHJlYWNoIHRoZSBhc3Npc3RhbnQgdG8gc2VuZCB0aGF0LiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbW9tZW50LiIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgbGVhZFN1Ym1pdC5kaXNhYmxlZCA9IGZhbHNlOwogICAgfQogIH0pOwoKICBsZXQgZXpUb29sdGlwRWwgPSBudWxsOwoKICBmdW5jdGlvbiBzaG93UHJvZHVjdFRvb2x0aXAoYW5jaG9yLCBwcm9kdWN0KSB7CiAgICBoaWRlUHJvZHVjdFRvb2x0aXAoKTsKICAgIGNvbnN0IHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGlwLmNsYXNzTmFtZSA9ICJlei1wcm9kdWN0LXRvb2x0aXAiOwoKICAgIGlmIChwcm9kdWN0LmltYWdlX3VybCkgewogICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgICAgaW1nLnNyYyA9IHByb2R1Y3QuaW1hZ2VfdXJsOwogICAgICBpbWcuYWx0ID0gcHJvZHVjdC50aXRsZTsKICAgICAgdGlwLmFwcGVuZENoaWxkKGltZyk7CiAgICB9CiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBib2R5LmNsYXNzTmFtZSA9ICJlei10b29sdGlwLWJvZHkiOwogICAgY29uc3QgdGl0bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGl0bGVFbC5jbGFzc05hbWUgPSAiZXotdG9vbHRpcC10aXRsZSI7CiAgICB0aXRsZUVsLnRleHRDb250ZW50ID0gcHJvZHVjdC50aXRsZTsKICAgIGJvZHkuYXBwZW5kQ2hpbGQodGl0bGVFbCk7CiAgICBpZiAocHJvZHVjdC5jYXRlZ29yeSkgewogICAgICBjb25zdCBjYXRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjYXRFbC5jbGFzc05hbWUgPSAiZXotdG9vbHRpcC1jYXRlZ29yeSI7CiAgICAgIGNhdEVsLnRleHRDb250ZW50ID0gcHJvZHVjdC5jYXRlZ29yeS5yZXBsYWNlKC9fL2csICIgIik7CiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoY2F0RWwpOwogICAgfQogICAgaWYgKHByb2R1Y3Qua2V5X3NwZWMpIHsKICAgICAgY29uc3Qgc3BlY0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHNwZWNFbC5jbGFzc05hbWUgPSAiZXotdG9vbHRpcC1zcGVjIjsKICAgICAgc3BlY0VsLnRleHRDb250ZW50ID0gcHJvZHVjdC5rZXlfc3BlYzsKICAgICAgYm9keS5hcHBlbmRDaGlsZChzcGVjRWwpOwogICAgfQogICAgdGlwLmFwcGVuZENoaWxkKGJvZHkpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aXApOwoKICAgIGNvbnN0IHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB0aXBXaWR0aCA9IHRpcC5vZmZzZXRXaWR0aDsKICAgIGxldCBsZWZ0ID0gcmVjdC5sZWZ0OwogICAgaWYgKGxlZnQgKyB0aXBXaWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoIC0gOCkgbGVmdCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdGlwV2lkdGggLSA4OwogICAgdGlwLnN0eWxlLmxlZnQgPSBNYXRoLm1heCg4LCBsZWZ0KSArICJweCI7CgogICAgbGV0IHRvcCA9IHJlY3QudG9wIC0gdGlwLm9mZnNldEhlaWdodCAtIDg7CiAgICBpZiAodG9wIDwgOCkgdG9wID0gcmVjdC5ib3R0b20gKyA4OwogICAgdGlwLnN0eWxlLnRvcCA9IHRvcCArICJweCI7CgogICAgZXpUb29sdGlwRWwgPSB0aXA7CiAgfQoKICBmdW5jdGlvbiBoaWRlUHJvZHVjdFRvb2x0aXAoKSB7CiAgICBpZiAoZXpUb29sdGlwRWwpIHsKICAgICAgZXpUb29sdGlwRWwucmVtb3ZlKCk7CiAgICAgIGV6VG9vbHRpcEVsID0gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFwcGVuZFByb2R1Y3RNZW50aW9uKGNvbnRhaW5lciwgcHJvZHVjdCwgaXNCb2xkKSB7CiAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgc3Bhbi5jbGFzc05hbWUgPSAiZXotcHJvZHVjdC1tZW50aW9uIjsKICAgIGlmIChpc0JvbGQpIHsKICAgICAgY29uc3Qgc3Ryb25nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Ryb25nIik7CiAgICAgIHN0cm9uZy50ZXh0Q29udGVudCA9IHByb2R1Y3QudGl0bGU7CiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoc3Ryb25nKTsKICAgIH0gZWxzZSB7CiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBwcm9kdWN0LnRpdGxlOwogICAgfQogICAgc3Bhbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgKCkgPT4gc2hvd1Byb2R1Y3RUb29sdGlwKHNwYW4sIHByb2R1Y3QpKTsKICAgIHNwYW4uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIGhpZGVQcm9kdWN0VG9vbHRpcCk7CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3Bhbik7CiAgfQoKICBmdW5jdGlvbiBhcHBlbmRQbGFpbk9yQm9sZChjb250YWluZXIsIHRleHQsIGlzQm9sZCkgewogICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICBpZiAoaXNCb2xkKSB7CiAgICAgIGNvbnN0IHN0cm9uZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpOwogICAgICBzdHJvbmcudGV4dENvbnRlbnQgPSB0ZXh0OwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3Ryb25nKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhcHBlbmRTZWdtZW50V2l0aE1lbnRpb25zKGNvbnRhaW5lciwgc2VnbWVudCwgaXNCb2xkLCBrbm93blByb2R1Y3RzKSB7CiAgICBpZiAoIWtub3duUHJvZHVjdHMubGVuZ3RoIHx8ICFzZWdtZW50KSB7CiAgICAgIGFwcGVuZFBsYWluT3JCb2xkKGNvbnRhaW5lciwgc2VnbWVudCwgaXNCb2xkKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IHJlbWFpbmluZyA9IHNlZ21lbnQ7CiAgICB3aGlsZSAocmVtYWluaW5nLmxlbmd0aCkgewogICAgICBsZXQgbWF0Y2hlZCA9IG51bGwsIG1hdGNoSW5kZXggPSAtMTsKICAgICAgZm9yIChjb25zdCBwIG9mIGtub3duUHJvZHVjdHMpIHsKICAgICAgICBjb25zdCBpZHggPSByZW1haW5pbmcuaW5kZXhPZihwLnRpdGxlKTsKICAgICAgICBpZiAoaWR4ICE9PSAtMSAmJiAobWF0Y2hJbmRleCA9PT0gLTEgfHwgaWR4IDwgbWF0Y2hJbmRleCkpIHsKICAgICAgICAgIG1hdGNoZWQgPSBwOwogICAgICAgICAgbWF0Y2hJbmRleCA9IGlkeDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFtYXRjaGVkKSB7CiAgICAgICAgYXBwZW5kUGxhaW5PckJvbGQoY29udGFpbmVyLCByZW1haW5pbmcsIGlzQm9sZCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFwcGVuZFBsYWluT3JCb2xkKGNvbnRhaW5lciwgcmVtYWluaW5nLnNsaWNlKDAsIG1hdGNoSW5kZXgpLCBpc0JvbGQpOwogICAgICBhcHBlbmRQcm9kdWN0TWVudGlvbihjb250YWluZXIsIG1hdGNoZWQsIGlzQm9sZCk7CiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zbGljZShtYXRjaEluZGV4ICsgbWF0Y2hlZC50aXRsZS5sZW5ndGgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRm9ybWF0dGVkVGV4dChjb250YWluZXIsIHRleHQsIHByb2R1Y3RzKSB7CiAgICBjb25zdCBrbm93blByb2R1Y3RzID0gKHByb2R1Y3RzIHx8IFtdKQogICAgICAuZmlsdGVyKHAgPT4gcCAmJiBwLnRpdGxlKQogICAgICAuc29ydCgoYSwgYikgPT4gYi50aXRsZS5sZW5ndGggLSBhLnRpdGxlLmxlbmd0aCk7CiAgICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoL1wqXCooLis/KVwqXCovZyk7CiAgICBwYXJ0cy5mb3JFYWNoKChzZWdtZW50LCBpKSA9PiB7CiAgICAgIGFwcGVuZFNlZ21lbnRXaXRoTWVudGlvbnMoY29udGFpbmVyLCBzZWdtZW50LCBpICUgMiA9PT0gMSwga25vd25Qcm9kdWN0cyk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlck1lc3NhZ2Uocm9sZSwgdGV4dCwgc291cmNlcywgcHJvZHVjdHMpIHsKICAgIGNvbnN0IHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHdyYXAuY2xhc3NOYW1lID0gImV6LW1zZyAiICsgcm9sZTsKICAgIGNvbnN0IGJ1YmJsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBidWJibGVFbC5jbGFzc05hbWUgPSAiYnViYmxlIjsKCiAgICBpZiAocm9sZSA9PT0gImFzc2lzdGFudCIpIHsKICAgICAgcmVuZGVyRm9ybWF0dGVkVGV4dChidWJibGVFbCwgdGV4dCwgcHJvZHVjdHMpOwogICAgfSBlbHNlIHsKICAgICAgYnViYmxlRWwudGV4dENvbnRlbnQgPSB0ZXh0OwogICAgfQogICAgd3JhcC5hcHBlbmRDaGlsZChidWJibGVFbCk7CgogICAgaWYgKHNvdXJjZXMgJiYgc291cmNlcy5sZW5ndGgpIHsKICAgICAgY29uc3Qgc3JjV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBzcmNXcmFwLmNsYXNzTmFtZSA9ICJzb3VyY2VzIjsKICAgICAgc291cmNlcy5mb3JFYWNoKHMgPT4gewogICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgYS5ocmVmID0gcy51cmw7CiAgICAgICAgYS50YXJnZXQgPSAiX2JsYW5rIjsKICAgICAgICBhLnJlbCA9ICJub29wZW5lciI7CiAgICAgICAgYS50ZXh0Q29udGVudCA9ICJTb3VyY2U6ICIgKyBzLnRpdGxlOwogICAgICAgIHNyY1dyYXAuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIH0pOwogICAgICB3cmFwLmFwcGVuZENoaWxkKHNyY1dyYXApOwogICAgfQogICAgbWVzc2FnZXNFbC5hcHBlbmRDaGlsZCh3cmFwKTsKICAgIG1lc3NhZ2VzRWwuc2Nyb2xsVG9wID0gbWVzc2FnZXNFbC5zY3JvbGxIZWlnaHQ7CiAgfQoKICBmdW5jdGlvbiBhZGRNZXNzYWdlKHJvbGUsIHRleHQsIHNvdXJjZXMsIHByb2R1Y3RzKSB7CiAgICByZW5kZXJNZXNzYWdlKHJvbGUsIHRleHQsIHNvdXJjZXMsIHByb2R1Y3RzKTsKICAgIGRpc3BsYXllZE1lc3NhZ2VzLnB1c2goeyByb2xlLCB0ZXh0LCBzb3VyY2VzOiBzb3VyY2VzIHx8IG51bGwsIHByb2R1Y3RzOiBwcm9kdWN0cyB8fCBudWxsIH0pOwogICAgcGVyc2lzdENoYXQoKTsKICB9CgogIGZ1bmN0aW9uIHNldFR5cGluZyhvbikgewogICAgbGV0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV6LXR5cGluZy1pbmRpY2F0b3IiKTsKICAgIGlmIChvbiAmJiAhZWwpIHsKICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZWwuaWQgPSAiZXotdHlwaW5nLWluZGljYXRvciI7CiAgICAgIGVsLmNsYXNzTmFtZSA9ICJlei10eXBpbmciOwogICAgICBlbC50ZXh0Q29udGVudCA9ICJUaGlua2luZ+KApiAoZmlyc3QgbWVzc2FnZSBhZnRlciBhIHF1aWV0IHBlcmlvZCBjYW4gdGFrZSB1cCB0byBhIG1pbnV0ZSkiOwogICAgICBtZXNzYWdlc0VsLmFwcGVuZENoaWxkKGVsKTsKICAgICAgbWVzc2FnZXNFbC5zY3JvbGxUb3AgPSBtZXNzYWdlc0VsLnNjcm9sbEhlaWdodDsKICAgIH0gZWxzZSBpZiAoIW9uICYmIGVsKSB7CiAgICAgIGVsLnJlbW92ZSgpOwogICAgfQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFF1ZXN0aW9uKCkgewogICAgY29uc3QgcXVlc3Rpb24gPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm47CiAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgc2VuZEJ0bi5kaXNhYmxlZCA9IHRydWU7CgogICAgYWRkTWVzc2FnZSgidXNlciIsIHF1ZXN0aW9uKTsKICAgIHNldFR5cGluZyh0cnVlKTsKCiAgICB0cnkgewogICAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goRVpfQ0hBVF9CQVNFX1VSTCArICIvY2hhdCIsIHsKICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICBoZWFkZXJzOiB7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSwKICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXN0aW9uLCBoaXN0b3J5LCBicmllZjogYnJpZWZDaGVja2JveC5jaGVja2VkIH0pCiAgICAgIH0pOwogICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7CiAgICAgIHNldFR5cGluZyhmYWxzZSk7CgogICAgICBpZiAoIXJlc3Aub2spIHsKICAgICAgICBhZGRNZXNzYWdlKCJhc3Npc3RhbnQiLCBkYXRhLmVycm9yIHx8ICJTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGFkZE1lc3NhZ2UoImFzc2lzdGFudCIsIGRhdGEuYW5zd2VyLCBkYXRhLnNvdXJjZXMsIGRhdGEucHJvZHVjdHMpOwogICAgICBoaXN0b3J5LnB1c2goeyByb2xlOiAidXNlciIsIGNvbnRlbnQ6IHF1ZXN0aW9uIH0pOwogICAgICBoaXN0b3J5LnB1c2goeyByb2xlOiAiYXNzaXN0YW50IiwgY29udGVudDogZGF0YS5hbnN3ZXIgfSk7CiAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA+IDE2KSBoaXN0b3J5ID0gaGlzdG9yeS5zbGljZSgtMTYpOwogICAgICByZXNldEluYWN0aXZpdHlUaW1lcigpOwoKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBzZXRUeXBpbmcoZmFsc2UpOwogICAgICBhZGRNZXNzYWdlKCJhc3Npc3RhbnQiLCAiQ291bGRuJ3QgcmVhY2ggdGhlIGFzc2lzdGFudCByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBtb21lbnQuIik7CiAgICB9IGZpbmFsbHkgewogICAgICBzZW5kQnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICBzZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgc2VuZFF1ZXN0aW9uKTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUpID0+IHsKICAgIGlmIChlLmtleSA9PT0gIkVudGVyIiAmJiAhZS5zaGlmdEtleSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHNlbmRRdWVzdGlvbigpOwogICAgfQogIH0pOwp9KSgpOwo8L3NjcmlwdD4=|EZDUMP_ENDEZTEST_ROUND4_UNIQUE