forked from liweijie/education
1 line
30 KiB
JSON
1 line
30 KiB
JSON
{"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\\modules\\clipboard.js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\modules\\clipboard.js","mtime":1787309794217},{"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:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiOwppbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiOwppbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyI7CmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIjsKaW1wb3J0IF9jYWxsU3VwZXIgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NhbGxTdXBlci5qcyI7CmltcG9ydCBfaW5oZXJpdHMgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIjsKaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmVudHJpZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLnJlZHVjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKaW1wb3J0IHsgQXR0cmlidXRvciwgQmxvY2tCbG90LCBDbGFzc0F0dHJpYnV0b3IsIEVtYmVkQmxvdCwgU2NvcGUsIFN0eWxlQXR0cmlidXRvciB9IGZyb20gJ3BhcmNobWVudCc7CmltcG9ydCBEZWx0YSBmcm9tICdxdWlsbC1kZWx0YSc7CmltcG9ydCB7IEJsb2NrRW1iZWQgfSBmcm9tICcuLi9ibG90cy9ibG9jay5qcyc7CmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29yZS9sb2dnZXIuanMnOwppbXBvcnQgTW9kdWxlIGZyb20gJy4uL2NvcmUvbW9kdWxlLmpzJzsKaW1wb3J0IFF1aWxsIGZyb20gJy4uL2NvcmUvcXVpbGwuanMnOwppbXBvcnQgeyBBbGlnbkF0dHJpYnV0ZSwgQWxpZ25TdHlsZSB9IGZyb20gJy4uL2Zvcm1hdHMvYWxpZ24uanMnOwppbXBvcnQgeyBCYWNrZ3JvdW5kU3R5bGUgfSBmcm9tICcuLi9mb3JtYXRzL2JhY2tncm91bmQuanMnOwppbXBvcnQgQ29kZUJsb2NrIGZyb20gJy4uL2Zvcm1hdHMvY29kZS5qcyc7CmltcG9ydCB7IENvbG9yU3R5bGUgfSBmcm9tICcuLi9mb3JtYXRzL2NvbG9yLmpzJzsKaW1wb3J0IHsgRGlyZWN0aW9uQXR0cmlidXRlLCBEaXJlY3Rpb25TdHlsZSB9IGZyb20gJy4uL2Zvcm1hdHMvZGlyZWN0aW9uLmpzJzsKaW1wb3J0IHsgRm9udFN0eWxlIH0gZnJvbSAnLi4vZm9ybWF0cy9mb250LmpzJzsKaW1wb3J0IHsgU2l6ZVN0eWxlIH0gZnJvbSAnLi4vZm9ybWF0cy9zaXplLmpzJzsKaW1wb3J0IHsgZGVsZXRlUmFuZ2UgfSBmcm9tICcuL2tleWJvYXJkLmpzJzsKaW1wb3J0IG5vcm1hbGl6ZUV4dGVybmFsSFRNTCBmcm9tICcuL25vcm1hbGl6ZUV4dGVybmFsSFRNTC9pbmRleC5qcyc7CnZhciBkZWJ1ZyA9IGxvZ2dlcigncXVpbGw6Y2xpcGJvYXJkJyk7CnZhciBDTElQQk9BUkRfQ09ORklHID0gW1tOb2RlLlRFWFRfTk9ERSwgbWF0Y2hUZXh0XSwgW05vZGUuVEVYVF9OT0RFLCBtYXRjaE5ld2xpbmVdLCBbJ2JyJywgbWF0Y2hCcmVha10sIFtOb2RlLkVMRU1FTlRfTk9ERSwgbWF0Y2hOZXdsaW5lXSwgW05vZGUuRUxFTUVOVF9OT0RFLCBtYXRjaEJsb3RdLCBbTm9kZS5FTEVNRU5UX05PREUsIG1hdGNoQXR0cmlidXRvcl0sIFtOb2RlLkVMRU1FTlRfTk9ERSwgbWF0Y2hTdHlsZXNdLCBbJ2xpJywgbWF0Y2hJbmRlbnRdLCBbJ29sLCB1bCcsIG1hdGNoTGlzdF0sIFsncHJlJywgbWF0Y2hDb2RlQmxvY2tdLCBbJ3RyJywgbWF0Y2hUYWJsZV0sIFsnYicsIGNyZWF0ZU1hdGNoQWxpYXMoJ2JvbGQnKV0sIFsnaScsIGNyZWF0ZU1hdGNoQWxpYXMoJ2l0YWxpYycpXSwgWydzdHJpa2UnLCBjcmVhdGVNYXRjaEFsaWFzKCdzdHJpa2UnKV0sIFsnc3R5bGUnLCBtYXRjaElnbm9yZV1dOwp2YXIgQVRUUklCVVRFX0FUVFJJQlVUT1JTID0gW0FsaWduQXR0cmlidXRlLCBEaXJlY3Rpb25BdHRyaWJ1dGVdLnJlZHVjZShmdW5jdGlvbiAobWVtbywgYXR0cikgewogIG1lbW9bYXR0ci5rZXlOYW1lXSA9IGF0dHI7CiAgcmV0dXJuIG1lbW87Cn0sIHt9KTsKdmFyIFNUWUxFX0FUVFJJQlVUT1JTID0gW0FsaWduU3R5bGUsIEJhY2tncm91bmRTdHlsZSwgQ29sb3JTdHlsZSwgRGlyZWN0aW9uU3R5bGUsIEZvbnRTdHlsZSwgU2l6ZVN0eWxlXS5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGF0dHIpIHsKICBtZW1vW2F0dHIua2V5TmFtZV0gPSBhdHRyOwogIHJldHVybiBtZW1vOwp9LCB7fSk7CnZhciBDbGlwYm9hcmQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Nb2R1bGUpIHsKICBmdW5jdGlvbiBDbGlwYm9hcmQocXVpbGwsIG9wdGlvbnMpIHsKICAgIHZhciBfdGhpcyRvcHRpb25zJG1hdGNoZXI7CiAgICB2YXIgX3RoaXM7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xpcGJvYXJkKTsKICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDbGlwYm9hcmQsIFtxdWlsbCwgb3B0aW9uc10pOwogICAgX3RoaXMucXVpbGwucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjb3B5JywgZnVuY3Rpb24gKGUpIHsKICAgICAgcmV0dXJuIF90aGlzLm9uQ2FwdHVyZUNvcHkoZSwgZmFsc2UpOwogICAgfSk7CiAgICBfdGhpcy5xdWlsbC5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ2N1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHJldHVybiBfdGhpcy5vbkNhcHR1cmVDb3B5KGUsIHRydWUpOwogICAgfSk7CiAgICBfdGhpcy5xdWlsbC5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgX3RoaXMub25DYXB0dXJlUGFzdGUuYmluZChfdGhpcykpOwogICAgX3RoaXMubWF0Y2hlcnMgPSBbXTsKICAgIENMSVBCT0FSRF9DT05GSUcuY29uY2F0KChfdGhpcyRvcHRpb25zJG1hdGNoZXIgPSBfdGhpcy5vcHRpb25zLm1hdGNoZXJzKSAhPT0gbnVsbCAmJiBfdGhpcyRvcHRpb25zJG1hdGNoZXIgIT09IHZvaWQgMCA/IF90aGlzJG9wdGlvbnMkbWF0Y2hlciA6IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7CiAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLAogICAgICAgIHNlbGVjdG9yID0gX3JlZjZbMF0sCiAgICAgICAgbWF0Y2hlciA9IF9yZWY2WzFdOwogICAgICBfdGhpcy5hZGRNYXRjaGVyKHNlbGVjdG9yLCBtYXRjaGVyKTsKICAgIH0pOwogICAgcmV0dXJuIF90aGlzOwogIH0KICBfaW5oZXJpdHMoQ2xpcGJvYXJkLCBfTW9kdWxlKTsKICByZXR1cm4gX2NyZWF0ZUNsYXNzKENsaXBib2FyZCwgW3sKICAgIGtleTogImFkZE1hdGNoZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZE1hdGNoZXIoc2VsZWN0b3IsIG1hdGNoZXIpIHsKICAgICAgdGhpcy5tYXRjaGVycy5wdXNoKFtzZWxlY3RvciwgbWF0Y2hlcl0pOwogICAgfQogIH0sIHsKICAgIGtleTogImNvbnZlcnQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnQoX3JlZjIpIHsKICAgICAgdmFyIGh0bWwgPSBfcmVmMi5odG1sLAogICAgICAgIHRleHQgPSBfcmVmMi50ZXh0OwogICAgICB2YXIgZm9ybWF0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgIGlmIChmb3JtYXRzW0NvZGVCbG9jay5ibG90TmFtZV0pIHsKICAgICAgICByZXR1cm4gbmV3IERlbHRhKCkuaW5zZXJ0KHRleHQgfHwgJycsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgQ29kZUJsb2NrLmJsb3ROYW1lLCBmb3JtYXRzW0NvZGVCbG9jay5ibG90TmFtZV0pKTsKICAgICAgfQogICAgICBpZiAoIWh0bWwpIHsKICAgICAgICByZXR1cm4gbmV3IERlbHRhKCkuaW5zZXJ0KHRleHQgfHwgJycsIGZvcm1hdHMpOwogICAgICB9CiAgICAgIHZhciBkZWx0YSA9IHRoaXMuY29udmVydEhUTUwoaHRtbCk7CiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBuZXdsaW5lCiAgICAgIGlmIChkZWx0YUVuZHNXaXRoKGRlbHRhLCAnXG4nKSAmJiAoZGVsdGEub3BzW2RlbHRhLm9wcy5sZW5ndGggLSAxXS5hdHRyaWJ1dGVzID09IG51bGwgfHwgZm9ybWF0cy50YWJsZSkpIHsKICAgICAgICByZXR1cm4gZGVsdGEuY29tcG9zZShuZXcgRGVsdGEoKS5yZXRhaW4oZGVsdGEubGVuZ3RoKCkgLSAxKS5kZWxldGUoMSkpOwogICAgICB9CiAgICAgIHJldHVybiBkZWx0YTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJub3JtYWxpemVIVE1MIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBub3JtYWxpemVIVE1MKGRvYykgewogICAgICBub3JtYWxpemVFeHRlcm5hbEhUTUwoZG9jKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjb252ZXJ0SFRNTCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY29udmVydEhUTUwoaHRtbCkgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7CiAgICAgIHRoaXMubm9ybWFsaXplSFRNTChkb2MpOwogICAgICB2YXIgY29udGFpbmVyID0gZG9jLmJvZHk7CiAgICAgIHZhciBub2RlTWF0Y2hlcyA9IG5ldyBXZWFrTWFwKCk7CiAgICAgIHZhciBfdGhpcyRwcmVwYXJlTWF0Y2hpbmcgPSB0aGlzLnByZXBhcmVNYXRjaGluZyhjb250YWluZXIsIG5vZGVNYXRjaGVzKSwKICAgICAgICBfdGhpcyRwcmVwYXJlTWF0Y2hpbmcyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkcHJlcGFyZU1hdGNoaW5nLCAyKSwKICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBfdGhpcyRwcmVwYXJlTWF0Y2hpbmcyWzBdLAogICAgICAgIHRleHRNYXRjaGVycyA9IF90aGlzJHByZXBhcmVNYXRjaGluZzJbMV07CiAgICAgIHJldHVybiB0cmF2ZXJzZSh0aGlzLnF1aWxsLnNjcm9sbCwgY29udGFpbmVyLCBlbGVtZW50TWF0Y2hlcnMsIHRleHRNYXRjaGVycywgbm9kZU1hdGNoZXMpOwogICAgfQogIH0sIHsKICAgIGtleTogImRhbmdlcm91c2x5UGFzdGVIVE1MIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBkYW5nZXJvdXNseVBhc3RlSFRNTChpbmRleCwgaHRtbCkgewogICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBRdWlsbC5zb3VyY2VzLkFQSTsKICAgICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3N0cmluZycpIHsKICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmNvbnZlcnQoewogICAgICAgICAgaHRtbDogaW5kZXgsCiAgICAgICAgICB0ZXh0OiAnJwogICAgICAgIH0pOwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgICAgICB0aGlzLnF1aWxsLnNldENvbnRlbnRzKGRlbHRhLCBodG1sKTsKICAgICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbigwLCBRdWlsbC5zb3VyY2VzLlNJTEVOVCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHBhc3RlID0gdGhpcy5jb252ZXJ0KHsKICAgICAgICAgIGh0bWw6IGh0bWwsCiAgICAgICAgICB0ZXh0OiAnJwogICAgICAgIH0pOwogICAgICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMobmV3IERlbHRhKCkucmV0YWluKGluZGV4KS5jb25jYXQocGFzdGUpLCBzb3VyY2UpOwogICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKGluZGV4ICsgcGFzdGUubGVuZ3RoKCksIFF1aWxsLnNvdXJjZXMuU0lMRU5UKTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIm9uQ2FwdHVyZUNvcHkiLAogICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2FwdHVyZUNvcHkoZSkgewogICAgICB2YXIgX2UkY2xpcGJvYXJkRGF0YSwgX2UkY2xpcGJvYXJkRGF0YTI7CiAgICAgIHZhciBpc0N1dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7CiAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgX3RoaXMkcXVpbGwkc2VsZWN0aW9uID0gdGhpcy5xdWlsbC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSwKICAgICAgICBfdGhpcyRxdWlsbCRzZWxlY3Rpb24yID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkcXVpbGwkc2VsZWN0aW9uLCAxKSwKICAgICAgICByYW5nZSA9IF90aGlzJHF1aWxsJHNlbGVjdGlvbjJbMF07CiAgICAgIGlmIChyYW5nZSA9PSBudWxsKSByZXR1cm47CiAgICAgIHZhciBfdGhpcyRvbkNvcHkgPSB0aGlzLm9uQ29weShyYW5nZSwgaXNDdXQpLAogICAgICAgIGh0bWwgPSBfdGhpcyRvbkNvcHkuaHRtbCwKICAgICAgICB0ZXh0ID0gX3RoaXMkb25Db3B5LnRleHQ7CiAgICAgIChfZSRjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfZSRjbGlwYm9hcmREYXRhID09PSB2b2lkIDAgfHwgX2UkY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L3BsYWluJywgdGV4dCk7CiAgICAgIChfZSRjbGlwYm9hcmREYXRhMiA9IGUuY2xpcGJvYXJkRGF0YSkgPT09IG51bGwgfHwgX2UkY2xpcGJvYXJkRGF0YTIgPT09IHZvaWQgMCB8fCBfZSRjbGlwYm9hcmREYXRhMi5zZXREYXRhKCd0ZXh0L2h0bWwnLCBodG1sKTsKICAgICAgaWYgKGlzQ3V0KSB7CiAgICAgICAgZGVsZXRlUmFuZ2UoewogICAgICAgICAgcmFuZ2U6IHJhbmdlLAogICAgICAgICAgcXVpbGw6IHRoaXMucXVpbGwKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIC8qCiAgICAgKiBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy90ZXh0L3VyaS1saXN0CiAgICAgKi8KICB9LCB7CiAgICBrZXk6ICJub3JtYWxpemVVUklMaXN0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBub3JtYWxpemVVUklMaXN0KHVybExpc3QpIHsKICAgICAgcmV0dXJuIHVybExpc3Quc3BsaXQoL1xyP1xuLykKICAgICAgLy8gSWdub3JlIGFsbCBjb21tZW50cwogICAgICAuZmlsdGVyKGZ1bmN0aW9uICh1cmwpIHsKICAgICAgICByZXR1cm4gdXJsWzBdICE9PSAnIyc7CiAgICAgIH0pLmpvaW4oJ1xuJyk7CiAgICB9CiAgfSwgewogICAga2V5OiAib25DYXB0dXJlUGFzdGUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2FwdHVyZVBhc3RlKGUpIHsKICAgICAgdmFyIF9lJGNsaXBib2FyZERhdGEzLCBfZSRjbGlwYm9hcmREYXRhNCwgX2UkY2xpcGJvYXJkRGF0YTY7CiAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXRoaXMucXVpbGwuaXNFbmFibGVkKCkpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTsKICAgICAgaWYgKHJhbmdlID09IG51bGwpIHJldHVybjsKICAgICAgdmFyIGh0bWwgPSAoX2UkY2xpcGJvYXJkRGF0YTMgPSBlLmNsaXBib2FyZERhdGEpID09PSBudWxsIHx8IF9lJGNsaXBib2FyZERhdGEzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZSRjbGlwYm9hcmREYXRhMy5nZXREYXRhKCd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIHRleHQgPSAoX2UkY2xpcGJvYXJkRGF0YTQgPSBlLmNsaXBib2FyZERhdGEpID09PSBudWxsIHx8IF9lJGNsaXBib2FyZERhdGE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZSRjbGlwYm9hcmREYXRhNC5nZXREYXRhKCd0ZXh0L3BsYWluJyk7CiAgICAgIGlmICghaHRtbCAmJiAhdGV4dCkgewogICAgICAgIHZhciBfZSRjbGlwYm9hcmREYXRhNTsKICAgICAgICB2YXIgdXJsTGlzdCA9IChfZSRjbGlwYm9hcmREYXRhNSA9IGUuY2xpcGJvYXJkRGF0YSkgPT09IG51bGwgfHwgX2UkY2xpcGJvYXJkRGF0YTUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lJGNsaXBib2FyZERhdGE1LmdldERhdGEoJ3RleHQvdXJpLWxpc3QnKTsKICAgICAgICBpZiAodXJsTGlzdCkgewogICAgICAgICAgdGV4dCA9IHRoaXMubm9ybWFsaXplVVJJTGlzdCh1cmxMaXN0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGZpbGVzID0gQXJyYXkuZnJvbSgoKF9lJGNsaXBib2FyZERhdGE2ID0gZS5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfZSRjbGlwYm9hcmREYXRhNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UkY2xpcGJvYXJkRGF0YTYuZmlsZXMpIHx8IFtdKTsKICAgICAgaWYgKCFodG1sICYmIGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnF1aWxsLnVwbG9hZGVyLnVwbG9hZChyYW5nZSwgZmlsZXMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoaHRtbCAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIF9kb2MkYm9keSRmaXJzdEVsZW1lbjsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7CiAgICAgICAgaWYgKGRvYy5ib2R5LmNoaWxkRWxlbWVudENvdW50ID09PSAxICYmICgoX2RvYyRib2R5JGZpcnN0RWxlbWVuID0gZG9jLmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9kb2MkYm9keSRmaXJzdEVsZW1lbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RvYyRib2R5JGZpcnN0RWxlbWVuLnRhZ05hbWUpID09PSAnSU1HJykgewogICAgICAgICAgdGhpcy5xdWlsbC51cGxvYWRlci51cGxvYWQocmFuZ2UsIGZpbGVzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5vblBhc3RlKHJhbmdlLCB7CiAgICAgICAgaHRtbDogaHRtbCwKICAgICAgICB0ZXh0OiB0ZXh0CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogIm9uQ29weSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db3B5KHJhbmdlKSB7CiAgICAgIHZhciB0ZXh0ID0gdGhpcy5xdWlsbC5nZXRUZXh0KHJhbmdlKTsKICAgICAgdmFyIGh0bWwgPSB0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTChyYW5nZSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgaHRtbDogaHRtbCwKICAgICAgICB0ZXh0OiB0ZXh0CiAgICAgIH07CiAgICB9CiAgfSwgewogICAga2V5OiAib25QYXN0ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gb25QYXN0ZShyYW5nZSwgX3JlZjMpIHsKICAgICAgdmFyIHRleHQgPSBfcmVmMy50ZXh0LAogICAgICAgIGh0bWwgPSBfcmVmMy5odG1sOwogICAgICB2YXIgZm9ybWF0cyA9IHRoaXMucXVpbGwuZ2V0Rm9ybWF0KHJhbmdlLmluZGV4KTsKICAgICAgdmFyIHBhc3RlZERlbHRhID0gdGhpcy5jb252ZXJ0KHsKICAgICAgICB0ZXh0OiB0ZXh0LAogICAgICAgIGh0bWw6IGh0bWwKICAgICAgfSwgZm9ybWF0cyk7CiAgICAgIGRlYnVnLmxvZygnb25QYXN0ZScsIHBhc3RlZERlbHRhLCB7CiAgICAgICAgdGV4dDogdGV4dCwKICAgICAgICBodG1sOiBodG1sCiAgICAgIH0pOwogICAgICB2YXIgZGVsdGEgPSBuZXcgRGVsdGEoKS5yZXRhaW4ocmFuZ2UuaW5kZXgpLmRlbGV0ZShyYW5nZS5sZW5ndGgpLmNvbmNhdChwYXN0ZWREZWx0YSk7CiAgICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMoZGVsdGEsIFF1aWxsLnNvdXJjZXMuVVNFUik7CiAgICAgIC8vIHJhbmdlLmxlbmd0aCBjb250cmlidXRlcyB0byBkZWx0YS5sZW5ndGgoKQogICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbihkZWx0YS5sZW5ndGgoKSAtIHJhbmdlLmxlbmd0aCwgUXVpbGwuc291cmNlcy5TSUxFTlQpOwogICAgICB0aGlzLnF1aWxsLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KCk7CiAgICB9CiAgfSwgewogICAga2V5OiAicHJlcGFyZU1hdGNoaW5nIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVwYXJlTWF0Y2hpbmcoY29udGFpbmVyLCBub2RlTWF0Y2hlcykgewogICAgICB2YXIgZWxlbWVudE1hdGNoZXJzID0gW107CiAgICAgIHZhciB0ZXh0TWF0Y2hlcnMgPSBbXTsKICAgICAgdGhpcy5tYXRjaGVycy5mb3JFYWNoKGZ1bmN0aW9uIChwYWlyKSB7CiAgICAgICAgdmFyIF9wYWlyID0gX3NsaWNlZFRvQXJyYXkocGFpciwgMiksCiAgICAgICAgICBzZWxlY3RvciA9IF9wYWlyWzBdLAogICAgICAgICAgbWF0Y2hlciA9IF9wYWlyWzFdOwogICAgICAgIHN3aXRjaCAoc2VsZWN0b3IpIHsKICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6CiAgICAgICAgICAgIHRleHRNYXRjaGVycy5wdXNoKG1hdGNoZXIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6CiAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVycy5wdXNoKG1hdGNoZXIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzLmhhcyhub2RlKSkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBub2RlTWF0Y2hlcy5nZXQobm9kZSk7CiAgICAgICAgICAgICAgICBtYXRjaGVzID09PSBudWxsIHx8IG1hdGNoZXMgPT09IHZvaWQgMCB8fCBtYXRjaGVzLnB1c2gobWF0Y2hlcik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGVNYXRjaGVzLnNldChub2RlLCBbbWF0Y2hlcl0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBbZWxlbWVudE1hdGNoZXJzLCB0ZXh0TWF0Y2hlcnNdOwogICAgfQogIH1dKTsKfShNb2R1bGUpOwpfZGVmaW5lUHJvcGVydHkoQ2xpcGJvYXJkLCAiREVGQVVMVFMiLCB7CiAgbWF0Y2hlcnM6IFtdCn0pOwpmdW5jdGlvbiBhcHBseUZvcm1hdChkZWx0YSwgZm9ybWF0LCB2YWx1ZSwgc2Nyb2xsKSB7CiAgaWYgKCFzY3JvbGwucXVlcnkoZm9ybWF0KSkgewogICAgcmV0dXJuIGRlbHRhOwogIH0KICByZXR1cm4gZGVsdGEucmVkdWNlKGZ1bmN0aW9uIChuZXdEZWx0YSwgb3ApIHsKICAgIGlmICghb3AuaW5zZXJ0KSByZXR1cm4gbmV3RGVsdGE7CiAgICBpZiAob3AuYXR0cmlidXRlcyAmJiBvcC5hdHRyaWJ1dGVzW2Zvcm1hdF0pIHsKICAgICAgcmV0dXJuIG5ld0RlbHRhLnB1c2gob3ApOwogICAgfQogICAgdmFyIGZvcm1hdHMgPSB2YWx1ZSA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwgZm9ybWF0LCB2YWx1ZSkgOiB7fTsKICAgIHJldHVybiBuZXdEZWx0YS5pbnNlcnQob3AuaW5zZXJ0LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZvcm1hdHMpLCBvcC5hdHRyaWJ1dGVzKSk7CiAgfSwgbmV3IERlbHRhKCkpOwp9CmZ1bmN0aW9uIGRlbHRhRW5kc1dpdGgoZGVsdGEsIHRleHQpIHsKICB2YXIgZW5kVGV4dCA9ICcnOwogIGZvciAodmFyIGkgPSBkZWx0YS5vcHMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGVuZFRleHQubGVuZ3RoIDwgdGV4dC5sZW5ndGg7IC0taSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBsdXNwbHVzCiAgKSB7CiAgICB2YXIgb3AgPSBkZWx0YS5vcHNbaV07CiAgICBpZiAodHlwZW9mIG9wLmluc2VydCAhPT0gJ3N0cmluZycpIGJyZWFrOwogICAgZW5kVGV4dCA9IG9wLmluc2VydCArIGVuZFRleHQ7CiAgfQogIHJldHVybiBlbmRUZXh0LnNsaWNlKC0xICogdGV4dC5sZW5ndGgpID09PSB0ZXh0Owp9CmZ1bmN0aW9uIGlzTGluZShub2RlLCBzY3JvbGwpIHsKICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBmYWxzZTsKICB2YXIgbWF0Y2ggPSBzY3JvbGwucXVlcnkobm9kZSk7CiAgLy8gQHRzLWV4cGVjdC1lcnJvcgogIGlmIChtYXRjaCAmJiBtYXRjaC5wcm90b3R5cGUgaW5zdGFuY2VvZiBFbWJlZEJsb3QpIHJldHVybiBmYWxzZTsKICByZXR1cm4gWydhZGRyZXNzJywgJ2FydGljbGUnLCAnYmxvY2txdW90ZScsICdjYW52YXMnLCAnZGQnLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWRlcicsICdpZnJhbWUnLCAnbGknLCAnbWFpbicsICduYXYnLCAnb2wnLCAnb3V0cHV0JywgJ3AnLCAncHJlJywgJ3NlY3Rpb24nLCAndGFibGUnLCAndGQnLCAndHInLCAndWwnLCAndmlkZW8nXS5pbmNsdWRlcyhub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7Cn0KZnVuY3Rpb24gaXNCZXR3ZWVuSW5saW5lRWxlbWVudHMobm9kZSwgc2Nyb2xsKSB7CiAgcmV0dXJuIG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBub2RlLm5leHRFbGVtZW50U2libGluZyAmJiAhaXNMaW5lKG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZywgc2Nyb2xsKSAmJiAhaXNMaW5lKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nLCBzY3JvbGwpOwp9CnZhciBwcmVOb2RlcyA9IG5ldyBXZWFrTWFwKCk7CmZ1bmN0aW9uIGlzUHJlKG5vZGUpIHsKICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKCFwcmVOb2Rlcy5oYXMobm9kZSkpIHsKICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgIGlmIChub2RlLnRhZ05hbWUgPT09ICdQUkUnKSB7CiAgICAgIHByZU5vZGVzLnNldChub2RlLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHByZU5vZGVzLnNldChub2RlLCBpc1ByZShub2RlLnBhcmVudE5vZGUpKTsKICAgIH0KICB9CiAgcmV0dXJuIHByZU5vZGVzLmdldChub2RlKTsKfQpmdW5jdGlvbiB0cmF2ZXJzZShzY3JvbGwsIG5vZGUsIGVsZW1lbnRNYXRjaGVycywgdGV4dE1hdGNoZXJzLCBub2RlTWF0Y2hlcykgewogIC8vIFBvc3Qtb3JkZXIKICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gbm9kZS5URVhUX05PREUpIHsKICAgIHJldHVybiB0ZXh0TWF0Y2hlcnMucmVkdWNlKGZ1bmN0aW9uIChkZWx0YSwgbWF0Y2hlcikgewogICAgICByZXR1cm4gbWF0Y2hlcihub2RlLCBkZWx0YSwgc2Nyb2xsKTsKICAgIH0sIG5ldyBEZWx0YSgpKTsKICB9CiAgaWYgKG5vZGUubm9kZVR5cGUgPT09IG5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICByZXR1cm4gQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoZGVsdGEsIGNoaWxkTm9kZSkgewogICAgICB2YXIgY2hpbGRyZW5EZWx0YSA9IHRyYXZlcnNlKHNjcm9sbCwgY2hpbGROb2RlLCBlbGVtZW50TWF0Y2hlcnMsIHRleHRNYXRjaGVycywgbm9kZU1hdGNoZXMpOwogICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBub2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIGNoaWxkcmVuRGVsdGEgPSBlbGVtZW50TWF0Y2hlcnMucmVkdWNlKGZ1bmN0aW9uIChyZWR1Y2VkRGVsdGEsIG1hdGNoZXIpIHsKICAgICAgICAgIHJldHVybiBtYXRjaGVyKGNoaWxkTm9kZSwgcmVkdWNlZERlbHRhLCBzY3JvbGwpOwogICAgICAgIH0sIGNoaWxkcmVuRGVsdGEpOwogICAgICAgIGNoaWxkcmVuRGVsdGEgPSAobm9kZU1hdGNoZXMuZ2V0KGNoaWxkTm9kZSkgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAocmVkdWNlZERlbHRhLCBtYXRjaGVyKSB7CiAgICAgICAgICByZXR1cm4gbWF0Y2hlcihjaGlsZE5vZGUsIHJlZHVjZWREZWx0YSwgc2Nyb2xsKTsKICAgICAgICB9LCBjaGlsZHJlbkRlbHRhKTsKICAgICAgfQogICAgICByZXR1cm4gZGVsdGEuY29uY2F0KGNoaWxkcmVuRGVsdGEpOwogICAgfSwgbmV3IERlbHRhKCkpOwogIH0KICByZXR1cm4gbmV3IERlbHRhKCk7Cn0KZnVuY3Rpb24gY3JlYXRlTWF0Y2hBbGlhcyhmb3JtYXQpIHsKICByZXR1cm4gZnVuY3Rpb24gKF9ub2RlLCBkZWx0YSwgc2Nyb2xsKSB7CiAgICByZXR1cm4gYXBwbHlGb3JtYXQoZGVsdGEsIGZvcm1hdCwgdHJ1ZSwgc2Nyb2xsKTsKICB9Owp9CmZ1bmN0aW9uIG1hdGNoQXR0cmlidXRvcihub2RlLCBkZWx0YSwgc2Nyb2xsKSB7CiAgdmFyIGF0dHJpYnV0ZXMgPSBBdHRyaWJ1dG9yLmtleXMobm9kZSk7CiAgdmFyIGNsYXNzZXMgPSBDbGFzc0F0dHJpYnV0b3Iua2V5cyhub2RlKTsKICB2YXIgc3R5bGVzID0gU3R5bGVBdHRyaWJ1dG9yLmtleXMobm9kZSk7CiAgdmFyIGZvcm1hdHMgPSB7fTsKICBhdHRyaWJ1dGVzLmNvbmNhdChjbGFzc2VzKS5jb25jYXQoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICB2YXIgYXR0ciA9IHNjcm9sbC5xdWVyeShuYW1lLCBTY29wZS5BVFRSSUJVVEUpOwogICAgaWYgKGF0dHIgIT0gbnVsbCkgewogICAgICBmb3JtYXRzW2F0dHIuYXR0ck5hbWVdID0gYXR0ci52YWx1ZShub2RlKTsKICAgICAgaWYgKGZvcm1hdHNbYXR0ci5hdHRyTmFtZV0pIHJldHVybjsKICAgIH0KICAgIGF0dHIgPSBBVFRSSUJVVEVfQVRUUklCVVRPUlNbbmFtZV07CiAgICBpZiAoYXR0ciAhPSBudWxsICYmIChhdHRyLmF0dHJOYW1lID09PSBuYW1lIHx8IGF0dHIua2V5TmFtZSA9PT0gbmFtZSkpIHsKICAgICAgZm9ybWF0c1thdHRyLmF0dHJOYW1lXSA9IGF0dHIudmFsdWUobm9kZSkgfHwgdW5kZWZpbmVkOwogICAgfQogICAgYXR0ciA9IFNUWUxFX0FUVFJJQlVUT1JTW25hbWVdOwogICAgaWYgKGF0dHIgIT0gbnVsbCAmJiAoYXR0ci5hdHRyTmFtZSA9PT0gbmFtZSB8fCBhdHRyLmtleU5hbWUgPT09IG5hbWUpKSB7CiAgICAgIGF0dHIgPSBTVFlMRV9BVFRSSUJVVE9SU1tuYW1lXTsKICAgICAgZm9ybWF0c1thdHRyLmF0dHJOYW1lXSA9IGF0dHIudmFsdWUobm9kZSkgfHwgdW5kZWZpbmVkOwogICAgfQogIH0pOwogIHJldHVybiBPYmplY3QuZW50cmllcyhmb3JtYXRzKS5yZWR1Y2UoZnVuY3Rpb24gKG5ld0RlbHRhLCBfcmVmNCkgewogICAgdmFyIF9yZWY4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjQsIDIpLAogICAgICBuYW1lID0gX3JlZjhbMF0sCiAgICAgIHZhbHVlID0gX3JlZjhbMV07CiAgICByZXR1cm4gYXBwbHlGb3JtYXQobmV3RGVsdGEsIG5hbWUsIHZhbHVlLCBzY3JvbGwpOwogIH0sIGRlbHRhKTsKfQpmdW5jdGlvbiBtYXRjaEJsb3Qobm9kZSwgZGVsdGEsIHNjcm9sbCkgewogIHZhciBtYXRjaCA9IHNjcm9sbC5xdWVyeShub2RlKTsKICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIGRlbHRhOwogIC8vIEB0cy1leHBlY3QtZXJyb3IKICBpZiAobWF0Y2gucHJvdG90eXBlIGluc3RhbmNlb2YgRW1iZWRCbG90KSB7CiAgICB2YXIgZW1iZWQgPSB7fTsKICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgIHZhciB2YWx1ZSA9IG1hdGNoLnZhbHVlKG5vZGUpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgogICAgICBlbWJlZFttYXRjaC5ibG90TmFtZV0gPSB2YWx1ZTsKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgogICAgICByZXR1cm4gbmV3IERlbHRhKCkuaW5zZXJ0KGVtYmVkLCBtYXRjaC5mb3JtYXRzKG5vZGUsIHNjcm9sbCkpOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBAdHMtZXhwZWN0LWVycm9yCiAgICBpZiAobWF0Y2gucHJvdG90eXBlIGluc3RhbmNlb2YgQmxvY2tCbG90ICYmICFkZWx0YUVuZHNXaXRoKGRlbHRhLCAnXG4nKSkgewogICAgICBkZWx0YS5pbnNlcnQoJ1xuJyk7CiAgICB9CiAgICBpZiAoJ2Jsb3ROYW1lJyBpbiBtYXRjaCAmJiAnZm9ybWF0cycgaW4gbWF0Y2ggJiYgdHlwZW9mIG1hdGNoLmZvcm1hdHMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGFwcGx5Rm9ybWF0KGRlbHRhLCBtYXRjaC5ibG90TmFtZSwgbWF0Y2guZm9ybWF0cyhub2RlLCBzY3JvbGwpLCBzY3JvbGwpOwogICAgfQogIH0KICByZXR1cm4gZGVsdGE7Cn0KZnVuY3Rpb24gbWF0Y2hCcmVhayhub2RlLCBkZWx0YSkgewogIGlmICghZGVsdGFFbmRzV2l0aChkZWx0YSwgJ1xuJykpIHsKICAgIGRlbHRhLmluc2VydCgnXG4nKTsKICB9CiAgcmV0dXJuIGRlbHRhOwp9CmZ1bmN0aW9uIG1hdGNoQ29kZUJsb2NrKG5vZGUsIGRlbHRhLCBzY3JvbGwpIHsKICB2YXIgbWF0Y2ggPSBzY3JvbGwucXVlcnkoJ2NvZGUtYmxvY2snKTsKICB2YXIgbGFuZ3VhZ2UgPSBtYXRjaCAmJiAnZm9ybWF0cycgaW4gbWF0Y2ggJiYgdHlwZW9mIG1hdGNoLmZvcm1hdHMgPT09ICdmdW5jdGlvbicgPyBtYXRjaC5mb3JtYXRzKG5vZGUsIHNjcm9sbCkgOiB0cnVlOwogIHJldHVybiBhcHBseUZvcm1hdChkZWx0YSwgJ2NvZGUtYmxvY2snLCBsYW5ndWFnZSwgc2Nyb2xsKTsKfQpmdW5jdGlvbiBtYXRjaElnbm9yZSgpIHsKICByZXR1cm4gbmV3IERlbHRhKCk7Cn0KZnVuY3Rpb24gbWF0Y2hJbmRlbnQobm9kZSwgZGVsdGEsIHNjcm9sbCkgewogIHZhciBtYXRjaCA9IHNjcm9sbC5xdWVyeShub2RlKTsKICBpZiAobWF0Y2ggPT0gbnVsbCB8fAogIC8vIEB0cy1leHBlY3QtZXJyb3IKICBtYXRjaC5ibG90TmFtZSAhPT0gJ2xpc3QnIHx8ICFkZWx0YUVuZHNXaXRoKGRlbHRhLCAnXG4nKSkgewogICAgcmV0dXJuIGRlbHRhOwogIH0KICB2YXIgaW5kZW50ID0gLTE7CiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsKICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgIGlmIChbJ09MJywgJ1VMJ10uaW5jbHVkZXMocGFyZW50LnRhZ05hbWUpKSB7CiAgICAgIGluZGVudCArPSAxOwogICAgfQogICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7CiAgfQogIGlmIChpbmRlbnQgPD0gMCkgcmV0dXJuIGRlbHRhOwogIHJldHVybiBkZWx0YS5yZWR1Y2UoZnVuY3Rpb24gKGNvbXBvc2VkLCBvcCkgewogICAgaWYgKCFvcC5pbnNlcnQpIHJldHVybiBjb21wb3NlZDsKICAgIGlmIChvcC5hdHRyaWJ1dGVzICYmIHR5cGVvZiBvcC5hdHRyaWJ1dGVzLmluZGVudCA9PT0gJ251bWJlcicpIHsKICAgICAgcmV0dXJuIGNvbXBvc2VkLnB1c2gob3ApOwogICAgfQogICAgcmV0dXJuIGNvbXBvc2VkLmluc2VydChvcC5pbnNlcnQsIF9vYmplY3RTcHJlYWQoewogICAgICBpbmRlbnQ6IGluZGVudAogICAgfSwgb3AuYXR0cmlidXRlcyB8fCB7fSkpOwogIH0sIG5ldyBEZWx0YSgpKTsKfQpmdW5jdGlvbiBtYXRjaExpc3Qobm9kZSwgZGVsdGEsIHNjcm9sbCkgewogIHZhciBlbGVtZW50ID0gbm9kZTsKICB2YXIgbGlzdCA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ09MJyA/ICdvcmRlcmVkJyA6ICdidWxsZXQnOwogIHZhciBjaGVja2VkQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNoZWNrZWQnKTsKICBpZiAoY2hlY2tlZEF0dHIpIHsKICAgIGxpc3QgPSBjaGVja2VkQXR0ciA9PT0gJ3RydWUnID8gJ2NoZWNrZWQnIDogJ3VuY2hlY2tlZCc7CiAgfQogIHJldHVybiBhcHBseUZvcm1hdChkZWx0YSwgJ2xpc3QnLCBsaXN0LCBzY3JvbGwpOwp9CmZ1bmN0aW9uIG1hdGNoTmV3bGluZShub2RlLCBkZWx0YSwgc2Nyb2xsKSB7CiAgaWYgKCFkZWx0YUVuZHNXaXRoKGRlbHRhLCAnXG4nKSkgewogICAgaWYgKGlzTGluZShub2RlLCBzY3JvbGwpICYmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBkZWx0YS5pbnNlcnQoJ1xuJyk7CiAgICB9CiAgICBpZiAoZGVsdGEubGVuZ3RoKCkgPiAwICYmIG5vZGUubmV4dFNpYmxpbmcpIHsKICAgICAgdmFyIG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgd2hpbGUgKG5leHRTaWJsaW5nICE9IG51bGwpIHsKICAgICAgICBpZiAoaXNMaW5lKG5leHRTaWJsaW5nLCBzY3JvbGwpKSB7CiAgICAgICAgICByZXR1cm4gZGVsdGEuaW5zZXJ0KCdcbicpOwogICAgICAgIH0KICAgICAgICB2YXIgbWF0Y2ggPSBzY3JvbGwucXVlcnkobmV4dFNpYmxpbmcpOwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IKICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gucHJvdG90eXBlIGluc3RhbmNlb2YgQmxvY2tFbWJlZCkgewogICAgICAgICAgcmV0dXJuIGRlbHRhLmluc2VydCgnXG4nKTsKICAgICAgICB9CiAgICAgICAgbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZy5maXJzdENoaWxkOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBkZWx0YTsKfQpmdW5jdGlvbiBtYXRjaFN0eWxlcyhub2RlLCBkZWx0YSwgc2Nyb2xsKSB7CiAgdmFyIF9zdHlsZSRmb250V2VpZ2h0OwogIHZhciBmb3JtYXRzID0ge307CiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZSB8fCB7fTsKICBpZiAoc3R5bGUuZm9udFN0eWxlID09PSAnaXRhbGljJykgewogICAgZm9ybWF0cy5pdGFsaWMgPSB0cnVlOwogIH0KICBpZiAoc3R5bGUudGV4dERlY29yYXRpb24gPT09ICd1bmRlcmxpbmUnKSB7CiAgICBmb3JtYXRzLnVuZGVybGluZSA9IHRydWU7CiAgfQogIGlmIChzdHlsZS50ZXh0RGVjb3JhdGlvbiA9PT0gJ2xpbmUtdGhyb3VnaCcpIHsKICAgIGZvcm1hdHMuc3RyaWtlID0gdHJ1ZTsKICB9CiAgaWYgKChfc3R5bGUkZm9udFdlaWdodCA9IHN0eWxlLmZvbnRXZWlnaHQpICE9PSBudWxsICYmIF9zdHlsZSRmb250V2VpZ2h0ICE9PSB2b2lkIDAgJiYgX3N0eWxlJGZvbnRXZWlnaHQuc3RhcnRzV2l0aCgnYm9sZCcpIHx8CiAgLy8gQHRzLWV4cGVjdC1lcnJvciBGaXggbWUgbGF0ZXIKICBwYXJzZUludChzdHlsZS5mb250V2VpZ2h0LCAxMCkgPj0gNzAwKSB7CiAgICBmb3JtYXRzLmJvbGQgPSB0cnVlOwogIH0KICBkZWx0YSA9IE9iamVjdC5lbnRyaWVzKGZvcm1hdHMpLnJlZHVjZShmdW5jdGlvbiAobmV3RGVsdGEsIF9yZWY1KSB7CiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksCiAgICAgIG5hbWUgPSBfcmVmOVswXSwKICAgICAgdmFsdWUgPSBfcmVmOVsxXTsKICAgIHJldHVybiBhcHBseUZvcm1hdChuZXdEZWx0YSwgbmFtZSwgdmFsdWUsIHNjcm9sbCk7CiAgfSwgZGVsdGEpOwogIC8vIEB0cy1leHBlY3QtZXJyb3IKICBpZiAocGFyc2VGbG9hdChzdHlsZS50ZXh0SW5kZW50IHx8IDApID4gMCkgewogICAgLy8gQ291bGQgYmUgMC41aW4KICAgIHJldHVybiBuZXcgRGVsdGEoKS5pbnNlcnQoJ1x0JykuY29uY2F0KGRlbHRhKTsKICB9CiAgcmV0dXJuIGRlbHRhOwp9CmZ1bmN0aW9uIG1hdGNoVGFibGUobm9kZSwgZGVsdGEsIHNjcm9sbCkgewogIHZhciBfbm9kZSRwYXJlbnRFbGVtZW50LCBfbm9kZSRwYXJlbnRFbGVtZW50MjsKICB2YXIgdGFibGUgPSAoKF9ub2RlJHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9ub2RlJHBhcmVudEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ub2RlJHBhcmVudEVsZW1lbnQudGFnTmFtZSkgPT09ICdUQUJMRScgPyBub2RlLnBhcmVudEVsZW1lbnQgOiAoX25vZGUkcGFyZW50RWxlbWVudDIgPSBub2RlLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9ub2RlJHBhcmVudEVsZW1lbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbm9kZSRwYXJlbnRFbGVtZW50Mi5wYXJlbnRFbGVtZW50OwogIGlmICh0YWJsZSAhPSBudWxsKSB7CiAgICB2YXIgcm93cyA9IEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbCgndHInKSk7CiAgICB2YXIgcm93ID0gcm93cy5pbmRleE9mKG5vZGUpICsgMTsKICAgIHJldHVybiBhcHBseUZvcm1hdChkZWx0YSwgJ3RhYmxlJywgcm93LCBzY3JvbGwpOwogIH0KICByZXR1cm4gZGVsdGE7Cn0KZnVuY3Rpb24gbWF0Y2hUZXh0KG5vZGUsIGRlbHRhLCBzY3JvbGwpIHsKICB2YXIgX25vZGUkcGFyZW50RWxlbWVudDM7CiAgLy8gQHRzLWV4cGVjdC1lcnJvcgogIHZhciB0ZXh0ID0gbm9kZS5kYXRhOwogIC8vIFdvcmQgcmVwcmVzZW50cyBlbXB0eSBsaW5lIHdpdGggPG86cD4mbmJzcDs8L286cD4KICBpZiAoKChfbm9kZSRwYXJlbnRFbGVtZW50MyA9IG5vZGUucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX25vZGUkcGFyZW50RWxlbWVudDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ub2RlJHBhcmVudEVsZW1lbnQzLnRhZ05hbWUpID09PSAnTzpQJykgewogICAgcmV0dXJuIGRlbHRhLmluc2VydCh0ZXh0LnRyaW0oKSk7CiAgfQogIGlmICghaXNQcmUobm9kZSkpIHsKICAgIGlmICh0ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAgJiYgdGV4dC5pbmNsdWRlcygnXG4nKSAmJiAhaXNCZXR3ZWVuSW5saW5lRWxlbWVudHMobm9kZSwgc2Nyb2xsKSkgewogICAgICByZXR1cm4gZGVsdGE7CiAgICB9CiAgICB2YXIgcmVwbGFjZXIgPSBmdW5jdGlvbiByZXBsYWNlcihjb2xsYXBzZSwgbWF0Y2gpIHsKICAgICAgdmFyIHJlcGxhY2VkID0gbWF0Y2gucmVwbGFjZSgvW15cdTAwYTBdL2csICcnKTsgLy8gXHUwMGEwIGlzIG5ic3A7CiAgICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPCAxICYmIGNvbGxhcHNlID8gJyAnIDogcmVwbGFjZWQ7CiAgICB9OwogICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXHJcbi9nLCAnICcpLnJlcGxhY2UoL1xuL2csICcgJyk7CiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cc1xzKy9nLCByZXBsYWNlci5iaW5kKHJlcGxhY2VyLCB0cnVlKSk7IC8vIGNvbGxhcHNlIHdoaXRlc3BhY2UKICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZyA9PSBudWxsICYmIG5vZGUucGFyZW50RWxlbWVudCAhPSBudWxsICYmIGlzTGluZShub2RlLnBhcmVudEVsZW1lbnQsIHNjcm9sbCkgfHwgbm9kZS5wcmV2aW91c1NpYmxpbmcgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGlzTGluZShub2RlLnByZXZpb3VzU2libGluZywgc2Nyb2xsKSkgewogICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eXHMrLywgcmVwbGFjZXIuYmluZChyZXBsYWNlciwgZmFsc2UpKTsKICAgIH0KICAgIGlmIChub2RlLm5leHRTaWJsaW5nID09IG51bGwgJiYgbm9kZS5wYXJlbnRFbGVtZW50ICE9IG51bGwgJiYgaXNMaW5lKG5vZGUucGFyZW50RWxlbWVudCwgc2Nyb2xsKSB8fCBub2RlLm5leHRTaWJsaW5nIGluc3RhbmNlb2YgRWxlbWVudCAmJiBpc0xpbmUobm9kZS5uZXh0U2libGluZywgc2Nyb2xsKSkgewogICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9ccyskLywgcmVwbGFjZXIuYmluZChyZXBsYWNlciwgZmFsc2UpKTsKICAgIH0KICB9CiAgcmV0dXJuIGRlbHRhLmluc2VydCh0ZXh0KTsKfQpleHBvcnQgeyBDbGlwYm9hcmQgYXMgZGVmYXVsdCwgbWF0Y2hBdHRyaWJ1dG9yLCBtYXRjaEJsb3QsIG1hdGNoTmV3bGluZSwgbWF0Y2hUZXh0LCB0cmF2ZXJzZSB9Ow=="},null]} |