{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\core\\editor.js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\core\\editor.js","mtime":1787309794684},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1787309791954},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9hcnJheUxpa2VUb0FycmF5IGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIjsKaW1wb3J0IF90b0FycmF5IGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0FycmF5LmpzIjsKaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCBfdHlwZW9mIGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiOwppbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiOwppbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyI7CmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5lbmRzLXdpdGguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCwgbWVyZ2UgfSBmcm9tICdsb2Rhc2gtZXMnOwppbXBvcnQgeyBMZWFmQmxvdCwgRW1iZWRCbG90LCBTY29wZSwgUGFyZW50QmxvdCB9IGZyb20gJ3BhcmNobWVudCc7CmltcG9ydCBEZWx0YSwgeyBBdHRyaWJ1dGVNYXAsIE9wIH0gZnJvbSAncXVpbGwtZGVsdGEnOwppbXBvcnQgQmxvY2ssIHsgQmxvY2tFbWJlZCwgYnViYmxlRm9ybWF0cyB9IGZyb20gJy4uL2Jsb3RzL2Jsb2NrLmpzJzsKaW1wb3J0IEJyZWFrIGZyb20gJy4uL2Jsb3RzL2JyZWFrLmpzJzsKaW1wb3J0IEN1cnNvckJsb3QgZnJvbSAnLi4vYmxvdHMvY3Vyc29yLmpzJzsKaW1wb3J0IFRleHRCbG90LCB7IGVzY2FwZVRleHQgfSBmcm9tICcuLi9ibG90cy90ZXh0LmpzJzsKaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuL3NlbGVjdGlvbi5qcyc7CnZhciBBU0NJSSA9IC9eWyAtfl0qJC87CnZhciBFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIEVkaXRvcihzY3JvbGwpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFZGl0b3IpOwogICAgdGhpcy5zY3JvbGwgPSBzY3JvbGw7CiAgICB0aGlzLmRlbHRhID0gdGhpcy5nZXREZWx0YSgpOwogIH0KICByZXR1cm4gX2NyZWF0ZUNsYXNzKEVkaXRvciwgW3sKICAgIGtleTogImFwcGx5RGVsdGEiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RGVsdGEoZGVsdGEpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5zY3JvbGwudXBkYXRlKCk7CiAgICAgIHZhciBzY3JvbGxMZW5ndGggPSB0aGlzLnNjcm9sbC5sZW5ndGgoKTsKICAgICAgdGhpcy5zY3JvbGwuYmF0Y2hTdGFydCgpOwogICAgICB2YXIgbm9ybWFsaXplZERlbHRhID0gbm9ybWFsaXplRGVsdGEoZGVsdGEpOwogICAgICB2YXIgZGVsZXRlRGVsdGEgPSBuZXcgRGVsdGEoKTsKICAgICAgdmFyIG5vcm1hbGl6ZWRPcHMgPSBzcGxpdE9wTGluZXMobm9ybWFsaXplZERlbHRhLm9wcy5zbGljZSgpKTsKICAgICAgbm9ybWFsaXplZE9wcy5yZWR1Y2UoZnVuY3Rpb24gKGluZGV4LCBvcCkgewogICAgICAgIHZhciBsZW5ndGggPSBPcC5sZW5ndGgob3ApOwogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gb3AuYXR0cmlidXRlcyB8fCB7fTsKICAgICAgICB2YXIgaXNJbXBsaWNpdE5ld2xpbmVQcmVwZW5kZWQgPSBmYWxzZTsKICAgICAgICB2YXIgaXNJbXBsaWNpdE5ld2xpbmVBcHBlbmRlZCA9IGZhbHNlOwogICAgICAgIGlmIChvcC5pbnNlcnQgIT0gbnVsbCkgewogICAgICAgICAgZGVsZXRlRGVsdGEucmV0YWluKGxlbmd0aCk7CiAgICAgICAgICBpZiAodHlwZW9mIG9wLmluc2VydCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgdmFyIHRleHQgPSBvcC5pbnNlcnQ7CiAgICAgICAgICAgIGlzSW1wbGljaXROZXdsaW5lQXBwZW5kZWQgPSAhdGV4dC5lbmRzV2l0aCgnXG4nKSAmJiAoc2Nyb2xsTGVuZ3RoIDw9IGluZGV4IHx8ICEhX3RoaXMuc2Nyb2xsLmRlc2NlbmRhbnQoQmxvY2tFbWJlZCwgaW5kZXgpWzBdKTsKICAgICAgICAgICAgX3RoaXMuc2Nyb2xsLmluc2VydEF0KGluZGV4LCB0ZXh0KTsKICAgICAgICAgICAgdmFyIF90aGlzJHNjcm9sbCRsaW5lID0gX3RoaXMuc2Nyb2xsLmxpbmUoaW5kZXgpLAogICAgICAgICAgICAgIF90aGlzJHNjcm9sbCRsaW5lMiA9IF9zbGljZWRUb0FycmF5KF90aGlzJHNjcm9sbCRsaW5lLCAyKSwKICAgICAgICAgICAgICBsaW5lID0gX3RoaXMkc2Nyb2xsJGxpbmUyWzBdLAogICAgICAgICAgICAgIG9mZnNldCA9IF90aGlzJHNjcm9sbCRsaW5lMlsxXTsKICAgICAgICAgICAgdmFyIGZvcm1hdHMgPSBtZXJnZSh7fSwgYnViYmxlRm9ybWF0cyhsaW5lKSk7CiAgICAgICAgICAgIGlmIChsaW5lIGluc3RhbmNlb2YgQmxvY2spIHsKICAgICAgICAgICAgICB2YXIgX2xpbmUkZGVzY2VuZGFudCA9IGxpbmUuZGVzY2VuZGFudChMZWFmQmxvdCwgb2Zmc2V0KSwKICAgICAgICAgICAgICAgIF9saW5lJGRlc2NlbmRhbnQyID0gX3NsaWNlZFRvQXJyYXkoX2xpbmUkZGVzY2VuZGFudCwgMSksCiAgICAgICAgICAgICAgICBsZWFmID0gX2xpbmUkZGVzY2VuZGFudDJbMF07CiAgICAgICAgICAgICAgaWYgKGxlYWYpIHsKICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBtZXJnZShmb3JtYXRzLCBidWJibGVGb3JtYXRzKGxlYWYpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXR0cmlidXRlcyA9IEF0dHJpYnV0ZU1hcC5kaWZmKGZvcm1hdHMsIGF0dHJpYnV0ZXMpIHx8IHt9OwogICAgICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKG9wLmluc2VydCkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgIHZhciBrZXkgPSBPYmplY3Qua2V5cyhvcC5pbnNlcnQpWzBdOyAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUga2V5CiAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgcmV0dXJuIGluZGV4OwogICAgICAgICAgICB2YXIgaXNJbmxpbmVFbWJlZCA9IF90aGlzLnNjcm9sbC5xdWVyeShrZXksIFNjb3BlLklOTElORSkgIT0gbnVsbDsKICAgICAgICAgICAgaWYgKGlzSW5saW5lRW1iZWQpIHsKICAgICAgICAgICAgICBpZiAoc2Nyb2xsTGVuZ3RoIDw9IGluZGV4IHx8ICEhX3RoaXMuc2Nyb2xsLmRlc2NlbmRhbnQoQmxvY2tFbWJlZCwgaW5kZXgpWzBdKSB7CiAgICAgICAgICAgICAgICBpc0ltcGxpY2l0TmV3bGluZUFwcGVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgdmFyIF90aGlzJHNjcm9sbCRkZXNjZW5kYSA9IF90aGlzLnNjcm9sbC5kZXNjZW5kYW50KExlYWZCbG90LCBpbmRleCAtIDEpLAogICAgICAgICAgICAgICAgX3RoaXMkc2Nyb2xsJGRlc2NlbmRhMiA9IF9zbGljZWRUb0FycmF5KF90aGlzJHNjcm9sbCRkZXNjZW5kYSwgMiksCiAgICAgICAgICAgICAgICBfbGVhZiA9IF90aGlzJHNjcm9sbCRkZXNjZW5kYTJbMF0sCiAgICAgICAgICAgICAgICBfb2Zmc2V0ID0gX3RoaXMkc2Nyb2xsJGRlc2NlbmRhMlsxXTsKICAgICAgICAgICAgICBpZiAoX2xlYWYgaW5zdGFuY2VvZiBUZXh0QmxvdCkgewogICAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gX2xlYWYudmFsdWUoKTsKICAgICAgICAgICAgICAgIGlmIChfdGV4dFtfb2Zmc2V0XSAhPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICBpc0ltcGxpY2l0TmV3bGluZVByZXBlbmRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGVhZiBpbnN0YW5jZW9mIEVtYmVkQmxvdCAmJiBfbGVhZi5zdGF0aWNzLnNjb3BlID09PSBTY29wZS5JTkxJTkVfQkxPVCkgewogICAgICAgICAgICAgICAgaXNJbXBsaWNpdE5ld2xpbmVQcmVwZW5kZWQgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfdGhpcy5zY3JvbGwuaW5zZXJ0QXQoaW5kZXgsIGtleSwgb3AuaW5zZXJ0W2tleV0pOwogICAgICAgICAgICBpZiAoaXNJbmxpbmVFbWJlZCkgewogICAgICAgICAgICAgIHZhciBfdGhpcyRzY3JvbGwkZGVzY2VuZGEzID0gX3RoaXMuc2Nyb2xsLmRlc2NlbmRhbnQoTGVhZkJsb3QsIGluZGV4KSwKICAgICAgICAgICAgICAgIF90aGlzJHNjcm9sbCRkZXNjZW5kYTQgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRzY3JvbGwkZGVzY2VuZGEzLCAxKSwKICAgICAgICAgICAgICAgIF9sZWFmMiA9IF90aGlzJHNjcm9sbCRkZXNjZW5kYTRbMF07CiAgICAgICAgICAgICAgaWYgKF9sZWFmMikgewogICAgICAgICAgICAgICAgdmFyIF9mb3JtYXRzID0gbWVyZ2Uoe30sIGJ1YmJsZUZvcm1hdHMoX2xlYWYyKSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gQXR0cmlidXRlTWFwLmRpZmYoX2Zvcm1hdHMsIGF0dHJpYnV0ZXMpIHx8IHt9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgc2Nyb2xsTGVuZ3RoICs9IGxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVsZXRlRGVsdGEucHVzaChvcCk7CiAgICAgICAgICBpZiAob3AucmV0YWluICE9PSBudWxsICYmIF90eXBlb2Yob3AucmV0YWluKSA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgdmFyIF9rZXkgPSBPYmplY3Qua2V5cyhvcC5yZXRhaW4pWzBdOwogICAgICAgICAgICBpZiAoX2tleSA9PSBudWxsKSByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgIF90aGlzLnNjcm9sbC51cGRhdGVFbWJlZEF0KGluZGV4LCBfa2V5LCBvcC5yZXRhaW5bX2tleV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICBfdGhpcy5zY3JvbGwuZm9ybWF0QXQoaW5kZXgsIGxlbmd0aCwgbmFtZSwgYXR0cmlidXRlc1tuYW1lXSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHByZXBlbmRlZExlbmd0aCA9IGlzSW1wbGljaXROZXdsaW5lUHJlcGVuZGVkID8gMSA6IDA7CiAgICAgICAgdmFyIGFkZGVkTGVuZ3RoID0gaXNJbXBsaWNpdE5ld2xpbmVBcHBlbmRlZCA/IDEgOiAwOwogICAgICAgIHNjcm9sbExlbmd0aCArPSBwcmVwZW5kZWRMZW5ndGggKyBhZGRlZExlbmd0aDsKICAgICAgICBkZWxldGVEZWx0YS5yZXRhaW4ocHJlcGVuZGVkTGVuZ3RoKTsKICAgICAgICBkZWxldGVEZWx0YS5kZWxldGUoYWRkZWRMZW5ndGgpOwogICAgICAgIHJldHVybiBpbmRleCArIGxlbmd0aCArIHByZXBlbmRlZExlbmd0aCArIGFkZGVkTGVuZ3RoOwogICAgICB9LCAwKTsKICAgICAgZGVsZXRlRGVsdGEucmVkdWNlKGZ1bmN0aW9uIChpbmRleCwgb3ApIHsKICAgICAgICBpZiAodHlwZW9mIG9wLmRlbGV0ZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgIF90aGlzLnNjcm9sbC5kZWxldGVBdChpbmRleCwgb3AuZGVsZXRlKTsKICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGluZGV4ICsgT3AubGVuZ3RoKG9wKTsKICAgICAgfSwgMCk7CiAgICAgIHRoaXMuc2Nyb2xsLmJhdGNoRW5kKCk7CiAgICAgIHRoaXMuc2Nyb2xsLm9wdGltaXplKCk7CiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShub3JtYWxpemVkRGVsdGEpOwogICAgfQogIH0sIHsKICAgIGtleTogImRlbGV0ZVRleHQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZVRleHQoaW5kZXgsIGxlbmd0aCkgewogICAgICB0aGlzLnNjcm9sbC5kZWxldGVBdChpbmRleCwgbGVuZ3RoKTsKICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG5ldyBEZWx0YSgpLnJldGFpbihpbmRleCkuZGVsZXRlKGxlbmd0aCkpOwogICAgfQogIH0sIHsKICAgIGtleTogImZvcm1hdExpbmUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdExpbmUoaW5kZXgsIGxlbmd0aCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgdmFyIGZvcm1hdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9OwogICAgICB0aGlzLnNjcm9sbC51cGRhdGUoKTsKICAgICAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAoZm9ybWF0KSB7CiAgICAgICAgX3RoaXMyLnNjcm9sbC5saW5lcyhpbmRleCwgTWF0aC5tYXgobGVuZ3RoLCAxKSkuZm9yRWFjaChmdW5jdGlvbiAobGluZSkgewogICAgICAgICAgbGluZS5mb3JtYXQoZm9ybWF0LCBmb3JtYXRzW2Zvcm1hdF0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGhpcy5zY3JvbGwub3B0aW1pemUoKTsKICAgICAgdmFyIGRlbHRhID0gbmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5yZXRhaW4obGVuZ3RoLCBjbG9uZURlZXAoZm9ybWF0cykpOwogICAgICByZXR1cm4gdGhpcy51cGRhdGUoZGVsdGEpOwogICAgfQogIH0sIHsKICAgIGtleTogImZvcm1hdFRleHQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdFRleHQoaW5kZXgsIGxlbmd0aCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdmFyIGZvcm1hdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9OwogICAgICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChmb3JtYXQpIHsKICAgICAgICBfdGhpczMuc2Nyb2xsLmZvcm1hdEF0KGluZGV4LCBsZW5ndGgsIGZvcm1hdCwgZm9ybWF0c1tmb3JtYXRdKTsKICAgICAgfSk7CiAgICAgIHZhciBkZWx0YSA9IG5ldyBEZWx0YSgpLnJldGFpbihpbmRleCkucmV0YWluKGxlbmd0aCwgY2xvbmVEZWVwKGZvcm1hdHMpKTsKICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGRlbHRhKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRDb250ZW50cyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudHMoaW5kZXgsIGxlbmd0aCkgewogICAgICByZXR1cm4gdGhpcy5kZWx0YS5zbGljZShpbmRleCwgaW5kZXggKyBsZW5ndGgpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldERlbHRhIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWx0YSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsLmxpbmVzKCkucmVkdWNlKGZ1bmN0aW9uIChkZWx0YSwgbGluZSkgewogICAgICAgIHJldHVybiBkZWx0YS5jb25jYXQobGluZS5kZWx0YSgpKTsKICAgICAgfSwgbmV3IERlbHRhKCkpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEZvcm1hdCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Rm9ybWF0KGluZGV4KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7CiAgICAgIHZhciBsaW5lcyA9IFtdOwogICAgICB2YXIgbGVhdmVzID0gW107CiAgICAgIGlmIChsZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLnNjcm9sbC5wYXRoKGluZGV4KS5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoKSB7CiAgICAgICAgICB2YXIgX3BhdGggPSBfc2xpY2VkVG9BcnJheShwYXRoLCAxKSwKICAgICAgICAgICAgYmxvdCA9IF9wYXRoWzBdOwogICAgICAgICAgaWYgKGJsb3QgaW5zdGFuY2VvZiBCbG9jaykgewogICAgICAgICAgICBsaW5lcy5wdXNoKGJsb3QpOwogICAgICAgICAgfSBlbHNlIGlmIChibG90IGluc3RhbmNlb2YgTGVhZkJsb3QpIHsKICAgICAgICAgICAgbGVhdmVzLnB1c2goYmxvdCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGluZXMgPSB0aGlzLnNjcm9sbC5saW5lcyhpbmRleCwgbGVuZ3RoKTsKICAgICAgICBsZWF2ZXMgPSB0aGlzLnNjcm9sbC5kZXNjZW5kYW50cyhMZWFmQmxvdCwgaW5kZXgsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgdmFyIF9tYXAgPSBbbGluZXMsIGxlYXZlc10ubWFwKGZ1bmN0aW9uIChibG90cykgewogICAgICAgICAgdmFyIGJsb3QgPSBibG90cy5zaGlmdCgpOwogICAgICAgICAgaWYgKGJsb3QgPT0gbnVsbCkgcmV0dXJuIHt9OwogICAgICAgICAgdmFyIGZvcm1hdHMgPSBidWJibGVGb3JtYXRzKGJsb3QpOwogICAgICAgICAgd2hpbGUgKE9iamVjdC5rZXlzKGZvcm1hdHMpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIF9ibG90ID0gYmxvdHMuc2hpZnQoKTsKICAgICAgICAgICAgaWYgKF9ibG90ID09IG51bGwpIHJldHVybiBmb3JtYXRzOwogICAgICAgICAgICBmb3JtYXRzID0gY29tYmluZUZvcm1hdHMoYnViYmxlRm9ybWF0cyhfYmxvdCksIGZvcm1hdHMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZvcm1hdHM7CiAgICAgICAgfSksCiAgICAgICAgX21hcDIgPSBfc2xpY2VkVG9BcnJheShfbWFwLCAyKSwKICAgICAgICBsaW5lRm9ybWF0cyA9IF9tYXAyWzBdLAogICAgICAgIGxlYWZGb3JtYXRzID0gX21hcDJbMV07CiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxpbmVGb3JtYXRzKSwgbGVhZkZvcm1hdHMpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEhUTUwiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldEhUTUwoaW5kZXgsIGxlbmd0aCkgewogICAgICB2YXIgX3RoaXMkc2Nyb2xsJGxpbmUzID0gdGhpcy5zY3JvbGwubGluZShpbmRleCksCiAgICAgICAgX3RoaXMkc2Nyb2xsJGxpbmU0ID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkc2Nyb2xsJGxpbmUzLCAyKSwKICAgICAgICBsaW5lID0gX3RoaXMkc2Nyb2xsJGxpbmU0WzBdLAogICAgICAgIGxpbmVPZmZzZXQgPSBfdGhpcyRzY3JvbGwkbGluZTRbMV07CiAgICAgIGlmIChsaW5lKSB7CiAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lLmxlbmd0aCgpOwogICAgICAgIHZhciBpc1dpdGhpbkxpbmUgPSBsaW5lLmxlbmd0aCgpID49IGxpbmVPZmZzZXQgKyBsZW5ndGg7CiAgICAgICAgaWYgKGlzV2l0aGluTGluZSAmJiAhKGxpbmVPZmZzZXQgPT09IDAgJiYgbGVuZ3RoID09PSBsaW5lTGVuZ3RoKSkgewogICAgICAgICAgcmV0dXJuIGNvbnZlcnRIVE1MKGxpbmUsIGxpbmVPZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb252ZXJ0SFRNTCh0aGlzLnNjcm9sbCwgaW5kZXgsIGxlbmd0aCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuICcnOwogICAgfQogIH0sIHsKICAgIGtleTogImdldFRleHQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldFRleHQoaW5kZXgsIGxlbmd0aCkgewogICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50cyhpbmRleCwgbGVuZ3RoKS5maWx0ZXIoZnVuY3Rpb24gKG9wKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBvcC5pbnNlcnQgPT09ICdzdHJpbmcnOwogICAgICB9KS5tYXAoZnVuY3Rpb24gKG9wKSB7CiAgICAgICAgcmV0dXJuIG9wLmluc2VydDsKICAgICAgfSkuam9pbignJyk7CiAgICB9CiAgfSwgewogICAga2V5OiAiaW5zZXJ0Q29udGVudHMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydENvbnRlbnRzKGluZGV4LCBjb250ZW50cykgewogICAgICB2YXIgbm9ybWFsaXplZERlbHRhID0gbm9ybWFsaXplRGVsdGEoY29udGVudHMpOwogICAgICB2YXIgY2hhbmdlID0gbmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5jb25jYXQobm9ybWFsaXplZERlbHRhKTsKICAgICAgdGhpcy5zY3JvbGwuaW5zZXJ0Q29udGVudHMoaW5kZXgsIG5vcm1hbGl6ZWREZWx0YSk7CiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjaGFuZ2UpOwogICAgfQogIH0sIHsKICAgIGtleTogImluc2VydEVtYmVkIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnRFbWJlZChpbmRleCwgZW1iZWQsIHZhbHVlKSB7CiAgICAgIHRoaXMuc2Nyb2xsLmluc2VydEF0KGluZGV4LCBlbWJlZCwgdmFsdWUpOwogICAgICByZXR1cm4gdGhpcy51cGRhdGUobmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5pbnNlcnQoX2RlZmluZVByb3BlcnR5KHt9LCBlbWJlZCwgdmFsdWUpKSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiaW5zZXJ0VGV4dCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0VGV4dChpbmRleCwgdGV4dCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdmFyIGZvcm1hdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9OwogICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cclxuL2csICdcbicpLnJlcGxhY2UoL1xyL2csICdcbicpOwogICAgICB0aGlzLnNjcm9sbC5pbnNlcnRBdChpbmRleCwgdGV4dCk7CiAgICAgIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goZnVuY3Rpb24gKGZvcm1hdCkgewogICAgICAgIF90aGlzNC5zY3JvbGwuZm9ybWF0QXQoaW5kZXgsIHRleHQubGVuZ3RoLCBmb3JtYXQsIGZvcm1hdHNbZm9ybWF0XSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdGhpcy51cGRhdGUobmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5pbnNlcnQodGV4dCwgY2xvbmVEZWVwKGZvcm1hdHMpKSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiaXNCbGFuayIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaXNCbGFuaygpIHsKICAgICAgaWYgKHRoaXMuc2Nyb2xsLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh0aGlzLnNjcm9sbC5jaGlsZHJlbi5sZW5ndGggPiAxKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBibG90ID0gdGhpcy5zY3JvbGwuY2hpbGRyZW4uaGVhZDsKICAgICAgaWYgKChibG90ID09PSBudWxsIHx8IGJsb3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJsb3Quc3RhdGljcy5ibG90TmFtZSkgIT09IEJsb2NrLmJsb3ROYW1lKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBibG9jayA9IGJsb3Q7CiAgICAgIGlmIChibG9jay5jaGlsZHJlbi5sZW5ndGggPiAxKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBibG9jay5jaGlsZHJlbi5oZWFkIGluc3RhbmNlb2YgQnJlYWs7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlRm9ybWF0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVGb3JtYXQoaW5kZXgsIGxlbmd0aCkgewogICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dChpbmRleCwgbGVuZ3RoKTsKICAgICAgdmFyIF90aGlzJHNjcm9sbCRsaW5lNSA9IHRoaXMuc2Nyb2xsLmxpbmUoaW5kZXggKyBsZW5ndGgpLAogICAgICAgIF90aGlzJHNjcm9sbCRsaW5lNiA9IF9zbGljZWRUb0FycmF5KF90aGlzJHNjcm9sbCRsaW5lNSwgMiksCiAgICAgICAgbGluZSA9IF90aGlzJHNjcm9sbCRsaW5lNlswXSwKICAgICAgICBvZmZzZXQgPSBfdGhpcyRzY3JvbGwkbGluZTZbMV07CiAgICAgIHZhciBzdWZmaXhMZW5ndGggPSAwOwogICAgICB2YXIgc3VmZml4ID0gbmV3IERlbHRhKCk7CiAgICAgIGlmIChsaW5lICE9IG51bGwpIHsKICAgICAgICBzdWZmaXhMZW5ndGggPSBsaW5lLmxlbmd0aCgpIC0gb2Zmc2V0OwogICAgICAgIHN1ZmZpeCA9IGxpbmUuZGVsdGEoKS5zbGljZShvZmZzZXQsIG9mZnNldCArIHN1ZmZpeExlbmd0aCAtIDEpLmluc2VydCgnXG4nKTsKICAgICAgfQogICAgICB2YXIgY29udGVudHMgPSB0aGlzLmdldENvbnRlbnRzKGluZGV4LCBsZW5ndGggKyBzdWZmaXhMZW5ndGgpOwogICAgICB2YXIgZGlmZiA9IGNvbnRlbnRzLmRpZmYobmV3IERlbHRhKCkuaW5zZXJ0KHRleHQpLmNvbmNhdChzdWZmaXgpKTsKICAgICAgdmFyIGRlbHRhID0gbmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5jb25jYXQoZGlmZik7CiAgICAgIHJldHVybiB0aGlzLmFwcGx5RGVsdGEoZGVsdGEpOwogICAgfQogIH0sIHsKICAgIGtleTogInVwZGF0ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKGNoYW5nZSkgewogICAgICB2YXIgbXV0YXRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTsKICAgICAgdmFyIHNlbGVjdGlvbkluZm8gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDsKICAgICAgdmFyIG9sZERlbHRhID0gdGhpcy5kZWx0YTsKICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEgJiYgbXV0YXRpb25zWzBdLnR5cGUgPT09ICdjaGFyYWN0ZXJEYXRhJyAmJgogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZpeCBtZSBsYXRlcgogICAgICBtdXRhdGlvbnNbMF0udGFyZ2V0LmRhdGEubWF0Y2goQVNDSUkpICYmIHRoaXMuc2Nyb2xsLmZpbmQobXV0YXRpb25zWzBdLnRhcmdldCkpIHsKICAgICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNoYXJhY3RlciBjaGFuZ2VzCiAgICAgICAgdmFyIHRleHRCbG90ID0gdGhpcy5zY3JvbGwuZmluZChtdXRhdGlvbnNbMF0udGFyZ2V0KTsKICAgICAgICB2YXIgZm9ybWF0cyA9IGJ1YmJsZUZvcm1hdHModGV4dEJsb3QpOwogICAgICAgIHZhciBpbmRleCA9IHRleHRCbG90Lm9mZnNldCh0aGlzLnNjcm9sbCk7CiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBGaXggbWUgbGF0ZXIKICAgICAgICB2YXIgb2xkVmFsdWUgPSBtdXRhdGlvbnNbMF0ub2xkVmFsdWUucmVwbGFjZShDdXJzb3JCbG90LkNPTlRFTlRTLCAnJyk7CiAgICAgICAgdmFyIG9sZFRleHQgPSBuZXcgRGVsdGEoKS5pbnNlcnQob2xkVmFsdWUpOwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgICAgICB2YXIgbmV3VGV4dCA9IG5ldyBEZWx0YSgpLmluc2VydCh0ZXh0QmxvdC52YWx1ZSgpKTsKICAgICAgICB2YXIgcmVsYXRpdmVTZWxlY3Rpb25JbmZvID0gc2VsZWN0aW9uSW5mbyAmJiB7CiAgICAgICAgICBvbGRSYW5nZTogc2hpZnRSYW5nZShzZWxlY3Rpb25JbmZvLm9sZFJhbmdlLCAtaW5kZXgpLAogICAgICAgICAgbmV3UmFuZ2U6IHNoaWZ0UmFuZ2Uoc2VsZWN0aW9uSW5mby5uZXdSYW5nZSwgLWluZGV4KQogICAgICAgIH07CiAgICAgICAgdmFyIGRpZmZEZWx0YSA9IG5ldyBEZWx0YSgpLnJldGFpbihpbmRleCkuY29uY2F0KG9sZFRleHQuZGlmZihuZXdUZXh0LCByZWxhdGl2ZVNlbGVjdGlvbkluZm8pKTsKICAgICAgICBjaGFuZ2UgPSBkaWZmRGVsdGEucmVkdWNlKGZ1bmN0aW9uIChkZWx0YSwgb3ApIHsKICAgICAgICAgIGlmIChvcC5pbnNlcnQpIHsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhLmluc2VydChvcC5pbnNlcnQsIGZvcm1hdHMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGRlbHRhLnB1c2gob3ApOwogICAgICAgIH0sIG5ldyBEZWx0YSgpKTsKICAgICAgICB0aGlzLmRlbHRhID0gb2xkRGVsdGEuY29tcG9zZShjaGFuZ2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZGVsdGEgPSB0aGlzLmdldERlbHRhKCk7CiAgICAgICAgaWYgKCFjaGFuZ2UgfHwgIWlzRXF1YWwob2xkRGVsdGEuY29tcG9zZShjaGFuZ2UpLCB0aGlzLmRlbHRhKSkgewogICAgICAgICAgY2hhbmdlID0gb2xkRGVsdGEuZGlmZih0aGlzLmRlbHRhLCBzZWxlY3Rpb25JbmZvKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGNoYW5nZTsKICAgIH0KICB9XSk7Cn0oKTsKZnVuY3Rpb24gY29udmVydExpc3RIVE1MKGl0ZW1zLCBsYXN0SW5kZW50LCB0eXBlcykgewogIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHsKICAgIHZhciBfZ2V0TGlzdFR5cGUgPSBnZXRMaXN0VHlwZSh0eXBlcy5wb3AoKSksCiAgICAgIF9nZXRMaXN0VHlwZTIgPSBfc2xpY2VkVG9BcnJheShfZ2V0TGlzdFR5cGUsIDEpLAogICAgICBfZW5kVGFnID0gX2dldExpc3RUeXBlMlswXTsKICAgIGlmIChsYXN0SW5kZW50IDw9IDApIHsKICAgICAgcmV0dXJuICI8L2xpPjwvIi5jb25jYXQoX2VuZFRhZywgIj4iKTsKICAgIH0KICAgIHJldHVybiAiPC9saT48LyIuY29uY2F0KF9lbmRUYWcsICI+IikuY29uY2F0KGNvbnZlcnRMaXN0SFRNTChbXSwgbGFzdEluZGVudCAtIDEsIHR5cGVzKSk7CiAgfQogIHZhciBfaXRlbXMgPSBfdG9BcnJheShpdGVtcyksCiAgICBfaXRlbXMkID0gX2l0ZW1zWzBdLAogICAgY2hpbGQgPSBfaXRlbXMkLmNoaWxkLAogICAgb2Zmc2V0ID0gX2l0ZW1zJC5vZmZzZXQsCiAgICBsZW5ndGggPSBfaXRlbXMkLmxlbmd0aCwKICAgIGluZGVudCA9IF9pdGVtcyQuaW5kZW50LAogICAgdHlwZSA9IF9pdGVtcyQudHlwZSwKICAgIHJlc3QgPSBfYXJyYXlMaWtlVG9BcnJheShfaXRlbXMpLnNsaWNlKDEpOwogIHZhciBfZ2V0TGlzdFR5cGUzID0gZ2V0TGlzdFR5cGUodHlwZSksCiAgICBfZ2V0TGlzdFR5cGU0ID0gX3NsaWNlZFRvQXJyYXkoX2dldExpc3RUeXBlMywgMiksCiAgICB0YWcgPSBfZ2V0TGlzdFR5cGU0WzBdLAogICAgYXR0cmlidXRlID0gX2dldExpc3RUeXBlNFsxXTsKICBpZiAoaW5kZW50ID4gbGFzdEluZGVudCkgewogICAgdHlwZXMucHVzaCh0eXBlKTsKICAgIGlmIChpbmRlbnQgPT09IGxhc3RJbmRlbnQgKyAxKSB7CiAgICAgIHJldHVybiAiPCIuY29uY2F0KHRhZywgIj48bGkiKS5jb25jYXQoYXR0cmlidXRlLCAiPiIpLmNvbmNhdChjb252ZXJ0SFRNTChjaGlsZCwgb2Zmc2V0LCBsZW5ndGgpKS5jb25jYXQoY29udmVydExpc3RIVE1MKHJlc3QsIGluZGVudCwgdHlwZXMpKTsKICAgIH0KICAgIHJldHVybiAiPCIuY29uY2F0KHRhZywgIj48bGk+IikuY29uY2F0KGNvbnZlcnRMaXN0SFRNTChpdGVtcywgbGFzdEluZGVudCArIDEsIHR5cGVzKSk7CiAgfQogIHZhciBwcmV2aW91c1R5cGUgPSB0eXBlc1t0eXBlcy5sZW5ndGggLSAxXTsKICBpZiAoaW5kZW50ID09PSBsYXN0SW5kZW50ICYmIHR5cGUgPT09IHByZXZpb3VzVHlwZSkgewogICAgcmV0dXJuICI8L2xpPjxsaSIuY29uY2F0KGF0dHJpYnV0ZSwgIj4iKS5jb25jYXQoY29udmVydEhUTUwoY2hpbGQsIG9mZnNldCwgbGVuZ3RoKSkuY29uY2F0KGNvbnZlcnRMaXN0SFRNTChyZXN0LCBpbmRlbnQsIHR5cGVzKSk7CiAgfQogIHZhciBfZ2V0TGlzdFR5cGU1ID0gZ2V0TGlzdFR5cGUodHlwZXMucG9wKCkpLAogICAgX2dldExpc3RUeXBlNiA9IF9zbGljZWRUb0FycmF5KF9nZXRMaXN0VHlwZTUsIDEpLAogICAgZW5kVGFnID0gX2dldExpc3RUeXBlNlswXTsKICByZXR1cm4gIjwvbGk+PC8iLmNvbmNhdChlbmRUYWcsICI+IikuY29uY2F0KGNvbnZlcnRMaXN0SFRNTChpdGVtcywgbGFzdEluZGVudCAtIDEsIHR5cGVzKSk7Cn0KZnVuY3Rpb24gY29udmVydEhUTUwoYmxvdCwgaW5kZXgsIGxlbmd0aCkgewogIHZhciBpc1Jvb3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlOwogIGlmICgnaHRtbCcgaW4gYmxvdCAmJiB0eXBlb2YgYmxvdC5odG1sID09PSAnZnVuY3Rpb24nKSB7CiAgICByZXR1cm4gYmxvdC5odG1sKGluZGV4LCBsZW5ndGgpOwogIH0KICBpZiAoYmxvdCBpbnN0YW5jZW9mIFRleHRCbG90KSB7CiAgICByZXR1cm4gZXNjYXBlVGV4dChibG90LnZhbHVlKCkuc2xpY2UoaW5kZXgsIGluZGV4ICsgbGVuZ3RoKSk7CiAgfQogIGlmIChibG90IGluc3RhbmNlb2YgUGFyZW50QmxvdCkgewogICAgLy8gVE9ETyBmaXggQVBJCiAgICBpZiAoYmxvdC5zdGF0aWNzLmJsb3ROYW1lID09PSAnbGlzdC1jb250YWluZXInKSB7CiAgICAgIHZhciBpdGVtcyA9IFtdOwogICAgICBibG90LmNoaWxkcmVuLmZvckVhY2hBdChpbmRleCwgbGVuZ3RoLCBmdW5jdGlvbiAoY2hpbGQsIG9mZnNldCwgY2hpbGRMZW5ndGgpIHsKICAgICAgICB2YXIgZm9ybWF0cyA9ICdmb3JtYXRzJyBpbiBjaGlsZCAmJiB0eXBlb2YgY2hpbGQuZm9ybWF0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkLmZvcm1hdHMoKSA6IHt9OwogICAgICAgIGl0ZW1zLnB1c2goewogICAgICAgICAgY2hpbGQ6IGNoaWxkLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsCiAgICAgICAgICBsZW5ndGg6IGNoaWxkTGVuZ3RoLAogICAgICAgICAgaW5kZW50OiBmb3JtYXRzLmluZGVudCB8fCAwLAogICAgICAgICAgdHlwZTogZm9ybWF0cy5saXN0CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gY29udmVydExpc3RIVE1MKGl0ZW1zLCAtMSwgW10pOwogICAgfQogICAgdmFyIHBhcnRzID0gW107CiAgICBibG90LmNoaWxkcmVuLmZvckVhY2hBdChpbmRleCwgbGVuZ3RoLCBmdW5jdGlvbiAoY2hpbGQsIG9mZnNldCwgY2hpbGRMZW5ndGgpIHsKICAgICAgcGFydHMucHVzaChjb252ZXJ0SFRNTChjaGlsZCwgb2Zmc2V0LCBjaGlsZExlbmd0aCkpOwogICAgfSk7CiAgICBpZiAoaXNSb290IHx8IGJsb3Quc3RhdGljcy5ibG90TmFtZSA9PT0gJ2xpc3QnKSB7CiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTsKICAgIH0KICAgIHZhciBfYmxvdCRkb21Ob2RlID0gYmxvdC5kb21Ob2RlLAogICAgICBvdXRlckhUTUwgPSBfYmxvdCRkb21Ob2RlLm91dGVySFRNTCwKICAgICAgaW5uZXJIVE1MID0gX2Jsb3QkZG9tTm9kZS5pbm5lckhUTUw7CiAgICB2YXIgX291dGVySFRNTCRzcGxpdCA9IG91dGVySFRNTC5zcGxpdCgiPiIuY29uY2F0KGlubmVySFRNTCwgIjwiKSksCiAgICAgIF9vdXRlckhUTUwkc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX291dGVySFRNTCRzcGxpdCwgMiksCiAgICAgIHN0YXJ0ID0gX291dGVySFRNTCRzcGxpdDJbMF0sCiAgICAgIGVuZCA9IF9vdXRlckhUTUwkc3BsaXQyWzFdOwogICAgLy8gVE9ETyBjbGVhbnVwCiAgICBpZiAoc3RhcnQgPT09ICc8dGFibGUnKSB7CiAgICAgIHJldHVybiAiPHRhYmxlIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgIzAwMDtcIj4iLmNvbmNhdChwYXJ0cy5qb2luKCcnKSwgIjwiKS5jb25jYXQoZW5kKTsKICAgIH0KICAgIHJldHVybiAiIi5jb25jYXQoc3RhcnQsICI+IikuY29uY2F0KHBhcnRzLmpvaW4oJycpLCAiPCIpLmNvbmNhdChlbmQpOwogIH0KICByZXR1cm4gYmxvdC5kb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCA/IGJsb3QuZG9tTm9kZS5vdXRlckhUTUwgOiAnJzsKfQpmdW5jdGlvbiBjb21iaW5lRm9ybWF0cyhmb3JtYXRzLCBjb21iaW5lZCkgewogIHJldHVybiBPYmplY3Qua2V5cyhjb21iaW5lZCkucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIG5hbWUpIHsKICAgIGlmIChmb3JtYXRzW25hbWVdID09IG51bGwpIHJldHVybiBtZXJnZWQ7CiAgICB2YXIgY29tYmluZWRWYWx1ZSA9IGNvbWJpbmVkW25hbWVdOwogICAgaWYgKGNvbWJpbmVkVmFsdWUgPT09IGZvcm1hdHNbbmFtZV0pIHsKICAgICAgbWVyZ2VkW25hbWVdID0gY29tYmluZWRWYWx1ZTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb21iaW5lZFZhbHVlKSkgewogICAgICBpZiAoY29tYmluZWRWYWx1ZS5pbmRleE9mKGZvcm1hdHNbbmFtZV0pIDwgMCkgewogICAgICAgIG1lcmdlZFtuYW1lXSA9IGNvbWJpbmVkVmFsdWUuY29uY2F0KFtmb3JtYXRzW25hbWVdXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWYgc3R5bGUgYWxyZWFkeSBleGlzdHMsIGRvbid0IGFkZCB0byBhbiBhcnJheSwgYnV0IGRvbid0IGxvc2Ugb3RoZXIgc3R5bGVzCiAgICAgICAgbWVyZ2VkW25hbWVdID0gY29tYmluZWRWYWx1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbWVyZ2VkW25hbWVdID0gW2NvbWJpbmVkVmFsdWUsIGZvcm1hdHNbbmFtZV1dOwogICAgfQogICAgcmV0dXJuIG1lcmdlZDsKICB9LCB7fSk7Cn0KZnVuY3Rpb24gZ2V0TGlzdFR5cGUodHlwZSkgewogIHZhciB0YWcgPSB0eXBlID09PSAnb3JkZXJlZCcgPyAnb2wnIDogJ3VsJzsKICBzd2l0Y2ggKHR5cGUpIHsKICAgIGNhc2UgJ2NoZWNrZWQnOgogICAgICByZXR1cm4gW3RhZywgJyBkYXRhLWxpc3Q9ImNoZWNrZWQiJ107CiAgICBjYXNlICd1bmNoZWNrZWQnOgogICAgICByZXR1cm4gW3RhZywgJyBkYXRhLWxpc3Q9InVuY2hlY2tlZCInXTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBbdGFnLCAnJ107CiAgfQp9CmZ1bmN0aW9uIG5vcm1hbGl6ZURlbHRhKGRlbHRhKSB7CiAgcmV0dXJuIGRlbHRhLnJlZHVjZShmdW5jdGlvbiAobm9ybWFsaXplZERlbHRhLCBvcCkgewogICAgaWYgKHR5cGVvZiBvcC5pbnNlcnQgPT09ICdzdHJpbmcnKSB7CiAgICAgIHZhciB0ZXh0ID0gb3AuaW5zZXJ0LnJlcGxhY2UoL1xyXG4vZywgJ1xuJykucmVwbGFjZSgvXHIvZywgJ1xuJyk7CiAgICAgIHJldHVybiBub3JtYWxpemVkRGVsdGEuaW5zZXJ0KHRleHQsIG9wLmF0dHJpYnV0ZXMpOwogICAgfQogICAgcmV0dXJuIG5vcm1hbGl6ZWREZWx0YS5wdXNoKG9wKTsKICB9LCBuZXcgRGVsdGEoKSk7Cn0KZnVuY3Rpb24gc2hpZnRSYW5nZShfcmVmLCBhbW91bnQpIHsKICB2YXIgaW5kZXggPSBfcmVmLmluZGV4LAogICAgbGVuZ3RoID0gX3JlZi5sZW5ndGg7CiAgcmV0dXJuIG5ldyBSYW5nZShpbmRleCArIGFtb3VudCwgbGVuZ3RoKTsKfQpmdW5jdGlvbiBzcGxpdE9wTGluZXMob3BzKSB7CiAgdmFyIHNwbGl0ID0gW107CiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wKSB7CiAgICBpZiAodHlwZW9mIG9wLmluc2VydCA9PT0gJ3N0cmluZycpIHsKICAgICAgdmFyIGxpbmVzID0gb3AuaW5zZXJ0LnNwbGl0KCdcbicpOwogICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpbmRleCkgewogICAgICAgIGlmIChpbmRleCkgc3BsaXQucHVzaCh7CiAgICAgICAgICBpbnNlcnQ6ICdcbicsCiAgICAgICAgICBhdHRyaWJ1dGVzOiBvcC5hdHRyaWJ1dGVzCiAgICAgICAgfSk7CiAgICAgICAgaWYgKGxpbmUpIHNwbGl0LnB1c2goewogICAgICAgICAgaW5zZXJ0OiBsaW5lLAogICAgICAgICAgYXR0cmlidXRlczogb3AuYXR0cmlidXRlcwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHNwbGl0LnB1c2gob3ApOwogICAgfQogIH0pOwogIHJldHVybiBzcGxpdDsKfQpleHBvcnQgZGVmYXVsdCBFZGl0b3I7"},null]}