{"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\\cache-loader\\dist\\cjs.js??ref--0-0!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\calendar\\components\\SchoolCalendarEditor.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\calendar\\components\\SchoolCalendarEditor.vue","mtime":1787627704322},{"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},{"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\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyLmpzIjsKaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5ib2xkLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IGdldFNlbWVzdGVyIH0gZnJvbSAnQC9hcGkvdGVhY2hCdXNpbmVzcy9zZW1lc3Rlcic7CmltcG9ydCB7IGxpc3RYcXhsYiwgdXBkYXRlWHF4bGIgfSBmcm9tICdAL2FwaS90ZWFjaEJ1c2luZXNzL3hxeGxiJzsKCi8vIOiKguasoeWumuS5ie+8mjEyLzM0LzU2IOW4uOaYvu+8jDc4L+aZmuS4ii/lpJzpl7TnlLHlvIDlhbPmjqfliLblj6/op4EKdmFyIFNMT1RfREVGUyA9IFt7CiAga2V5OiAnMTInLAogIGxhYmVsOiAnMS0yJywKICBjdHJsOiBudWxsCn0sIHsKICBrZXk6ICczNCcsCiAgbGFiZWw6ICczLTQnLAogIGN0cmw6IG51bGwKfSwgewogIGtleTogJzU2JywKICBsYWJlbDogJzUtNicsCiAgY3RybDogbnVsbAp9LCB7CiAga2V5OiAnNzgnLAogIGxhYmVsOiAnNy04JywKICBjdHJsOiAnc2hvdzc4Jwp9LCB7CiAga2V5OiAnbmlnaHQnLAogIGxhYmVsOiAn5pma5LiKJywKICBjdHJsOiAnc2hvd05pZ2h0Jwp9LCB7CiAga2V5OiAnbGF0ZScsCiAgbGFiZWw6ICflpJzpl7QnLAogIGN0cmw6ICdzaG93TGF0ZU5pZ2h0Jwp9XTsKCi8vIOWJjeerr+iKguasoSBrZXkgLT4g5ZCO56uvIHhxeGxiLmNvdXJzZUNsYXNzIOiKguasoeiMg+WbtO+8iOWmgiAxMiDoioIgLT4gIjEtMiLjgIHlpJzpl7QgLT4gIjExLTEyIu+8iQp2YXIgU0xPVF9DT1VSU0VfTUFQID0gewogICcxMic6ICcxLTInLAogICczNCc6ICczLTQnLAogICc1Nic6ICc1LTYnLAogICc3OCc6ICc3LTgnLAogIG5pZ2h0OiAnOS0xMCcsCiAgbGF0ZTogJzExLTEyJwp9Owp2YXIgV0VFS19EQVlTID0gWyflkajkuIAnLCAn5ZGo5LqMJywgJ+WRqOS4iScsICflkajlm5snLCAn5ZGo5LqUJywgJ+WRqOWFrScsICflkajml6UnXTsKZnVuY3Rpb24gcGFkMihuKSB7CiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiAnJyArIG47Cn0KZnVuY3Rpb24gZm10RGF0ZShkKSB7CiAgcmV0dXJuIGQuZ2V0RnVsbFllYXIoKSArICctJyArIHBhZDIoZC5nZXRNb250aCgpICsgMSkgKyAnLScgKyBwYWQyKGQuZ2V0RGF0ZSgpKTsKfQpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ1NjaG9vbENhbGVuZGFyRWRpdG9yJywKICBwcm9wczogewogICAgbmQ6IHsKICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSwKICAgICAgZGVmYXVsdDogJycKICAgIH0sCiAgICBzZW1lc3Rlck5hbWU6IHsKICAgICAgdHlwZTogU3RyaW5nLAogICAgICBkZWZhdWx0OiAnJwogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vIOWtpuacn+aXpeacn+iMg+WbtAogICAgICBzdGFydERhdGU6IG51bGwsCiAgICAgIGVuZERhdGU6IG51bGwsCiAgICAgIHRvdGFsV2Vla3M6IDAsCiAgICAgIGRhdGVSYW5nZVRleHQ6ICcnLAogICAgICB3ZWVrczogW10sCiAgICAgIC8vIOaYvuekuuW8gOWFs++8iOm7mOiupOS4jeWLvumAie+8jOavj+WkqeS7heaYvuekuiAxLTIvMy00LzUtNiDkuInkuKroioLmrKHvvIkKICAgICAgc2hvdzc4OiBmYWxzZSwKICAgICAgc2hvd05pZ2h0OiBmYWxzZSwKICAgICAgc2hvd0xhdGVOaWdodDogZmFsc2UsCiAgICAgIC8vIOW3peWFt+agj+ihqOWNlQogICAgICB0b29sYmFyOiB7CiAgICAgICAgZXZlbnROYW1lOiAnJywKICAgICAgICBib2xkOiBmYWxzZSwKICAgICAgICBzY2hlZHVsYWJsZTogZmFsc2UsCiAgICAgICAgbWFpbkNvdXJzZTogZmFsc2UsCiAgICAgICAgcmVtYXJrU2hvdzogZmFsc2UsCiAgICAgICAgcmVtYXJrOiAnJwogICAgICB9LAogICAgICAvLyDkuovku7blrZjlgqjvvJprZXkgPSBjZWxsS2V5IC0+IGV2ZW50CiAgICAgIGV2ZW50czoge30sCiAgICAgIC8vIOaaguWtmOiiq+makOiXj+iKguasoeWIl+S4iueahOS6i+S7tu+8mmtleSA9IOWRqC3mmJ/mnJ8t6IqC5qyhIC0+IGV2ZW5077yM5YiX5YaN5qyh5pi+56S65pe25oGi5aSNCiAgICAgIGhpZGRlbkV2ZW50czoge30sCiAgICAgIC8vIOmAieaLqembhu+8iOeUqOaVsOe7hOS7peS/neivgSBWdWUyIOWTjeW6lOW8j++8iQogICAgICBzZWxlY3RlZEtleXM6IFtdLAogICAgICAvLyDmi5bmi73nirbmgIEKICAgICAgc2VsZWN0aW5nOiBmYWxzZSwKICAgICAgZHJhZ1N0YXJ0OiBudWxsLAogICAgICBkcmFnU3RhcnRTZWxlY3RlZDogZmFsc2UsCiAgICAgIC8vIOaMieS4i+i1t+eCueWcqOaMieS4i+WJjeaYr+WQpuW3sumAieS4rQogICAgICBtb3ZlZDogZmFsc2UsCiAgICAgIC8vIOaYr+WQpuWPkeeUn+enu+WKqO+8iOWMuuWIhueCueWHu+S4juaLluaLve+8iQogICAgICBkcmFnQWRkTW9kZTogZmFsc2UsCiAgICAgIC8vIGN0cmwg5ouW5ou95Li66L+95YqgCiAgICAgIC8vIOeql+WPo+aOp+WItgogICAgICBhYnNvcmJQcmV2aWV3OiAnJwogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7CiAgICAvLyDlvZPliY3lj6/op4HliJfvvIjnlLHlvIDlhbPov4fmu6TvvIzpu5jorqTmr4/lpKnkuInkuKroioLmrKHvvIkKICAgIHZpc2libGVDb2x1bW5zOiBmdW5jdGlvbiB2aXNpYmxlQ29sdW1ucygpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIGNvbHMgPSBbXTsKICAgICAgdmFyIGNvbEluZGV4ID0gMDsKICAgICAgV0VFS19EQVlTLmZvckVhY2goZnVuY3Rpb24gKGRheUxhYmVsLCBkYXlJbmRleCkgewogICAgICAgIFNMT1RfREVGUy5mb3JFYWNoKGZ1bmN0aW9uIChzbG90KSB7CiAgICAgICAgICBpZiAoc2xvdC5jdHJsICYmICFfdGhpc1tzbG90LmN0cmxdKSByZXR1cm47CiAgICAgICAgICBjb2xzLnB1c2goewogICAgICAgICAgICBjb2xJbmRleDogY29sSW5kZXgsCiAgICAgICAgICAgIGRheUluZGV4OiBkYXlJbmRleCwKICAgICAgICAgICAgc2xvdEtleTogc2xvdC5rZXksCiAgICAgICAgICAgIHNsb3RMYWJlbDogc2xvdC5sYWJlbCwKICAgICAgICAgICAgZGF5TGFiZWw6IGRheUxhYmVsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbEluZGV4Kys7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gY29sczsKICAgIH0sCiAgICAvLyB4cXhsYiDnmoTlubTluqbvvIhuZO+8ieS4uuW5tOS7ve+8iOWmgiAyMDI277yJ77yM55SxIDYg5L2N5a2m5pyf5Luj5Y+377yI5aaCIDIwMjYwMe+8ieaIquWPluWJjSA0IOS9jeW+l+WHugogICAgeHF4bGJOZDogZnVuY3Rpb24geHF4bGJOZCgpIHsKICAgICAgcmV0dXJuIE51bWJlcihTdHJpbmcodGhpcy5uZCkuc2xpY2UoMCwgNCkpOwogICAgfQogIH0sCiAgd2F0Y2g6IHsKICAgIG5kOiB7CiAgICAgIGltbWVkaWF0ZTogdHJ1ZSwKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHsKICAgICAgICBpZiAodmFsKSB0aGlzLmxvYWRTZW1lc3RlcigpOwogICAgICB9CiAgICB9LAogICAgdmlzaWJsZUNvbHVtbnM6IGZ1bmN0aW9uIHZpc2libGVDb2x1bW5zKG5ld0NvbHMsIG9sZENvbHMpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIC8vIOiKguasoeWIl+aYvumakOS8muaUueWPmOWIl+e0ouW8le+8jOaMieOAjOWRqOacny3mmJ/mnJ8t6IqC5qyh44CN6YeN5a6a5L2N5LqL5Lu277yM6YG/5YWN5LqL5Lu26ZqP5pe26Ze05qC85YiX5YGP56e7CiAgICAgIGlmIChvbGRDb2xzICYmIG9sZENvbHMubGVuZ3RoKSB7CiAgICAgICAgdmFyIG9sZFBvc09mID0gZnVuY3Rpb24gb2xkUG9zT2YoaW5kZXgpIHsKICAgICAgICAgIHJldHVybiBvbGRDb2xzW2luZGV4XSB8fCBudWxsOwogICAgICAgIH07CiAgICAgICAgdmFyIG5ld0luZGV4ID0gZnVuY3Rpb24gbmV3SW5kZXgoZGF5SW5kZXgsIHNsb3RLZXkpIHsKICAgICAgICAgIHZhciBjID0gbmV3Q29scy5maW5kKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICAgIHJldHVybiB4LmRheUluZGV4ID09PSBkYXlJbmRleCAmJiB4LnNsb3RLZXkgPT09IHNsb3RLZXk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBjID8gYy5jb2xJbmRleCA6IC0xOwogICAgICAgIH07CiAgICAgICAgdmFyIG5leHQgPSB7fTsKICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmV2ZW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICB2YXIgbSA9IGtleS5tYXRjaCgvXncoXGQrKS1jKFxkKykkLyk7CiAgICAgICAgICBpZiAoIW0pIHJldHVybjsKICAgICAgICAgIHZhciB3SWR4ID0gK21bMV07CiAgICAgICAgICB2YXIgb2xkID0gb2xkUG9zT2YoK21bMl0pOwogICAgICAgICAgaWYgKCFvbGQpIHJldHVybjsKICAgICAgICAgIHZhciBuZXdDID0gbmV3SW5kZXgob2xkLmRheUluZGV4LCBvbGQuc2xvdEtleSk7CiAgICAgICAgICBpZiAobmV3QyA8IDApIHsKICAgICAgICAgICAgLy8g6K+l6IqC5qyh5YiX6KKr6ZqQ6JeP77ya5LqL5Lu25pqC5a2Y77yM5b6F5YiX5YaN5qyh5pi+56S65pe25oGi5aSNCiAgICAgICAgICAgIF90aGlzMi5oaWRkZW5FdmVudHNbX3RoaXMyLmNlbGxTdGFibGVLZXkod0lkeCwgb2xkLmRheUluZGV4LCBvbGQuc2xvdEtleSldID0gX3RoaXMyLmV2ZW50c1trZXldOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0Wyd3JyArIHdJZHggKyAnLWMnICsgbmV3Q10gPSBfdGhpczIuZXZlbnRzW2tleV07CiAgICAgICAgfSk7CiAgICAgICAgLy8g5oGi5aSN6YeN5paw5pi+56S655qE6ZqQ6JeP6IqC5qyh5LqL5Lu2CiAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWRkZW5FdmVudHMpLmZvckVhY2goZnVuY3Rpb24gKHN0YWJsZSkgewogICAgICAgICAgdmFyIHAgPSBzdGFibGUuc3BsaXQoJy0nKTsKICAgICAgICAgIHZhciB3SWR4ID0gK3BbMF07CiAgICAgICAgICB2YXIgZGF5SW5kZXggPSArcFsxXTsKICAgICAgICAgIHZhciBzbG90S2V5ID0gcFsyXTsKICAgICAgICAgIHZhciBuZXdDID0gbmV3SW5kZXgoZGF5SW5kZXgsIHNsb3RLZXkpOwogICAgICAgICAgaWYgKG5ld0MgPj0gMCkgewogICAgICAgICAgICBuZXh0Wyd3JyArIHdJZHggKyAnLWMnICsgbmV3Q10gPSBfdGhpczIuaGlkZGVuRXZlbnRzW3N0YWJsZV07CiAgICAgICAgICAgIGRlbGV0ZSBfdGhpczIuaGlkZGVuRXZlbnRzW3N0YWJsZV07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXh0OwogICAgICB9CiAgICAgIC8vIOWIl+WPmOWMluWQjua4heepuuaXoOaViOmAieaLqe+8iOWIl+e0ouW8leWQq+S5ieS8muWPmO+8iQogICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdOwogICAgfQogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIHRoaXMucmVtb3ZlR2xvYmFsTGlzdGVuZXJzKCk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiAtLS0tLS0tLS0tIOaVsOaNruWKoOi9vSAtLS0tLS0tLS0tICovbG9hZFNlbWVzdGVyOiBmdW5jdGlvbiBsb2FkU2VtZXN0ZXIoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICBpZiAoIXRoaXMubmQpIHJldHVybjsKICAgICAgZ2V0U2VtZXN0ZXIodGhpcy5uZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXMuZGF0YSB8fCByZXMgfHwge307CiAgICAgICAgdmFyIGt4ID0gKGRhdGEua3hycSB8fCAnJykudG9TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgdmFyIGp4ID0gKGRhdGEuanNycSB8fCAnJykudG9TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgaWYgKGt4ICYmIGp4KSB7CiAgICAgICAgICBfdGhpczMuc3RhcnREYXRlID0gbmV3IERhdGUoa3gucmVwbGFjZSgvLS9nLCAnLycpKTsKICAgICAgICAgIF90aGlzMy5lbmREYXRlID0gbmV3IERhdGUoangucmVwbGFjZSgvLS9nLCAnLycpKTsKICAgICAgICAgIF90aGlzMy5idWlsZFdlZWtzKCk7CiAgICAgICAgfQogICAgICAgIF90aGlzMy5sb2FkWHF4bGJFdmVudHMoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMy4kbWVzc2FnZS53YXJuaW5nKCflrabmnJ/or6bmg4Xojrflj5blpLHotKXvvIzor7fnoa7orqTlrabmnJ/mlbDmja4nKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5LuO5ZCO56uv5ouJ5Y+W5pys5a2m5pyf5qCh5Y6G5LqL5Lu277yM5riy5p+T5Yiw5a+55bqU5pe26Ze05qC877yI5bm05bqm55SxIDYg5L2N5a2m5pyf5Luj5Y+35oiq5Y+W5YmNIDQg5L2N77yJCiAgICBsb2FkWHF4bGJFdmVudHM6IGZ1bmN0aW9uIGxvYWRYcXhsYkV2ZW50cygpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIGxpc3RYcXhsYih7CiAgICAgICAgbmQ6IHRoaXMueHF4bGJOZAogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZGF0YSA9IHJlcy5kYXRhOwogICAgICAgIHZhciBsaXN0ID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBkYXRhICYmIGRhdGEucmVjb3JkcyB8fCBbXTsKICAgICAgICByZXR1cm4gbGlzdDsKICAgICAgfSkudGhlbihmdW5jdGlvbiAobGlzdCkgewogICAgICAgIHZhciBsb2FkZWQgPSB7fTsKICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIHZhciBwb3MgPSBfdGhpczQubG9jYXRlWHF4bGIoaXRlbSk7CiAgICAgICAgICBpZiAoIXBvcykgcmV0dXJuOwogICAgICAgICAgdmFyIGV2ID0gewogICAgICAgICAgICBiaDogaXRlbS5iaCwKICAgICAgICAgICAgbmFtZTogaXRlbS5qcW1jIHx8ICcnLAogICAgICAgICAgICBib2xkOiAhIWl0ZW0uamMsCiAgICAgICAgICAgIHNjaGVkdWxhYmxlOiAhIWl0ZW0ua3BrLAogICAgICAgICAgICBtYWluQ291cnNlOiAhIWl0ZW0uemRwaywKICAgICAgICAgICAgcmVtYXJrU2hvdzogISFpdGVtLmJ6eHMsCiAgICAgICAgICAgIHJlbWFyazogaXRlbS5ieiB8fCAnJwogICAgICAgICAgfTsKICAgICAgICAgIHZhciBjb2xJbmRleCA9IF90aGlzNC5jb2xJbmRleE9mKHBvcy5kYXlJbmRleCwgcG9zLnNsb3RLZXkpOwogICAgICAgICAgaWYgKGNvbEluZGV4ID49IDApIHsKICAgICAgICAgICAgbG9hZGVkW190aGlzNC5jZWxsS2V5KHBvcy53SWR4LCBjb2xJbmRleCldID0gZXY7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDor6XoioLmrKHliJflvZPliY3pmpDol4/vvJrmmoLlrZjvvIjlkKsgYmjvvInvvIzlvoXliJfmmL7npLrml7bnlLEgdmlzaWJsZUNvbHVtbnMg55uR5ZCs5oGi5aSNCiAgICAgICAgICAgIF90aGlzNC5oaWRkZW5FdmVudHNbX3RoaXM0LmNlbGxTdGFibGVLZXkocG9zLndJZHgsIHBvcy5kYXlJbmRleCwgcG9zLnNsb3RLZXkpXSA9IGV2OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIC8vIOWQiOW5tuWIsOeOsOacieagvOWtkO+8iOWQjuerr+aVsOaNruimhuebluW3suacieeKtuaAge+8iQogICAgICAgIF90aGlzNC5ldmVudHMgPSBPYmplY3QuYXNzaWduKHt9LCBfdGhpczQuZXZlbnRzLCBsb2FkZWQpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM0LiRtZXNzYWdlLndhcm5pbmcoJ+agoeWOhuS6i+S7tuWKoOi9veWksei0pScpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmoLnmja7lgYfmnJ/orrDlvZXlj43mjqjml7bpl7TmoLzkvY3nva7vvIhqcXNqIOaXpeacnyArIGNvdXJzZUNsYXNzIOiKguasoe+8ie+8jOS4juWIl+aYr+WQpuWPr+ingeaXoOWFswogICAgbG9jYXRlWHF4bGI6IGZ1bmN0aW9uIGxvY2F0ZVhxeGxiKGl0ZW0pIHsKICAgICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSB8fCAhaXRlbS5qcXNqKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIGQgPSBuZXcgRGF0ZShTdHJpbmcoaXRlbS5qcXNqKS5zbGljZSgwLCAxMCkucmVwbGFjZSgvLS9nLCAnLycpKTsKICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBvZmZzZXQgPSBNYXRoLnJvdW5kKChkIC0gdGhpcy5zdGFydERhdGUpIC8gKDI0ICogMzYwMCAqIDEwMDApKTsKICAgICAgaWYgKG9mZnNldCA8IDApIHJldHVybiBudWxsOwogICAgICB2YXIgd0lkeCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNyk7CiAgICAgIHZhciBkYXlJbmRleCA9IG9mZnNldCAlIDc7CiAgICAgIHZhciBzbG90S2V5ID0gdGhpcy5jb3Vyc2VDbGFzc1RvU2xvdEtleShpdGVtLmNvdXJzZUNsYXNzKTsKICAgICAgaWYgKHNsb3RLZXkgPT09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gewogICAgICAgIHdJZHg6IHdJZHgsCiAgICAgICAgZGF5SW5kZXg6IGRheUluZGV4LAogICAgICAgIHNsb3RLZXk6IHNsb3RLZXkKICAgICAgfTsKICAgIH0sCiAgICAvLyDlkI7nq68gY291cnNlQ2xhc3Mg6IqC5qyh6IyD5Zu0IC0+IOWJjeerr+iKguasoSBrZXkKICAgIGNvdXJzZUNsYXNzVG9TbG90S2V5OiBmdW5jdGlvbiBjb3Vyc2VDbGFzc1RvU2xvdEtleShjb3Vyc2VDbGFzcykgewogICAgICBpZiAoIWNvdXJzZUNsYXNzKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHMgPSBTdHJpbmcoY291cnNlQ2xhc3MpLnRyaW0oKTsKICAgICAgZm9yICh2YXIga2V5IGluIFNMT1RfQ09VUlNFX01BUCkgewogICAgICAgIGlmIChzID09PSBTTE9UX0NPVVJTRV9NQVBba2V5XSkgcmV0dXJuIGtleTsKICAgICAgfQogICAgICAvLyDlhbzlrrkgIjkxMCIvIjExMTIiIOetiee0p+WHkeWGmeazlQogICAgICBpZiAocyA9PT0gJzkxMCcpIHJldHVybiAnbmlnaHQnOwogICAgICBpZiAocyA9PT0gJzExMTInKSByZXR1cm4gJ2xhdGUnOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCiAgICBidWlsZFdlZWtzOiBmdW5jdGlvbiBidWlsZFdlZWtzKCkgewogICAgICBpZiAoIXRoaXMuc3RhcnREYXRlIHx8ICF0aGlzLmVuZERhdGUpIHJldHVybjsKICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpOwogICAgICB2YXIgZW5kID0gbmV3IERhdGUodGhpcy5lbmREYXRlKTsKICAgICAgdmFyIGRheXMgPSBNYXRoLnJvdW5kKChlbmQgLSBzdGFydCkgLyAoMjQgKiAzNjAwICogMTAwMCkpICsgMTsKICAgICAgdGhpcy50b3RhbFdlZWtzID0gTWF0aC5jZWlsKGRheXMgLyA3KTsKICAgICAgdGhpcy5kYXRlUmFuZ2VUZXh0ID0gZm10RGF0ZShzdGFydCkgKyAnIOWIsCAnICsgZm10RGF0ZShlbmQpOwogICAgICB2YXIgd2Vla3MgPSBbXTsKICAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCB0aGlzLnRvdGFsV2Vla3M7IHcrKykgewogICAgICAgIHZhciB3a1N0YXJ0ID0gbmV3IERhdGUoc3RhcnQpOwogICAgICAgIHdrU3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgKyB3ICogNyk7CiAgICAgICAgdmFyIHdrRW5kID0gbmV3IERhdGUod2tTdGFydCk7CiAgICAgICAgd2tFbmQuc2V0RGF0ZSh3a1N0YXJ0LmdldERhdGUoKSArIDYpOwogICAgICAgIHdlZWtzLnB1c2goewogICAgICAgICAgcmFuZ2VUZXh0OiBwYWQyKHdrU3RhcnQuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgcGFkMih3a1N0YXJ0LmdldERhdGUoKSkgKyAn6IezJyArIHBhZDIod2tFbmQuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgcGFkMih3a0VuZC5nZXREYXRlKCkpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdGhpcy53ZWVrcyA9IHdlZWtzOwogICAgfSwKICAgIGNvbEluZGV4T2Y6IGZ1bmN0aW9uIGNvbEluZGV4T2YoZGF5SW5kZXgsIHNsb3RLZXkpIHsKICAgICAgdmFyIGNvbCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZChmdW5jdGlvbiAoYykgewogICAgICAgIHJldHVybiBjLmRheUluZGV4ID09PSBkYXlJbmRleCAmJiBjLnNsb3RLZXkgPT09IHNsb3RLZXk7CiAgICAgIH0pOwogICAgICByZXR1cm4gY29sID8gY29sLmNvbEluZGV4IDogLTE7CiAgICB9LAogICAgLyogLS0tLS0tLS0tLSDljZXlhYPmoLzlt6XlhbcgLS0tLS0tLS0tLSAqL2NlbGxLZXk6IGZ1bmN0aW9uIGNlbGxLZXkod0lkeCwgY29sSW5kZXgpIHsKICAgICAgcmV0dXJuICd3JyArIHdJZHggKyAnLWMnICsgY29sSW5kZXg7CiAgICB9LAogICAgLy8g56iz5a6a55qE5Y2V5YWD5qC86Lqr5Lu977ya5LiN6ZqP5YiX5pi+6ZqQ5Y+Y5YyW55qE5ZGoLeaYn+acny3oioLmrKEKICAgIGNlbGxTdGFibGVLZXk6IGZ1bmN0aW9uIGNlbGxTdGFibGVLZXkod0lkeCwgZGF5SW5kZXgsIHNsb3RLZXkpIHsKICAgICAgcmV0dXJuIHdJZHggKyAnLScgKyBkYXlJbmRleCArICctJyArIHNsb3RLZXk7CiAgICB9LAogICAgZ2V0RXZlbnQ6IGZ1bmN0aW9uIGdldEV2ZW50KHdJZHgsIGNvbEluZGV4KSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50c1t0aGlzLmNlbGxLZXkod0lkeCwgY29sSW5kZXgpXSB8fCBudWxsOwogICAgfSwKICAgIHdlZWtEYXlMYWJlbDogZnVuY3Rpb24gd2Vla0RheUxhYmVsKGRheUluZGV4KSB7CiAgICAgIHJldHVybiBXRUVLX0RBWVNbZGF5SW5kZXhdOwogICAgfSwKICAgIC8vIOWNleWFg+agvOWGheaYvuekuueahOaXpeacn+aVsOWtl++8iOWmgiAwNzAz77yJCiAgICBkYXRlTnVtYmVyT2Y6IGZ1bmN0aW9uIGRhdGVOdW1iZXJPZih3SWR4LCBkYXlJbmRleCkgewogICAgICBpZiAoIXRoaXMuc3RhcnREYXRlKSByZXR1cm4gJyc7CiAgICAgIHZhciBkID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpOwogICAgICBkLnNldERhdGUodGhpcy5zdGFydERhdGUuZ2V0RGF0ZSgpICsgd0lkeCAqIDcgKyBkYXlJbmRleCk7CiAgICAgIHJldHVybiBwYWQyKGQuZ2V0TW9udGgoKSArIDEpICsgcGFkMihkLmdldERhdGUoKSk7CiAgICB9LAogICAgY2VsbENsYXNzOiBmdW5jdGlvbiBjZWxsQ2xhc3Mod0lkeCwgY29sKSB7CiAgICAgIHZhciBjbGFzc2VzID0gW107CiAgICAgIC8vIOaYn+acn+S6pOabv+iDjOaZr++8iOWNleWPjOaXpeS4jeWQjOW6leiJsu+8iQogICAgICBpZiAoY29sLmRheUluZGV4ICUgMiA9PT0gMCkgY2xhc3Nlcy5wdXNoKCdzY2UtY2VsbC1vZGQnKTtlbHNlIGNsYXNzZXMucHVzaCgnc2NlLWNlbGwtZXZlbicpOwogICAgICBpZiAodGhpcy5zZWxlY3RlZEtleXMuaW5jbHVkZXModGhpcy5jZWxsS2V5KHdJZHgsIGNvbC5jb2xJbmRleCkpKSBjbGFzc2VzLnB1c2goJ2lzLXNlbGVjdGVkJyk7CiAgICAgIHZhciBldiA9IHRoaXMuZ2V0RXZlbnQod0lkeCwgY29sLmNvbEluZGV4KTsKICAgICAgaWYgKGV2KSB7CiAgICAgICAgY2xhc3Nlcy5wdXNoKCdoYXMtZXZlbnQnKTsKICAgICAgICBpZiAoIWV2LnNjaGVkdWxhYmxlKSBjbGFzc2VzLnB1c2goJ25vLXNjaGVkdWxlJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNsYXNzZXM7CiAgICB9LAogICAgLyogLS0tLS0tLS0tLSDngrnlh7sgLyDmi5bmi73lpJrpgIkgLS0tLS0tLS0tLSAqL29uR3JpZE1vdXNlRG93bjogZnVuY3Rpb24gb25HcmlkTW91c2VEb3duKGUpIHsKICAgICAgdmFyIGNlbGwgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2NlLWNlbGwnKTsKICAgICAgaWYgKCFjZWxsKSB7CiAgICAgICAgLy8g54K55Ye756m655m95Yy677yI6Z2e5Y2V5YWD5qC877yM5ZCr6KGo5aS044CB5ZGo5qyh5YiX562J77yJ5Y+W5raI5omA5pyJ6YCJ5LitCiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCkgdGhpcy5zZWxlY3RlZEtleXMgPSBbXTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIga2V5ID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5Jyk7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0ID0ga2V5OwogICAgICB0aGlzLmRyYWdBZGRNb2RlID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleTsKICAgICAgLy8g6K6w5b2V6LW354K55qC85Zyo5oyJ5LiL5pe255qE6YCJ5Lit54q25oCB77yM55So5LqO5p2+5omL5pe25Yik5a6aIue6r+eCueWHuyLnmoTliIfmjaLooYzkuLoKICAgICAgdGhpcy5kcmFnU3RhcnRTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmluY2x1ZGVzKGtleSk7CiAgICAgIHRoaXMubW92ZWQgPSBmYWxzZTsKICAgICAgdGhpcy5zZWxlY3RpbmcgPSB0cnVlOwogICAgICAvLyDpnZ4gY3RybCDmqKHlvI/kuIvvvIzoi6XotbfngrnmnKzouqvlt7LpgInkuK3vvIjlj6/og73lh4blpIfmi5bmi73mianlsZXvvInvvIzlhYjkuI3muIXpmaTvvIzpgb/lhY3or6/muIXnqboKICAgICAgaWYgKCF0aGlzLmRyYWdBZGRNb2RlICYmICF0aGlzLmRyYWdTdGFydFNlbGVjdGVkKSB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdOwogICAgICB0aGlzLmFkZEdsb2JhbExpc3RlbmVycygpOwogICAgfSwKICAgIGFkZEdsb2JhbExpc3RlbmVyczogZnVuY3Rpb24gYWRkR2xvYmFsTGlzdGVuZXJzKCkgewogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uR3JpZE1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uR3JpZE1vdXNlVXApOwogICAgfSwKICAgIHJlbW92ZUdsb2JhbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKCkgewogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uR3JpZE1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uR3JpZE1vdXNlVXApOwogICAgfSwKICAgIG9uR3JpZE1vdXNlTW92ZTogZnVuY3Rpb24gb25HcmlkTW91c2VNb3ZlKGUpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGluZyB8fCAhdGhpcy5kcmFnU3RhcnQpIHJldHVybjsKICAgICAgaWYgKCF0aGlzLm1vdmVkKSB0aGlzLm1vdmVkID0gdHJ1ZTsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7CiAgICAgIHZhciBjZWxsID0gZWwgJiYgZWwuY2xvc2VzdCA/IGVsLmNsb3Nlc3QoJy5zY2UtY2VsbCcpIDogbnVsbDsKICAgICAgaWYgKCFjZWxsKSByZXR1cm47CiAgICAgIHZhciBjdXJLZXkgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1rZXknKTsKICAgICAgdGhpcy5zZWxlY3RSZWN0YW5nbGUodGhpcy5kcmFnU3RhcnQsIGN1cktleSwgdGhpcy5kcmFnQWRkTW9kZSk7CiAgICB9LAogICAgb25HcmlkTW91c2VVcDogZnVuY3Rpb24gb25HcmlkTW91c2VVcCgpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGluZykgewogICAgICAgIHRoaXMucmVtb3ZlR2xvYmFsTGlzdGVuZXJzKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIOe6r+eCueWHu++8iOacquenu+WKqO+8ieaXtu+8jOWBmuWNlemAiSAvIOWIh+aNogogICAgICBpZiAoIXRoaXMubW92ZWQpIHsKICAgICAgICB2YXIga2V5ID0gdGhpcy5kcmFnU3RhcnQ7CiAgICAgICAgaWYgKHRoaXMuZHJhZ0FkZE1vZGUpIHsKICAgICAgICAgIC8vIEN0cmwgKyDljZXlh7vvvJrliIfmjaLor6XmoLzpgInkuK0KICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhrZXkpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gdGhpcy5zZWxlY3RlZEtleXMuZmlsdGVyKGZ1bmN0aW9uIChrKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGsgIT09IGtleTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5wdXNoKGtleSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIOaZrumAmuWNleWHu++8muW3sumAieS4reWImeWPlua2iOivpeagvO+8jOacqumAieS4reWImeS7hemAieS4reivpeagvAogICAgICAgICAgaWYgKHRoaXMuZHJhZ1N0YXJ0U2VsZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSB0aGlzLnNlbGVjdGVkS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHsKICAgICAgICAgICAgICByZXR1cm4gayAhPT0ga2V5OwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gW2tleV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuc2VsZWN0aW5nID0gZmFsc2U7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0ID0gbnVsbDsKICAgICAgdGhpcy5kcmFnU3RhcnRTZWxlY3RlZCA9IGZhbHNlOwogICAgICB0aGlzLnJlbW92ZUdsb2JhbExpc3RlbmVycygpOwogICAgfSwKICAgIC8vIOagueaNrui1t+eCuee7iOeCuSBrZXkg6YCJ5Lit55+p5b2i6IyD5Zu05YaF5omA5pyJ5qC8CiAgICBzZWxlY3RSZWN0YW5nbGU6IGZ1bmN0aW9uIHNlbGVjdFJlY3RhbmdsZShzdGFydEtleSwgZW5kS2V5LCBhZGRNb2RlKSB7CiAgICAgIHZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGspIHsKICAgICAgICB2YXIgbSA9IGsubWF0Y2goL153KFxkKyktYyhcZCspJC8pOwogICAgICAgIHJldHVybiBtID8gewogICAgICAgICAgdzogK21bMV0sCiAgICAgICAgICBjOiArbVsyXQogICAgICAgIH0gOiBudWxsOwogICAgICB9OwogICAgICB2YXIgcyA9IHBhcnNlKHN0YXJ0S2V5KTsKICAgICAgdmFyIHQgPSBwYXJzZShlbmRLZXkpOwogICAgICBpZiAoIXMgfHwgIXQpIHJldHVybjsKICAgICAgaWYgKCFhZGRNb2RlKSB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdOwogICAgICB2YXIgbWluVyA9IE1hdGgubWluKHMudywgdC53KTsKICAgICAgdmFyIG1heFcgPSBNYXRoLm1heChzLncsIHQudyk7CiAgICAgIHZhciBtaW5DID0gTWF0aC5taW4ocy5jLCB0LmMpOwogICAgICB2YXIgbWF4QyA9IE1hdGgubWF4KHMuYywgdC5jKTsKICAgICAgZm9yICh2YXIgdyA9IG1pblc7IHcgPD0gbWF4VzsgdysrKSB7CiAgICAgICAgZm9yICh2YXIgYyA9IG1pbkM7IGMgPD0gbWF4QzsgYysrKSB7CiAgICAgICAgICB2YXIga2V5ID0gdGhpcy5jZWxsS2V5KHcsIGMpOwogICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHRoaXMuc2VsZWN0ZWRLZXlzLnB1c2goa2V5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKiAtLS0tLS0tLS0tIOS6i+S7tuaTjeS9nCAtLS0tLS0tLS0tICovYXBwbHlFdmVudDogZnVuY3Rpb24gYXBwbHlFdmVudCgpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEtleXMubGVuZ3RoKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjpgInmi6nml7bpl7TmoLwnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIG5hbWUgPSB0aGlzLnRvb2xiYXIuZXZlbnROYW1lLnRyaW0oKTsKICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fovpPlhaXkuovku7blkI3np7AnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGtleXMgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5zZWxlY3RlZEtleXMpOwogICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciBwcmV2ID0gX3RoaXM1LmV2ZW50c1trZXldOwogICAgICAgIF90aGlzNS4kc2V0KF90aGlzNS5ldmVudHMsIGtleSwgewogICAgICAgICAgYmg6IHByZXYgPyBwcmV2LmJoIDogdW5kZWZpbmVkLAogICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgIGJvbGQ6IF90aGlzNS50b29sYmFyLmJvbGQsCiAgICAgICAgICBzY2hlZHVsYWJsZTogX3RoaXM1LnRvb2xiYXIuc2NoZWR1bGFibGUsCiAgICAgICAgICBtYWluQ291cnNlOiBfdGhpczUudG9vbGJhci5tYWluQ291cnNlLAogICAgICAgICAgcmVtYXJrU2hvdzogX3RoaXM1LnRvb2xiYXIucmVtYXJrU2hvdywKICAgICAgICAgIHJlbWFyazogX3RoaXM1LnRvb2xiYXIucmVtYXJrCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICB0aGlzLnBlcnNpc3RFdmVudHMoa2V5cyk7CiAgICB9LAogICAgZGVsZXRlRXZlbnQ6IGZ1bmN0aW9uIGRlbGV0ZUV2ZW50KCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkS2V5cy5sZW5ndGgpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOmAieaLqeaXtumXtOagvCcpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIga2V5cyA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnNlbGVjdGVkS2V5cyk7CiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgX3RoaXM2LiRkZWxldGUoX3RoaXM2LmV2ZW50cywga2V5KTsKICAgICAgfSk7CiAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5bey5Yig6ZmkICcgKyBrZXlzLmxlbmd0aCArICcg5Liq5pe26Ze05qC85LqL5Lu2Jyk7CiAgICB9LAogICAgYWJzb3JiRXZlbnQ6IGZ1bmN0aW9uIGFic29yYkV2ZW50KCkgewogICAgICAvLyDlkLjlj5bvvJrlj5bpgInmi6nkuK3nrKzkuIDkuKrmnInkuovku7bnmoTmoLwKICAgICAgdmFyIHRhcmdldCA9IG51bGw7CiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnNlbGVjdGVkS2V5cyksCiAgICAgICAgX3N0ZXA7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHsKICAgICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTsKICAgICAgICAgIGlmICh0aGlzLmV2ZW50c1trZXldKSB7CiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuZXZlbnRzW2tleV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBfaXRlcmF0b3IuZigpOwogICAgICB9CiAgICAgIGlmICghdGFyZ2V0KSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfmiYDpgInml7bpl7TmoLzkuK3ml6Dkuovku7blj6/lkLjlj5YnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy50b29sYmFyLmV2ZW50TmFtZSA9IHRhcmdldC5uYW1lOwogICAgICB0aGlzLnRvb2xiYXIuYm9sZCA9ICEhdGFyZ2V0LmJvbGQ7CiAgICAgIHRoaXMudG9vbGJhci5zY2hlZHVsYWJsZSA9ICEhdGFyZ2V0LnNjaGVkdWxhYmxlOwogICAgICB0aGlzLnRvb2xiYXIubWFpbkNvdXJzZSA9ICEhdGFyZ2V0Lm1haW5Db3Vyc2U7CiAgICAgIHRoaXMudG9vbGJhci5yZW1hcmtTaG93ID0gISF0YXJnZXQucmVtYXJrU2hvdzsKICAgICAgdGhpcy50b29sYmFyLnJlbWFyayA9IHRhcmdldC5yZW1hcmsgfHwgJyc7CiAgICAgIHRoaXMuYWJzb3JiUHJldmlldyA9IHRhcmdldC5uYW1lOwogICAgfSwKICAgIG9uQ2VsbERibENsaWNrOiBmdW5jdGlvbiBvbkNlbGxEYmxDbGljayh3SWR4LCBjb2wpIHsKICAgICAgdmFyIGV2ID0gdGhpcy5nZXRFdmVudCh3SWR4LCBjb2wuY29sSW5kZXgpOwogICAgICBpZiAoZXYpIHsKICAgICAgICB0aGlzLnRvb2xiYXIuZXZlbnROYW1lID0gZXYubmFtZTsKICAgICAgICB0aGlzLnRvb2xiYXIuYm9sZCA9ICEhZXYuYm9sZDsKICAgICAgICB0aGlzLnRvb2xiYXIuc2NoZWR1bGFibGUgPSAhIWV2LnNjaGVkdWxhYmxlOwogICAgICAgIHRoaXMudG9vbGJhci5tYWluQ291cnNlID0gISFldi5tYWluQ291cnNlOwogICAgICAgIHRoaXMudG9vbGJhci5yZW1hcmtTaG93ID0gISFldi5yZW1hcmtTaG93OwogICAgICAgIHRoaXMudG9vbGJhci5yZW1hcmsgPSBldi5yZW1hcmsgfHwgJyc7CiAgICAgICAgdGhpcy5hYnNvcmJQcmV2aWV3ID0gZXYubmFtZTsKICAgICAgICB0aGlzLiRtZXNzYWdlLmluZm8oJ+W3suWQuOWPluS6i+S7tu+8micgKyBldi5uYW1lKTsKICAgICAgfQogICAgfSwKICAgIHJlZnJlc2hHcmlkOiBmdW5jdGlvbiByZWZyZXNoR3JpZCgpIHsKICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBbXTsKICAgICAgdGhpcy5hYnNvcmJQcmV2aWV3ID0gJyc7CiAgICAgIHRoaXMuZXZlbnRzID0ge307CiAgICAgIHRoaXMuaGlkZGVuRXZlbnRzID0ge307CiAgICAgIHRoaXMubG9hZFhxeGxiRXZlbnRzKCk7CiAgICAgIHRoaXMuJG1lc3NhZ2UuaW5mbygn5bey5Yi35pawJyk7CiAgICB9LAogICAgLyogLS0tLS0tLS0tLSDlkI7nq6/mjIHkuYXljJbvvIh4cXhsYiDmjqXlj6PvvIkgLS0tLS0tLS0tLSAqLwogICAgLy8g5om56YeP5L+d5a2Y6YCJ5Lit5qC85LqL5Lu277yM6L+U5Zue5ZCE5qC85a2Q5L+d5a2Y5oiQ5YqfL+Wksei0peeahOS4quaVsAogICAgcGVyc2lzdEV2ZW50czogZnVuY3Rpb24gcGVyc2lzdEV2ZW50cyhrZXlzKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICB2YXIgdGFza3MgPSBrZXlzLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgcmV0dXJuIF90aGlzNy5ldmVudHNba2V5XTsKICAgICAgfSkubWFwKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICB2YXIgcGF5bG9hZCA9IF90aGlzNy5idWlsZFhxeGxiUGF5bG9hZChrZXksIF90aGlzNy5ldmVudHNba2V5XSk7CiAgICAgICAgaWYgKCFwYXlsb2FkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICByZXR1cm4gdXBkYXRlWHF4bGIocGF5bG9hZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGFza3MpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHsKICAgICAgICB2YXIgb2sgPSByZXN1bHRzLmZpbHRlcihmdW5jdGlvbiAocikgewogICAgICAgICAgcmV0dXJuIHIgPT09IHRydWU7CiAgICAgICAgfSkubGVuZ3RoOwogICAgICAgIHZhciBmYWlsID0gcmVzdWx0cy5sZW5ndGggLSBvazsKICAgICAgICBpZiAoZmFpbCA+IDApIHsKICAgICAgICAgIF90aGlzNy4kbWVzc2FnZS5lcnJvcihmYWlsICsgJyDkuKrkuovku7bkv53lrZjlpLHotKXvvIzor7fmo4Dmn6XlkI7nq6/mjqXlj6MnKTsKICAgICAgICB9IGVsc2UgaWYgKG9rID4gMCkgewogICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MoJ+W3suiuvuWumiAnICsgb2sgKyAnIOS4quaXtumXtOagvCcpOwogICAgICAgIH0KICAgICAgICAvLyDkv53lrZjmiJDlip/lkI7ph43mlrDmi4nlj5bvvIzlm57lhpnlkITorrDlvZXkuLvplK7vvIzpgb/lhY3ph43lpI3mlrDlop4KICAgICAgICBfdGhpczcubG9hZFhxeGxiRXZlbnRzKCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG9rOiBvaywKICAgICAgICAgIGZhaWw6IGZhaWwKICAgICAgICB9OwogICAgICB9KTsKICAgIH0sCiAgICAvLyDmnoTpgKAgeHF4bGIg5o+Q5Lqk5pWw5o2uCiAgICBidWlsZFhxeGxiUGF5bG9hZDogZnVuY3Rpb24gYnVpbGRYcXhsYlBheWxvYWQoa2V5LCBldikgewogICAgICB2YXIgcG9zID0gdGhpcy5wYXJzZUNlbGxLZXkoa2V5KTsKICAgICAgaWYgKCFwb3MpIHJldHVybiBudWxsOwogICAgICB2YXIgZCA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKTsKICAgICAgZC5zZXREYXRlKHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSArIHBvcy53SWR4ICogNyArIHBvcy5kYXlJbmRleCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZGVsRmxhZzogMCwKICAgICAgICBiaDogZXYuYmggfHwgdW5kZWZpbmVkLAogICAgICAgIG5kOiB0aGlzLnhxeGxiTmQsCiAgICAgICAganFzajogZm10RGF0ZShkKSwKICAgICAgICBqcW1jOiBldi5uYW1lIHx8ICcnLAogICAgICAgIGpjOiAhIWV2LmJvbGQsCiAgICAgICAgYno6IGV2LnJlbWFyayB8fCBudWxsLAogICAgICAgIGtwazogISFldi5zY2hlZHVsYWJsZSwKICAgICAgICBienhzOiAhIWV2LnJlbWFya1Nob3csCiAgICAgICAgemRwazogISFldi5tYWluQ291cnNlLAogICAgICAgIGNvdXJzZUNsYXNzOiBTTE9UX0NPVVJTRV9NQVBbcG9zLnNsb3RLZXldIHx8IG51bGwKICAgICAgfTsKICAgIH0sCiAgICAvLyDml7bpl7TmoLwga2V5IC0+IHsgd0lkeCwgZGF5SW5kZXgsIHNsb3RLZXkgfQogICAgcGFyc2VDZWxsS2V5OiBmdW5jdGlvbiBwYXJzZUNlbGxLZXkoa2V5KSB7CiAgICAgIHZhciBtID0ga2V5Lm1hdGNoKC9edyhcZCspLWMoXGQrKSQvKTsKICAgICAgaWYgKCFtKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIGNvbEluZGV4ID0gK21bMl07CiAgICAgIHZhciBjb2wgPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKGMpIHsKICAgICAgICByZXR1cm4gYy5jb2xJbmRleCA9PT0gY29sSW5kZXg7CiAgICAgIH0pOwogICAgICBpZiAoIWNvbCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiB7CiAgICAgICAgd0lkeDogK21bMV0sCiAgICAgICAgZGF5SW5kZXg6IGNvbC5kYXlJbmRleCwKICAgICAgICBzbG90S2V5OiBjb2wuc2xvdEtleQogICAgICB9OwogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g6L+U5Zue5a2m5pyf566h55CGIC0tLS0tLS0tLS0gKi9oYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7CiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7CiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsKICAgICAgICBwYXRoOiAnL3RlYWNoQnVzaW5lc3Mvc2VtZXN0ZXInCiAgICAgIH0pOwogICAgfQogIH0KfTs="},null]}