Files
education/frontend/node_modules/.cache/vue-loader/52e0cb2b1d581b9446532bdc83928449.json
T

1 line
26 KiB
JSON

{"remainingRequest":"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\\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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBnZXRTZW1lc3RlciB9IGZyb20gJ0AvYXBpL3RlYWNoQnVzaW5lc3Mvc2VtZXN0ZXInDQppbXBvcnQgeyBsaXN0WHF4bGIsIHVwZGF0ZVhxeGxiIH0gZnJvbSAnQC9hcGkvdGVhY2hCdXNpbmVzcy94cXhsYicNCg0KLy8g6IqC5qyh5a6a5LmJ77yaMTIvMzQvNTYg5bi45pi+77yMNzgv5pma5LiKL+WknOmXtOeUseW8gOWFs+aOp+WItuWPr+ingQ0KY29uc3QgU0xPVF9ERUZTID0gWw0KICB7IGtleTogJzEyJywgbGFiZWw6ICcxLTInLCBjdHJsOiBudWxsIH0sDQogIHsga2V5OiAnMzQnLCBsYWJlbDogJzMtNCcsIGN0cmw6IG51bGwgfSwNCiAgeyBrZXk6ICc1NicsIGxhYmVsOiAnNS02JywgY3RybDogbnVsbCB9LA0KICB7IGtleTogJzc4JywgbGFiZWw6ICc3LTgnLCBjdHJsOiAnc2hvdzc4JyB9LA0KICB7IGtleTogJ25pZ2h0JywgbGFiZWw6ICfmmZrkuIonLCBjdHJsOiAnc2hvd05pZ2h0JyB9LA0KICB7IGtleTogJ2xhdGUnLCBsYWJlbDogJ+WknOmXtCcsIGN0cmw6ICdzaG93TGF0ZU5pZ2h0JyB9DQpdDQoNCi8vIOWJjeerr+iKguasoSBrZXkgLT4g5ZCO56uvIHhxeGxiLmNvdXJzZUNsYXNzIOiKguasoeiMg+WbtO+8iOWmgiAxMiDoioIgLT4gIjEtMiLjgIHlpJzpl7QgLT4gIjExLTEyIu+8iQ0KY29uc3QgU0xPVF9DT1VSU0VfTUFQID0gew0KICAnMTInOiAnMS0yJywNCiAgJzM0JzogJzMtNCcsDQogICc1Nic6ICc1LTYnLA0KICAnNzgnOiAnNy04JywNCiAgbmlnaHQ6ICc5LTEwJywNCiAgbGF0ZTogJzExLTEyJw0KfQ0KDQpjb25zdCBXRUVLX0RBWVMgPSBbJ+WRqOS4gCcsICflkajkuownLCAn5ZGo5LiJJywgJ+WRqOWbmycsICflkajkupQnLCAn5ZGo5YWtJywgJ+WRqOaXpSddDQoNCmZ1bmN0aW9uIHBhZDIobikgew0KICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6ICcnICsgbg0KfQ0KDQpmdW5jdGlvbiBmbXREYXRlKGQpIHsNCiAgcmV0dXJuIGQuZ2V0RnVsbFllYXIoKSArICctJyArIHBhZDIoZC5nZXRNb250aCgpICsgMSkgKyAnLScgKyBwYWQyKGQuZ2V0RGF0ZSgpKQ0KfQ0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdTY2hvb2xDYWxlbmRhckVkaXRvcicsDQogIHByb3BzOiB7DQogICAgbmQ6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogJycgfSwNCiAgICBzZW1lc3Rlck5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9DQogIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIC8vIOWtpuacn+aXpeacn+iMg+WbtA0KICAgICAgc3RhcnREYXRlOiBudWxsLA0KICAgICAgZW5kRGF0ZTogbnVsbCwNCiAgICAgIHRvdGFsV2Vla3M6IDAsDQogICAgICBkYXRlUmFuZ2VUZXh0OiAnJywNCiAgICAgIHdlZWtzOiBbXSwNCiAgICAgIC8vIOaYvuekuuW8gOWFs++8iOm7mOiupOS4jeWLvumAie+8jOavj+WkqeS7heaYvuekuiAxLTIvMy00LzUtNiDkuInkuKroioLmrKHvvIkNCiAgICAgIHNob3c3ODogZmFsc2UsDQogICAgICBzaG93TmlnaHQ6IGZhbHNlLA0KICAgICAgc2hvd0xhdGVOaWdodDogZmFsc2UsDQogICAgICAvLyDlt6XlhbfmoI/ooajljZUNCiAgICAgIHRvb2xiYXI6IHsNCiAgICAgICAgZXZlbnROYW1lOiAnJywNCiAgICAgICAgYm9sZDogZmFsc2UsDQogICAgICAgIHNjaGVkdWxhYmxlOiBmYWxzZSwNCiAgICAgICAgbWFpbkNvdXJzZTogZmFsc2UsDQogICAgICAgIHJlbWFya1Nob3c6IGZhbHNlLA0KICAgICAgICByZW1hcms6ICcnDQogICAgICB9LA0KICAgICAgLy8g5LqL5Lu25a2Y5YKo77yaa2V5ID0gY2VsbEtleSAtPiBldmVudA0KICAgICAgZXZlbnRzOiB7fSwNCiAgICAgIC8vIOaaguWtmOiiq+makOiXj+iKguasoeWIl+S4iueahOS6i+S7tu+8mmtleSA9IOWRqC3mmJ/mnJ8t6IqC5qyhIC0+IGV2ZW5077yM5YiX5YaN5qyh5pi+56S65pe25oGi5aSNDQogICAgICBoaWRkZW5FdmVudHM6IHt9LA0KICAgICAgLy8g6YCJ5oup6ZuG77yI55So5pWw57uE5Lul5L+d6K+BIFZ1ZTIg5ZON5bqU5byP77yJDQogICAgICBzZWxlY3RlZEtleXM6IFtdLA0KICAgICAgLy8g5ouW5ou954q25oCBDQogICAgICBzZWxlY3Rpbmc6IGZhbHNlLA0KICAgICAgZHJhZ1N0YXJ0OiBudWxsLA0KICAgICAgZHJhZ1N0YXJ0U2VsZWN0ZWQ6IGZhbHNlLCAvLyDmjInkuIvotbfngrnlnKjmjInkuIvliY3mmK/lkKblt7LpgInkuK0NCiAgICAgIG1vdmVkOiBmYWxzZSwgLy8g5piv5ZCm5Y+R55Sf56e75Yqo77yI5Yy65YiG54K55Ye75LiO5ouW5ou977yJDQogICAgICBkcmFnQWRkTW9kZTogZmFsc2UsIC8vIGN0cmwg5ouW5ou95Li66L+95YqgDQogICAgICAvLyDnqpflj6PmjqfliLYNCiAgICAgIGFic29yYlByZXZpZXc6ICcnDQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC8vIOW9k+WJjeWPr+ingeWIl++8iOeUseW8gOWFs+i/h+a7pO+8jOm7mOiupOavj+WkqeS4ieS4quiKguasoe+8iQ0KICAgIHZpc2libGVDb2x1bW5zKCkgew0KICAgICAgY29uc3QgY29scyA9IFtdDQogICAgICBsZXQgY29sSW5kZXggPSAwDQogICAgICBXRUVLX0RBWVMuZm9yRWFjaCgoZGF5TGFiZWwsIGRheUluZGV4KSA9PiB7DQogICAgICAgIFNMT1RfREVGUy5mb3JFYWNoKHNsb3QgPT4gew0KICAgICAgICAgIGlmIChzbG90LmN0cmwgJiYgIXRoaXNbc2xvdC5jdHJsXSkgcmV0dXJuDQogICAgICAgICAgY29scy5wdXNoKHsgY29sSW5kZXg6IGNvbEluZGV4LCBkYXlJbmRleDogZGF5SW5kZXgsIHNsb3RLZXk6IHNsb3Qua2V5LCBzbG90TGFiZWw6IHNsb3QubGFiZWwsIGRheUxhYmVsOiBkYXlMYWJlbCB9KQ0KICAgICAgICAgIGNvbEluZGV4KysNCiAgICAgICAgfSkNCiAgICAgIH0pDQogICAgICByZXR1cm4gY29scw0KICAgIH0sDQogICAgLy8geHF4bGIg55qE5bm05bqm77yIbmTvvInkuLrlubTku73vvIjlpoIgMjAyNu+8ie+8jOeUsSA2IOS9jeWtpuacn+S7o+WPt++8iOWmgiAyMDI2MDHvvInmiKrlj5bliY0gNCDkvY3lvpflh7oNCiAgICB4cXhsYk5kKCkgew0KICAgICAgcmV0dXJuIE51bWJlcihTdHJpbmcodGhpcy5uZCkuc2xpY2UoMCwgNCkpDQogICAgfQ0KICB9LA0KICB3YXRjaDogew0KICAgIG5kOiB7DQogICAgICBpbW1lZGlhdGU6IHRydWUsDQogICAgICBoYW5kbGVyKHZhbCkgew0KICAgICAgICBpZiAodmFsKSB0aGlzLmxvYWRTZW1lc3RlcigpDQogICAgICB9DQogICAgfSwNCiAgICB2aXNpYmxlQ29sdW1ucyhuZXdDb2xzLCBvbGRDb2xzKSB7DQogICAgICAvLyDoioLmrKHliJfmmL7pmpDkvJrmlLnlj5jliJfntKLlvJXvvIzmjInjgIzlkajmnJ8t5pif5pyfLeiKguasoeOAjemHjeWumuS9jeS6i+S7tu+8jOmBv+WFjeS6i+S7tumaj+aXtumXtOagvOWIl+WBj+enuw0KICAgICAgaWYgKG9sZENvbHMgJiYgb2xkQ29scy5sZW5ndGgpIHsNCiAgICAgICAgY29uc3Qgb2xkUG9zT2YgPSBpbmRleCA9PiAob2xkQ29sc1tpbmRleF0gfHwgbnVsbCkNCiAgICAgICAgY29uc3QgbmV3SW5kZXggPSAoZGF5SW5kZXgsIHNsb3RLZXkpID0+IHsNCiAgICAgICAgICBjb25zdCBjID0gbmV3Q29scy5maW5kKHggPT4geC5kYXlJbmRleCA9PT0gZGF5SW5kZXggJiYgeC5zbG90S2V5ID09PSBzbG90S2V5KQ0KICAgICAgICAgIHJldHVybiBjID8gYy5jb2xJbmRleCA6IC0xDQogICAgICAgIH0NCiAgICAgICAgY29uc3QgbmV4dCA9IHt9DQogICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXZlbnRzKS5mb3JFYWNoKGtleSA9PiB7DQogICAgICAgICAgY29uc3QgbSA9IGtleS5tYXRjaCgvXncoXGQrKS1jKFxkKykkLykNCiAgICAgICAgICBpZiAoIW0pIHJldHVybg0KICAgICAgICAgIGNvbnN0IHdJZHggPSArbVsxXQ0KICAgICAgICAgIGNvbnN0IG9sZCA9IG9sZFBvc09mKCttWzJdKQ0KICAgICAgICAgIGlmICghb2xkKSByZXR1cm4NCiAgICAgICAgICBjb25zdCBuZXdDID0gbmV3SW5kZXgob2xkLmRheUluZGV4LCBvbGQuc2xvdEtleSkNCiAgICAgICAgICBpZiAobmV3QyA8IDApIHsNCiAgICAgICAgICAgIC8vIOivpeiKguasoeWIl+iiq+makOiXj++8muS6i+S7tuaaguWtmO+8jOW+heWIl+WGjeasoeaYvuekuuaXtuaBouWkjQ0KICAgICAgICAgICAgdGhpcy5oaWRkZW5FdmVudHNbdGhpcy5jZWxsU3RhYmxlS2V5KHdJZHgsIG9sZC5kYXlJbmRleCwgb2xkLnNsb3RLZXkpXSA9IHRoaXMuZXZlbnRzW2tleV0NCiAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgIH0NCiAgICAgICAgICBuZXh0Wyd3JyArIHdJZHggKyAnLWMnICsgbmV3Q10gPSB0aGlzLmV2ZW50c1trZXldDQogICAgICAgIH0pDQogICAgICAgIC8vIOaBouWkjemHjeaWsOaYvuekuueahOmakOiXj+iKguasoeS6i+S7tg0KICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhpZGRlbkV2ZW50cykuZm9yRWFjaChzdGFibGUgPT4gew0KICAgICAgICAgIGNvbnN0IHAgPSBzdGFibGUuc3BsaXQoJy0nKQ0KICAgICAgICAgIGNvbnN0IHdJZHggPSArcFswXQ0KICAgICAgICAgIGNvbnN0IGRheUluZGV4ID0gK3BbMV0NCiAgICAgICAgICBjb25zdCBzbG90S2V5ID0gcFsyXQ0KICAgICAgICAgIGNvbnN0IG5ld0MgPSBuZXdJbmRleChkYXlJbmRleCwgc2xvdEtleSkNCiAgICAgICAgICBpZiAobmV3QyA+PSAwKSB7DQogICAgICAgICAgICBuZXh0Wyd3JyArIHdJZHggKyAnLWMnICsgbmV3Q10gPSB0aGlzLmhpZGRlbkV2ZW50c1tzdGFibGVdDQogICAgICAgICAgICBkZWxldGUgdGhpcy5oaWRkZW5FdmVudHNbc3RhYmxlXQ0KICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXh0DQogICAgICB9DQogICAgICAvLyDliJflj5jljJblkI7muIXnqbrml6DmlYjpgInmi6nvvIjliJfntKLlvJXlkKvkuYnkvJrlj5jvvIkNCiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gW10NCiAgICB9DQogIH0sDQogIGJlZm9yZURlc3Ryb3koKSB7DQogICAgdGhpcy5yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoKQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLyogLS0tLS0tLS0tLSDmlbDmja7liqDovb0gLS0tLS0tLS0tLSAqLw0KICAgIGxvYWRTZW1lc3RlcigpIHsNCiAgICAgIGlmICghdGhpcy5uZCkgcmV0dXJuDQogICAgICBnZXRTZW1lc3Rlcih0aGlzLm5kKQ0KICAgICAgICAudGhlbihyZXMgPT4gew0KICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YSB8fCByZXMgfHwge30NCiAgICAgICAgICBjb25zdCBreCA9IChkYXRhLmt4cnEgfHwgJycpLnRvU3RyaW5nKCkuc2xpY2UoMCwgMTApDQogICAgICAgICAgY29uc3QganggPSAoZGF0YS5qc3JxIHx8ICcnKS50b1N0cmluZygpLnNsaWNlKDAsIDEwKQ0KICAgICAgICAgIGlmIChreCAmJiBqeCkgew0KICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBuZXcgRGF0ZShreC5yZXBsYWNlKC8tL2csICcvJykpDQogICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZShqeC5yZXBsYWNlKC8tL2csICcvJykpDQogICAgICAgICAgICB0aGlzLmJ1aWxkV2Vla3MoKQ0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzLmxvYWRYcXhsYkV2ZW50cygpDQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflrabmnJ/or6bmg4Xojrflj5blpLHotKXvvIzor7fnoa7orqTlrabmnJ/mlbDmja4nKQ0KICAgICAgICB9KQ0KICAgIH0sDQogICAgLy8g5LuO5ZCO56uv5ouJ5Y+W5pys5a2m5pyf5qCh5Y6G5LqL5Lu277yM5riy5p+T5Yiw5a+55bqU5pe26Ze05qC877yI5bm05bqm55SxIDYg5L2N5a2m5pyf5Luj5Y+35oiq5Y+W5YmNIDQg5L2N77yJDQogICAgbG9hZFhxeGxiRXZlbnRzKCkgew0KICAgICAgbGlzdFhxeGxiKHsgbmQ6IHRoaXMueHF4bGJOZCB9KS50aGVuKHJlcyA9PiB7DQogICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YQ0KICAgICAgICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiAoZGF0YSAmJiBkYXRhLnJlY29yZHMpIHx8IFtdDQogICAgICAgIHJldHVybiBsaXN0DQogICAgICB9KS50aGVuKGxpc3QgPT4gew0KICAgICAgICBjb25zdCBsb2FkZWQgPSB7fQ0KICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5sb2NhdGVYcXhsYihpdGVtKQ0KICAgICAgICAgIGlmICghcG9zKSByZXR1cm4NCiAgICAgICAgICBjb25zdCBldiA9IHsNCiAgICAgICAgICAgIGJoOiBpdGVtLmJoLA0KICAgICAgICAgICAgbmFtZTogaXRlbS5qcW1jIHx8ICcnLA0KICAgICAgICAgICAgYm9sZDogISFpdGVtLmpjLA0KICAgICAgICAgICAgc2NoZWR1bGFibGU6ICEhaXRlbS5rcGssDQogICAgICAgICAgICBtYWluQ291cnNlOiAhIWl0ZW0uemRwaywNCiAgICAgICAgICAgIHJlbWFya1Nob3c6ICEhaXRlbS5ienhzLA0KICAgICAgICAgICAgcmVtYXJrOiBpdGVtLmJ6IHx8ICcnDQogICAgICAgICAgfQ0KICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5jb2xJbmRleE9mKHBvcy5kYXlJbmRleCwgcG9zLnNsb3RLZXkpDQogICAgICAgICAgaWYgKGNvbEluZGV4ID49IDApIHsNCiAgICAgICAgICAgIGxvYWRlZFt0aGlzLmNlbGxLZXkocG9zLndJZHgsIGNvbEluZGV4KV0gPSBldg0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAvLyDor6XoioLmrKHliJflvZPliY3pmpDol4/vvJrmmoLlrZjvvIjlkKsgYmjvvInvvIzlvoXliJfmmL7npLrml7bnlLEgdmlzaWJsZUNvbHVtbnMg55uR5ZCs5oGi5aSNDQogICAgICAgICAgICB0aGlzLmhpZGRlbkV2ZW50c1t0aGlzLmNlbGxTdGFibGVLZXkocG9zLndJZHgsIHBvcy5kYXlJbmRleCwgcG9zLnNsb3RLZXkpXSA9IGV2DQogICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgICAgICAvLyDlkIjlubbliLDnjrDmnInmoLzlrZDvvIjlkI7nq6/mlbDmja7opobnm5blt7LmnInnirbmgIHvvIkNCiAgICAgICAgdGhpcy5ldmVudHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmV2ZW50cywgbG9hZGVkKQ0KICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+agoeWOhuS6i+S7tuWKoOi9veWksei0pScpDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g5qC55o2u5YGH5pyf6K6w5b2V5Y+N5o6o5pe26Ze05qC85L2N572u77yIanFzaiDml6XmnJ8gKyBjb3Vyc2VDbGFzcyDoioLmrKHvvInvvIzkuI7liJfmmK/lkKblj6/op4Hml6DlhbMNCiAgICBsb2NhdGVYcXhsYihpdGVtKSB7DQogICAgICBpZiAoIXRoaXMuc3RhcnREYXRlIHx8ICFpdGVtLmpxc2opIHJldHVybiBudWxsDQogICAgICBjb25zdCBkID0gbmV3IERhdGUoU3RyaW5nKGl0ZW0uanFzaikuc2xpY2UoMCwgMTApLnJlcGxhY2UoLy0vZywgJy8nKSkNCiAgICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsDQogICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLnJvdW5kKChkIC0gdGhpcy5zdGFydERhdGUpIC8gKDI0ICogMzYwMCAqIDEwMDApKQ0KICAgICAgaWYgKG9mZnNldCA8IDApIHJldHVybiBudWxsDQogICAgICBjb25zdCB3SWR4ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA3KQ0KICAgICAgY29uc3QgZGF5SW5kZXggPSBvZmZzZXQgJSA3DQogICAgICBjb25zdCBzbG90S2V5ID0gdGhpcy5jb3Vyc2VDbGFzc1RvU2xvdEtleShpdGVtLmNvdXJzZUNsYXNzKQ0KICAgICAgaWYgKHNsb3RLZXkgPT09IG51bGwpIHJldHVybiBudWxsDQogICAgICByZXR1cm4geyB3SWR4LCBkYXlJbmRleCwgc2xvdEtleSB9DQogICAgfSwNCiAgICAvLyDlkI7nq68gY291cnNlQ2xhc3Mg6IqC5qyh6IyD5Zu0IC0+IOWJjeerr+iKguasoSBrZXkNCiAgICBjb3Vyc2VDbGFzc1RvU2xvdEtleShjb3Vyc2VDbGFzcykgew0KICAgICAgaWYgKCFjb3Vyc2VDbGFzcykgcmV0dXJuIG51bGwNCiAgICAgIGNvbnN0IHMgPSBTdHJpbmcoY291cnNlQ2xhc3MpLnRyaW0oKQ0KICAgICAgZm9yIChjb25zdCBrZXkgaW4gU0xPVF9DT1VSU0VfTUFQKSB7DQogICAgICAgIGlmIChzID09PSBTTE9UX0NPVVJTRV9NQVBba2V5XSkgcmV0dXJuIGtleQ0KICAgICAgfQ0KICAgICAgLy8g5YW85a65ICI5MTAiLyIxMTEyIiDnrYnntKflh5Hlhpnms5UNCiAgICAgIGlmIChzID09PSAnOTEwJykgcmV0dXJuICduaWdodCcNCiAgICAgIGlmIChzID09PSAnMTExMicpIHJldHVybiAnbGF0ZScNCiAgICAgIHJldHVybiBudWxsDQogICAgfSwNCiAgICBidWlsZFdlZWtzKCkgew0KICAgICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSB8fCAhdGhpcy5lbmREYXRlKSByZXR1cm4NCiAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpDQogICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh0aGlzLmVuZERhdGUpDQogICAgICBjb25zdCBkYXlzID0gTWF0aC5yb3VuZCgoZW5kIC0gc3RhcnQpIC8gKDI0ICogMzYwMCAqIDEwMDApKSArIDENCiAgICAgIHRoaXMudG90YWxXZWVrcyA9IE1hdGguY2VpbChkYXlzIC8gNykNCiAgICAgIHRoaXMuZGF0ZVJhbmdlVGV4dCA9IGZtdERhdGUoc3RhcnQpICsgJyDliLAgJyArIGZtdERhdGUoZW5kKQ0KICAgICAgY29uc3Qgd2Vla3MgPSBbXQ0KICAgICAgZm9yIChsZXQgdyA9IDA7IHcgPCB0aGlzLnRvdGFsV2Vla3M7IHcrKykgew0KICAgICAgICBjb25zdCB3a1N0YXJ0ID0gbmV3IERhdGUoc3RhcnQpDQogICAgICAgIHdrU3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgKyB3ICogNykNCiAgICAgICAgY29uc3Qgd2tFbmQgPSBuZXcgRGF0ZSh3a1N0YXJ0KQ0KICAgICAgICB3a0VuZC5zZXREYXRlKHdrU3RhcnQuZ2V0RGF0ZSgpICsgNikNCiAgICAgICAgd2Vla3MucHVzaCh7DQogICAgICAgICAgcmFuZ2VUZXh0OiBwYWQyKHdrU3RhcnQuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgcGFkMih3a1N0YXJ0LmdldERhdGUoKSkgKw0KICAgICAgICAgICAgJ+iHsycgKyBwYWQyKHdrRW5kLmdldE1vbnRoKCkgKyAxKSArICctJyArIHBhZDIod2tFbmQuZ2V0RGF0ZSgpKQ0KICAgICAgICB9KQ0KICAgICAgfQ0KICAgICAgdGhpcy53ZWVrcyA9IHdlZWtzDQogICAgfSwNCiAgICBjb2xJbmRleE9mKGRheUluZGV4LCBzbG90S2V5KSB7DQogICAgICBjb25zdCBjb2wgPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmQoYyA9PiBjLmRheUluZGV4ID09PSBkYXlJbmRleCAmJiBjLnNsb3RLZXkgPT09IHNsb3RLZXkpDQogICAgICByZXR1cm4gY29sID8gY29sLmNvbEluZGV4IDogLTENCiAgICB9LA0KICAgIC8qIC0tLS0tLS0tLS0g5Y2V5YWD5qC85bel5YW3IC0tLS0tLS0tLS0gKi8NCiAgICBjZWxsS2V5KHdJZHgsIGNvbEluZGV4KSB7DQogICAgICByZXR1cm4gJ3cnICsgd0lkeCArICctYycgKyBjb2xJbmRleA0KICAgIH0sDQogICAgLy8g56iz5a6a55qE5Y2V5YWD5qC86Lqr5Lu977ya5LiN6ZqP5YiX5pi+6ZqQ5Y+Y5YyW55qE5ZGoLeaYn+acny3oioLmrKENCiAgICBjZWxsU3RhYmxlS2V5KHdJZHgsIGRheUluZGV4LCBzbG90S2V5KSB7DQogICAgICByZXR1cm4gd0lkeCArICctJyArIGRheUluZGV4ICsgJy0nICsgc2xvdEtleQ0KICAgIH0sDQogICAgZ2V0RXZlbnQod0lkeCwgY29sSW5kZXgpIHsNCiAgICAgIHJldHVybiB0aGlzLmV2ZW50c1t0aGlzLmNlbGxLZXkod0lkeCwgY29sSW5kZXgpXSB8fCBudWxsDQogICAgfSwNCiAgICB3ZWVrRGF5TGFiZWwoZGF5SW5kZXgpIHsNCiAgICAgIHJldHVybiBXRUVLX0RBWVNbZGF5SW5kZXhdDQogICAgfSwNCiAgICAvLyDljZXlhYPmoLzlhoXmmL7npLrnmoTml6XmnJ/mlbDlrZfvvIjlpoIgMDcwM++8iQ0KICAgIGRhdGVOdW1iZXJPZih3SWR4LCBkYXlJbmRleCkgew0KICAgICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSkgcmV0dXJuICcnDQogICAgICBjb25zdCBkID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpDQogICAgICBkLnNldERhdGUodGhpcy5zdGFydERhdGUuZ2V0RGF0ZSgpICsgd0lkeCAqIDcgKyBkYXlJbmRleCkNCiAgICAgIHJldHVybiBwYWQyKGQuZ2V0TW9udGgoKSArIDEpICsgcGFkMihkLmdldERhdGUoKSkNCiAgICB9LA0KICAgIGNlbGxDbGFzcyh3SWR4LCBjb2wpIHsNCiAgICAgIGNvbnN0IGNsYXNzZXMgPSBbXQ0KICAgICAgLy8g5pif5pyf5Lqk5pu/6IOM5pmv77yI5Y2V5Y+M5pel5LiN5ZCM5bqV6Imy77yJDQogICAgICBpZiAoY29sLmRheUluZGV4ICUgMiA9PT0gMCkgY2xhc3Nlcy5wdXNoKCdzY2UtY2VsbC1vZGQnKQ0KICAgICAgZWxzZSBjbGFzc2VzLnB1c2goJ3NjZS1jZWxsLWV2ZW4nKQ0KICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXlzLmluY2x1ZGVzKHRoaXMuY2VsbEtleSh3SWR4LCBjb2wuY29sSW5kZXgpKSkgY2xhc3Nlcy5wdXNoKCdpcy1zZWxlY3RlZCcpDQogICAgICBjb25zdCBldiA9IHRoaXMuZ2V0RXZlbnQod0lkeCwgY29sLmNvbEluZGV4KQ0KICAgICAgaWYgKGV2KSB7DQogICAgICAgIGNsYXNzZXMucHVzaCgnaGFzLWV2ZW50JykNCiAgICAgICAgaWYgKCFldi5zY2hlZHVsYWJsZSkgY2xhc3Nlcy5wdXNoKCduby1zY2hlZHVsZScpDQogICAgICB9DQogICAgICByZXR1cm4gY2xhc3Nlcw0KICAgIH0sDQogICAgLyogLS0tLS0tLS0tLSDngrnlh7sgLyDmi5bmi73lpJrpgIkgLS0tLS0tLS0tLSAqLw0KICAgIG9uR3JpZE1vdXNlRG93bihlKSB7DQogICAgICBjb25zdCBjZWxsID0gZS50YXJnZXQuY2xvc2VzdCgnLnNjZS1jZWxsJykNCiAgICAgIGlmICghY2VsbCkgew0KICAgICAgICAvLyDngrnlh7vnqbrnmb3ljLrvvIjpnZ7ljZXlhYPmoLzvvIzlkKvooajlpLTjgIHlkajmrKHliJfnrYnvvInlj5bmtojmiYDmnInpgInkuK0NCiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCkgdGhpcy5zZWxlY3RlZEtleXMgPSBbXQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIGUucHJldmVudERlZmF1bHQoKQ0KICAgICAgY29uc3Qga2V5ID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5JykNCiAgICAgIHRoaXMuZHJhZ1N0YXJ0ID0ga2V5DQogICAgICB0aGlzLmRyYWdBZGRNb2RlID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleQ0KICAgICAgLy8g6K6w5b2V6LW354K55qC85Zyo5oyJ5LiL5pe255qE6YCJ5Lit54q25oCB77yM55So5LqO5p2+5omL5pe25Yik5a6aIue6r+eCueWHuyLnmoTliIfmjaLooYzkuLoNCiAgICAgIHRoaXMuZHJhZ1N0YXJ0U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhrZXkpDQogICAgICB0aGlzLm1vdmVkID0gZmFsc2UNCiAgICAgIHRoaXMuc2VsZWN0aW5nID0gdHJ1ZQ0KICAgICAgLy8g6Z2eIGN0cmwg5qih5byP5LiL77yM6Iul6LW354K55pys6Lqr5bey6YCJ5Lit77yI5Y+v6IO95YeG5aSH5ouW5ou95omp5bGV77yJ77yM5YWI5LiN5riF6Zmk77yM6YG/5YWN6K+v5riF56m6DQogICAgICBpZiAoIXRoaXMuZHJhZ0FkZE1vZGUgJiYgIXRoaXMuZHJhZ1N0YXJ0U2VsZWN0ZWQpIHRoaXMuc2VsZWN0ZWRLZXlzID0gW10NCiAgICAgIHRoaXMuYWRkR2xvYmFsTGlzdGVuZXJzKCkNCiAgICB9LA0KICAgIGFkZEdsb2JhbExpc3RlbmVycygpIHsNCiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmlkTW91c2VNb3ZlKQ0KICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25HcmlkTW91c2VVcCkNCiAgICB9LA0KICAgIHJlbW92ZUdsb2JhbExpc3RlbmVycygpIHsNCiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmlkTW91c2VNb3ZlKQ0KICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25HcmlkTW91c2VVcCkNCiAgICB9LA0KICAgIG9uR3JpZE1vdXNlTW92ZShlKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0aW5nIHx8ICF0aGlzLmRyYWdTdGFydCkgcmV0dXJuDQogICAgICBpZiAoIXRoaXMubW92ZWQpIHRoaXMubW92ZWQgPSB0cnVlDQogICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpDQogICAgICBjb25zdCBjZWxsID0gZWwgJiYgZWwuY2xvc2VzdCA/IGVsLmNsb3Nlc3QoJy5zY2UtY2VsbCcpIDogbnVsbA0KICAgICAgaWYgKCFjZWxsKSByZXR1cm4NCiAgICAgIGNvbnN0IGN1cktleSA9IGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpDQogICAgICB0aGlzLnNlbGVjdFJlY3RhbmdsZSh0aGlzLmRyYWdTdGFydCwgY3VyS2V5LCB0aGlzLmRyYWdBZGRNb2RlKQ0KICAgIH0sDQogICAgb25HcmlkTW91c2VVcCgpIHsNCiAgICAgIGlmICghdGhpcy5zZWxlY3RpbmcpIHsNCiAgICAgICAgdGhpcy5yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIC8vIOe6r+eCueWHu++8iOacquenu+WKqO+8ieaXtu+8jOWBmuWNlemAiSAvIOWIh+aNog0KICAgICAgaWYgKCF0aGlzLm1vdmVkKSB7DQogICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZHJhZ1N0YXJ0DQogICAgICAgIGlmICh0aGlzLmRyYWdBZGRNb2RlKSB7DQogICAgICAgICAgLy8gQ3RybCArIOWNleWHu++8muWIh+aNouivpeagvOmAieS4rQ0KICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhrZXkpKSB7DQogICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IHRoaXMuc2VsZWN0ZWRLZXlzLmZpbHRlcihrID0+IGsgIT09IGtleSkNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMucHVzaChrZXkpDQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIC8vIOaZrumAmuWNleWHu++8muW3sumAieS4reWImeWPlua2iOivpeagvO+8jOacqumAieS4reWImeS7hemAieS4reivpeagvA0KICAgICAgICAgIGlmICh0aGlzLmRyYWdTdGFydFNlbGVjdGVkKSB7DQogICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IHRoaXMuc2VsZWN0ZWRLZXlzLmZpbHRlcihrID0+IGsgIT09IGtleSkNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBba2V5XQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdGhpcy5zZWxlY3RpbmcgPSBmYWxzZQ0KICAgICAgdGhpcy5kcmFnU3RhcnQgPSBudWxsDQogICAgICB0aGlzLmRyYWdTdGFydFNlbGVjdGVkID0gZmFsc2UNCiAgICAgIHRoaXMucmVtb3ZlR2xvYmFsTGlzdGVuZXJzKCkNCiAgICB9LA0KICAgIC8vIOagueaNrui1t+eCuee7iOeCuSBrZXkg6YCJ5Lit55+p5b2i6IyD5Zu05YaF5omA5pyJ5qC8DQogICAgc2VsZWN0UmVjdGFuZ2xlKHN0YXJ0S2V5LCBlbmRLZXksIGFkZE1vZGUpIHsNCiAgICAgIGNvbnN0IHBhcnNlID0gayA9PiB7DQogICAgICAgIGNvbnN0IG0gPSBrLm1hdGNoKC9edyhcZCspLWMoXGQrKSQvKQ0KICAgICAgICByZXR1cm4gbSA/IHsgdzogK21bMV0sIGM6ICttWzJdIH0gOiBudWxsDQogICAgICB9DQogICAgICBjb25zdCBzID0gcGFyc2Uoc3RhcnRLZXkpDQogICAgICBjb25zdCB0ID0gcGFyc2UoZW5kS2V5KQ0KICAgICAgaWYgKCFzIHx8ICF0KSByZXR1cm4NCiAgICAgIGlmICghYWRkTW9kZSkgdGhpcy5zZWxlY3RlZEtleXMgPSBbXQ0KICAgICAgY29uc3QgbWluVyA9IE1hdGgubWluKHMudywgdC53KQ0KICAgICAgY29uc3QgbWF4VyA9IE1hdGgubWF4KHMudywgdC53KQ0KICAgICAgY29uc3QgbWluQyA9IE1hdGgubWluKHMuYywgdC5jKQ0KICAgICAgY29uc3QgbWF4QyA9IE1hdGgubWF4KHMuYywgdC5jKQ0KICAgICAgZm9yIChsZXQgdyA9IG1pblc7IHcgPD0gbWF4VzsgdysrKSB7DQogICAgICAgIGZvciAobGV0IGMgPSBtaW5DOyBjIDw9IG1heEM7IGMrKykgew0KICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY2VsbEtleSh3LCBjKQ0KICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkS2V5cy5pbmRleE9mKGtleSkgPT09IC0xKSB0aGlzLnNlbGVjdGVkS2V5cy5wdXNoKGtleSkNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgLyogLS0tLS0tLS0tLSDkuovku7bmk43kvZwgLS0tLS0tLS0tLSAqLw0KICAgIGFwcGx5RXZlbnQoKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOmAieaLqeaXtumXtOagvCcpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9vbGJhci5ldmVudE5hbWUudHJpbSgpDQogICAgICBpZiAoIW5hbWUpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fovpPlhaXkuovku7blkI3np7AnKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIGNvbnN0IGtleXMgPSBbLi4udGhpcy5zZWxlY3RlZEtleXNdDQogICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsNCiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuZXZlbnRzW2tleV0NCiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZXZlbnRzLCBrZXksIHsNCiAgICAgICAgICBiaDogcHJldiA/IHByZXYuYmggOiB1bmRlZmluZWQsDQogICAgICAgICAgbmFtZTogbmFtZSwNCiAgICAgICAgICBib2xkOiB0aGlzLnRvb2xiYXIuYm9sZCwNCiAgICAgICAgICBzY2hlZHVsYWJsZTogdGhpcy50b29sYmFyLnNjaGVkdWxhYmxlLA0KICAgICAgICAgIG1haW5Db3Vyc2U6IHRoaXMudG9vbGJhci5tYWluQ291cnNlLA0KICAgICAgICAgIHJlbWFya1Nob3c6IHRoaXMudG9vbGJhci5yZW1hcmtTaG93LA0KICAgICAgICAgIHJlbWFyazogdGhpcy50b29sYmFyLnJlbWFyaw0KICAgICAgICB9KQ0KICAgICAgfSkNCiAgICAgIHRoaXMucGVyc2lzdEV2ZW50cyhrZXlzKQ0KICAgIH0sDQogICAgZGVsZXRlRXZlbnQoKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOmAieaLqeaXtumXtOagvCcpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgY29uc3Qga2V5cyA9IFsuLi50aGlzLnNlbGVjdGVkS2V5c10NCiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gew0KICAgICAgICB0aGlzLiRkZWxldGUodGhpcy5ldmVudHMsIGtleSkNCiAgICAgIH0pDQogICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+W3suWIoOmZpCAnICsga2V5cy5sZW5ndGggKyAnIOS4quaXtumXtOagvOS6i+S7ticpDQogICAgfSwNCiAgICBhYnNvcmJFdmVudCgpIHsNCiAgICAgIC8vIOWQuOWPlu+8muWPlumAieaLqeS4reesrOS4gOS4quacieS6i+S7tueahOagvA0KICAgICAgbGV0IHRhcmdldCA9IG51bGwNCiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuc2VsZWN0ZWRLZXlzKSB7DQogICAgICAgIGlmICh0aGlzLmV2ZW50c1trZXldKSB7IHRhcmdldCA9IHRoaXMuZXZlbnRzW2tleV07IGJyZWFrIH0NCiAgICAgIH0NCiAgICAgIGlmICghdGFyZ2V0KSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5omA6YCJ5pe26Ze05qC85Lit5peg5LqL5Lu25Y+v5ZC45Y+WJykNCiAgICAgICAgcmV0dXJuDQogICAgICB9DQogICAgICB0aGlzLnRvb2xiYXIuZXZlbnROYW1lID0gdGFyZ2V0Lm5hbWUNCiAgICAgIHRoaXMudG9vbGJhci5ib2xkID0gISF0YXJnZXQuYm9sZA0KICAgICAgdGhpcy50b29sYmFyLnNjaGVkdWxhYmxlID0gISF0YXJnZXQuc2NoZWR1bGFibGUNCiAgICAgIHRoaXMudG9vbGJhci5tYWluQ291cnNlID0gISF0YXJnZXQubWFpbkNvdXJzZQ0KICAgICAgdGhpcy50b29sYmFyLnJlbWFya1Nob3cgPSAhIXRhcmdldC5yZW1hcmtTaG93DQogICAgICB0aGlzLnRvb2xiYXIucmVtYXJrID0gdGFyZ2V0LnJlbWFyayB8fCAnJw0KICAgICAgdGhpcy5hYnNvcmJQcmV2aWV3ID0gdGFyZ2V0Lm5hbWUNCiAgICB9LA0KICAgIG9uQ2VsbERibENsaWNrKHdJZHgsIGNvbCkgew0KICAgICAgY29uc3QgZXYgPSB0aGlzLmdldEV2ZW50KHdJZHgsIGNvbC5jb2xJbmRleCkNCiAgICAgIGlmIChldikgew0KICAgICAgICB0aGlzLnRvb2xiYXIuZXZlbnROYW1lID0gZXYubmFtZQ0KICAgICAgICB0aGlzLnRvb2xiYXIuYm9sZCA9ICEhZXYuYm9sZA0KICAgICAgICB0aGlzLnRvb2xiYXIuc2NoZWR1bGFibGUgPSAhIWV2LnNjaGVkdWxhYmxlDQogICAgICAgIHRoaXMudG9vbGJhci5tYWluQ291cnNlID0gISFldi5tYWluQ291cnNlDQogICAgICAgIHRoaXMudG9vbGJhci5yZW1hcmtTaG93ID0gISFldi5yZW1hcmtTaG93DQogICAgICAgIHRoaXMudG9vbGJhci5yZW1hcmsgPSBldi5yZW1hcmsgfHwgJycNCiAgICAgICAgdGhpcy5hYnNvcmJQcmV2aWV3ID0gZXYubmFtZQ0KICAgICAgICB0aGlzLiRtZXNzYWdlLmluZm8oJ+W3suWQuOWPluS6i+S7tu+8micgKyBldi5uYW1lKQ0KICAgICAgfQ0KICAgIH0sDQogICAgcmVmcmVzaEdyaWQoKSB7DQogICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdDQogICAgICB0aGlzLmFic29yYlByZXZpZXcgPSAnJw0KICAgICAgdGhpcy5ldmVudHMgPSB7fQ0KICAgICAgdGhpcy5oaWRkZW5FdmVudHMgPSB7fQ0KICAgICAgdGhpcy5sb2FkWHF4bGJFdmVudHMoKQ0KICAgICAgdGhpcy4kbWVzc2FnZS5pbmZvKCflt7LliLfmlrAnKQ0KICAgIH0sDQogICAgLyogLS0tLS0tLS0tLSDlkI7nq6/mjIHkuYXljJbvvIh4cXhsYiDmjqXlj6PvvIkgLS0tLS0tLS0tLSAqLw0KICAgIC8vIOaJuemHj+S/neWtmOmAieS4reagvOS6i+S7tu+8jOi/lOWbnuWQhOagvOWtkOS/neWtmOaIkOWKny/lpLHotKXnmoTkuKrmlbANCiAgICBwZXJzaXN0RXZlbnRzKGtleXMpIHsNCiAgICAgIGNvbnN0IHRhc2tzID0ga2V5cw0KICAgICAgICAuZmlsdGVyKGtleSA9PiB0aGlzLmV2ZW50c1trZXldKQ0KICAgICAgICAubWFwKGtleSA9PiB7DQogICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYnVpbGRYcXhsYlBheWxvYWQoa2V5LCB0aGlzLmV2ZW50c1trZXldKQ0KICAgICAgICAgIGlmICghcGF5bG9hZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSkNCiAgICAgICAgICByZXR1cm4gdXBkYXRlWHF4bGIocGF5bG9hZCkNCiAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpDQogICAgICAgICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpDQogICAgICAgIH0pDQogICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGFza3MpLnRoZW4ocmVzdWx0cyA9PiB7DQogICAgICAgIGNvbnN0IG9rID0gcmVzdWx0cy5maWx0ZXIociA9PiByID09PSB0cnVlKS5sZW5ndGgNCiAgICAgICAgY29uc3QgZmFpbCA9IHJlc3VsdHMubGVuZ3RoIC0gb2sNCiAgICAgICAgaWYgKGZhaWwgPiAwKSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihmYWlsICsgJyDkuKrkuovku7bkv53lrZjlpLHotKXvvIzor7fmo4Dmn6XlkI7nq6/mjqXlj6MnKQ0KICAgICAgICB9IGVsc2UgaWYgKG9rID4gMCkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5bey6K6+5a6aICcgKyBvayArICcg5Liq5pe26Ze05qC8JykNCiAgICAgICAgfQ0KICAgICAgICAvLyDkv53lrZjmiJDlip/lkI7ph43mlrDmi4nlj5bvvIzlm57lhpnlkITorrDlvZXkuLvplK7vvIzpgb/lhY3ph43lpI3mlrDlop4NCiAgICAgICAgdGhpcy5sb2FkWHF4bGJFdmVudHMoKQ0KICAgICAgICByZXR1cm4geyBvazogb2ssIGZhaWw6IGZhaWwgfQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8vIOaehOmAoCB4cXhsYiDmj5DkuqTmlbDmja4NCiAgICBidWlsZFhxeGxiUGF5bG9hZChrZXksIGV2KSB7DQogICAgICBjb25zdCBwb3MgPSB0aGlzLnBhcnNlQ2VsbEtleShrZXkpDQogICAgICBpZiAoIXBvcykgcmV0dXJuIG51bGwNCiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZSkNCiAgICAgIGQuc2V0RGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgKyBwb3Mud0lkeCAqIDcgKyBwb3MuZGF5SW5kZXgpDQogICAgICByZXR1cm4gew0KICAgICAgICBkZWxGbGFnOiAwLA0KICAgICAgICBiaDogZXYuYmggfHwgdW5kZWZpbmVkLA0KICAgICAgICBuZDogdGhpcy54cXhsYk5kLA0KICAgICAgICBqcXNqOiBmbXREYXRlKGQpLA0KICAgICAgICBqcW1jOiBldi5uYW1lIHx8ICcnLA0KICAgICAgICBqYzogISFldi5ib2xkLA0KICAgICAgICBiejogZXYucmVtYXJrIHx8IG51bGwsDQogICAgICAgIGtwazogISFldi5zY2hlZHVsYWJsZSwNCiAgICAgICAgYnp4czogISFldi5yZW1hcmtTaG93LA0KICAgICAgICB6ZHBrOiAhIWV2Lm1haW5Db3Vyc2UsDQogICAgICAgIGNvdXJzZUNsYXNzOiBTTE9UX0NPVVJTRV9NQVBbcG9zLnNsb3RLZXldIHx8IG51bGwNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOaXtumXtOagvCBrZXkgLT4geyB3SWR4LCBkYXlJbmRleCwgc2xvdEtleSB9DQogICAgcGFyc2VDZWxsS2V5KGtleSkgew0KICAgICAgY29uc3QgbSA9IGtleS5tYXRjaCgvXncoXGQrKS1jKFxkKykkLykNCiAgICAgIGlmICghbSkgcmV0dXJuIG51bGwNCiAgICAgIGNvbnN0IGNvbEluZGV4ID0gK21bMl0NCiAgICAgIGNvbnN0IGNvbCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZChjID0+IGMuY29sSW5kZXggPT09IGNvbEluZGV4KQ0KICAgICAgaWYgKCFjb2wpIHJldHVybiBudWxsDQogICAgICByZXR1cm4geyB3SWR4OiArbVsxXSwgZGF5SW5kZXg6IGNvbC5kYXlJbmRleCwgc2xvdEtleTogY29sLnNsb3RLZXkgfQ0KICAgIH0sDQogICAgLyogLS0tLS0tLS0tLSDov5Tlm57lrabmnJ/nrqHnkIYgLS0tLS0tLS0tLSAqLw0KICAgIGhhbmRsZUNsb3NlKCkgew0KICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKQ0KICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiAnL3RlYWNoQnVzaW5lc3Mvc2VtZXN0ZXInIH0pDQogICAgfQ0KICB9DQp9DQo="},null]}