Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥年度爽文!被打后手把手教你拿到人生第一桶金!【被打后续 逐帧分析】@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuexu+eJh+W6k1wiLFwicGF0aFwiOlwidmF1bHRcIixcInJ1bGVcIjpcIumhtumDqOWkp+exuyA9IFsn5Zu95YibJywgJ+eUteinhicsICfnuqrlvZXniYcnLCAn57u86Im6JywgJ+eVquWJpycsICfnlLXlvbEnXVxcbmlmIChwYWdlID09IDEpIHtcXG4gICAgLy8g5oqY5Y+g5byA5YWzXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5YWzJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+aKmOWPoCcsICflhbMnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+W8gCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICDpobbpg6jlpKfnsbsuZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBsaSA9PSBnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIGxpICsgJzwvZm9udD48L2I+JyA6IGxpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGkpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wkp+exuycsIGxpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgbGkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgIH0pXFxufVxcbi8vIOmhtumDqOWIhuexu+WPguaVsOaYoOWwhFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+Wkp+exuycsICflm73liJsnKSkge1xcbiAgICBjYXNlICflm73liJsnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDQ7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZ3VvY2h1YW5nL2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlLXop4YnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDU7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdHYvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e6quW9leeJhyc6XFxuICAgICAgICBzZWFzb25UeXBlID0gMztcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9kb2N1bWVudGFyeS9pbmRleC8nKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e7vOiJuic6XFxuICAgICAgICBzZWFzb25UeXBlID0gNztcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92YXJpZXR5L2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlarliacnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDE7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYW5pbWUvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eUteW9sSc6XFxuICAgICAgICBzZWFzb25UeXBlID0gMjtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9tb3ZpZS9pbmRleCcpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvblR5cGUgPSA0O1xcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDlrZDliIbnsbvlj4LmlbDmmKDlsIRcXG5zd2l0Y2ggKGdldE15VmFyKCfnsbvlnosnLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5q2j54mHJzpcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlLXlvbEnOlxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFtuS7lic6XFxuICAgICAgICBzZWFzb25fdmVyc2lvbiA9IDM7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign6YWN6Z+zJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+WOn+WjsCc6XFxuICAgICAgICBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSA9IDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lit5paH6YWN6Z+zJzpcXG4gICAgICAgIHNwb2tlbl9sYW5ndWFnZV90eXBlID0gMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc3Bva2VuX2xhbmd1YWdlX3R5cGUgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCflnLDljLonLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5Lit5Zu95aSn6ZmGJzpcXG4gICAgICAgIGFyZWEgPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXpeacrCc6XFxuICAgICAgICBhcmVhID0gMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnvo7lm70nOlxcbiAgICAgICAgYXJlYSA9IDM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Iux5Zu9JzpcXG4gICAgICAgIGFyZWEgPSA0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S4reWbvea4r+WPsCc6XFxuICAgICAgICBhcmVhID0gWzYsIDddO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mfqeWbvSc6XFxuICAgICAgICBhcmVhID0gODtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfms5Xlm70nOlxcbiAgICAgICAgYXJlYSA9IDk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rOw5Zu9JzpcXG4gICAgICAgIGFyZWEgPSAxMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfopb/nj63niZknOlxcbiAgICAgICAgYXJlYSA9IDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W+t+WbvSc6XFxuICAgICAgICBhcmVhID0gMTU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oSP5aSn5YipJzpcXG4gICAgICAgIGFyZWEgPSAzNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflhbbku5YnOlxcbiAgICAgICAgLy8g5Y+q5piv55Wq5Ymn55qE5oOF5Ya1X+WFsTU177yM6KaB5YeP5Y675Ye6546w55qE4oCU4oCU566X5LqG77yM55u05o6l5Zyo5Yqo5oCB5YiG57G755qE5pe25YCZ5Y675o6J5LqGXFxuICAgICAgICBhcmVhID0gWzEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1XTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgYXJlYSA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eKtuaAgScsICflhajpg6gnKSkge1xcbiAgICBjYXNlICflroznu5MnOlxcbiAgICAgICAgaXNfZmluaXNoID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfov57ovb0nOlxcbiAgICAgICAgaXNfZmluaXNoID0gMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgaXNfZmluaXNoID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign5Ye65ZOBJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+Wkruinhic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnQkJDJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmjqLntKLpopHpgZMnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWutuWcsOeQhic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDE0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ05ISyc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Y6G5Y+y6aKR6YGTJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfljavop4YnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iHquWItic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnSVRWJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdTS1knOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSAzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ1pERic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WQiOS9nOacuuaehCc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDExO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWGheWFtuS7lic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWkluWFtuWugyc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eJiOadgycsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfni6zlrrYnOlxcbiAgICAgICAgY29weXJpZ2h0ID0gMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflhbbku5YnOlxcbiAgICAgICAgY29weXJpZ2h0ID0gWzEsIDIsIDRdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBjb3B5cmlnaHQgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCfku5jotLknLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5YWN6LS5JzpcXG4gICAgICAgIHNlYXNvbl9zdGF0dXMgPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S7mOi0uSc6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gWzIsIDZdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wkp+S8muWRmCc6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gWzQsIDZdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign5a2j5bqmJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJzHmnIgnOlxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICc05pyIJzpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnN+aciCc6XFxuICAgICAgICBzZWFzb25fbW9udGggPSA3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzEw5pyIJzpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzZWFzb25fbW9udGggPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDliKTmlq3lkozmmKDlsITlubTku71cXG5zd2l0Y2ggKGdldE15VmFyKCflpKfnsbsnLCAn5Zu95YibJykpIHtcXG4gICAgY2FzZSAn5Zu95YibJzpcXG4gICAgY2FzZSAn55Wq5YmnJzpcXG4gICAgICAgIC8vIOeVquWJp+WSjOWbveWIm+OAkOS5n+aYr+WPq+WBmuW5tOS7veS9huWPguaVsOWQjeOAgeagvOW8j+WSjOWFtuS7luWIhuexu+S4jeS4gOagt+OAkVxcbiAgICAgICAgYW5pbWVfeWVhciA9IGdldE15VmFyKCflubTku70nLCAn5YWo6YOoJyk7XFxuICAgICAgICBzd2l0Y2ggKGFuaW1lX3llYXIuaW5jbHVkZXMoJy0nKSkge1xcbiAgICAgICAgICAgIGNhc2UgdHJ1ZTpcXG4gICAgICAgICAgICAgICAgZWFybHkgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMV07XFxuICAgICAgICAgICAgICAgIGxhdGVyID0gYW5pbWVfeWVhci5zcGxpdCgnLScpWzBdO1xcbiAgICAgICAgICAgICAgICB5ZWFyID0gYFske2Vhcmx5fSwke051bWJlcihsYXRlcikgKyAxfSlgO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIGZhbHNlOlxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFuaW1lX3llYXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1sxOTkwLDIwMDApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1sxOTgwLDE5OTApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+abtOaXqSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9ICdbLDE5ODApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IC0xO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gYFske2FuaW1lX3llYXJ9LCR7TnVtYmVyKGFuaW1lX3llYXIpICsgMX0pYDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgLy8g6Zmk5LqG55Wq5Ymn5ZKM5Zu95Yib55qE5YW25LuW5YiG57G7XFxuICAgICAgICB0dl95ZWFyID0gZ2V0TXlWYXIoJ+W5tOS7vScsICflhajpg6gnKTtcXG4gICAgICAgIHN3aXRjaCAodHZfeWVhci5pbmNsdWRlcygnLScpKSB7XFxuICAgICAgICAgICAgY2FzZSB0cnVlOlxcbiAgICAgICAgICAgICAgICBlYXJseSA9IHR2X3llYXIuc3BsaXQoJy0nKVsxXTtcXG4gICAgICAgICAgICAgICAgbGF0ZXIgPSB0dl95ZWFyLnNwbGl0KCctJylbMF07XFxuICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IGBbJHtlYXJseX0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIobGF0ZXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYFxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIGZhbHNlOlxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR2X3llYXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAnWzE5OTAtMDEtMDEgMDA6MDA6MDAsMjAwMC0wMS0wMSAwMDowMDowMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICc4MOW5tOS7oyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1sxOTgwLTAxLTAxIDAwOjAwOjAwLDE5OTAtMDEtMDEgMDA6MDA6MDApJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5pu05pepJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAnWywxOTgwLTAxLTAxIDAwOjAwOjAwKSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICflhajpg6gnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IC0xO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSBgWyR7dHZfeWVhcn0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIodHZfeWVhcikgKyAxfS0wMS0wMSAwMDowMDowMClgO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICB9XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+mjjuagvCcsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfnlLXlvbEnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTA7XFxuICAgICAgICBicmVhaztcXG4gICAgLy8g55Wq5Ymn5qCP55uuXFxuICAgIGNhc2UgJ+WOn+WImyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a8q+eUu+aUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDExO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wwj+ivtOaUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a4uOaIj+aUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eJueaRhCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W4g+iii+aIjyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eDreihgCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+epv+i2iic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wlh+W5uyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIC8vIOWSi+i3s+S6huS4gOS4quaNj35cXG4gICAgY2FzZSAn5oiY5paXJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pCe56yRJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pel5bi4JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56eR5bm7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6JCM57O7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rK75oSIJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5qCh5ZutJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bCR5YS/JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rOh6Z2iJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oGL54ixJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bCR5aWzJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6a2U5rOVJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YaS6ZmpJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Y6G5Y+yJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5p6256m6JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5py65oiYJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56We6a2UJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5aOw5o6nJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6L+Q5YqoJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yqx5b+XJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z+z5LmQJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5o6o55CGJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56S+5ZuiJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pm65paXJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YKs5rOqJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn576O6aOfJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YG25YOPJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5LmZ5aWzJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6IGM5Zy6JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDg7XFxuICAgICAgICBicmVhaztcXG5cXG4gICAgLy8g57u86Im65qCP55uu44CB55S15b2xXFxuICAgIGNhc2UgJ+WJp+aDhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WWnOWJpyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eIseaDhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOS9nCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aBkOaAlic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eKr+e9qic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aDiuaCmic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aCrOeWkSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aImOS6iSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOeUuyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S8oOiusCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WutuW6rSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+atjOiInic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e6quWunic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eBvumavic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S6uuaWhyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+enkeaKgCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wuh+WumSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iQjOWuoCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ekvuS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOeJqSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iHqueEtic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WMu+eWlyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDczO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGm+S6iyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e9quahiCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+elnuenmCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXheihjCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+atpuS+oCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mdkuaYpSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mDveW4gic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WPpOijhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iwjeaImCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e7j+WFuCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aDheaEnyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+elnuivnSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W5tOS7oyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGnOadkSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WIkeS+pic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGm+aXhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iuv+iwiCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iEseWPo+engCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ecn+S6uuengCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mAieengCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXhea4uCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aZmuS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a8lOWUseS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S6suWtkCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFu+aIkCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aWh+WMlic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMTAwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIC8vIOeUteW9seagj+ebrlxcbiAgICBjYXNlICfnn63niYcnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDEwNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDmmKDlsITnnJ/lrp7or7fmsYLlnLDlnYBcXG5zd2l0Y2ggKHNlYXNvblR5cGUpIHtcXG4gICAgY2FzZSA0OlxcbiAgICAgICAgLy8g5Zu95YibXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZpc19maW5pc2g9JyArIGlzX2ZpbmlzaCArICcmY29weXJpZ2h0PScgKyBjb3B5cmlnaHQgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD00JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT00JnBhZ2VzaXplPTMwJnR5cGU9MSdcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDU6XFxuICAgICAgICAvLyDnlLXop4bliadcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9hcmVhPScgKyBhcmVhICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTUmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTUmcGFnZXNpemU9MzAmdHlwZT0xJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNzpcXG4gICAgICAgIC8vIOe7vOiJulxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P3NlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MiZzdD03JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT03JnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAxOlxcbiAgICAgICAgLy8g55Wq5YmnXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZzcG9rZW5fbGFuZ3VhZ2VfdHlwZT0nICsgc3Bva2VuX2xhbmd1YWdlX3R5cGUgKyAnJmFyZWE9JyArIGFyZWEgKyAnJmlzX2ZpbmlzaD0nICsgaXNfZmluaXNoICsgJyZjb3B5cmlnaHQ9JyArIGNvcHlyaWdodCArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmc2Vhc29uX21vbnRoPScgKyBzZWFzb25fbW9udGggKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD0xJnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT0xJnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAzOlxcbiAgICAgICAgLy8g57qq5b2V54mHXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZwcm9kdWNlcl9pZD0nICsgcHJvZHVjZXJfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTMmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTMmcGFnZXNpemU9MzAmdHlwZT0xJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMjpcXG4gICAgICAgIC8vIOeUteW9sVxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P2FyZWE9JyArIGFyZWEgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9MiZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9MiZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxuICAgICAgICBicmVhaztcXG59XFxudHJ1ZV91cmwgPSBlbmNvZGVVUkkodHJ1ZV91cmwpO1xcbmxpc3QgPSBKU09OLnBhcnNlKGZldGNoKHRydWVfdXJsKSkuZGF0YS5saXN0O1xcbnRyeSB7XFxuICAgIGxpc3QuZm9yRWFjaChtb3ZpZSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBtb3ZpZS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG4gICAgICAgICAgICBpbWc6IG1vdmllLmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogbW92aWUub3JkZXIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBzZWFzb25faWQ6IG1vdmllLnNlYXNvbl9pZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZygn5bey57uP5oq16L6+6aG15bqVJyArIE1ZX1BBR0UpO1xcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueDreaYoOaXtumXtOihqFwiLFwicGF0aFwiOlwiVXBkYXRlVGFibGVzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb2xvcih0ZXh0LCBjb2xvcikge1xcblxcbsKgIMKgIHRleHQgKz0gXFxcIlxcXCI7XFxuXFxuwqAgwqAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG5cXG7CoCDCoCDCoCDCoCB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG5cXG7CoCDCoCB9XFxuXFxuwqAgwqAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcIiArIGNvbG9yICsgXFxcIic+XFxcIiArIHRleHQgKyBcXFwiPC9mb250PlxcXCI7XFxuXFxufVxcblxcbnZhciB0YWJzID0ge1xcblxcbsKgIMKgIFxcXCLnlarliadcXFwiOiAxLFxcblxcbsKgIMKgIFxcXCLnuqrlvZXniYdcXFwiOiAzLFxcblxcbsKgIMKgIFxcXCLlm73liJtcXFwiOiA0XFxuXFxufVxcblxcbmlmIChNWV9QQUdFID09IDEpIHtcXG5cXG7CoCDCoCBPYmplY3Qua2V5cyh0YWJzKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IChnZXRNeVZhcihcXFwianVqaVxcXCIsIFxcXCLlm73liJtcXFwiKSA9PSBpdGVtID8gY29sb3IoaXRlbSwgXFxcInJlZFxcXCIpIDogaXRlbSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGEpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwdXRNeVZhcihcXFwianVqaVxcXCIsIGEpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UoKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaXRlbSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcblxcbsKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgfSlcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG5cXG7CoCDCoCB9KVxcblxcbsKgIMKgIGxldCBkYXlzID0gN1xcblxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogKGdldE15VmFyKFxcXCJmcm9tXFxcIiwgXFxcIjFcXFwiKSA9PSBpICsgXFxcIlxcXCIgPyBjb2xvcihpICsgXFxcIuWkqeWJjVxcXCIsIFxcXCJyZWRcXFwiKSA6IGkgKyBcXFwi5aSp5YmNXFxcIiksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwdXRNeVZhcihcXFwiZnJvbVxcXCIsIGkgKyBcXFwiXFxcIilcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGkpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG5cXG7CoCDCoCDCoCDCoCB9KVxcblxcbsKgIMKgIH1cXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG5cXG7CoCDCoCB9KVxcblxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogKGdldE15VmFyKFxcXCJ0b1xcXCIsIFxcXCIxXFxcIikgPT0gaSArIFxcXCJcXFwiID8gY29sb3IoaSArIFxcXCLlpKnlkI5cXFwiLCBcXFwicmVkXFxcIikgOiBpICsgXFxcIuWkqeWQjlxcXCIpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHV0TXlWYXIoXFxcInRvXFxcIiwgaSArIFxcXCJcXFwiKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKClcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcblxcbsKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgfVxcblxcblxcbsKgIMKgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldE1vdmllcyh0YWJzW2dldE15VmFyKFxcXCJqdWppXFxcIiwgXFxcIuWbveWIm1xcXCIpXSwgZ2V0TXlWYXIoXFxcImZyb21cXFwiLCBcXFwiMVxcXCIpLCBnZXRNeVZhcihcXFwidG9cXFwiLCBcXFwiMVxcXCIpKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0uZGF0ZSArIFxcXCIg5ZGoXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCDCoCDCoCBpdGVtLmVwaXNvZGVzLmZvckVhY2goaSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogaS50aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGkuY292ZXIrJ0BSZWZlcmVyPScsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzppLnB1Yl9pbmRleC5tYXRjaCgv5Y2z5bCGLyk/J+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicraS5wdWJfaW5kZXgrJ1xcXFxuJytpLnB1Yl90aW1lKyc8L2ZvbnQ+JzogaS5wdWJfaW5kZXgrICdcXFxcbicgKyBpLnB1Yl90aW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgXFxcInNlYXNvbl9pZFxcXCI6IGkuc2Vhc29uX2lkXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCB9KVxcblxcbn1cXG5cXG5cXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueZu+W9lVwiLFwicGF0aFwiOlwibG9naW5cIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuc2V0UGFnZVRpdGxlKCfotKblj7fnmbvlvZXpobXpnaInKVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnY29va2ll55m75b2VJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCcnLCAn6K+36L6T5YWl5L2g55qEY29va2llJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcIikgcmV0dXJuIFxcXCJ0b2FzdDovL2Nvb2tpZeS4jeiDveS4uuepulxcXCI7XFxuICAgICAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSByZXR1cm4gXFxcInRvYXN0Oi8v5L2g55qEY29va2ll6LKM5Ly85aSx5pWI5LqG5ZaUflxcXCI7XFxuICAgICAgICAgICAgdXNlckluZm8gPSB7XFxuICAgICAgICAgICAgICAgIGNvb2tpZTogaW5wdXQsXFxuICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyaW5mby51bmFtZSxcXG4gICAgICAgICAgICAgICAgdXNlck1pZDogIHVzZXJpbmZvLm1pZCxcXG4gICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB1c2VyaW5mby52aXBTdGF0dXMsXFxuICAgICAgICAgICAgICAgIGZhY2U6IHVzZXJpbmZvLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzZXR0aW5nID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QudW5zaGlmdCh1c2VySW5mbyk7XFxuICAgICAgICAgICAgLy8g6L+H5ruk5o6JY29va2ll5Li656m655qE5YWD57SgXFxuICAgICAgICAgICAgc2V0dGluZy51c2VyTGlzdCA9IHNldHRpbmcudXNlckxpc3QuZmlsdGVyKHVzZXIgPT4gdXNlci5jb29raWUgIT09ICcnKTtcXG4gICAgICAgICAgICBzYXZlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIsIEpTT04uc3RyaW5naWZ5KHNldHRpbmcpKTtcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jb29raWXorr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+eZu+mZhuivtOaYjicsXFxuICAgIGRlc2M6IFxcXCLpobXpnaLkuIvmlrnnmbvpmYbmiJDlip/lkI7vvIzlho3ngrnlh7vnoa7orqTnmbvlvZXljbPlj69cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfnmbvpmYbmiJDlip/lkI7vvIzlho3ngrnmiJHvvIEnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgLy8g6L+Z6YeM6LSf6LSj5YaZQ29va2ll77yM5YWI6K+777yM5YaN6L+95YqgXFxuICAgICAgICBjb29raWUgPSBnZXRWYXIoJ2JpbGlDb29raWUnLCcnKTtcXG4gICAgICAgIGxvZyhcXFwi6I635Y+W5Yiw55qEY29va2llOlxcXCIrY29va2llKTtcXG4gICAgICAgIGlmIChjb29raWUgPT0gXFxcIlxcXCIpIHJldHVybiBcXFwidG9hc3Q6Ly/ojrflj5Zjb29raWXlpLHotKXvvIzlho3nrYnnrYnnnIvvvJ9cXFwiO1xcbiAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBpZiAodXNlcmluZm8uaXNMb2dpbiA9PT0gZmFsc2UpIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDlhYjnmbvlvZXvvIzlho3ojrflj5Zjb29raWXvvIxPS++8n1xcXCI7XFxuICAgICAgICB1c2VySW5mbyA9IHtcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZSxcXG4gICAgICAgICAgICB1c2VyTmFtZTogdXNlcmluZm8udW5hbWUsXFxuICAgICAgICAgICAgdXNlck1pZDogIHVzZXJpbmZvLm1pZCxcXG4gICAgICAgICAgICB2aXBTdGF0dXM6IHVzZXJpbmZvLnZpcFN0YXR1cyxcXG4gICAgICAgICAgICBmYWNlOiB1c2VyaW5mby5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIHNldHRpbmcgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSk7XFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0LnVuc2hpZnQodXNlckluZm8pO1xcbiAgICAgICAgLy8g6L+H5ruk5o6JY29va2ll5Li656m655qE5YWD57SgXFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0ID0gc2V0dGluZy51c2VyTGlzdC5maWx0ZXIodXNlciA9PiB1c2VyLmNvb2tpZSAhPT0gJycpO1xcbiAgICAgICAgc2F2ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiLCBKU09OLnN0cmluZ2lmeShzZXR0aW5nKSk7XFxuICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WmguaenOayoeacieeZu+mZhuaIkOWKn++8jOW7uuiuruS9oOS4i+asoeeZu+mZhuaIkOWKn+WQjuS4jeimgeeCuemCo+S5iOW/q34nXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG59LCB7XFxuICAgIHVybDogXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJsaXN0JiZzY3JlZW4tMzAwXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZSA9IGZiYS5nZXRDb29raWUoXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKCdiaWxpQ29va2llJywgY29va2llKTtcXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdG9rZW5fdGltZXIoKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIHVhOiBNT0JJTEVfVUFcXG4gICAgfVxcbn0pXFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5b2x6KeG5LqM57qnXCIsXCJwYXRoXCI6XCJmaWxtZXJqaVwiLFwicnVsZVwiOlwianM6XFxuLy8g5pWw5o2u5a6a5L2NXFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcbiAgICBzZWFzb25faWQgPSBNWV9QQVJBTVMuc2Vhc29uX2lkICsgXFxcIlxcXCI7XFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXG59IGVsc2Uge1xcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/ZXBfaWQ9JyArIE1ZX1BBUkFNUy5lcF9pZCkpLnJlc3VsdDtcXG59XFxuaWYgKCFEYXRhLmNvdmVyLm1hdGNoKC9odHRwcy8pKSB7XFxuICAgIOWwgemdoiA9IERhdGEuY292ZXIucmVwbGFjZSgnaHR0cCcsICdodHRwcycpICsgXFxcIkBSZWZlcmVyPVxcXCI7XFxufSBlbHNlIHtcXG4gICAg5bCB6Z2iID0gRGF0YS5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiO1xcbn1cXG50cnkge1xcbiAgICDlnLDljLogPSBEYXRhLmFyZWFzWzBdLm5hbWU7XFxufSBjYXRjaCAoZSkge1xcbiAgICDlnLDljLogPSAn5Zyw5Yy65pqC5pegJztcXG59XFxu566A5LuLID0gRGF0YS5ldmFsdWF0ZTtcXG4vLyDmraPniYdcXG7nsbvlnosgPSBEYXRhLnBvc2l0aXZlLnRpdGxlO1xcbuS4iuaYoOaXtumXtCA9IERhdGEucHVibGlzaC5wdWJfdGltZTtcXG50cnkge1xcbiAgICDlvpfliIYgPSBEYXRhLnJhdGluZy5zY29yZTtcXG59IGNhdGNoIChlKSB7XFxuICAgIOW+l+WIhiA9ICfmmoLml6DlvpcnO1xcbn1cXG7ov73liafml6XljoYgPSBEYXRhLm5ld19lcC5kZXNjO1xcbuabtOaWsOi/m+W6piA9IERhdGEubmV3X2VwLnRpdGxlO1xcbuW9seeJh+WQjeensCA9IERhdGEudGl0bGU7XFxu56ys5LqM5qCH6aKYID0gRGF0YS5zaGFyZV9zdWJfdGl0bGU7XFxu5Ymn6ZuG5YiX6KGoID0gRGF0YS5lcGlzb2Rlcy5maWx0ZXIoKGxpc3QpID0+IHtcXG4gICAgLy8g6L+H5ruk6aKE5ZGK44CB6Iqx57WuXFxuICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PT0gJ2ZvbGQnICYmIGxpc3QuYmFkZ2UubWF0Y2goL+mihHzoirHnta4vKSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG59KTtcXG7nn63orq8gPSBcXFwi4q2QXFxcIiArIOexu+WeiyArIFxcXCLirZBcXFwiICsg56ys5LqM5qCH6aKYICsgJ1xcXFxuJyArIOWcsOWMuiArICctJyArIOW+l+WIhiArICfliIZcXFxcbi0nICsg5LiK5pig5pe26Ze0ICsgJy0nO1xcbi8vIOmHjeWumuS5ieS6jOe6p+mhtemdouaVsOaNrlxcbnNldFBhZ2VUaXRsZSjlvbHniYflkI3np7ApO1xcbnNldFBhZ2VQaWNVcmwo5bCB6Z2iKTtcXG4vLyDliY3nva7lj4LmlbDlkozpooTlpITnkIYtLS1cXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbi8vIOWFqOWxgGxhennigJTigJTnm7Tpk74r5pat5o+SXFxudmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgIHZpZGVvUGFybXMgPSBmaW5kSXRlbShpbnB1dCk7XFxuICAgIGFpZCA9IHZpZGVvUGFybXMuZXh0cmEuYWlkO1xcbiAgICBidmlkID0gdmlkZW9QYXJtcy5leHRyYS5idmlkO1xcbiAgICBjaWQgPSB2aWRlb1Bhcm1zLmV4dHJhLmNpZDtcXG4gICAgYmFkZ2UgPSB2aWRlb1Bhcm1zLmV4dHJhLmJhZGdlO1xcbiAgICAvLyDmj5DkuqTljoblj7LorrDlvZVcXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikucmVwb3J0UHJvY2VzcyhhaWQsIGNpZCk7XFxuICAgIHZpcFN0YXR1cyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS52aXBTdGF0dXM7XFxuICAgIGlmICh2aXBTdGF0dXMgIT0gMCkge1xcbiAgICAgICAgLy8g5aSn5Lya5ZGYXFxuICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6a2U5pat6Kej5p6QJykge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCAxMTYpLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgbGluaywgYWlkLCBjaWQpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOaZrumAmueUqOaIt1xcbiAgICAgICAgdmFyIHNldHRpbmc9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICAgICAgdmFyIGhhc0JmS2V5PXNldHRpbmcuYmZLZXkhPScnP3RydWU6ZmFsc2U7XFxuICAgICAgICBpZiAoIWhhc0JmS2V5KSB7XFxuICAgICAgICAgICAgaWYgKGJhZGdlLm1hdGNoKC/kvJrlkZh85LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIOWFseS6q+S8muWRmOaSreaUvuadg+ebilxcbiAgICAgICAgICAgIGlmIChiYWRnZS5tYXRjaCgv5LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywge30pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG52YXIgQ29sb3IgPSBcXFwiIzE5Qjg5RFxcXCI7XFxudmFyIOavj+mhtembhuaVsCA9IDMwO1xcbnZhciDmkJzntKLmqKHlvI8gPSAn5YiG57uEJztcXG52YXIg6LCD55So5ZCN56ewID0gJ+eugOW9sSc7XFxucHV0TXlWYXIoJ+aKmOWPoCcsICflhbMnKTtcXG5wdXRNeVZhcign5pel5Y6GJywgJ+WFsycpO1xcbnB1dE15VmFyKCdEYXRhJywgRGF0YSk7XFxucHV0TXlWYXIoJ2xhenknLCBsYXp5KTtcXG4vLyDmuIXpmaTlj5jph49cXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKCfliIbpm4botbcnKTtcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG57uIJyk7XFxuICAgIGNsZWFyTXlWYXIoJ+aKmOWPoCcpO1xcbiAgICBjbGVhck15VmFyKCfml6XljoYnKTtcXG4gICAgY2xlYXJNeVZhcignRGF0YScpO1xcbiAgICBjbGVhck15VmFyKCdsYXp5Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ+WJp+mbhuWIl+ihqCcpO1xcbn0pKVxcbi8vIOiuvue9ruWKqOaAgeacgOaWsOeroOiKglxcbnNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2dldFVwZGF0ZScpKS5ydWxlKTtcXG59KSk7XFxuLy8g6aG16Z2i5YaF5a655q2j5paHLS0tXFxuLy8g5Z+65pys5L+h5oGv5qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IOefreiuryxcXG4gICAgZGVzYzog566A5LuLID09ICcnID8gJ+aaguaXoOeugOS7iycgOiDnroDku4suc3Vic3RyaW5nKDAsIDQ1KSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFwiIzFDMUMxQ1xcXCI+6K+m5oOFPC9mb250PicsXFxuICAgIGltZzog5bCB6Z2iLFxcbiAgICB1cmw6ICQoKS5ydWxlKCjnroDku4spID0+IHtcXG4gICAgICAgIHJlcyA9IHt9O1xcbiAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICflvbHniYfnroDku4vvvJonICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsg566A5LuLLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXMuZGF0YSA9IGQ7XFxuICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgIH0sIOeugOS7iyksXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfpooTlkYrjgIHoirHnta7lvIDlhbMnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PSAnZm9sZCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3ByZXZpZXdTd2l0Y2gnLCAnb3BlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aKE5ZGK5bey57uP5YiH5o2i5Li65bGV56S6flxcXCI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mihOWRiuS4jeWGjeWxleekun5cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG4vLyDmm7TmlrDml6XljobmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aXpeWOhicsXFxuICAgIGltZzogaW1nTGluay7ml6XljoYsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6L+95Ymn5pel5Y6GLCDmm7TmlrDov5vluqYpID0+IHtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5pel5Y6GJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgZGVsZXRlSXRlbSgn6L+95Ymn5pel5Y6GJyk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+aXpeWOhicsICflhbMnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCfmmL7npLrmqKHlvI8nLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6IOi/veWJp+aXpeWOhiArICc8YnI+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5pu05paw6IezJyArICjmm7TmlrDov5vluqYubWF0Y2goL1tcXFxcdTRlMDAtXFxcXHU5ZmE1XS8pID8g5pu05paw6L+b5bqmIDogKCfnrKwnICsgKOabtOaWsOi/m+W6piA9PSAnJyA/IDAgOiDmm7TmlrDov5vluqYpICsgJ+ivnScpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICfov73liafml6XljoYnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBwdXRNeVZhcign5pel5Y6GJywgJ+W8gCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaXpeWOhuS4ujonICsgZ2V0TXlWYXIoJ+aXpeWOhicsICflvIAnKVxcbiAgICB9LCDov73liafml6XljoYsIOabtOaWsOi/m+W6piksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcbi8vIOiuoumYheaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6K6i6ZiFJyxcXG4gICAgaW1nOiBpbWdMaW5rLuiuoumYhSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHNlbGVjdGlvbkxpc3QgPSBbJ+iuoumYhScsICflj5bmtojorqLpmIUnXTtcXG4gICAgICAgIHJldHVybiAkKHNlbGVjdGlvbkxpc3QsIDIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2Vhc29uX2lkID0gSlNPTi5wYXJzZShnZXRNeVZhcignRGF0YScpKS5zZWFzb25faWQ7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09ICforqLpmIUnKSB7XFxuICAgICAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnN1YnNjcmliZUZpbG0oc2Vhc29uX2lkKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5jYW5jZWxTdWJzY3JpYmVGaWxtKHNlYXNvbl9pZCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgcmVzO1xcbiAgICAgICAgfSk7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNSdcXG59KTtcXG4vLyDor4TorrrmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+ivhOiuuicsXFxuICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eScpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgTGlzdCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSkuZXBpc29kZXM7XFxuICAgICAgICAgICAgTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2hhcmVfY29weSArICc8Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+XFx04p6uPC9mb250PicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGl0ZW0uYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcblxcbi8vIOeyvuW9qee7p+e7reaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5ZGo6L65JyxcXG4gICAgaW1nOiBpbWdMaW5rLuWRqOi+uSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIERhdGEgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpO1xcbiAgICAgICAgLy8g5pyJ5Lqb5rKh5pyJ55u05o6l5Y675o6J5oeS5b6X5aSE55CGflxcbiAgICAgICAgaWYgKERhdGEuc2VjdGlvbikge1xcbiAgICAgICAgICAgIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIvCfjYnnq5blsY/kuZ/nsr7lvalcXFwiLCBcXFwi8J+UpeeyvuW9qeS6jOWIm1xcXCJdO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlkajovrnmlbDnu4QgPSBbXFxcIvCfj7fvuI/nm7jlhbPns7vliJdcXFwiXTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIuerluWxj+S5n+eyvuW9qVxcXCIsIFxcXCLnsr7lvankuozliJtcXFwiXTtcXG4gICAgICAgIHJldHVybiAkKOWRqOi+ueaVsOe7hCwgMSwgJ+GDpueyvuW9qee7p+e7rScpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgRGF0YSA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSk7XFxuICAgICAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAn8J+Pt++4j+ebuOWFs+ezu+WIlycpIHtcXG4gICAgICAgICAgICAgICAg57O75YiX5ZCN56ewID0gRGF0YS5zZWFzb25fdGl0bGVcXG4gICAgICAgICAgICAgICAg57O75YiX5pWw5o2uID0gRGF0YS5zZWFzb25zO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOezu+WIl+aVsOaNrikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn4+377iP55u45YWz57O75YiXJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAo57O75YiX5pWw5o2uID09IFtdIHx8IOezu+WIl+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYfmsqHmnInnm7jlhbPns7vliJflk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3RvYXN0Oi8v6YO95rKh5pyJ77yM77yM5L2g54K55ZWl5ZGAficsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAg57O75YiX5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Quc2Vhc29uX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTYxMCA9PSAnJyA/IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTY5ID09ICcnID8gbGlzdC5jb3ZlciA6IGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjkpIDogbGlzdC5ob3Jpem9udGFsX2NvdmVyXzE2MTApICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm5ld19lcC5pbmRleF9zaG93LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImVwX2lkXFxcIjogbGlzdC5uZXdfZXAuaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICB9LCDns7vliJfmlbDmja4pXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CfpKNQViboirHnta4nKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBQVuWSjOiKsee1ruaVsOaNriA9IERhdGEuc2VjdGlvblswXS5lcGlzb2RlcztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgoUFblkozoirHnta7mlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn6SjUFYm6Iqx57WuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBW5ZKM6Iqx57Wu5pWw5o2uID09IFtdIHx8IFBW5ZKM6Iqx57Wu5pWw5o2uID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4q2Q6K+l5b2x54mHL+inhumikeayoeacieebuOWFs1BW5ZKM6Iqx57Wu5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBW5ZKM6Iqx57Wu5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIFBW5ZKM6Iqx57Wu5pWw5o2uLCBsYXp5KVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5pyJ5pWw5o2u5ZOmfidcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn42J56uW5bGP5Lmf57K+5b2pJykge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAg56uW5bGP5Lmf57K+5b2p5pWw5o2uID0gRGF0YS5zZWN0aW9uWzFdLmVwaXNvZGVzO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCjnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn42J56uW5bGP5Lmf57K+5b2pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKOerluWxj+S5n+eyvuW9qeaVsOaNriA9PSBbXSB8fCDnq5blsY/kuZ/nsr7lvanmlbDmja4gPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYcv6KeG6aKR5rKh5pyJ55u45YWz56uW5bGP55+t6KeG6aKR5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIOerluWxj+S5n+eyvuW9qeaVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXG4nICsgbGlzdC5sb25nX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QubGluayxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6IGxpc3QuY2lkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCDnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmnInmlbDmja7lk6Z+J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CflKXnsr7lvankuozliJsnKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICDnsr7lvankuozliJvmlbDmja4gPSBEYXRhLnNlY3Rpb25bMl0uZXBpc29kZXM7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CflKXnsr7lvankuozliJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAo57K+5b2p5LqM5Yib5pWw5o2uID09IFtdIHx8IOeyvuW9qeS6jOWIm+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKtkOivpeW9seeJhy/op4bpopHmsqHmnInkuozliJvkvZzlk4Hlk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAg57K+5b2p5LqM5Yib5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmSiOWvuemDqOWIhuWPguaVsOe8uuWkseeahOaDheWGteWmguWHoeS6uuS/ruS7meS8oOWGmeeahO+8jO+8jFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5haWQgPT0gMCB8fCBsaXN0LmNpZCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWVkZW9EYXRhID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgbGlzdC5saW5rLnNwbGl0KCdhdicpWzFdLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSB2aWVkZW9EYXRhLmFpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQgPSB2aWVkZW9EYXRhLmJ2aWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSB2aWVkZW9EYXRhLmNpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IGxpc3QuYWlkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZCA9IGxpc3QuYnZpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZCA9IGxpc3QuY2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBjaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSlcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaVsOaNruWTpn4nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ato+WcqOi/m+WFpVxcXCIgKyBpbnB1dCArIFxcXCLnlYzpnaIuLi5cXFwiO1xcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAn57K+5b2p57un57utJ1xcbiAgICB9XFxufSk7XFxuLy8g5pi+56S65qih5byP5pu05pS55qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSxcXG4gICAgaW1nOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcgPyBpbWdMaW5rLuWIl+ihqCA6IGltZ0xpbmsu5Y+M6L65LFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJyksKGtleSx2YWx1ZSk9PntcXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnYWlkJyB8fCBrZXkgPT09ICdjaWQnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOWwhuWkp+aVsOWtl+i9rOaNouS4ukJpZ0ludFxcbiAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KHZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxuICAgICAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2goZWwgPT4ge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGVsLmxpbmssIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aooeW8jycsICflj4zovrknKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChlbCA9PiB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oZWwubGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0SXRlbSgn5qih5byPJywgJ+WIl+ihqCcpXFxuICAgICAgICB9XFxuICAgICAgICBpbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbiAgICAgICAgdXBkYXRlSXRlbSgn5pi+56S65qih5byPJywge1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JyksXFxuICAgICAgICAgICAgaW1nOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcgPyBpbWdMaW5rLuWIl+ihqCA6IGltZ0xpbmsu5Y+M6L65LFxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5YiH5o2i5qih5byP5Li6OicgKyBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JylcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAn5pi+56S65qih5byPJ1xcbiAgICB9XFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnLFxcbn0pO1xcbi8vIOmAieaPkuaooeWdl+KAlOKAlOWxgOmDqOWIt+aWsOeJiFxcbuadpea6kCA9ICdibCc7XFxucHV0TXlWYXIoJ+eugOaPkicsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBsZXQgdGl0bGVBcnIgPSBbXVxcbiAgICBzZXRGaWxlID0gcmVhZEZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgIHRyeSB7XFxuICAgICAgICBldmFsKCdqc29uPScgKyBzZXRGaWxlKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicgKyBlLm1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXG4gICAgbGV0IGJhcnJ5MSA9IFsn4pyN77iP6L6F5YqpJ107XFxuICAgIGxldCBiYXJyeTIgPSBbJ/Cfk6bvuI/prZTmlq0nXTtcXG4gICAgbGV0IGJhcnJ5MyA9IFsn8J+UjeaQnOe0oiddO1xcbiAgICB0aXRsZUFyciA9IGJhcnJ5My5jb25jYXQodGl0bGVBcnIpO1xcbiAgICB0aXRsZUFyciA9IGJhcnJ5Mi5jb25jYXQodGl0bGVBcnIpO1xcbiAgICB0aXRsZUFyciA9IGJhcnJ5MS5jb25jYXQodGl0bGVBcnIpO1xcbiAgICBldmFsKCdvcD1qc29uLnNldHRpbmdzLicgKyDmnaXmupApO1xcbiAgICB0aXRsZUFyciA9IHRpdGxlQXJyLm1hcCgoaXQpID0+IHtcXG4gICAgICAgIHJldHVybiBpdCA9PT0gb3AgPyAn8J+RiScgKyBpdCA6IGl0O1xcbiAgICB9KTtcXG4gICAgcHV0TXlWYXIoJ+ino+aekOaVsOe7hCcsIHRpdGxlQXJyKTtcXG4gICAgcHV0TXlWYXIoJ3NldEZpbGUnLCBzZXRGaWxlKTtcXG59KSlcXG5ldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfop6PmnpDvvJrwn5SYPGZvbnQgY29sb3I9XFxcIicgKyBDb2xvciArICdcXFwiPicgKyBvcCArICc8L2ZvbnQ+XFxcXHRcXFxcdOmhteegge+8mjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgKChnZXRNeVZhcign5YiG6ZuG6LW3JywgJ+mmlumhtScpID09ICfpppbpobUnKSA/ICfpppbpobUnIDogKGdldE15VmFyKCfliIbpm4botbcnKSArICctJyArIGdldE15VmFyKCfliIbpm4bnu4gnKSkpICsgJzwvZm9udD4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSA9PiB7XFxuICAgICAgICBldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxuICAgICAgICByZXR1cm4gJChldmFsKGdldE15VmFyKCfop6PmnpDmlbDnu4QnKSksIDMpLnNlbGVjdCgoanNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApID0+IHtcXG4gICAgICAgICAgICBzZXRGaWxlID0gZ2V0TXlWYXIoJ3NldEZpbGUnKTtcXG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywgJycpO1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ+Kcje+4j+i+heWKqScpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvaG9tZT9ydWxlPemFjee9ruWKqeaJiycpKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+Tpu+4j+mtlOaWrScpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn5SN5pCc57SiJykge1xcbiAgICAgICAgICAgICAgICBpZiAo5pCc57Si5qih5byPID09ICfliIbnu4QnKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcIiArIOW9seeJh+WQjeensCArIFxcXCImZ3JvdXA9XFxcIiArIOiwg+eUqOWQjeensDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiICsg5b2x54mH5ZCN56ewICsgXFxcIiZydWxlPVxcXCIgKyDosIPnlKjlkI3np7A7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8g5Y6f5YWI55qE6YWN572uXFxuICAgICAgICAgICAgb3JpZ2luU2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShqc29uLnNldHRpbmdzKTtcXG4gICAgICAgICAgICAvLyDkv67mlLnphY3nva5cXG4gICAgICAgICAgICBldmFsKCdqc29uLnNldHRpbmdzLicgKyDmnaXmupAgKyAnPWlucHV0OycpO1xcbiAgICAgICAgICAgIHNldEZpbGUgPSBzZXRGaWxlLnJlcGxhY2Uob3JpZ2luU2V0dGluZ3MsIEpTT04uc3RyaW5naWZ5KGpzb24uc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLCBzZXRGaWxlKTtcXG4gICAgICAgICAgICAvLyDliLfmlrDlhYPntKBcXG4gICAgICAgICAgICBldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnb3AnLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFx0XFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i6Kej5p6Q5Y+j5Li6OlxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0sIGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKVxcbiAgICB9LCBqc29uLCDmnaXmupAsIENvbG9yLCBvcCwg5b2x54mH5ZCN56ewLCDmkJzntKLmqKHlvI8sIOiwg+eUqOWQjeensCksXFxuICAgIGltZzogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvdHViaWFvL2JpbGliaWxpLnN2ZycsXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAnb3AnXFxuICAgIH1cXG59KTtcXG4vLyDmu5rliqjliafpm4bmnaHmoI9cXG7liafpm4bplb/luqYgPSDliafpm4bliJfooagubGVuZ3RoO1xcbmlmICjliafpm4bplb/luqYgPiDmr4/pobXpm4bmlbApIHtcXG4gICAgcHV0TXlWYXIoJ+WIt+aWsOmAiembhicsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIHN0YXJ0KTtcXG4gICAgICAgIHB1dE15VmFyKCfliIbpm4bnu4gnLCBlbmQpO1xcbiAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbiAgICAgICAgdXBkYXRlSXRlbSgnb3AnLCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfop6PmnpDvvJrwn5SYPGZvbnQgY29sb3I9XFxcIicgKyBDb2xvciArICdcXFwiPicgKyBvcCArICc8L2ZvbnQ+XFxcXHRcXFxcdOmhteegge+8mjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgKChnZXRNeVZhcign5YiG6ZuG6LW3JywgJ+mmlumhtScpID09ICfpppbpobUnKSA/ICfpppbpobUnIDogKGdldE15VmFyKCfliIbpm4botbcnKSArICctJyArIGdldE15VmFyKCfliIbpm4bnu4gnKSkpICsgJzwvZm9udD4nLFxcbiAgICAgICAgfSlcXG4gICAgICAgIC8vIOWIoOmZpFxcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJyksKGtleSx2YWx1ZSk9PntcXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnYWlkJyB8fCBrZXkgPT09ICdjaWQnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOWwhuWkp+aVsOWtl+i9rOaNouS4ukJpZ0ludFxcbiAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KHZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgfSk7XFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChlbCA9PiB7XFxuICAgICAgICAgICAgZGVsZXRlSXRlbShlbC5saW5rKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy8g5re75YqgXFxuICAgICAgICBsYXp5ID0gZ2V0TXlWYXIoJ2xhenknKTtcXG4gICAgICAgIOWJp+mbhuWIl+ihqCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ+WJp+mbhuWIl+ihqCcpLChrZXksdmFsdWUpPT57XFxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2FpZCcgfHwga2V5ID09PSAnY2lkJykge1xcbiAgICAgICAgICAgICAgICAvLyDlsIblpKfmlbDlrZfovazmjaLkuLpCaWdJbnRcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0g5Ymn6ZuG5YiX6KGoLnNsaWNlKHN0YXJ0IC0gMSwgZW5kKTtcXG4gICAgICAgIG5ld0FycmF5ID0gW107XFxuICAgICAgICBpbmRleCA9IDE7XFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBidmlkOiBsaXN0LmJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBuZXdBcnJheS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGFkZEl0ZW1BZnRlcihnZXRNeVZhcign5pyr6aG1JyksIG5ld0FycmF5KTtcXG4gICAgICAgIHB1dE15VmFyKCfmmL7npLrnmoTliafpm4bliJfooagnLCDmmL7npLrnmoTliafpm4bliJfooagpO1xcbiAgICB9KSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICB0aXRsZTogJ+KItycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAn5Y2g5L2N56ymJyxcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIDEpO1xcbiAgICBwdXRNeVZhcign5YiG6ZuG57uIJywg5q+P6aG16ZuG5pWwKTtcXG4gICAgcHV0TXlWYXIoJ+WJp+mbhuWIl+ihqCcsIOWJp+mbhuWIl+ihqCk7XFxuICAgIOaAu+mhteaVsCA9IE1hdGguY2VpbCjliafpm4bplb/luqYgLyDmr4/pobXpm4bmlbApO1xcbiAgICBzdGFydCA9IDE7XFxuICAgIGVuZCA9IOavj+mhtembhuaVsDtcXG4gICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0g5oC76aG15pWwOyBwYWdlKyspIHtcXG4gICAgICAgIGlmIChlbmQgPiDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBlbmQgPSDliafpm4bplb/luqY7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzdGFydCArICctJyArIGVuZCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCkgPT4ge1xcbiAgICAgICAgICAgICAgICBldmFsKGdldE15VmFyKCfliLfmlrDpgInpm4YnKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc3RhcnQgKyAnLScgKyBlbmRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChlbmQgPCDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBzdGFydCArPSDmr4/pobXpm4bmlbA7XFxuICAgICAgICAgICAgZW5kICs9IOavj+mhtembhuaVsDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvLyDorrDlvZXmnKvpobXnmoRpZFxcbiAgICBwdXRNeVZhcign5pyr6aG1Jywgc3RhcnQgKyAnLScgKyBlbmQpO1xcbn0gZWxzZSB7XFxuICAgIHB1dE15VmFyKCfliIbpm4botbcnLCAxKTtcXG4gICAgcHV0TXlWYXIoJ+WIhumbhue7iCcsIOWJp+mbhumVv+W6pik7XFxufVxcbi8vIOWxleekuuWJp+mbhjpcXG7mmL7npLrnmoTliafpm4bliJfooaggPSDliafpm4bliJfooaguc2xpY2UoMCwgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKTtcXG5wdXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJywg5pi+56S655qE5Ymn6ZuG5YiX6KGoKTtcXG5pbmRleCA9IDE7XFxu5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2gobGlzdCA9PiB7XFxuICAgIGlmIChnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpbmRleCArPSAxO1xcbn0pO1xcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVw5Li76aG1XCIsXCJwYXRoXCI6XCJ1cEhvbWVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuLy8g6aKE5aSE55CGXFxucHV0TXlWYXIoJ3VwSW5mbycsICflhbMnKTtcXG5zZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnRpdGxlKTtcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbi8vIOmYsuatouWPjeeIrOiZq++8jOS7juS4iuS4gOS4qumhtemdouS8oOmAkuaVsOaNruKAlOKAlOWPjeeIrOiZq+S4pemHjVxcbnVwTWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnVwTmFtZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG51cEZhY2UgPSBNWV9QQVJBTVMuZmFjZTtcXG5yZWxhdGlvbiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVzZXJNYXBwaW5nKHVwTWlkKTtcXG4vLyDlpLTlg4/moI9cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgdXBOYW1lICsgJzwvZm9udD4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3VwSW5mbycsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ3VwSW5mbycpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5YWzJyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIC8vIOeUqOaIt+WfuuacrOS/oeaBr1xcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06ICd3ZWInLFxcbiAgICAgICAgICAgICAgICAgICAgd2ViX2xvY2F0aW9uOiAxNTUwMTAxXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXG4gICAgICAgICAgICAgICAgaW5mb0xpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FjYy9pbmZvPycgKyBwYXJtcztcXG4gICAgICAgICAgICAgICAgdXBEYXRhID0gSlNPTi5wYXJzZShmZXRjaChpbmZvTGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICB1cE5hbWUgPSB1cERhdGEubmFtZTtcXG4gICAgICAgICAgICAgICAgdXBTZXggPSB1cERhdGEuc2V4O1xcbiAgICAgICAgICAgICAgICB1cFNpZ24gPSB1cERhdGEuc2lnbjtcXG4gICAgICAgICAgICAgICAgdXBCaXJ0aGRheSA9IHVwRGF0YS5iaXJ0aGRheTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVwU2Nob29sID0gdXBEYXRhLnNjaG9vbC5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cFNjaG9vbCA9ICcnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gdXBEYXRhLm9mZmljaWFsLnRpdGxlO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdjdXJyZW50VXAnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ3VwOicgKyB1cE5hbWUgKyAnXFxcXG5taWQ6JyArIHVwTWlkICsgJ1xcXFxu5oCn5YirOicgKyB1cFNleCArICdcXFxcbueUn+aXpTonICsgKHVwQmlydGhkYXkgPT0gJycgPyAn5pyq5aGr5YaZJyA6IHVwQmlydGhkYXkpICsgJ1xcXFxuJyArICh1cFNjaG9vbCA9PSAnJyA/ICcnIDogJ+WtpuagoTonICsgdXBTY2hvb2wgKyAnXFxcXG4nKSArICh1cFNpZ24gPT0gJycgPyAnXFxcXG4nIDogdXBTaWduICsgJ1xcXFxuJykgKyAodXBJZGVudGlmaWNhdGlvbiA9PSAnJyA/ICcnIDogJ+iupOivgTonKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3VwSW5mbydcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ2N1cnJlbnRVcCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5aW95YOP5Ye65LqG54K55oSP5aSW77yf5LuA5LmI6YO95pyo5pyJ5ZGificsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd1cEluZm8nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcigndXBJbmZvJywgJ+W8gCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/oeaBr+aKmOWPoDonICsgZ2V0TXlWYXIoJ3VwSW5mbycsICflvIAnKVxcbiAgICB9LCB1cE1pZCksXFxuICAgIGltZzogdXBGYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAnY3VycmVudFVwJ1xcbiAgICB9XFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxufSk7XFxuLy8g5YWs5ZGKXFxubm90aWNlVGV4dCA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL25vdGljZT9taWQ9JyArIHVwTWlkICsgJyZqc29ucD1qc29ucCcsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgIH1cXG59KSkuZGF0YTtcXG5pZiAobm90aWNlVGV4dCAhPSAnJykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflhazlkYonLFxcbiAgICAgICAgdXJsOiAkKCkucnVsZSgobm90aWNlVGV4dCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICflhazlkYrvvJonICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsgbm90aWNlVGV4dCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgIH0sIG5vdGljZVRleHQpLFxcbiAgICAgICAgZGVzYzogbm90aWNlVGV4dCA9PSAnJyA/ICfmmoLml6DlhazlkYonIDogbm90aWNlVGV4dCxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgfSk7XFxufVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG59LCB7XFxuICAgIHRpdGxlOiByZWxhdGlvbixcXG4gICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IGltZ0xpbmsu5re75Yqg5YWz5rOoIDogaW1nTGluay7lt7LlhbPms6gsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmNoYW5nZVVzZXJSZWxhdGlvbih1cE1pZCwgMTEpXFxuICAgIH0sIHVwTWlkKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6ICdyZWxhdGlvbidcXG4gICAgfVxcbn0sIHtcXG4gICAgdGl0bGU6ICfliqjmgIEnLFxcbiAgICBpbWc6IGltZ0xpbmsu5Yqo5oCBLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P3A9ZnlwYWdlJykucnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGxhdGVuZXdzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0RHluYW1pY0RhdGEoJ3VwU3BhY2UnLCB1cE1pZCk7XFxuICAgICAgICAgICAgZXZhbCgkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zaG93RHluYW1pY0RhdGEoKSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSwgdXBNaWQpXFxuICAgIH0sIHVwTWlkKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbn0sIHtcXG4gICAgdGl0bGU6ICfkuJPmoI8nLFxcbiAgICBpbWc6IGltZ0xpbmsu5LiT5qCPLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYWN0aWNsZUxpc3Q/cD1meXBhZ2VcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBtaWQ6IHVwTWlkXFxuICAgIH1cXG59KVxcbi8vIOeUqOaIt+inhumikS3lkIjpm4bjgIHns7vliJdcXG51cFZpZGVvID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci9zcGFjZS9zZWFzb25zX3Nlcmllc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnBhZ2VfbnVtPTEmcGFnZV9zaXplPTEwJywge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgfVxcbn0pKS5kYXRhLml0ZW1zX2xpc3RzO1xcbi8vIOinhumikeWQiOmbhuOAgeezu+WIl1xcbnRyeSB7XFxuICAgIHVwVmlkZW8uc2Vhc29uc19saXN0LmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICBzZWFzb25faWQgPSBsaXN0Lm1ldGEuc2Vhc29uX2lkO1xcbiAgICAgICAgLy8g5qCH6aKYLei3s+i9rOabtOWkmlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCIjMzNjY2NjXFxcIj4nICsgbGlzdC5tZXRhLm5hbWUuc3Vic3RyaW5nKDAsIDMwKSArICc8L2ZvbnQ+XFxcXHRcXFxcdDxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicgKyBsaXN0Lm1ldGEudG90YWwgKyAnPC9mb250PlxcdOKericsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWQiOmbhuaWh+S7tuWkuSxcXG4gICAgICAgICAgICAvLyBpbWc6IGxpc3QubWV0YS5jb3ZlcisnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkLCBzZWFzb25faWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgodXBNaWQsIHNlYXNvbl9pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvc3BhY2Uvc2Vhc29uc19hcmNoaXZlc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnNlYXNvbl9pZD0nICsgc2Vhc29uX2lkICsgJyZzb3J0X3JldmVyc2U9ZmFsc2UmcGFnZV9udW09JyArIE1ZX1BBR0UgKyAnJnBhZ2Vfc2l6ZT0zMCc7XFxuICAgICAgICAgICAgICAgICAgICBWaWRlbyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwoVmlkZW8ucGFnZS50b3RhbCAvIFZpZGVvLnBhZ2UucGFnZV9zaXplKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFIDw9IG1heFBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgVmlkZW8ucGFnZS5wYWdlX251bSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIFZpZGVvLnBhZ2UudG90YWwgKyAn5p2h5pWw5o2uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8uYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgdXBNaWQsIHNlYXNvbl9pZClcXG4gICAgICAgICAgICB9LCB1cE1pZCwgc2Vhc29uX2lkKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAobGlzdC5hcmNoaXZlcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgbG9nKGxpc3QubWV0YS5uYW1lICsgJ+S4uuepuicpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPCAyKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QuYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWlveWutuS8me+8jOi/meWutuS8meayoeacieWQiOmbhuinhumike+8gVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmFyY2hpdmVzW2ldLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5hcmNoaXZlc1tpXS5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYXJjaGl2ZXNbaV0uYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5ZCI6ZuG5Li656m6JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ1NvcnJ5LOayoeacieaVsOaNruWRon4nLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgfSk7XFxufVxcbnRyeSB7XFxuICAgIHVwVmlkZW8uc2VyaWVzX2xpc3QuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgIHNlcmllc19pZCA9IGxpc3QubWV0YS5zZXJpZXNfaWQ7XFxuICAgICAgICAvLyDmoIfpopgt6Lez6L2s5pu05aSaXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcIiMzM2NjY2NcXFwiPicgKyBsaXN0Lm1ldGEubmFtZS5zdWJzdHJpbmcoMCwgMzApICsgJzwvZm9udD5cXFxcdFxcXFx0PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIGxpc3QubWV0YS50b3RhbCArICc8L2ZvbnQ+XFx04p6uJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5ZCI6ZuG5paH5Lu25aS5LFxcbiAgICAgICAgICAgIC8vIGltZzogbGlzdC5tZXRhLmNvdmVyKydAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQsIHNlcmllc19pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKCh1cE1pZCwgc2VyaWVzX2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc2VyaWVzL2FyY2hpdmVzP21pZD0nICsgdXBNaWQgKyAnJnNlcmllc19pZD0nICsgc2VyaWVzX2lkICsgJyZvbmx5X25vcm1hbD10cnVlJnNvcnQ9ZGVzYyZwbj0nICsgTVlfUEFHRSArICcmcHM9MzAnO1xcbiAgICAgICAgICAgICAgICAgICAgVmlkZW8gPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICBtYXhQYWdlID0gTWF0aC5jZWlsKFZpZGVvLnBhZ2UudG90YWwgLyBWaWRlby5wYWdlLnNpemUpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPD0gbWF4UGFnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBWaWRlby5wYWdlLm51bSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIFZpZGVvLnBhZ2UudG90YWwgKyAn5p2h5pWw5o2uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8uYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgdXBNaWQsIHNlcmllc19pZClcXG4gICAgICAgICAgICB9LCB1cE1pZCwgc2VyaWVzX2lkKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAobGlzdC5hcmNoaXZlcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgbG9nKGxpc3QubWV0YS5uYW1lICsgJ+S4uuepuicpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPCAyKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QuYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWlveWutuS8me+8jOi/meWutuS8meayoeacieWQiOmbhuinhumike+8gVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmFyY2hpdmVzW2ldLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5hcmNoaXZlc1tpXS5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYXJjaGl2ZXNbaV0uYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn57O75YiX5Li656m6JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ1NvcnJ5LOayoeacieaVsOaNruWRon4nLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgfSk7XFxufVxcbi8vIHVw5oqV56i/XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICdUQeeahOinhumikSzngrnlh7vlsZXlvIDlhajpg6gnLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCkucnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5SnNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogdXBNaWQsXFxuICAgICAgICAgICAgICAgICAgICBwczogMzAsXFxuICAgICAgICAgICAgICAgICAgICB0aWQ6IGdldE15VmFyKCdfdGlkJywgJzAnKSxcXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfdHlwZTogJycsXFxuICAgICAgICAgICAgICAgICAgICBwbjogZ2V0TXlWYXIoJ19wYWdlJywgJzEnKSxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6ICdwdWJkYXRlJyxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiAnd2ViJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlYl9sb2NhdGlvbjogMTU1MDEwMSxcXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyX2F2b2lkZWQ6IHRydWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcbiAgICAgICAgICAgICAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYXJjL3NlYXJjaD8nICsgcGFybXM7XFxuICAgICAgICAgICAgICAgIHVwVmlkZW9EYXRhID0gSlNPTi5wYXJzZShmZXRjaChkYXRhTGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICB0bGlzdCA9IHVwVmlkZW9EYXRhLmxpc3QudGxpc3Q7XFxuICAgICAgICAgICAgICAgIHZsaXN0ID0gdXBWaWRlb0RhdGEubGlzdC52bGlzdDtcXG4gICAgICAgICAgICAgICAgLy8g5YiG57G75ZKM6aG156CBXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ190aWQnLCAnMCcpID09IDAgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5YWo6YOoPC9mb250PicgOiAn5YWo6YOoJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3RpZCcsICgwICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3BhZ2UnLCAoMSArIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIGluIHRsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAodGxpc3RbaXRlbV0udGlkICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfdGlkJywgJzAnKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj4nICsgKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApICsgJzwvZm9udD4nIDogKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAodGlkICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKDEgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0bGlzdFtpdGVtXS50aWQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwodXBWaWRlb0RhdGEucGFnZS5jb3VudCAvIHVwVmlkZW9EYXRhLnBhZ2UucHMpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSBtYXhQYWdlOyBwYWdlKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChwYWdlICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfcGFnZScsICcxJykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIChwYWdlICsgXFxcIlxcXCIpICsgJzwvZm9udD4nIDogKHBhZ2UgKyBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHBhZ2UpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKHBhZ2UgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBwYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5bmz6ZO66KeG6aKRXFxuICAgICAgICAgICAgICAgIHZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdWJ0aW1lID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQoaXRlbS5jcmVhdGVkKTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgaXRlbS5wbGF5ICsgJ1xcXFxuJyArIHB1YnRpbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogaXRlbS5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5aSq6aKR57mB5LqG77yB56iN5ZCO5YaN6K+VficsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgIH0sIHVwTWlkKVxcbiAgICB9LCB1cE1pZClcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1cOaQnOe0olwiLFwicGF0aFwiOlwidXBTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnNlYXdvcmQgPSBNWV9QQVJBTVMuc2Vhd29yZDtcXG52YXIgZCA9IFtdO1xcbnJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCdiaWxpX3VzZXInLHNlYXdvcmQsTVlfUEFHRSwzNik7XFxuaWYgKE1ZX1BBR0UgPD0gcmVzdWx0RGF0YS5udW1QYWdlcykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIHJlc3VsdERhdGEucGFnZSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgcmVzdWx0RGF0YS5udW1QYWdlcyArICfpobUsJyArIHJlc3VsdERhdGEubnVtUmVzdWx0cyArICfmnaHmlbDmja4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB9KTtcXG4gICAgcmVzdWx0RGF0YS5yZXN1bHQuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFwiICsgbGlzdC51bmFtZSArIFxcXCI8L2ZvbnQ+PC9iaWc+PHNtYWxsPlxcXCIgKyBsaXN0LnVzaWduICsgXFxcIjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovLycgKyBsaXN0LnVwaWMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudW5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6ICdodHRwczovLycgKyBsaXN0LnVwaWNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufVxcbnNldFNlYXJjaFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInZpZGVv5pCc57SiXCIsXCJwYXRoXCI6XCJ2aWRlb1NlYXJjaFwiLFwicnVsZVwiOlwianM6XFxuc2Vhd29yZCA9IE1ZX1BBUkFNUy5zZWF3b3JkO1xcbnZhciBkID0gW107XFxudmFyIHJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCd2aWRlbycsc2Vhd29yZCxNWV9QQUdFLDQyKTtcXG52YXIge3RpbWVDb252ZXJ0fT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKTtcXG5pZiAoTVlfUEFHRSA8PSByZXN1bHREYXRhLm51bVBhZ2VzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgcmVzdWx0RGF0YS5wYWdlICsgJ+mhtVxcXFx0XFxcXHRcXFxcdOWFseaciScgKyByZXN1bHREYXRhLm51bVBhZ2VzICsgJ+mhtSwnICsgcmVzdWx0RGF0YS5udW1SZXN1bHRzICsgJ+adoeaVsOaNricsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIH0pO1xcbiAgICByZXN1bHREYXRhLnJlc3VsdC5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgLy8gdGl0bGU9bGlzdC50aXRsZS5yZXBsYWNlKCc8ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+JywnPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JykucmVwbGFjZSgnPC9lbT4nLCc8L2ZvbnQ+JylcXG4gICAgICAgIHRpdGxlID0gbGlzdC50aXRsZS5yZXBsYWNlKC88ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+L2csICcnKS5yZXBsYWNlKC88XFxcXC9lbT4vZywgJycpXFxuICAgICAgICBwYnRpbWU9dGltZUNvbnZlcnQobGlzdC5wdWJkYXRlKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vJyArIGxpc3QucGljICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPuaSreaUvumHjzonK2xpc3QucGxheSsnXFxcXHRcXFxcdFxcXFx05by55bmVOicrbGlzdC5kYW5tYWt1KydcXFxcdFxcXFx0XFxcXHTllpzmrKI6JytsaXN0Lmxpa2UrJ1xcXFxu5Y+R5biD5pe26Ze0OicrcGJ0aW1lKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIC8vIOinhumikeagh+ivhlxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICBidmlkOmxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRTZWFyY2hSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX2xlZnRfcGljXCIsXCJuYW1lXCI6XCLmjqjpgIFcIixcInBhdGhcIjpcImZlZWRcIixcInJ1bGVcIjpcIiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldEZlZWQoKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgaW1nOiBpdGVtLnBpYysnQFJlZmVyZXI9JyxcXG5cXG7CoCDCoCDCoCDCoCBkZXNjOiAndXA6JyArIGl0ZW0ub3duZXIubmFtZSArICdcXFxcbicgKyBpdGVtLnN0YXQudmlldyArIFxcXCLmkq3mlL7igLtcXFwiICsgaXRlbS5zdGF0Lmxpa2UgKyBcXFwi54K56LWeXFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCAvLyBpZOWFtuWunuaYr2FpZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGFpZDogaXRlbS5pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjaWQ6IGl0ZW0uY2lkLFxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KVxcblxcbn0pXFxuXFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFQSVwiLFwicGF0aFwiOlwiYXBpXCIsXCJydWxlXCI6XCIvLyBwYXJ0MTrogZrlkIjlh73mlbAtLS0tLS0tLS0tLS0tLS0tXFxuLy8g55m75b2V6aqM6K+BXFxuJC5leHBvcnRzLmlzTG9nZ2VkSW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkge1xcbiAgICAgICAgYmlsaURhdGEgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSk7XFxuICAgICAgICBpZiAoYmlsaURhdGEudXNlckxpc3QubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiAn5pyq55m75b2VJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiAnJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJGYWNlXFxcIjogJycsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogZmFsc2VcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgY3VycmVudFVzZXIgPSBiaWxpRGF0YS51c2VyTGlzdFswXTtcXG4gICAgICAgIHZhciBjb29raWUgPSBjdXJyZW50VXNlci5jb29raWU7XFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgIGlmICh1c2VyaW5mby5pc0xvZ2luID09PSBmYWxzZSkge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIFxcXCJ1c2VyTmFtZVxcXCI6ICfmnKrnmbvlvZUnLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlck1pZFxcXCI6ICcnLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiAnJyxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBmYWxzZVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnVzZXJOYW1lID0gdXNlcmluZm8udW5hbWU7XFxuICAgICAgICAgICAgY3VycmVudFVzZXIudXNlck1pZCA9IHVzZXJpbmZvLm1pZDtcXG4gICAgICAgICAgICAvLyAx77ya5Lya5ZGY5byA6YCa77ybMO+8muacquW8gOmAmlxcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnZpcFN0YXR1cyA9IHVzZXJpbmZvLnZpcFN0YXR1cztcXG4gICAgICAgICAgICBjdXJyZW50VXNlci5mYWNlID0gdXNlcmluZm8uZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiO1xcbiAgICAgICAgICAgIHNhdmVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0JywgSlNPTi5zdHJpbmdpZnkoYmlsaURhdGEpKTtcXG4gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiBjdXJyZW50VXNlci51c2VyTmFtZSxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiBjdXJyZW50VXNlci51c2VyTWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiBjdXJyZW50VXNlci5mYWNlLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IHRydWVcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogJ+acqueZu+W9lScsXFxuICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiAnJyxcXG4gICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiAnJyxcXG4gICAgICAgICAgICBcXFwidHlwZVxcXCI6IGZhbHNlXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG4vLyDlk5Tlk6nop4bpopHop6PmnpDvvJrojrflj5bmkq3mlL7lnLDlnYAr5o+Q5Lqk5pKt5pS+6K6w5b2VXFxuJC5leHBvcnRzLmJpbGlMYXp5ID0gZnVuY3Rpb24gKGlkLCBjaWQsIHFuKSB7XFxuICAgIC8vIOmHjee9ruWOn+eUn+W8ueW5lee7n+S4gOW8ueW5leWkp+Wwj+OAgeS/ruaUueatpemVv1xcbiAgICBmdW5jdGlvbiBvdmVycmlkZVNhdmUoZG0pIHtcXG4gICAgICAgIHZhciBkYW5tdURhdGEgPSByZXF1ZXN0KGRtKTtcXG4gICAgICAgIC8vIOWtl+S9k+Wkp+Wwj+OAgeW8ueW5leatpemVv1xcbiAgICAgICAgdmFyIGRhbm11U2V0dGluZyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2hpa2VyOi8vZmlsZXMvZG3nm5LlrZAvc2V0dGluZ3MuanNvbicpKTtcXG4gICAgICAgIHZhciBzaXplID0gZGFubXVTZXR0aW5nLmZvbnRTaXplO1xcbiAgICAgICAgdmFyIHN0ZXAgPSBkYW5tdVNldHRpbmcuc3RlcDtcXG4gICAgICAgIHZhciBkYXRhID0gJyc7XFxuICAgICAgICB0ZCA9IHBkZmEoZGFubXVEYXRhLCAnaSYmZCcpO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZC5sZW5ndGg7IGkgKz0gc3RlcCkge1xcbiAgICAgICAgICAgIHRpbWVwb2ludCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVswXTtcXG4gICAgICAgICAgICBjdCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVsxXTtcXG4gICAgICAgICAgICBjb2xvciA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVszXTtcXG4gICAgICAgICAgICAvLyDlvLnluZXlhoXlrrlcXG4gICAgICAgICAgICBjb250ZW50ID0gcGRmaCh0ZFtpXSwgJ2QmJlRleHQnKTtcXG4gICAgICAgICAgICBpZiAoY29udGVudC5pbmRleE9mKCc8JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCc+JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCcmJykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCdcXFxcdTAwMDAnKSAhPSAtMSB8fCBjb250ZW50LmluZGV4T2YoJ1xcXFxiJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRlbXBkYXRhID0gYDxkIHA9XFxcIiR7TWF0aC5yb3VuZCh0aW1lcG9pbnQpfSwke2N0fSwke3NpemV9LCR7Y29sb3J9LDBcXFwiPiR7Y29udGVudH08L2Q+XFxcXG5gO1xcbiAgICAgICAgICAgIGRhdGEgKz0gdGVtcGRhdGE7XFxuICAgICAgICB9XFxuICAgICAgICBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcXFxuPGk+XFxcXG4ke2RhdGF9PC9pPmA7XFxuICAgICAgICBzYXZlRmlsZShkbSwgZGFubXVzdHIpO1xcbiAgICB9XFxuICAgIC8vIOWIpOaWreaYr+WQpumHjeWGmVxcbiAgICB2YXIgZG0gPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcbiAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgIGZpbGUgPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcbiAgICAgICAgZG0gPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS8nICsgJ2JpbGlfZnJvbV8nICsgZ2V0UGFnZVRpdGxlKCkgKyAnLnhtbCc7XFxuICAgICAgICBkb3dubG9hZEZpbGUoZmlsZSwgZG0pO1xcbiAgICAgICAgb3ZlcnJpZGVTYXZlKGRtKTtcXG4gICAgfVxcbiAgICB2YXIgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFVybChpZCwgY2lkLCBxbik7XFxuICAgIC8vIOaPkOS6pOWOhuWPsuiusOW9lVxcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5yZXBvcnRQcm9jZXNzKGlkLCBjaWQpO1xcbiAgICAvLyBxdWFsaXR5TnVtPWRhc2guYXVkaW8ubGVuZ3RoO+S4jemcgOimgeS6hu+8jOaJvuWIsOS6huabtOWlveeahOWIpOaWreaWueazle+8jOiZveeEtuaIkeW5tuS4jeefpemBk+i/meS6m+WPguaVsOeahOWQq+S5ieaYr+S7gOS5iFxcbiAgICB2aWRlb0xpc3QgPSBbXTtcXG4gICAgYXVkaW9MaXN0ID0gW107XFxuICAgIG5hbWVMaXN0ID0gW107XFxuICAgIGhlYWRlcnMgPSBbXTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGRhdGEuYXVkaW8uZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBhdWRpb0xpc3QucHVzaChpdGVtLmJhc2VVcmwpO1xcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZGF0YS52aWRlby5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmNvZGVjaWQgPT0gNykge1xcbiAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaChpdGVtLmJhc2VVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT0gMTI2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCfmnZzmr5Top4bnlYwnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDEyNSkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnSERSIOecn+W9qeiJsicpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTIwKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc0S+i2hea4hScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTE2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUDYw6auY5bin546HJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMTIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQK+mrmOeggeeOhycpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gODApIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQ6auY5riFJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA3NCkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUDYw6auY5bin546HJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA2NCkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUOmrmOa4hScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzQ4MFDmuIXmmbAnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDE2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCczNjBQ5rWB55WFJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcyNDBQ5p6B6YCfJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOS/neaMgemVv+W6puS4gOiHtFxcbiAgICAgICAgd2hpbGUgKGF1ZGlvTGlzdC5sZW5ndGggPCB2aWRlb0xpc3QubGVuZ3RoKSB7XFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGF1ZGlvTGlzdCDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXG4gICAgICAgICAgICBhdWRpb0xpc3QucHVzaChhdWRpb0xpc3RbYXVkaW9MaXN0Lmxlbmd0aCAtIDFdKTtcXG4gICAgICAgICAgICAvLyDlpI3liLYgaGVhZGVycyDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyc1toZWFkZXJzLmxlbmd0aCAtIDFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdXJsczogdmlkZW9MaXN0LFxcbiAgICAgICAgICAgIGF1ZGlvVXJsczogYXVkaW9MaXN0LFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICAgICAgbmFtZXM6IG5hbWVMaXN0LFxcbiAgICAgICAgICAgIGRhbm11OiBkbVxcbiAgICAgICAgfSlcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKFxcXCLmraPluLjop6Pph4rlpLHotKXvvIzov5vooYzmnIDlkI7lsJ3or5U6XFxcIik7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHVybHM6IFtkYXRhLmR1cmxbMF0udXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgbmFtZXM6IFtkYXRhLnF1YWxpdHkgKyBcXFwiXFxcIl0sXFxuICAgICAgICAgICAgZGFubXU6IGRtLFxcbiAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG4vLyDnqI3lkI7lnKjnnIvigJTigJTmgLvmk43kvZzliKTmlq1cXG4kLmV4cG9ydHMuanVkZ2VUb3ZpZXcgPSBmdW5jdGlvbiAoYWlkKSB7XFxuICAgIHNlbGVjdGlvbiA9IFsn5re75YqgJywgJ+enu+mZpCddO1xcbiAgICByZXR1cm4gJChzZWxlY3Rpb24sIDEpLnNlbGVjdCgoYWlkKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+a3u+WKoCcpIHtcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5hZGRUb3ZpZXcoYWlkKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+a3u+WKoOaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gOTAwMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIl+ihqOW3sua7oVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSA5MDAwMykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v56i/5Lu25bey57uP6KKr5Yig6ZmkXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrnn6XplJnor69cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5kZWxUb3ZpZXcoYWlkKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+enu+mZpOaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFwiXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIGFpZClcXG59XFxuLy8g5pON5L2c55So5oi35YWz57O7XFxuJC5leHBvcnRzLmNoYW5nZVVzZXJSZWxhdGlvbiA9IGZ1bmN0aW9uIChtaWQsIHJlX3NyYykge1xcbiAgICBzZWxlY3Rpb24gPSBbJ+WFs+azqCcsICflj5blhbMnLCAn5oKE5oKE5YWz5rOoJywgJ+WPlua2iOaChOaChOWFs+azqCcsICfmi4npu5EnLCAn5Y+W5raI5ouJ6buRJywgJ+i4ouWHuueyieS4nScsICfnp7vliqjliIbnu4QnXTtcXG4gICAgcmV0dXJuICQoc2VsZWN0aW9uLCAyKS5zZWxlY3QoKG1pZCwgcmVfc3JjKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+enu+WKqOWIhue7hCcpIHtcXG4gICAgICAgICAgICBiZWZvcmVUYWdpZHMgPSBbXTtcXG4gICAgICAgICAgICBncm91cHMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRVc2VyR3JvdXAobWlkKTtcXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JvdXBzKSA9PSAne30nKSB7XFxuICAgICAgICAgICAgICAgIGJlZm9yZVRhZ2lkcy5wdXNoKDApO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZ3JvdXBzKSB7XFxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWdpZHMucHVzaChwYXJzZUludChwcm9wKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8g6I635Y+W5oiR55qE5YiG57uEXFxuICAgICAgICAgICAgZm9jdXNHcm91cExpc3QgPSBbXTtcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRNeUF0dGVudGlvbkdyb3VwTGlzdCgpLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgIGZvY3VzR3JvdXBMaXN0LnB1c2gobGlzdC5uYW1lICsgJyAnICsgbGlzdC50YWdpZCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoZm9jdXNHcm91cExpc3QsIDEpLnNlbGVjdCgoYmVmb3JlVGFnaWRzLCBtaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMucHVzaChwYXJzZUludChpbnB1dC5zcGxpdCgnICcpWzFdKSk7XFxuICAgICAgICAgICAgICAgIGZpZHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgZmlkcy5wdXNoKE51bWJlcihtaWQpKTtcXG4gICAgICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubW92ZVVzZXJzKGJlZm9yZVRhZ2lkcywgYWZ0ZXJUYWdpZHMsIGZpZHMpO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/np7vliqjnlKjmiLfliLBcXFwiICsgaW5wdXQuc3BsaXQoJyAnKVswXSArIFxcXCLliIbnu4TmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjEwNCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aXoOadg+mZkFxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gMjIxMDUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrlhbPms6hcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgYmVmb3JlVGFnaWRzLCBtaWQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+WFs+azqCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDE7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5Y+W5YWzJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICfmgoTmgoTlhbPms6gnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSAzO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaChOaChOWFs+azqCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDQ7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5ouJ6buRJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICflj5bmtojmi4npu5EnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSA2O1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+i4ouWHuueyieS4nScpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmFkZEF0dGVudGlvbihtaWQsIGFjdCwgcmVfc3JjKTtcXG4gICAgICAgICAgICByZWxhdGlvbiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVzZXJNYXBwaW5nKG1pZCk7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgncmVsYXRpb24nLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiByZWxhdGlvbixcXG4gICAgICAgICAgICAgICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mt7vliqDlhbPms6ggOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey5YWz5rOoXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgaW5wdXQgKyBcXFwi5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjAwMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN6IO95a+56Ieq5bex6L+b6KGM5q2k5pON5L2cXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMDAzKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nlKjmiLfkvY3kuo7pu5HlkI3ljZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIG1pZCwgcmVfc3JjKVxcbn1cXG4vLyDmmKDlsITnlKjmiLflhbPns7tcXG4kLmV4cG9ydHMudXNlck1hcHBpbmcgPSBmdW5jdGlvbiAobWlkKSB7XFxuICAgIHJlbGF0aW9uUmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0UmVsYXRpb24obWlkKTtcXG4gICAgaWYgKHJlbGF0aW9uUmVzLnJlbGF0aW9uLmF0dHJpYnV0ZSA9PSAwKSB7XFxuICAgICAgICByZWxhdGlvbiA9ICfmnKrlhbPms6gnXFxuICAgIH0gZWxzZSBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDEpIHtcXG4gICAgICAgIHJlbGF0aW9uID0gJ+aChOaChOWFs+azqCdcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMikge1xcbiAgICAgICAgcmVsYXRpb24gPSAn5bey5YWz5rOoJ1xcbiAgICB9IGVsc2UgaWYgKHJlbGF0aW9uUmVzLnJlbGF0aW9uLmF0dHJpYnV0ZSA9PSA2KSB7XFxuICAgICAgICByZWxhdGlvbiA9ICflt7LkupLnsoknXFxuICAgIH0gZWxzZSBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDEyOCkge1xcbiAgICAgICAgcmVsYXRpb24gPSAn5bey5ouJ6buRJ1xcbiAgICB9XFxuICAgIHJldHVybiByZWxhdGlvbjtcXG59XFxuLy8g54K56LWe5pON5L2c6YC76L6RXFxuJC5leHBvcnRzLmxpa2VMb2dpYyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgaGFzTGlrZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0xpa2UoYWlkKTtcXG4gICAgaWYgKGhhc0xpa2UgPT0gMCkge1xcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2V0TGlrZShhaWQsIDEpO1xcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5saWtlO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NldExpa2UnLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSArIDEpICsgJycsXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3sueCuei1nlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnotZ7miJDlip9cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v54K56LWe5Ye66ZSZ5LqGflxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zZXRMaWtlKGFpZCwgMik7XFxuICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YS5zdGF0Lmxpa2U7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0TGlrZScsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5pyq54K56LWeXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPlua2iOeCuei1nuaIkOWKn1xcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojngrnotZ7lh7rplJnkuoZ+XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG4vLyDmlLbol4/mk43kvZzpgLvovpFcXG4kLmV4cG9ydHMuZmF2b3VyTG9naWMgPSBmdW5jdGlvbiAoYWlkLCBtaWQpIHtcXG4gICAgaGFzRmF2b3VyID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzRmF2b3VyKGFpZCk7XFxuICAgIGlmIChoYXNGYXZvdXIpIHtcXG4gICAgICAgIC8vIOenu+WHuuaUtuiXj1xcbiAgICAgICAgZmF2b3VySWRMaXN0ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0RmF2b3VySWRMaXN0KGFpZCwgbWlkKTtcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnNldEZhdm91cihhaWQsICcnLCBmYXZvdXJJZExpc3QpO1xcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSAtIDEpICsgJycsXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuacquaUtuiXj1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojmlLbol4/miJDlip9cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+W5raI5pS26JeP5Ye66ZSZ5LqGflxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDpgInmi6nmlLbol49cXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldENvbGxlY3Rpb25Hcm91cExpc3QoKVswXS5tZWRpYUxpc3RSZXNwb25zZS5saXN0O1xcbiAgICAgICAgR3JvdXBMaXN0ID0gW107XFxuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBHcm91cExpc3QucHVzaChpdGVtLnRpdGxlICsgJyAnICsgaXRlbS5pZCk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiAkKEdyb3VwTGlzdCwgMSkuc2VsZWN0KChhaWQpID0+IHtcXG4gICAgICAgICAgICBzZWxlY3RJZCA9IHBhcnNlSW50KGlucHV0LnNwbGl0KCcgJylbMV0pXFxuICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2V0RmF2b3VyKGFpZCwgc2VsZWN0SWQsICcnKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0RmF2b3VyJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlICsgMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3suaUtuiXj1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aUtuiXj+aIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aUtuiXj+WHuumUmeS6hn5cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGFpZCk7XFxuICAgIH1cXG59XFxuXFxuLy8gcGFydDI65pWj6KOFQVBJLS0tLS0tLS0tLS0tLS0tLVxcbi8vIOiOt+WPluaQnOe0oue7k+aenFxcbiQuZXhwb3J0cy5nZXRTZWFyY2hSZXMgPSBmdW5jdGlvbiAoc2VhcmNoX3R5cGUsIHNlYXdvcmQsIHBhZ2UsIHBhZ2VTaXplKSB7XFxuICAgIHF1ZXJ5SnNvbiA9IHtcXG4gICAgICAgIF9fcmVmcmVzaF9fOiB0cnVlLFxcbiAgICAgICAgX2V4dHJhOiAnJyxcXG4gICAgICAgIGNvbnRleHQ6ICcnLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIHBhZ2Vfc2l6ZTogcGFnZVNpemUsXFxuICAgICAgICBvcmRlcjogJycsXFxuICAgICAgICBkdXJhdGlvbjogJycsXFxuICAgICAgICBmcm9tX3NvdXJjZTogJycsXFxuICAgICAgICBmcm9tX3NwbWlkOiAzMzMuMzM3LFxcbiAgICAgICAgcGxhdGZvcm06ICdwYycsXFxuICAgICAgICBoaWdobGlnaHQ6IDEsXFxuICAgICAgICBzaW5nbGVfY29sdW1uOiAwLFxcbiAgICAgICAga2V5d29yZDogc2Vhd29yZCxcXG4gICAgICAgIHNlYXJjaF90eXBlOiBzZWFyY2hfdHlwZSxcXG4gICAgICAgIHByZWxvYWQ6IHRydWUsXFxuICAgICAgICBjb20yY286IHRydWVcXG4gICAgfVxcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcbiAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3diaS9zZWFyY2gvdHlwZT8nICsgcGFybXM7XFxuICAgIGNvb2tpZSA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWU7XFxuICAgIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2goZGF0YUxpbmssIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgIH0pKS5kYXRhO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG4vLyDop4bpopHmjqjojZBcXG4kLmV4cG9ydHMuZ2V0RmVlZCA9IGZ1bmN0aW9uICgpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9pbmRleC90b3AvZmVlZC9yY21kXFxcIjtcXG4gICAgdmFyIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKTtcXG4gICAgcmV0dXJuIHJlcy5kYXRhLml0ZW1cXG59XFxuLy8g6I635Y+W5pKt5pS+5Zyw5Z2AXFxuJC5leHBvcnRzLmdldFVybCA9IGZ1bmN0aW9uIChhdmlkLCBjaWQsIHFuKSB7XFxuICAgIHZhciBzZXR0aW5nID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICB2YXIgQ29va2llID0gc2V0dGluZy5iZktleSAhPSAnJyA/IGJhc2U2NERlY29kZShiYXNlNjREZWNvZGUoc2V0dGluZy5iZktleSkpIDogc2V0dGluZy51c2VyTGlzdFswXS5jb29raWU7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BsYXl1cmxcXFwiLCB7XFxuICAgICAgICAgICAgXFxcImF2aWRcXFwiOiBTdHJpbmcoYXZpZCksXFxuICAgICAgICAgICAgXFxcImNpZFxcXCI6IFN0cmluZyhjaWQpLFxcbiAgICAgICAgICAgIFxcXCJxblxcXCI6IHFuLFxcbiAgICAgICAgICAgIFxcXCJmbnZlclxcXCI6IDAsXFxuICAgICAgICAgICAgLy8gXFxcImZudmFsXFxcIjogNDA0OCxcXG4gICAgICAgICAgICBcXFwiZm52YWxcXFwiOiAxNixcXG4gICAgICAgICAgICBcXFwiZm91cmtcXFwiOiAxXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgQ29va2llOiBDb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgcmVzID0gSlNPTi5wYXJzZSh1KTtcXG4gICAgICAgIGlmIChyZXMuZGF0YS5kYXNoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhLmRhc2g7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5rKh5pyJ5om+5YiwZGFzaOWtl+autVxcXCIpO1xcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdXBwb3J0X2Zvcm1hdHMpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHUuaW5jbHVkZXMoXFxcIuivleeci1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBtc2cgPSBcXFwi5oKo5Yia5omN6KeC55yL55qE6KeG6aKR5piv6K+V55yL6KeG6aKR77yM6KeC55yL5a6M5pW054mH5q616K+35YmN5b6A5a6Y572R6LSt5Lmw77yBXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhtc2cpO1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmuKnppqjmj5DnpLonLCBjb250ZW50OiBtc2csIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBjYW5jZWw6ICQudG9TdHJpbmcoKCkgPT4ge30pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvLyDkuIDkurrkuYvkuIvnrKzkuIDlraPnmoTnrKwx77yMMumbhuKAlOKAlOWPr+S7peiOt+WPluWkp+S8muWRmOWJp+mbhueahOWJjTNtaW5cXG4gICAgICAgICAgICBsb2coJ+WwneivleabtOaUueivt+axguaOpeWPoy4uLjonICsgZSk7XFxuICAgICAgICAgICAgbGV0IHUgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3BsYXllci93ZWIvcGxheXVybFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImF2aWRcXFwiOiBTdHJpbmcoYXZpZCksXFxuICAgICAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBTdHJpbmcoY2lkKSxcXG4gICAgICAgICAgICAgICAgXFxcInFuXFxcIjogcW4sXFxuICAgICAgICAgICAgICAgIFxcXCJmbnZlclxcXCI6IDAsXFxuICAgICAgICAgICAgICAgIC8vIFxcXCJmbnZhbFxcXCI6IDQwNDgsXFxuICAgICAgICAgICAgICAgIFxcXCJmbnZhbFxcXCI6IDE2LFxcbiAgICAgICAgICAgICAgICBcXFwiZm91cmtcXFwiOiAxXFxuICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgQ29va2llOiBDb29raWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgLy8g5LuZ546L55qE5pel5bi456ys5LiJ5a2j56ysMTDpm4bvvIzmsqHmnIlkYXNo77yM5pyN5LqGXFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UodSkucmVzdWx0LmRhc2gpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodSkucmVzdWx0LmRhc2g7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbG9nKCflsJ3or5XotbDljZXnur/ot6/nlLvotKh+Jyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHUpLnJlc3VsdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgICAgIGxvZygnY29va2ll5pyJ5rKh5pyJ5Y+v6IO95aSx5pWI5LqG5ZGificpO1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG4vLyDmj5DkuqTmkq3mlL7orrDlvZVcXG4kLmV4cG9ydHMucmVwb3J0UHJvY2VzcyA9IGZ1bmN0aW9uIChhdmlkLCBjaWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvcmVwb3J0XFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBhdmlkLFxcbiAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBjaWQsXFxuICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICAgICAgICAgIFxcXCJwcm9ncmVzc1xcXCI6IDBcXG4gICAgICAgIH0sXFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgQ29va2llOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbi8vIOiOt+WPluivhOiuulxcbiQuZXhwb3J0cy5nZXRDb21tZW50cyA9IGZ1bmN0aW9uIChpZCwgdHlwZSwgcGFnZSkge1xcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5XFxcIiwge1xcbiAgICAgICAgXFxcInR5cGVcXFwiOiB0eXBlLFxcbiAgICAgICAgXFxcIm9pZFxcXCI6IGlkLFxcbiAgICAgICAgXFxcInBuXFxcIjogcGFnZVxcbiAgICB9KTtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGEucmVwbGllc1xcbn1cXG4vLyDmt7vliqDnqI3lkI7lnKjnnIvigJTigJTnnJ/nmoTpurvkuobvvIzkuLrku4DkuYhmZXRjaOWwsemUmeWRon5cXG4kLmV4cG9ydHMuYWRkVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvYWRkXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGFpZCxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g5Yig6Zmk56iN5ZCO5Zyo55yLXFxuJC5leHBvcnRzLmRlbFRvdmlldyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvZGVsXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGFpZCxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g6K6i6ZiF5b2x6KeGKOi/veeVquOAgei/veWJpylcXG4kLmV4cG9ydHMuc3Vic2NyaWJlRmlsbSA9IGZ1bmN0aW9uIChzZWFzb25faWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL2ZvbGxvdy9hZGRcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwic2Vhc29uX2lkXFxcIjogc2Vhc29uX2lkLFxcbiAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5yZXN1bHQudG9hc3Q7XFxufVxcbi8vIOWPlua2iOiuoumYhVxcbiQuZXhwb3J0cy5jYW5jZWxTdWJzY3JpYmVGaWxtID0gZnVuY3Rpb24gKHNlYXNvbl9pZCkge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvZm9sbG93L2RlbFxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJzZWFzb25faWRcXFwiOiBzZWFzb25faWQsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmYsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLnJlc3VsdC50b2FzdDtcXG59XFxuLyrmk43kvZznlKjmiLflhbPns7tcXG5maWQ655So5oi3bWlkXFxuYWN0OuaTjeS9nOS7o+eggVxcbnJlX3NyY++8muWFs+azqOadpea6kFxcbiovXFxuJC5leHBvcnRzLmFkZEF0dGVudGlvbiA9IGZ1bmN0aW9uIChtaWQsIGFjdCwgcmVfc3JjKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi9tb2RpZnlcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwiZmlkXFxcIjogbWlkLFxcbiAgICAgICAgXFxcImFjdFxcXCI6IGFjdCxcXG4gICAgICAgIFxcXCJyZV9zcmNcXFwiOiByZV9zcmMsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g56e75Yqo5YWz5rOo55So5oi35YiG57uEXFxuJC5leHBvcnRzLm1vdmVVc2VycyA9IGZ1bmN0aW9uIChiZWZvcmVUYWdpZHMsIGFmdGVyVGFnaWRzLCBmaWRzKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzL21vdmVVc2Vyc1xcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJiZWZvcmVUYWdpZHNcXFwiOiBiZWZvcmVUYWdpZHMudG9TdHJpbmcoKSxcXG4gICAgICAgIFxcXCJhZnRlclRhZ2lkc1xcXCI6IGFmdGVyVGFnaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICBcXFwiZmlkc1xcXCI6IGZpZHMudG9TdHJpbmcoKSxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcbn1cXG4vLyDojrflj5bnlKjmiLflhbPns7tcXG4kLmV4cG9ydHMuZ2V0UmVsYXRpb24gPSBmdW5jdGlvbiAobWlkKSB7XFxuICAgIC8vIGh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FjYy9yZWxhdGlvbj9taWQ9LOaXp+aOpeWPo1xcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyh7IG1pZDogbWlkIH0pO1xcbiAgICBpbmZvTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYWNjL3JlbGF0aW9uPycgKyBwYXJtcztcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChpbmZvTGluaywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGFcXG59XFxuLy8g5p+l6K+i55uu5qCH55So5oi35omA5Zyo55qE5YiG57uEXFxuJC5leHBvcnRzLmdldFVzZXJHcm91cCA9IGZ1bmN0aW9uIChtaWQpIHtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFnL3VzZXI/ZmlkPVxcXCIgKyBtaWQsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YVxcbn1cXG4vLyDojrflj5blhbPms6jliIbnu4RcXG4kLmV4cG9ydHMuZ2V0TXlBdHRlbnRpb25Hcm91cExpc3QgPSBmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzP2pzb25wPWpzb25wXFxcIiwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGE7XFxufVxcbi8vIOaYr+WQpueCuei1nlxcbiQuZXhwb3J0cy5oYXNMaWtlID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9oYXMvbGlrZVxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YVxcbn1cXG4vLyDmmK/lkKbmlLbol49cXG4kLmV4cG9ydHMuaGFzRmF2b3VyID0gZnVuY3Rpb24gKGFpZCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2Zhdi92aWRlby9mYXZvdXJlZFxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YS5mYXZvdXJlZFxcbn1cXG4vLyDop4bpopHngrnotZ5cXG4kLmV4cG9ydHMuc2V0TGlrZSA9IGZ1bmN0aW9uIChhaWQsIGRlYWxXYXkpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9saWtlXFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgXFxcImxpa2VcXFwiOiBkZWFsV2F5LFxcbiAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgfSxcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxufVxcbi8vIOiOt+WPluaUtuiXj+WIl+ihqFxcbiQuZXhwb3J0cy5nZXRDb2xsZWN0aW9uR3JvdXBMaXN0ID0gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gY29sbGVjdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFwiLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhO1xcbn1cXG4vLyDmlLbol48v5Y+W5raI6KeG6aKRQVBJXFxuJC5leHBvcnRzLnNldEZhdm91ciA9IGZ1bmN0aW9uIChhaWQsIGFkZF9tZWRpYV9pZHMsIGRlbF9tZWRpYV9pZHMpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9tZWRpYWxpc3QvZ2F0ZXdheS9jb2xsL3Jlc291cmNlL2RlYWxcXFwiLCB7XFxuICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgXFxcInJpZFxcXCI6IGFpZCxcXG4gICAgICAgICAgICBcXFwidHlwZVxcXCI6IDIsXFxuICAgICAgICAgICAgXFxcImFkZF9tZWRpYV9pZHNcXFwiOiBhZGRfbWVkaWFfaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgXFxcImRlbF9tZWRpYV9pZHNcXFwiOiBkZWxfbWVkaWFfaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmXFxuICAgICAgICB9LFxcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcbn1cXG4vLyDojrflj5bop4bpopHmiYDlnKjmlLbol4/lpLlcXG4kLmV4cG9ydHMuZ2V0RmF2b3VySWRMaXN0ID0gZnVuY3Rpb24gKGFpZCwgdXNlck1pZCkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2NyZWF0ZWQvbGlzdC1hbGxcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwidHlwZVxcXCI6IDIsXFxuICAgICAgICBcXFwicmlkXFxcIjogYWlkLFxcbiAgICAgICAgXFxcInVwX21pZFxcXCI6IHVzZXJNaWQsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZmF2b3VySWRMaXN0ID0gW107XFxuICAgIEpTT04ucGFyc2UocmVzKS5kYXRhLmxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgaWYgKGl0ZW0uZmF2X3N0YXRlID09IDEpIHtcXG4gICAgICAgICAgICBmYXZvdXJJZExpc3QucHVzaChpdGVtLmlkKTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIGZhdm91cklkTGlzdDtcXG59XFxuLy8g54Ot5pig5Ymn6ZuG5pe26Ze06L20XFxuJC5leHBvcnRzLmdldE1vdmllcyA9IGZ1bmN0aW9uICh0eXBlLCBiZWZvcmUsIGFmdGVyKSB7XFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvdGltZWxpbmVcXFwiLCB7XFxuICAgICAgICBcXFwidHlwZXNcXFwiOiB0eXBlLFxcbiAgICAgICAgXFxcImJlZm9yZVxcXCI6IGJlZm9yZSxcXG4gICAgICAgIFxcXCJhZnRlclxcXCI6IGFmdGVyXFxuICAgIH0pXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKVxcbiAgICByZXR1cm4gcmVzLnJlc3VsdFxcbn1cXG4vLyDojrflj5bkuJPmoI/mlofnq6BcXG4kLmV4cG9ydHMuZ2V0VXNlckFydGljbGUgPSBmdW5jdGlvbiAodXBNaWQsIHBhZ2UpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJ0aWNsZVxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJtaWRcXFwiOiB1cE1pZCxcXG4gICAgICAgIFxcXCJwblxcXCI6IHBhZ2UsXFxuICAgICAgICBcXFwicHNcXFwiOiAxMixcXG4gICAgICAgIFxcXCJzb3J0XFxcIjogJ3B1Ymxpc2hfdGltZSdcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGE7XFxufVxcbi8vIOiOt+WPluWKqOaAgeaVsOaNrlxcbiQuZXhwb3J0cy5nZXREeW5hbWljRGF0YSA9IGZ1bmN0aW9uIChmcm9tLCB1cE1pZCkge1xcbiAgICB2YXIgbmV4dEluZm8gPSB7fTtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgaWYgKGZyb20gPT0gJ3VwU3BhY2UnKSB7XFxuICAgICAgICAgICAgdmFyIHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL3NwYWNlP29mZnNldD0maG9zdF9taWQ9XFxcIiArIHVwTWlkICsgXFxcIiZ0aW1lem9uZV9vZmZzZXQ9LTQ4MFxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9hbGw/dGltZXpvbmVfb2Zmc2V0PS00ODAmdHlwZT1hbGxcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgbmV4dEluZm8ub2Zmc2V0ID0gbGF0ZW5ld3Mub2Zmc2V0O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKGZyb20gPT0gJ3VwU3BhY2UnKSB7XFxuICAgICAgICAgICAgdmFyIHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL3NwYWNlP29mZnNldD1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSkpLm9mZnNldCArIFxcXCImaG9zdF9taWQ9XFxcIiArIHVwTWlkICsgXFxcIiZ0aW1lem9uZV9vZmZzZXQ9LTQ4MFxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9hbGw/dGltZXpvbmVfb2Zmc2V0PS00ODAmdHlwZT1hbGwmb2Zmc2V0PVxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShNWV9QQUdFKSkub2Zmc2V0O1xcbiAgICAgICAgfVxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBuZXh0SW5mby5vZmZzZXQgPSBsYXRlbmV3cy5vZmZzZXQ7XFxuICAgIH1cXG4gICAgc3RvcmFnZTAucHV0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSArIDEpLCBuZXh0SW5mbyk7XFxuICAgIHJldHVybiBsYXRlbmV3cztcXG59XFxuXFxuLy8g4oCU4oCU54m55Yir55qE6KGM5Li644CB5bel5YW35Ye95pWw4oCU4oCUXFxuLy8g5bGV56S65Yqo5oCB5pWw5o2uKOi/lOWbnuWHveaVsOaWueazleeahOWPr+aJp+ihjOWtl+espuS4silcXG4kLmV4cG9ydHMuc2hvd0R5bmFtaWNEYXRhID0gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBpbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbiAgICAgICAgbGF0ZW5ld3MuaXRlbXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOaKleeov+inhumike+8iOW9k+WJjeWPkeW4g++8ieKImlxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJy0nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX2FjdGlvbiArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiN5LiA5a6a5pyJ5paH5a2X5ZWKXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvLyDov5nkuKrkuI3og73nlKhsb25nX3RleHRcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcdFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcdFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0ZPUldBUkQnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOW8leeUqO+8jOWkmuWHuuS6hm9yaWfmjIflkJHkuIDkuKoo6L+H5Y67KeW3suWPkeW4g+eahOinhumikSzlh4bnoa7nmoTor7TmmK/lvJXnlKjkuYvliY3nmoTluJblrZDkuI3kuIDlrprmmK/op4bpopHiiJpcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkuZ/mmK/nuq/mloflrZfvvIzlm6DkuLrlj6rmmK/mloflrZcr5byV55So5pep5bey5oqV56i/55qE6KeG6aKRXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vIOW8leeUqOeahOWGheWuueKAlOKAlOaIquaWre+8iOagueaNruS4jeWQjOeahOW8leeUqOexu+Wei+i/m+ihjOWkhOeQhu+8iVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICc8c21hbGw+PHNtYWxsPuS4i+mdouWGheWuueadpeiHquW8leeUqOeahOW4luWtkCx1cOaYrzo8YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIj4nICsgbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lICsgJzwvYT48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAobGlzdC5vcmlnLnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9BVicpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOinhumikeivtOivtFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfV09SRCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOaWh+Wtl+ivtOivtFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDor4TorrppZOadpea6kOmDveS4jeS4gOagt1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5vcmlnLmlkX3N0cixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g57qv5paH5a2XXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC5vcmlnLnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9EUkFXJykge1xcbiAgICAgICAgICAgICAgICAgICAgLy8g5byV55So5Zu+54mH6K+06K+0XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0ID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5kcmF3LmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxMVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5zcmMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfM19zcXVhcmUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0ZW0uc3JjICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn5Y+v6IO96L+Y5pyJ5pyq6YCC6YWN55qE6K+06K+057G75Z6LJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5YiG5YmyXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcdFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcdFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX1dPUkQnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmJhc2ljLmNvbW1lbnRfaWRfc3RyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj7nlZnoqIA6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5jb21tZW50LmNvdW50ICsgJ1xcXFx0XFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFx0XFxcXHTllpzmrKI6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5saWtlLmNvdW50ICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nTGluay7liqjmgIHotrPov7ksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfRFJBVycpIHtcXG4gICAgICAgICAgICAgICAgLy8g5Zu+54mH6K+06K+0XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX3RpbWUgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g55u457C/77yI5Zu+54mH5Yqo5oCB77yJXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTFcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5kcmF3Lml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5zcmMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18zX3NxdWFyZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnNyYyArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXHRcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXHRcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWKqOaAgei2s+i/uSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pXFxufVxcbi8vIOaXtumXtOaXpeacn+i9rOaNouWHveaVsFxcbiQuZXhwb3J0cy50aW1lQ29udmVydCA9IGZ1bmN0aW9uICh0aW1lKSB7XFxuICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZSwgdCkge1xcbiAgICAgICAgZSA9IG5ldyBEYXRlKGUgKiAxMDAwKTsgLy/ml7bpl7TmiLPkuLoxMOS9jemcgCoxMDAw77yM5pe26Ze05oiz5Li6MTPkvY3nmoTor53kuI3pnIDkuZgxMDAwXFxuICAgICAgICByZXR1cm4gdC5yZXBsYWNlKC95eXl5fFlZWVkvLCBlLmdldEZ1bGxZZWFyKCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL3l5fFlZLywgcihlLmdldEZ1bGxZZWFyKCkgJSAxMDAsIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9tbXxNTS8sIHIoZS5nZXRNb250aCgpICsgMSwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL218TS9nLCBlLmdldE1vbnRoKCkgKyAxKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9kZHxERC8sIHIoZS5nZXREYXRlKCksIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9kfEQvZywgZS5nZXREYXRlKCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2hofEhILywgcihlLmdldEhvdXJzKCksIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9ofEgvZywgZS5nZXRIb3VycygpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9paXxJSS8sIHIoZS5nZXRNaW51dGVzKCksIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9pfEkvZywgZS5nZXRNaW51dGVzKCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL3NzfFNTLywgcihlLmdldFNlY29uZHMoKSwgMikpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL3N8Uy9nLCBlLmdldFNlY29uZHMoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvdy9nLCBlLmdldERheSgpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9XL2csIFtcXFwi5pelXFxcIiwgXFxcIuS4gFxcXCIsIFxcXCLkuoxcXFwiLCBcXFwi5LiJXFxcIiwgXFxcIuWbm1xcXCIsIFxcXCLkupRcXFwiLCBcXFwi5YWtXFxcIl1bZS5nZXREYXkoKV0pXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gcihlLCB0KSB7XFxuICAgICAgICBmb3IgKHZhciByID0gMCwgbiA9IHQgLSAoZSArIFxcXCJcXFwiKS5sZW5ndGg7IHIgPCBuOyByKyspIGUgPSBcXFwiMFxcXCIgKyBlO1xcbiAgICAgICAgcmV0dXJuIGUgKyBcXFwiXFxcIlxcbiAgICB9XFxuICAgIHJldHVybiBmb3JtYXREYXRlKHRpbWUsICdZWVlZLU1NLUREIGhoOmlpOnNzJyk7XFxuICAgIC8vIGNvbnNvbGUubG9nKGZvcm1hdERhdGUoMTY2NDA4OTUzMiwgJ1lZWVktTU0tREQgaGg6aWk6c3MnKSk7XFxufVxcbi8vIOenkuaVsOWIhumSn+ihqOi+vui9rOaNouWHveaVsFxcbiQuZXhwb3J0cy5mb3JtYXRTZWNvbmRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcXG4gICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7IC8vIOiuoeeul+WIhumSn+aVsFxcbiAgICBsZXQgcmVtYWluaW5nU2Vjb25kcyA9IHNlY29uZHMgJSA2MDsgLy8g6K6h566X5Ymp5L2Z55qE56eS5pWwXFxuICAgIGxldCBmb3JtYXR0ZWRUaW1lID0gYCR7bWludXRlc306JHtTdHJpbmcocmVtYWluaW5nU2Vjb25kcykucGFkU3RhcnQoMiwgJzAnKX1gO1xcbiAgICByZXR1cm4gZm9ybWF0dGVkVGltZTtcXG59XFxuXFxuLy8gQuermVdiaeetvuWQjeeul+azlShBZnRlciAyMDIzLTMsZ2V0IHJlcXVlc3Qgd2l0aCB3YmkuKVxcbiQuZXhwb3J0cy5nZXRXYmlFbmMgPSBmdW5jdGlvbiAocXVlcnlKc29uKSB7XFxuICAgIGNvbnN0IG1peGluS2V5RW5jVGFiID0gW1xcbiAgICAgICAgNDYsIDQ3LCAxOCwgMiwgNTMsIDgsIDIzLCAzMiwgMTUsIDUwLCAxMCwgMzEsIDU4LCAzLCA0NSwgMzUsIDI3LCA0MywgNSwgNDksXFxuICAgICAgICAzMywgOSwgNDIsIDE5LCAyOSwgMjgsIDE0LCAzOSwgMTIsIDM4LCA0MSwgMTMsIDM3LCA0OCwgNywgMTYsIDI0LCA1NSwgNDAsXFxuICAgICAgICA2MSwgMjYsIDE3LCAwLCAxLCA2MCwgNTEsIDMwLCA0LCAyMiwgMjUsIDU0LCAyMSwgNTYsIDU5LCA2LCA2MywgNTcsIDYyLCAxMSxcXG4gICAgICAgIDM2LCAyMCwgMzQsIDQ0LCA1MlxcbiAgICBdO1xcblxcbiAgICAvLyDlr7kgaW1nS2V5IOWSjCBzdWJLZXkg6L+b6KGM5a2X56ym6aG65bqP5omT5Lmx57yW56CBXFxuICAgIGZ1bmN0aW9uIGdldE1peGluS2V5KG9yaWcpIHtcXG4gICAgICAgIGxldCB0ZW1wID0gJyc7XFxuICAgICAgICBtaXhpbktleUVuY1RhYi5mb3JFYWNoKChuKSA9PiB7XFxuICAgICAgICAgICAgdGVtcCArPSBvcmlnW25dXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiB0ZW1wLnNsaWNlKDAsIDMyKTtcXG4gICAgfVxcblxcbiAgICAvLyDkuLror7fmsYLlj4LmlbDov5vooYwgd2JpIOetvuWQjVxcbiAgICBmdW5jdGlvbiBlbmNXYmkocGFyYW1zLCBpbWdfa2V5LCBzdWJfa2V5KSB7XFxuICAgICAgICBjb25zdCBtaXhpbl9rZXkgPSBnZXRNaXhpbktleShpbWdfa2V5ICsgc3ViX2tleSksXFxuICAgICAgICAgICAgY3Vycl90aW1lID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCksXFxuICAgICAgICAgICAgY2hyX2ZpbHRlciA9IC9bISdcXFxcKFxcXFwpKl0vZ1xcbiAgICAgICAgbGV0IHF1ZXJ5ID0gW107XFxuICAgICAgICBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHBhcmFtcywgeyB3dHM6IGN1cnJfdGltZSB9KTsgICAgLy8g5re75YqgIHd0cyDlrZfmrrVcXG4gICAgICAgIC8vIOaMieeFpyBrZXkg6YeN5o6S5Y+C5pWwXFxuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLnNvcnQoKS5mb3JFYWNoKChrZXkpID0+IHtcXG4gICAgICAgICAgICBxdWVyeS5wdXNoKFxcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArXFxuICAgICAgICAgICAgICAgICc9JyArXFxuICAgICAgICAgICAgICAgIC8vIOi/h+a7pCB2YWx1ZSDkuK3nmoQgXFxcIiEnKCkqXFxcIiDlrZfnrKZcXG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KCgnJyArIHBhcmFtc1trZXldKS5yZXBsYWNlKGNocl9maWx0ZXIsICcnKSlcXG4gICAgICAgICAgICApXFxuICAgICAgICB9KVxcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5qb2luKCcmJyk7XFxuICAgICAgICBjb25zdCB3Ymlfc2lnbiA9IG1kNShxdWVyeSArIG1peGluX2tleSk7IC8vIOiuoeeulyB3X3JpZFxcbiAgICAgICAgcmV0dXJuIHF1ZXJ5ICsgJyZ3X3JpZD0nICsgd2JpX3NpZ247XFxuICAgIH1cXG5cXG4gICAgLy8g6I635Y+W5pyA5paw55qEIGltZ19rZXkg5ZKMIHN1Yl9rZXlcXG4gICAgZnVuY3Rpb24gZ2V0V2JpS2V5cygpIHtcXG4gICAgICAgIGNvbnN0IGpzb25fY29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvbmF2Jywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgaW1nX3VybCA9IGpzb25fY29udGVudC53YmlfaW1nLmltZ191cmw7XFxuICAgICAgICBzdWJfdXJsID0ganNvbl9jb250ZW50LndiaV9pbWcuc3ViX3VybDtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgaW1nX2tleTogaW1nX3VybC5zdWJzdHJpbmcoaW1nX3VybC5sYXN0SW5kZXhPZignLycpICsgMSwgaW1nX3VybC5sZW5ndGgpLnNwbGl0KCcuJylbMF0sXFxuICAgICAgICAgICAgc3ViX2tleTogc3ViX3VybC5zdWJzdHJpbmcoc3ViX3VybC5sYXN0SW5kZXhPZignLycpICsgMSwgc3ViX3VybC5sZW5ndGgpLnNwbGl0KCcuJylbMF1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBjb25zdCB3Ymlfa2V5cyA9IGdldFdiaUtleXMoKTtcXG5cXG4gICAgY29uc3QgcXVlcnkgPSBlbmNXYmkoXFxuICAgICAgICBxdWVyeUpzb24sXFxuICAgICAgICB3Ymlfa2V5cy5pbWdfa2V5LFxcbiAgICAgICAgd2JpX2tleXMuc3ViX2tleVxcbiAgICApO1xcbiAgICByZXR1cm4gcXVlcnk7XFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwidmlkZW9QYWdlXCIsXCJwYXRoXCI6XCJ2aWRlb1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG4vLyDpooTlpITnkIZcXG5wdXRNeVZhcign5Yqf6IO95oqY5Y+gJywgJ+WFsycpO1xcbmltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxuYWlkID0gTVlfUEFSQU1TLmFpZCArIFxcXCJcXFwiO1xcbi8vIGJ2aWQgPSBNWV9QQVJBTVMuYnZpZCArIFxcXCJcXFwiO1xcbm1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFwiXFxcIjtcXG52YXIge2Zvcm1hdFNlY29uZHN9PSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpO1xcbnRyeSB7XFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcbiAgICB2YXIgcCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGE7XFxuICAgIGhhc0xpa2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5oYXNMaWtlKGFpZCk7XFxuICAgIGhhc0Zhdm91ciA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0Zhdm91cihhaWQpO1xcbiAgICBzZXRQYWdlVGl0bGUocC50aXRsZSk7XFxuICAgIHNldFBhZ2VQaWNVcmwocC5waWMgKyAnQFJlZmVyZXI9Jyk7XFxuICAgIC8vIOWPquaciTFQ55qE5oOF5Ya1XFxuICAgIGlmIChwLnBhZ2VzLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICBjaWQgPSBwLnBhZ2VzWzBdLmNpZDtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g55yf56a75LqG5Liq5aSn6LCx77yM5piO5piO5pu/5o2i5o6J5LqG77yMdWHlrZfnrKbkuLLlj4jlj5jlm57mnaXkuobvvIzlj4jopoHlpITnkIbkuIDmrKFcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTEyJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzon5pKt5pS+6YePOicrcC5zdGF0LnZpZXcrJ1xcXFx0XFxcXHRcXFxcdOW8ueW5leaVsDonK3Auc3RhdC5kYW5tYWt1KydcXFxcbuWPkeW4g+aXpeacnzonKyQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnRpbWVDb252ZXJ0KHAuY3RpbWUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcImJsdWVcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBwLm93bmVyLm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXG4gICAgICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvLyDomb3nhLblj6rmnIkxUCzkvYblj6/og73lpITkuo7lkIjpm4bop4bpopHkuK3vvIzlvoDlvoDlnKh1cOS4iuS8oOS4reWxnuS6juS4gOWll+W9seeJh1xcbiAgICAgICAgaWYgKHAudWdjX3NlYXNvbikge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgeaJgOWxnuWQiOmbhu+8mjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uVmllZG9cXFwiPicrcC51Z2Nfc2Vhc29uLnRpdGxlKyc8L2E+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb25WaWVkbyNub0hpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICBleHRyYTogeyBcXFwidGV4dFNpemVcXFwiOiAxMiwgYWlkOiBhaWQgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0Lmxpa2UsXFxuICAgICAgICAgICAgaW1nOiBoYXNMaWtlID09IDEgPyBpbWdMaW5rLuW3sueCuei1niA6IGltZ0xpbmsu5pyq54K56LWeLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxpa2VMb2dpYyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRMaWtlJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0LmZhdm9yaXRlLFxcbiAgICAgICAgICAgIGltZzogaGFzRmF2b3VyID8gaW1nTGluay7lt7LmlLbol48gOiBpbWdMaW5rLuacquaUtuiXjyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHVwTWlkID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJNaWQ7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5mYXZvdXJMb2dpYyhhaWQsIHVwTWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0RmF2b3VyJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+eojeWQjuWGjeeciycsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLueojeWQjuWGjeeciyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5qdWRnZVRvdmlldyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvor4TorronLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuafpeeci+ivhOiuuixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcImlkXFxcIjogYWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLmRlc2MsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDlrZjlnKjlpJrpm4bliIZQXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogcC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICBkZXNjOifmkq3mlL7ph486JytwLnN0YXQudmlldysnXFxcXHRcXFxcdFxcXFx05by55bmV5pWwOicrcC5zdGF0LmRhbm1ha3UrJ1xcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQocC5jdGltZSksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHApID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgocCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgIH0sIHApXFxuICAgICAgICAgICAgfSwgcCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiYmx1ZVxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG4gICAgICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQubGlrZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGlrZUxvZ2ljKGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldExpa2UnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQuZmF2b3JpdGUsXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBNaWQgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlck1pZDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmZhdm91ckxvZ2ljKGFpZCwgdXBNaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRGYXZvdXInXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn56iN5ZCO5YaN55yLJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu56iN5ZCO5YaN55yLLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmp1ZGdlVG92aWV3KGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+ivhOiuuicsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+mAiembhuWIl+ihqCcsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD7lhbEnICsgcC52aWRlb3MgKyAn5p2h6KeG6aKRPC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWIl+ihqCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBwLnBhZ2VzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucGFydCxcXG4gICAgICAgICAgICAgICAgZGVzYzpmb3JtYXRTZWNvbmRzKGl0ZW0uZHVyYXRpb24pLFxcbiAgICAgICAgICAgICAgICAvLyBpbWc6aW1nTGluay7liIZQ5YiX6KGo6aG5LFxcbiAgICAgICAgICAgICAgICBpbWc6aXRlbS5maXJzdF9mcmFtZSsnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXCJcXFwiLCBjaWQgKyBcXFwiXFxcIiwgJzExNicpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBkZXNjOiAn5aSn5qaC546H6KeG6aKR6KKr5bCB56aB77yM5oiW6ICFdXDlt7Lot5Hot69+JyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJsb25nX3RleHRcIixcIm5hbWVcIjpcIuivhOiuulwiLFwicGF0aFwiOlwiQ29tbWVudHNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIGlkID0gTVlfUEFSQU1TLmlkO1xcbnZhciB0eXBlID0gTVlfUEFSQU1TLnR5cGU7XFxubG9nKGlkKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIC8vIOiyjOS8vOaaguaXtuWPquiDveaWh+WtlyvmlbDlrZdcXG4gICAgZC51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Y+R5p2h6K+E6K665ZCnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChpZCx0eXBlKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgICAgICAgICBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5L2FkZFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiB0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm9pZFxcXCI6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm1lc3NhZ2VcXFwiOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICB9LCBpZCx0eXBlKVxcbiAgICB9KVxcbn1cXG5sZXQgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldENvbW1lbnRzKGlkLHR5cGUsTVlfUEFHRSk7XFxuLy8gbG9nKGRhdGEpO1xcbmlmKGRhdGEpe1xcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm1lbWJlci51bmFtZSxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0ubWVtYmVyLmF2YXRhcisnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcbiAgICAgICAgICAgIGRlc2M6JzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicraXRlbS5yZXBseV9jb250cm9sLmxvY2F0aW9uICsgXFxcIiBcXFwiICsgaXRlbS5yZXBseV9jb250cm9sLnRpbWVfZGVzYysnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBtaWQ6IGl0ZW0ubWVtYmVyLm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcbiAgICAgICAgICAgICAgICBmYWNlOiBpdGVtLm1lbWJlci5hdmF0YXJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5jb250ZW50Lm1lc3NhZ2UsXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1lbHNle1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflpb3lg4/msqHmnInor4TorrrkuobllabvvIzvvIEnLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K6i6ZiF5YiX6KGoXCIsXCJwYXRoXCI6XCJzdWJzY3JpcHRpb25cIixcInJ1bGVcIjpcImlmIChnZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMScpID09ICcxJykge1xcblxcbsKgIMKgIHR5cGVyTmFtZSA9ICfov73nlaonO1xcblxcbn0gZWxzZSB7XFxuXFxuwqAgwqAgdHlwZXJOYW1lID0gJ+i/veWJpyc7XFxuXFxufVxcblxcbmQucHVzaCh7XFxuXFxuwqAgwqAgdGl0bGU6ICfov73nlaonID09IHR5cGVyTmFtZSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ov73nlao8L2ZvbnQ+JyA6ICfov73nlaonLFxcblxcbsKgIMKgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCBzZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMScpXFxuXFxuwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuXFxuwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXG7CoCDCoCB9KSxcXG5cXG7CoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuXFxufSx7XFxuXFxuwqAgwqAgdGl0bGU6ICfov73liacnID09IHR5cGVyTmFtZSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ov73liac8L2ZvbnQ+JyA6ICfov73liacnLFxcblxcbsKgIMKgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCBzZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMicpXFxuXFxuwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuXFxuwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXG7CoCDCoCB9KSxcXG5cXG7CoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuXFxufSk7XFxuXFxuc3Vic2NyaXB0aW9ucyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2Jhbmd1bWkvZm9sbG93L2xpc3Q/dHlwZT1cXFwiICsgZ2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzEnKSArIFxcXCImZm9sbG93X3N0YXR1cz0wJnBuPVxcXCIgKyBwYWdlICsgXFxcIiZwcz0xNSZ2bWlkPVxcXCIgKyBtaWQsIHtcXG5cXG7CoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcblxcbsKgIMKgIH1cXG5cXG59KSkuZGF0YTtcXG5cXG5pZiAocGFnZSA9PSAxKSB7XFxuXFxuwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCB0aXRsZTogXFxcIuW9k+WJjVxcXCIgKyB0eXBlck5hbWUgKyBcXFwi5pWw6YePOlxcXCIgKyBzdWJzY3JpcHRpb25zLnRvdGFsLFxcblxcbsKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG5cXG7CoCDCoCB9KVxcblxcbn1cXG5cXG5zdWJzY3JpcHRpb25zLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnRpdGxlLFxcblxcbsKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcblxcbsKgIMKgIMKgIMKgIGRlc2M6IGxpc3QuZXZhbHVhdGUuc3Vic3RyaW5nKDAsIDEyKSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFwiIzFDMUMxQ1xcXCI+6K+m5oOFPC9mb250PicgKyAnXFxcXG4nICsgbGlzdC5zZWFzb25fdHlwZV9uYW1lICsgJ3wnICsgKGxpc3QuYXJlYXM9PT11bmRlZmluZWQ/Jyc6bGlzdC5hcmVhc1swXS5uYW1lICsgJ1xcXFxuJykgKyAobGlzdC5wcm9ncmVzcyA9PSAnJyA/ICflsJrmnKrop4LnnIsnIDogbGlzdC5wcm9ncmVzcykgKyAobGlzdC5uZXdfZXAuaW5kZXhfc2hvdz09PXVuZGVmaW5lZD8nJzonfCcrKGxpc3QubmV3X2VwLmluZGV4X3Nob3cubWF0Y2goL+abtOaWsHzljbPlsIYvKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj4nICsgbGlzdC5uZXdfZXAuaW5kZXhfc2hvdyArICc8L2ZvbnQ+JzogbGlzdC5uZXdfZXAuaW5kZXhfc2hvdykpLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgc2Vhc29uX2lkOiBsaXN0LnNlYXNvbl9pZFxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KTtcXG5cXG59KTtcXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFs+azqOWIl+ihqFwiLFwicGF0aFwiOlwiYXR0ZW50aW9uXCIsXCJydWxlXCI6XCJpZiAoTVlfUEFHRSA9PSAxKSB7XFxuXFxuwqAgwqAgZm9jdXNHcm91cHM9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0TXlBdHRlbnRpb25Hcm91cExpc3QoKTtcXG5cXG7CoCDCoCBwdXRNeVZhcigndGVtcElkJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMV0udGFnaWQpKTtcXG5cXG7CoCDCoCBmb2N1c0dyb3Vwcy5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGFnaWQgPT0gZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMV0uaWQpKSA/IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0ncmVkJz5cXFwiICsgbGlzdC5uYW1lICsgbGlzdC5jb3VudCArIFxcXCI8L2ZvbnQ+XFxcIiA6IGxpc3QubmFtZSArIGxpc3QuY291bnQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGxpc3QpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRJdGVtKCflhbPms6jliIbnu4QnLCBKU09OLnN0cmluZ2lmeShsaXN0LnRhZ2lkKSk7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouWFs+azqOWIhue7hOS4ujpcXFwiICsgbGlzdC5uYW1lO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGxpc3QpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfSk7XFxuXFxuwqAgwqAgLy8g5pyr5bC+6KGl5YWF5oKE5oKE5YWz5rOo5YiG57uEXFxuXFxuwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCB0aXRsZTogJ+aChOaChOWFs+azqCcgPT0gZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMF0uaWQpKSA/IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0ncmVkJz7mgoTmgoTlhbPms6g8L2ZvbnQ+XFxcIiA6IFxcXCLmgoTmgoTlhbPms6hcXFwiLFxcblxcbsKgIMKgIMKgIMKgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBzZXRJdGVtKCflhbPms6jliIbnu4QnLCBcXFwi5oKE5oKE5YWz5rOoXFxcIik7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouWFs+azqOWIhue7hOS4ujpcXFwiICsgXFxcIuaChOaChOWFs+azqFxcXCI7XFxuXFxuwqAgwqAgwqAgwqAgfSksXFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG5cXG7CoCDCoCB9LHtcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2xpbmUnXFxuXFxuwqAgwqAgfSk7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCflhbPms6jliIbnu4QnKT09J+aChOaChOWFs+azqCcpIHtcXG5cXG7CoCDCoCBncm91cENvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi93aGlzcGVycz9wbj1cXFwiK3BhZ2UrXFxcIiZwcz0yMCZqc29ucD1qc29ucFxcXCIsIHtcXG5cXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KSkuZGF0YS5saXN0O1xcblxcbsKgIMKgIGdyb3VwQ29udGVudC5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFwiICsgbGlzdC51bmFtZSArIFxcXCI8L2ZvbnQ+PC9iaWc+PHNtYWxsPlxcXCIgKyBsaXN0LnNpZ24gKyBcXFwiPC9zbWFsbD5cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdhdmF0YXInLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWlkOiBsaXN0Lm1pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC51bmFtZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBmYWNlOiBsaXN0LmZhY2VcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfSk7XFxuXFxufWVsc2V7XFxuXFxuwqAgwqAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFnP21pZD1cXFwiICsgbWlkICsgXFxcIiZ0YWdpZD1cXFwiICsgZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgZ2V0TXlWYXIoJ3RlbXBJZCcpKSArIFxcXCImcG49XFxcIiArIHBhZ2UgKyBcXFwiJnBzPTIwJmpzb25wPWpzb25wXFxcIiwge1xcblxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiQ29va2llXFxcIjogY29va2llXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pKS5kYXRhO1xcblxcbsKgIMKgIGdyb3VwQ29udGVudC5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFwiICsgbGlzdC51bmFtZSArIFxcXCI8L2ZvbnQ+PC9iaWc+PHNtYWxsPlxcXCIgKyBsaXN0LnNpZ24gKyBcXFwiPC9zbWFsbD5cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdhdmF0YXInLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWlkOiBsaXN0Lm1pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC51bmFtZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBmYWNlOiBsaXN0LmZhY2VcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfSk7XFxuXFxufVxcblxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pS26JeP5YiX6KGoXCIsXCJwYXRoXCI6XCJjb2xlY3Rpb25cIixcInJ1bGVcIjpcImlmIChwYWdlID09IDEpIHtcXHJcXG4gICAgZC5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn5oiR5Yib5bu655qE5pS26JeP5aS5JyA9PSBnZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5oiR5Yib5bu655qE5pS26JeP5aS5PC9mb250PicgOiAn5oiR5Yib5bu655qE5pS26JeP5aS5JyxcXHJcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXHJcXG4gICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JylcXHJcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxyXFxuICAgIH0sIHtcXHJcXG4gICAgICAgIHRpdGxlOiAn56iN5ZCO5Zyo55yLJyA9PSBnZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+56iN5ZCO5Zyo55yLPC9mb250PicgOiAn56iN5ZCO5Zyo55yLJyxcXHJcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXHJcXG4gICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn56iN5ZCO5Zyo55yLJylcXHJcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxyXFxuICAgIH0pO1xcclxcbn1cXHJcXG5pZiAoZ2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpID09ICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSB7XFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgLy8gY29sX3R5cGU6ICdibGFua19ibG9jaydcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcclxcbiAgICAgICAgICAgIH0sICk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBjb2xsZWN0aW9ucyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YzL2Zhdi9mb2xkZXIvbGlzdDRuYXZpZ2F0ZVxcXCIsIHtcXHJcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxyXFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KSkuZGF0YTtcXHJcXG4gICAgICAgIGdyb3VwcyA9IGNvbGxlY3Rpb25zWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3Q7XFxyXFxuICAgICAgICBwdXRNeVZhcigndGVtcElkJywgSlNPTi5zdHJpbmdpZnkoZ3JvdXBzWzBdLmlkKSk7XFxyXFxuICAgICAgICBncm91cHMuZm9yRWFjaChsaXN0ID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5pZCA9PSBnZXRJdGVtKCfmlLbol4/lpLknLCBKU09OLnN0cmluZ2lmeShncm91cHNbMF0uaWQpKSA/IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0ncmVkJz5cXFwiICsgbGlzdC50aXRsZSArIFxcXCI8L2ZvbnQ+XFxcIiA6IGxpc3QudGl0bGUsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChsaXN0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/lpLknLCBKU09OLnN0cmluZ2lmeShsaXN0LmlkKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmlLbol4/lpLnkuLo6XFxcIiArIGxpc3QudGl0bGU7XFxyXFxuICAgICAgICAgICAgICAgIH0sIGxpc3QpLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgfSk7XFxyXFxuICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICAgICAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L3Jlc291cmNlL2xpc3Q/bWVkaWFfaWQ9XFxcIiArIGdldEl0ZW0oJ+aUtuiXj+WkuScsIGdldE15VmFyKCd0ZW1wSWQnKSkgKyBcXFwiJnBuPVxcXCIgKyBwYWdlICsgXFxcIiZwcz0yMCZrZXl3b3JkPSZvcmRlcj1tdGltZSZ0eXBlPTAmdGlkPTAmcGxhdGZvcm09d2ViJmpzb25wPWpzb25wXFxcIiwge1xcclxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pKS5kYXRhLm1lZGlhcztcXHJcXG4gICAgICAgIGdyb3VwQ29udGVudC5mb3JFYWNoKGxpc3QgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcclxcbiAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXHJcXG4gICAgICAgICAgICAgICAgZGVzYzogJ1VQOicgKyBsaXN0LnVwcGVyLm5hbWUgKyAnXFxcXG4nICsgbGlzdC5pbnRybyxcXHJcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5pZCxcXHJcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC51cHBlci5taWRcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgfSk7XFxyXFxuICAgIH0gY2F0Y2ggKGUpIHtcXHJcXG4gICAgICAgIHNob3dMb2FkaW5nKCflhYTlvJ/vvIzkvaDnoa7orqTkvaDmnInmlLbol4/lkJfvvIzlv6vljrvmlLbol4/kuIDkuKrop4bpopF+Jyk7XFxyXFxuICAgIH1cXHJcXG59IGVsc2Uge1xcclxcbiAgICBsYXRlclZpZXdzID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvd2ViP2pzb25wPWpzb25wXFxcIiwge1xcclxcbiAgICAgICAgaGVhZGVyczoge1xcclxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSkpLmRhdGE7XFxyXFxuICAgIGNvdW50ID0gbGF0ZXJWaWV3cy5jb3VudDtcXHJcXG4gICAgZC5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiBcXFwi5YWx5pyJXFxcIiArIGNvdW50ICsgXFxcIuadoeW+heeci+inhumikeiusOW9lVxcXCIsXFxyXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXHJcXG4gICAgfSk7XFxyXFxuICAgIGxhdGVyVmlld3MubGlzdC5mb3JFYWNoKGxpc3QgPT4ge1xcclxcbiAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXHJcXG4gICAgICAgICAgICBpbWc6IGxpc3QucGljICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXHJcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcclxcbiAgICAgICAgICAgIGRlc2M6ICdVUDonICsgbGlzdC5vd25lci5uYW1lICsgJ1xcXFxuJyArIGxpc3QuZGVzYyxcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcclxcbiAgICAgICAgICAgICAgICBtaWQ6IGxpc3Qub3duZXIubWlkXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSk7XFxyXFxuICAgIH0pO1xcclxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIui2s+i/uVwiLFwicGF0aFwiOlwidHJhY2tcIixcInJ1bGVcIjpcInZhciBuZXh0SW5mbyA9IHt9O1xcblxcbmlmIChwYWdlID09IDEpIHtcXG5cXG7CoCDCoCBoaXN0b3JpZXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2hpc3RvcnkvY3Vyc29yP21heD0wJnZpZXdfYXQ9MCZidXNpbmVzcz1cXFwiLCB7XFxuXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSkpLmRhdGE7XFxuXFxuwqAgwqAgbmV4dEluZm8ubWF4ID0gaGlzdG9yaWVzLmN1cnNvci5tYXg7XFxuXFxuwqAgwqAgbmV4dEluZm8udmlld19hdCA9IGhpc3Rvcmllcy5jdXJzb3Iudmlld19hdDtcXG5cXG7CoCDCoCBuZXh0SW5mby5idXNpbmVzcyA9IGhpc3Rvcmllcy5jdXJzb3IuYnVzaW5lc3M7XFxuXFxufSBlbHNlIHtcXG5cXG7CoCDCoCBoaXN0b3JpZXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2hpc3RvcnkvY3Vyc29yP21heD1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSkpLm1heCArIFxcXCImdmlld19hdD1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSkpLnZpZXdfYXQgKyBcXFwiJmJ1c2luZXNzPVxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkuYnVzaW5lc3MsIHtcXG5cXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KSkuZGF0YTtcXG5cXG7CoCDCoCBuZXh0SW5mby5tYXggPSBoaXN0b3JpZXMuY3Vyc29yLm1heDtcXG5cXG7CoCDCoCBuZXh0SW5mby52aWV3X2F0ID0gaGlzdG9yaWVzLmN1cnNvci52aWV3X2F0O1xcblxcbsKgIMKgIG5leHRJbmZvLmJ1c2luZXNzID0gaGlzdG9yaWVzLmN1cnNvci5idXNpbmVzcztcXG5cXG59XFxuXFxuc3RvcmFnZTAucHV0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSArIDEpLCBuZXh0SW5mbyk7XFxuXFxuaGlzdG9yaWVzLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCB2aWV3VGltZT1wYnRpbWUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS50aW1lQ29udmVydChsaXN0LnZpZXdfYXQpO1xcblxcbsKgIMKgIGlmIChsaXN0Lmhpc3RvcnkuYnVzaW5lc3MgPT0gJ2FydGljbGUnKSB7XFxuXFxuwqAgwqAgwqAgwqAgLy8g5LiT5qCP5paH56ugXFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXJzWzBdICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZURldGFpbFxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXG4nICkrIHZpZXdUaW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaGlzdG9yeS5vaWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH0gZWxzZSBpZihsaXN0Lmhpc3RvcnkuYnVzaW5lc3MgPT0gJ2FydGljbGUtbGlzdCcpe1xcblxcbsKgIMKgIMKgIMKgIC8vIOaWh+eroOWIl+ihqO+8n++8iOWPjeato2lk5a2Y5pS+5L2N572u5LiN5LiA5qC377yJXFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXJzWzBdICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZURldGFpbFxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXG4nICkrIHZpZXdUaW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaGlzdG9yeS5jaWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH1lbHNlIGlmKGxpc3QuaGlzdG9yeS5idXNpbmVzcyA9PSAncGdjJyl7XFxuXFxuwqAgwqAgwqAgwqAgLy8g57O75YiX5Ymn6ZuG77yI5Y2V6ZuG77yJXFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz9saXN0LnRhZ19uYW1lKydcXFxcdFxcXFx0JytsaXN0Lm5ld19kZXNjKydcXFxcbicrdmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcbicrdmlld1RpbWUpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXBfaWQ6bGlzdC5oaXN0b3J5LmVwaWRcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfWVsc2Uge1xcblxcbsKgIMKgIMKgIMKgIC8vIOaZrumAmnZpZGVvXFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP2xpc3QudGFnX25hbWUrJ1xcXFx0XFxcXHQnK2xpc3QubmV3X2Rlc2MrJ1xcXFxuJyt2aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxuJyt2aWV3VGltZSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhaWQ6IGxpc3QuaGlzdG9yeS5vaWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH1cXG5cXG59KTtcXG5cXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgVwiLFwicGF0aFwiOlwibGF0ZXROZXdzXCIsXCJydWxlXCI6XCJkLnB1c2goe1xcblxcbsKgIMKgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG5cXG59KTtcXG5cXG5sYXRlbmV3cz0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXREeW5hbWljRGF0YSgnbXlIb21lJyk7XFxuXFxuZXZhbCgkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zaG93RHluYW1pY0RhdGEoKSk7XFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuJPmoI/liJfooahcIixcInBhdGhcIjpcImFjdGljbGVMaXN0XCIsXCJydWxlXCI6XCJqczpcXG5cXG52YXIgZD1bXTtcXG5cXG5wYWdlPU1ZX1BBR0U7XFxuXFxudXBNaWQgPSBNWV9QQVJBTVMubWlkICsgXFxcIlxcXCI7XFxuXFxuYXJ0aWNsZUxpc3Q9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0VXNlckFydGljbGUodXBNaWQscGFnZSk7XFxuXFxuYXJ0aWNsZU51bT1hcnRpY2xlTGlzdC5jb3VudDtcXG5cXG5pZiAoYXJ0aWNsZU51bT09dW5kZWZpbmVkKSB7XFxuXFxuwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCB0aXRsZTogJ+i/mXVw5rKh5pyJ5LiT5qCP5paH56ugJyxcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcblxcbsKgIMKgIH0pO1xcblxcbn1lbHNle1xcblxcbsKgIMKgIG1heFBhZ2UgPSBNYXRoLmNlaWwoYXJ0aWNsZU51bSAvIGFydGljbGVMaXN0LnBzKTtcXG5cXG7CoCDCoCBpZiAocGFnZSA8PSBtYXhQYWdlKSB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogJ+W9k+WJjTrnrKwnICsgYXJ0aWNsZUxpc3QucG4gKyAn6aG1XFxcXHRcXFxcdFxcXFx05YWx5pyJJyArIG1heFBhZ2UgKyAn6aG1LCcgKyBhcnRpY2xlTnVtICsgJ+adoeaVsOaNricsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCDCoCDCoCBhcnRpY2xlTGlzdC5hcnRpY2xlcy5mb3JFYWNoKGxpc3QgPT4ge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHBidGltZT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS50aW1lQ29udmVydChsaXN0LnB1Ymxpc2hfdGltZSk7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC50aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuYmFubmVyX3VybD09Jyc/IChsaXN0LmltYWdlX3VybHMrICdAUmVmZXJlcj0nKToobGlzdC5iYW5uZXJfdXJsKyAnQFJlZmVyZXI9JyksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogJ+KAmOKAmOKAmeKAmTxzbWFsbD4nK2xpc3Quc3RhdHMudmlldysn55yL6L+HXFxcXHRcXFxcdCcrbGlzdC5zdGF0cy5saWtlKyfllpzmrKJcXFxcdFxcXFx0JytsaXN0LnN0YXRzLmZhdm9yaXRlKyfmlLbol49cXFxcbicgKyBwYnRpbWUrJzwvc21hbGw+JyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlRGV0YWlsXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8vIOS4k+agj+aWh+eroGlkXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaWRcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgfVxcblxcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuJPmoI/mlofnq6BYNVwiLFwicGF0aFwiOlwiYXJ0aWNsZURldGFpbFwiLFwicnVsZVwiOlwianM6XFxuXFxudmFyIGQgPSBbXTtcXG5cXG5wYWdlID0gTVlfUEFHRTtcXG5cXG5jdmlkID0gTVlfUEFSQU1TLmlkICsgXFxcIlxcXCI7XFxuXFxuZC5wdXNoKHtcXG5cXG7CoCDCoCB1cmw6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vcmVhZC9jdlxcXCIrY3ZpZCxcXG5cXG7CoCDCoCBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG5cXG7CoCDCoCBkZXNjOiBcXFwiMTAwJSYmZmxvYXRcXFwiLFxcblxcbsKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgY2FuQmFjazogdHJ1ZVxcblxcbsKgIMKgIH1cXG5cXG59KVxcblxcbnNldFJlc3VsdChkKTtcXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIue7vOWQiOeDremXqFwiLFwicGF0aFwiOlwiaG90VmlkZW9cIixcInJ1bGVcIjpcImxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvcG9wdWxhcj9wbj1cXFwiICsgTVlfUEFHRSwge1xcblxcbsKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCBDb29raWU6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG5cXG7CoCDCoCB9XFxuXFxufSkpLmRhdGFcXG5cXG5yZXMubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgaW1nOiBpdGVtLnBpYysgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG5cXG7CoCDCoCDCoCDCoCBkZXNjOiBpdGVtLnB1Yl9sb2NhdGlvbixcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiLFxcblxcbsKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcImFpZFxcXCI6IGl0ZW0uYWlkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJjaWRcXFwiOiBpdGVtLmNpZCxcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSlcXG5cXG59KVxcblxcblxcblwifSx7XCJuYW1lXCI6XCLlk5Tlk6nmnIDmlrDnq6DoioJcIixcInBhdGhcIjpcImdldFVwZGF0ZVwiLFwicnVsZVwiOlwiaWYgKE1ZX1BBUkFNUy5zZWFzb25faWQpIHtcXG4gICAgc2Vhc29uX2lkID0gTVlfUEFSQU1TLnNlYXNvbl9pZCArIFxcXCJcXFwiO1xcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/c2Vhc29uX2lkPScgKyBzZWFzb25faWQpKS5yZXN1bHQ7XFxufSBlbHNlIHtcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP2VwX2lkPScgKyBNWV9QQVJBTVMuZXBfaWQpKS5yZXN1bHQ7XFxufVxcbui/veWJp+aXpeWOhiA9IERhdGEubmV3X2VwLmRlc2M7XFxu5pu05paw6L+b5bqmID0gRGF0YS5uZXdfZXAudGl0bGU7XFxu5pu05paw54q25oCBID0g6L+95Ymn5pel5Y6GLm1hdGNoKC/lroznu5N85pyf5b6FLykgPyDov73liafml6XljoYgOiAn5pu05paw6IezJyArICjmm7TmlrDov5vluqYubWF0Y2goL1tcXFxcdTRlMDAtXFxcXHU5ZmE1XS8pID8g5pu05paw6L+b5bqmIDogKCfnrKwnICsgKOabtOaWsOi/m+W6piA9PSAnJyA/IDAgOiDmm7TmlrDov5vluqYpKSArICfor50nKVxcbnNldFJlc3VsdCjmm7TmlrDnirbmgIEpO1wifSx7XCJuYW1lXCI6XCJ1cOWQiOmbhuinhumikVwiLFwicGF0aFwiOlwiY29sbGVjdGlvblZpZWRvXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbi8vIOmihOWkhOeQhlxcbnB1dE15VmFyKCflip/og73mipjlj6AnLCAn5YWzJyk7XFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG5haWQgPSBNWV9QQVJBTVMuYWlkICsgXFxcIlxcXCI7XFxuLy8gYnZpZCA9IE1ZX1BBUkFNUy5idmlkICsgXFxcIlxcXCI7XFxuLy8gbWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnRyeSB7XFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcbiAgICB2YXIgcCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGE7XFxuICAgIC8vIOWQiOmbhuS/oeaBr1xcbiAgICB2YXIgdmlkZW9EYXRhID0gcC51Z2Nfc2Vhc29uO1xcbiAgICBzZXRQYWdlVGl0bGUodmlkZW9EYXRhLnRpdGxlKTtcXG4gICAgc2V0UGFnZVBpY1VybCh2aWRlb0RhdGEuY292ZXIgKyAnQFJlZmVyZXI9Jyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdmlkZW9EYXRhLnRpdGxlLFxcbiAgICAgICAgZGVzYzp2aWRlb0RhdGEuaW50cm8sXFxuICAgICAgICBpbWc6IHZpZGVvRGF0YS5jb3ZlciArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGludHJvKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgoaW50cm8pID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpbnRybyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgIH0sIGludHJvKVxcbiAgICAgICAgfSwgdmlkZW9EYXRhLmludHJvKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiYmx1ZVxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcbiAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPuWFseaciScgKyB2aWRlb0RhdGEuZXBfY291bnQgKyAn5p2h6KeG6aKR5pWw5o2uPC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxuICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXG4gICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICB9KTtcXG4gICAgdmFyIGluZGV4ID0gMTtcXG4gICAgc3RvcmFnZTAucHV0VmFyKCd2aWRlb1NlY3Rpb25zJywgdmlkZW9EYXRhLnNlY3Rpb25zKTtcXG4gICAgdmlkZW9EYXRhLnNlY3Rpb25zLmZvckVhY2goZWwgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ/Cfk4EnICsgZWwudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignaXNGb2xkXycraW5kZXgsICd5JykgPT0gJ3knKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaXNGb2xkXycraW5kZXgsICduJyk7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmipjlj6AnO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAneScpO1xcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TZWN0aW9ucyA9IHN0b3JhZ2UwLmdldFZhcigndmlkZW9TZWN0aW9ucycpO1xcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvblBhcnRMaXN0ID0gW107XFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1NlY3Rpb25zW2luZGV4IC0gMV0uZXBpc29kZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSBpdGVtLmFpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ID0gaXRlbS5hcmMuc3RhdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uUGFydExpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdXFxcXHRcXFxcdFxcXFx0PHNtYWxsPjwvZm9udD7ilrbvuI4nICsgaXRlbS50aXRsZSArICdcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQ8L2ZvbnQ+PC9zbWFsbD48c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPWdyYXk+5pKt5pS+6YeP77yaJyArIHN0YXQudmlldyArICdcXFxcdFxcXFx0XFxcXHTlvLnluZXvvJonICsgc3RhdC5kYW5tYWt1ICsgJ1xcXFx0XFxcXHRcXFxcdOWWnOasou+8micgKyBzdGF0Lmxpa2UgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTE2JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlLCBjbHM6ICdzZWN0aW9uJyArIGluZGV4ICsgJy1wYXJ0JyxpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ1NlY3Rpb24nICsgaW5kZXgsIHNlY3Rpb25QYXJ0TGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5bGV5byAJztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGluZGV4KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICAgICAgZXh0cmE6IHsgaWQ6ICdTZWN0aW9uJyArIGluZGV4IH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZWwuZXBpc29kZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBhaWQgPSBpdGVtLmFpZDtcXG4gICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXG4gICAgICAgICAgICBzdGF0ID0gaXRlbS5hcmMuc3RhdDtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnVxcXFx0XFxcXHRcXFxcdDxzbWFsbD48L2ZvbnQ+4pa277iOJyArIGl0ZW0udGl0bGUgKyAnXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0PC9mb250Pjwvc21hbGw+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1ncmF5PuaSreaUvumHj++8micgKyBzdGF0LnZpZXcgKyAnXFxcXHRcXFxcdFxcXFx05by55bmV77yaJyArIHN0YXQuZGFubWFrdSArICdcXFxcdFxcXFx0XFxcXHTllpzmrKLvvJonICsgc3RhdC5saWtlICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXCJcXFwiLCBjaWQgKyBcXFwiXFxcIiwgJzExNicpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSwgY2xzOiAnc2VjdGlvbicgKyBpbmRleCArICctcGFydCcsaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaW5kZXgrKztcXG4gICAgfSlcXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6aG16Z2i6LWw5Lii5LqGLi4uJyxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vaTAuaGRzbGIuY29tL2Jmcy9nZW5lcmFsL2Y3YjY2NzAxMWE0NjYxNTczMmM3MDFmNGJiMWQwN2Y3OTNmOGQxZGYucG5nQFJlZmVyZXI9JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ+Wkp+amgueOh+inhumikeiiq+Wwgeemge+8jOaIluiAhXVw5bey6LeR6LevficsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJuYW1lXCI6XCLlm77moIfkuIvovb1cIixcInBhdGhcIjpcInNhdmVMb2NhbFwiLFwicnVsZVwiOlwiJC5leHBvcnRzLnNhdmVMb2NhbCA9ICgpID0+IHtcXG4gICAgY29uc3QgYmFzZTY0VG9IZXggPSAoYmFzZTY0U3RyKSA9PiB7XFxuICAgICAgICAvLyDliKDpmaTliY3nvIDlubbop6PnoIFCYXNlNjTlrZfnrKbkuLJcXG4gICAgICAgIHZhciBiaW5hcnlTdHIgPSB3aW5kb3cwLmF0b2IoYmFzZTY0U3RyLnNwbGl0KCcsJylbMV0pO1xcblxcbiAgICAgICAgLy8g6L2s5o2i5Li6MTbov5vliLblrZfnrKbkuLJcXG4gICAgICAgIHZhciBoZXhTdHIgPSAnJztcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluYXJ5U3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIGhleCA9IGJpbmFyeVN0ci5jaGFyQ29kZUF0KGkpLnRvU3RyaW5nKDE2KTtcXG4gICAgICAgICAgICBoZXhTdHIgKz0gKGhleC5sZW5ndGggPT09IDIgPyBoZXggOiAnMCcgKyBoZXgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGhleFN0cjtcXG4gICAgfTtcXG4gICAgc2hvd0xvYWRpbmcoXFxcIuWbvuagh+WIneWni+WMluS4rS4uLlxcXCIpO1xcbiAgICB2YXIgdHViaWFvID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICAvLyDliarotLTmnb/nur/ot69cXG4gICAgICAgIGh0bWwgPSByZXF1ZXN0KCdodHRwczovL25ldGN1dC5jbi9wL2ExZmNmMGQzYjBhMjdmMTMnKTtcXG4gICAgICAgIGRhdGEgPSBodG1sLm1hdGNoKC97Lipub3RlX2NvbnRlbnQuKnVwZGF0ZWRfYXQuKn0vKVswXTtcXG4gICAgICAgIGV2YWwoJ3R1YmlhbyA9JyArIEpTT04ucGFyc2UoZGF0YSkubm90ZV9jb250ZW50KTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCfliarotLTmnb/lh7rplJks5YiH5o2i5omY566h57q/6LevJyk7XFxuICAgICAgICByb3V0ZSA9IFtcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8yMzg0NzgxOS9oaWtlci8tL3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24nLFxcbiAgICAgICAgICAgICdodHRwczovL2dpdGVhLmNvbS9jeS9oaWtlci9yYXcvY29tbWl0L2JlMjE2MGM2YTAxZGI4NzNkOWY5NjgxYmE3ZTg2ZWViZmExMThkODYvdHViaWFvLmpzb24nLFxcbiAgICAgICAgICAgICdodHRwczovL3Jhdy5jb2RlaHViLmNuL3AvaGlrZXIvZC90dWJpYW8vZ2l0L3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24/dG9rZW49R0dkbEl1VkdxWTNiM0x5ZElvd3Jrc2JVQkNmTXl4MmZGMzFXVVplbzRtJyxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRlZS5jb20vbXh4bC1jeS9oaWtlci9yYXcvbWFzdGVyL3R1Ymlhby5qc29uJ1xcbiAgICAgICAgXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKCd0dWJpYW8gPScgKyByZXF1ZXN0KHJvdXRlW2ldKSk7XFxuICAgICAgICAgICAgICAgIGlmICh0dWJpYW9bXFxcIuS6lOWkp1xcXCJdICYmIHR1Ymlhb1tcXFwi5ZOU5ZOpXFxcIl0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfnur/ot6/vvJonICsgdHViaWFvW2ldICsgJ+iiq+WimeS6hi4uLicpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBsb2coJ+e6v+i3r++8micgKyB0dWJpYW9baV0gKyAn5Ye66ZSZ5LqGLi4uJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgd3VkYSA9IHR1Ymlhb1tcXFwi5LqU5aSnXFxcIl07XFxuICAgICAgICB2YXIgYmlsaSA9IHR1Ymlhb1tcXFwi5ZOU5ZOpXFxcIl07XFxuICAgICAgICB2YXIgaW5kZXggPSAwO1xcbiAgICAgICAgZm9yIChsZXQgaXRlbSBpbiB3dWRhKSB7XFxuICAgICAgICAgICAgd3JpdGVIZXhGaWxlKGBoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1Ymlhby8ke2l0ZW19LnN2Z2AsIGJhc2U2NFRvSGV4KHd1ZGFbaXRlbV0pKTtcXG4gICAgICAgICAgICBsb2coYOWIneWni+WMluesrCR7aW5kZXgrK33kuKrlm77moIc6JHtpdGVtfS4uLmApO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQgaXRlbSBpbiBiaWxpKSB7XFxuICAgICAgICAgICAgd3JpdGVIZXhGaWxlKGBoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljLyR7aXRlbX0ucG5nYCwgYmFzZTY0VG9IZXgoYmlsaVtpdGVtXSkpO1xcbiAgICAgICAgICAgIGxvZyhg5Yid5aeL5YyW56ysJHtpbmRleCsrfeS4quWbvuaghzoke2l0ZW19Li4uYCk7XFxuICAgICAgICB9XFxuICAgICAgICBzaG93TG9hZGluZygn5Zu+5qCH5Yid5aeL5YyW5a6M5oiQ77ya5YWx6K6hJyArIGluZGV4ICsgJ+S4quWbvuaghycpO1xcbiAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+Wbvuagh+WIneWni+WMluWksei0pScpO1xcbiAgICAgICAgbG9nKCflm77moIfliJ3lp4vljJblpLHotKU6JyArIGUpO1xcbiAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgfVxcblxcbn07XFxuXCJ9XSxcInBhcmFtc1wiOlwie1xcXCJhaWRcXFwiOjE2MDY0NDUwNDMsXFxcImNpZFxcXCI6MTY0NTI1MDcxNn1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwiYmlsaWxpXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL3ZpZGVvXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbi8vIOmihOWkhOeQhlxcbnB1dE15VmFyKCflip/og73mipjlj6AnLCAn5YWzJyk7XFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG5haWQgPSBNWV9QQVJBTVMuYWlkICsgXFxcIlxcXCI7XFxuLy8gYnZpZCA9IE1ZX1BBUkFNUy5idmlkICsgXFxcIlxcXCI7XFxubWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnZhciB7Zm9ybWF0U2Vjb25kc309JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIik7XFxudHJ5IHtcXG4gICAgLy/ojrflj5bop4bpopHliIZQ5L+h5oGvXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YTtcXG4gICAgaGFzTGlrZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0xpa2UoYWlkKTtcXG4gICAgaGFzRmF2b3VyID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzRmF2b3VyKGFpZCk7XFxuICAgIHNldFBhZ2VUaXRsZShwLnRpdGxlKTtcXG4gICAgc2V0UGFnZVBpY1VybChwLnBpYyArICdAUmVmZXJlcj0nKTtcXG4gICAgLy8g5Y+q5pyJMVDnmoTmg4XlhrVcXG4gICAgaWYgKHAucGFnZXMubGVuZ3RoID09IDEpIHtcXG4gICAgICAgIGNpZCA9IHAucGFnZXNbMF0uY2lkO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IHAucGljICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDnnJ/nprvkuobkuKrlpKfosLHvvIzmmI7mmI7mm7/mjaLmjonkuobvvIx1YeWtl+espuS4suWPiOWPmOWbnuadpeS6hu+8jOWPiOimgeWkhOeQhuS4gOasoVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9LCBhaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsICcxMTInKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICBkZXNjOifmkq3mlL7ph486JytwLnN0YXQudmlldysnXFxcXHRcXFxcdFxcXFx05by55bmV5pWwOicrcC5zdGF0LmRhbm1ha3UrJ1xcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQocC5jdGltZSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiYmx1ZVxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG4gICAgICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOiZveeEtuWPquaciTFQLOS9huWPr+iDveWkhOS6juWQiOmbhuinhumikeS4re+8jOW+gOW+gOWcqHVw5LiK5Lyg5Lit5bGe5LqO5LiA5aWX5b2x54mHXFxuICAgICAgICBpZiAocC51Z2Nfc2Vhc29uKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OB5omA5bGe5ZCI6ZuG77yaPGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb25WaWVkb1xcXCI+JytwLnVnY19zZWFzb24udGl0bGUrJzwvYT4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvblZpZWRvI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7IFxcXCJ0ZXh0U2l6ZVxcXCI6IDEyLCBhaWQ6IGFpZCB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQubGlrZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGlrZUxvZ2ljKGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldExpa2UnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQuZmF2b3JpdGUsXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBNaWQgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlck1pZDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmZhdm91ckxvZ2ljKGFpZCwgdXBNaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRGYXZvdXInXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn56iN5ZCO5YaN55yLJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu56iN5ZCO5YaN55yLLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmp1ZGdlVG92aWV3KGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+ivhOiuuicsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuZGVzYyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOWtmOWcqOWkmumbhuWIhlBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIGRlc2M6J+aSreaUvumHjzonK3Auc3RhdC52aWV3KydcXFxcdFxcXFx0XFxcXHTlvLnluZXmlbA6JytwLnN0YXQuZGFubWFrdSsnXFxcXG7lj5HluIPml6XmnJ86JyskLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS50aW1lQ29udmVydChwLmN0aW1lKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgocCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKChwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgcClcXG4gICAgICAgICAgICB9LCBwKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcbiAgICAgICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6IHAub3duZXIuZmFjZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5saWtlLFxcbiAgICAgICAgICAgIGltZzogaGFzTGlrZSA9PSAxID8gaW1nTGluay7lt7LngrnotZ4gOiBpbWdMaW5rLuacqueCuei1nixcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5saWtlTG9naWMoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0TGlrZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5mYXZvcml0ZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0Zhdm91ciA/IGltZ0xpbmsu5bey5pS26JePIDogaW1nTGluay7mnKrmlLbol48sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICB1cE1pZCA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTWlkO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZmF2b3VyTG9naWMoYWlkLCB1cE1pZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldEZhdm91cidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfnqI3lkI7lho3nnIsnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7nqI3lkI7lho3nnIssXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuanVkZ2VUb3ZpZXcoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL6K+E6K66JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGFpZCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAxXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn6YCJ6ZuG5YiX6KGoJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPuWFsScgKyBwLnZpZGVvcyArICfmnaHop4bpopE8L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5YiX6KGoLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHAucGFnZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5wYXJ0LFxcbiAgICAgICAgICAgICAgICBkZXNjOmZvcm1hdFNlY29uZHMoaXRlbS5kdXJhdGlvbiksXFxuICAgICAgICAgICAgICAgIC8vIGltZzppbWdMaW5rLuWIhlDliJfooajpobksXFxuICAgICAgICAgICAgICAgIGltZzppdGVtLmZpcnN0X2ZyYW1lKydAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTE2JyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+mhtemdoui1sOS4ouS6hi4uLicsXFxuICAgICAgICBpbWc6ICdodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZ2VuZXJhbC9mN2I2NjcwMTFhNDY2MTU3MzJjNzAxZjRiYjFkMDdmNzkzZjhkMWRmLnBuZ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGRlc2M6ICflpKfmpoLnjofop4bpopHooqvlsIHnpoHvvIzmiJbogIV1cOW3sui3kei3r34nLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCJcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcXG5cIixcImdyb3VwXCI6XCIjXCIsXCJ1YVwiOlwicGNcIixcInByZVJ1bGVcIjpcImpzOlxcbi8vIOWbvueJh+mihOWkhOeQhlxcbmltZ0xvY2F0aW9uID0ge1xcbiAgICBcXFwi5bey5pS26JePXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5bey5pS26JePLnBuZycsXFxuICAgIFxcXCLmnKrmlLbol49cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mnKrmlLbol48ucG5nJyxcXG4gICAgXFxcIueojeWQjuWGjeeci1xcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+eojeWQjuWGjeeciy5wbmcnLFxcbiAgICBcXFwi5pyq54K56LWeXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5pyq54K56LWeLnBuZycsXFxuICAgIFxcXCLlt7LngrnotZ5cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lt7LngrnotZ4ucG5nJyxcXG4gICAgXFxcIua3u+WKoOWFs+azqFxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+a3u+WKoOWFs+azqC5wbmcnLFxcbiAgICBcXFwi5bey5YWz5rOoXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5bey5YWz5rOoLnBuZycsXFxuICAgIFxcXCLkuJPmoI9cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/kuJPmoI8ucG5nJyxcXG4gICAgXFxcIuafpeeci+ivhOiuulxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+afpeeci+ivhOiuui5wbmcnLFxcbiAgICBcXFwi5ZGo6L65XFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5ZGo6L65LnBuZycsXFxuICAgIFxcXCLlj4zovrlcXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lj4zovrkucG5nJyxcXG4gICAgXFxcIuWIl+ihqFxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+WIl+ihqC5wbmcnLFxcbiAgICBcXFwi6K6i6ZiFXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv6K6i6ZiFLnBuZycsXFxuICAgIFxcXCLml6XljoZcXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/ml6XljoYucG5nJyxcXG4gICAgXFxcIuWKqOaAgVxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+WKqOaAgS5wbmcnLFxcbiAgICBcXFwi5Yqo5oCB6Laz6L+5XFxcIjogJ2h0dHBzOi8vY2RuMy5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL25hdHVyZS0xNjkvMzIvZ3Jhc3NfdHVyZl9wbGFudF9sYXduX25hdHVyZV9tZWFkb3dfZ2FyZGVuX25hdHVyYWxfZW52aXJvbm1lbnQtMTI4LnBuZ0BSZWZlcmVyPScsXFxuICAgIFxcXCLlkIjpm4bmlofku7blpLlcXFwiOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvY29tbWVubHktbmVlZGVkLzQwMC9JY29uLTE3LTEyOC5wbmdAUmVmZXJlcj0nLFxcbiAgICBcXFwi5YiGUOWIl+ihqOmhuVxcXCI6ICdodHRwczovL2NkbjEuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9taW5pbWFsLXVpLTIvMjQvcGxheV9tZWRpYV9idXR0b24tMTI4LnBuZ0BSZWZlcmVyPSdcXG59XFxuc3RvcmFnZTAucHV0TXlWYXIoJ+WbvuaghycsIGltZ0xvY2F0aW9uKTtcXG5cXG4vLyog5LiL6Z2i5Luj56CB55So5LqO6Ieq5Yqo5ouJ5Y+W5Zu+5qCH77yM5peg5aWIICovXFxuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMnKSB8fCAhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1YmlhbycpKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NhdmVMb2NhbFxcXCIpLnNhdmVMb2NhbCgpO1xcbn1cXG5cXG5cXG4vLyog5LiL6Z2i5Luj56CB55So5LqO5Yid5aeL5YyW6LSm5Y+36YWN572uICovXFxuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnKSkge1xcbiAgICBzZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHVzZXJMaXN0OiBbe1xcbiAgICAgICAgICAgIGNvb2tpZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXNlck5hbWU6ICcnLFxcbiAgICAgICAgICAgIHVzZXJNaWQ6ICcnLFxcbiAgICAgICAgICAgIHZpcFN0YXR1czogMCxcXG4gICAgICAgICAgICBmYWNlOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzIwLnN2ZycsXFxuICAgICAgICB9XSxcXG4gICAgICAgIGJmS2V5OiBcXFwiXFxcIlxcbiAgICB9KTtcXG4gICAgc2F2ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiLCBzZXR0aW5ncyk7XFxufSBlbHNlIHtcXG4gICAgc2V0dGluZ3MgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnKSk7XFxuICAgIC8vIOWIpOaWrSBKU09OIOWvueixoeaYr+WQpua7oei2s+aIkeS7rOWumuS5ieeahOe7k+aehFxcbiAgICBpZiAodHlwZW9mIHNldHRpbmdzID09PSAnb2JqZWN0JyAmJlxcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZXR0aW5ncy51c2VyTGlzdCkgJiZcXG4gICAgICAgIHNldHRpbmdzLnVzZXJMaXN0LmV2ZXJ5KHAgPT4gdHlwZW9mIHAgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwLmNvb2tpZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHAudXNlck5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBwLnVzZXJNaWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBwLmZhY2UgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBwLnZpcFN0YXR1cyA9PT0gJ251bWJlcicpICYmXFxuICAgICAgICB0eXBlb2Ygc2V0dGluZ3MuYmZLZXkgPT09ICdzdHJpbmcnXFxuICAgICkge1xcbiAgICAgICAgbG9nKCfotKblj7fphY3nva7mlofku7bmraPluLgnKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5Yid5aeL5YyWL+WkjeWOn+i0puWPt+mFjee9ruaWh+S7ticpO1xcbiAgICAgICAgc2V0dGluZyA9ICcnO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvLyDov4Hnp7vljp/phY3nva7mlofku7bkuK3nmoTotKblj7fkv6Hmga9cXG4gICAgICAgICAgICBvcmlnaW5Vc2VyU2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dCcpKTtcXG4gICAgICAgICAgICBsb2cob3JpZ2luVXNlclNldHRpbmcpO1xcbiAgICAgICAgICAgIGNvb2tpZSA9IG9yaWdpblVzZXJTZXR0aW5nLmNvb2tpZTtcXG4gICAgICAgICAgICB1c2VyTmFtZSA9IG9yaWdpblVzZXJTZXR0aW5nLnVzZXJOYW1lO1xcbiAgICAgICAgICAgIHVzZXJNaWQgPSBvcmlnaW5Vc2VyU2V0dGluZy51c2VyTWlkO1xcbiAgICAgICAgICAgIGZhY2UgPSBvcmlnaW5Vc2VyU2V0dGluZy5mYWNlO1xcbiAgICAgICAgICAgIHZpcFN0YXR1cyA9IG9yaWdpblVzZXJTZXR0aW5nLnZpcFN0YXR1cztcXG4gICAgICAgICAgICBpZihjb29raWU9PT11bmRlZmluZWQpe3NldHRpbmc9J3tcXFwidXNlckxpc3RcXFwiOltdLFxcXCJiZktleVxcXCI6XFxcIlxcXCJ9Jzt9ZWxzZXtcXG4gICAgICAgICAgICAgICAgc2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVzZXJMaXN0OiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZTogY29va2llLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyTWlkOiB1c2VyTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGZhY2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB2aXBTdGF0dXNcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgYmZLZXk6IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coXFxcIuayoeacieaXp+eahOWQiOazleeahOmFjee9ruaWh+S7tlxcXCIpO1xcbiAgICAgICAgICAgIHNldHRpbmcgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVzZXJMaXN0OiBbXSxcXG4gICAgICAgICAgICAgICAgYmZLZXk6IFxcXCJcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBzYXZlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIsIHNldHRpbmcpO1xcbiAgICB9XFxufVxcblwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliIbnsbvniYflupNcXFwiLFxcXCJwYXRoXFxcIjpcXFwidmF1bHRcXFwiLFxcXCJydWxlXFxcIjpcXFwi6aG26YOo5aSn57G7ID0gWyflm73liJsnLCAn55S16KeGJywgJ+e6quW9leeJhycsICfnu7zoibonLCAn55Wq5YmnJywgJ+eUteW9sSddXFxcXG5pZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgLy8g5oqY5Y+g5byA5YWzXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+WFsycgPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZGMDAwMFxcXFxcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMWFhZDE5XFxcXFxcXCI+4oinPC9zcGFuPjwvYj4nLFxcXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+WFsycpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+W8gCcpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgIH0pXFxcXG4gICAg6aG26YOo5aSn57G7LmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGxpID09IGdldE15VmFyKCflpKfnsbsnLCAn5Zu95YibJykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgbGkgKyAnPC9mb250PjwvYj4nIDogbGksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wkp+exuycsIGxpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCBsaSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgfSlcXFxcbn1cXFxcbi8vIOmhtumDqOWIhuexu+WPguaVsOaYoOWwhFxcXFxuc3dpdGNoIChnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpKSB7XFxcXG4gICAgY2FzZSAn5Zu95YibJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDQ7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZ3VvY2h1YW5nL2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlLXop4YnOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gNTtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS90di9pbmRleCcpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn57qq5b2V54mHJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDM7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZG9jdW1lbnRhcnkvaW5kZXgvJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnu7zoibonOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gNztcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92YXJpZXR5L2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlarliacnOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gMTtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9hbmltZS9pbmRleCcpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn55S15b2xJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDI7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vbW92aWUvaW5kZXgnKTtcXFxcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXFxcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHNlYXNvblR5cGUgPSA0O1xcXFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcXFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbi8vIOWtkOWIhuexu+WPguaVsOaYoOWwhFxcXFxuc3dpdGNoIChnZXRNeVZhcign57G75Z6LJywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn5q2j54mHJzpcXFxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlLXlvbEnOlxcXFxuICAgICAgICBzZWFzb25fdmVyc2lvbiA9IDI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFtuS7lic6XFxcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCfphY3pn7MnLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICfljp/lo7AnOlxcXFxuICAgICAgICBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSA9IDE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S4reaWh+mFjemfsyc6XFxcXG4gICAgICAgIHNwb2tlbl9sYW5ndWFnZV90eXBlID0gMjtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc3Bva2VuX2xhbmd1YWdlX3R5cGUgPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCflnLDljLonLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICfkuK3lm73lpKfpmYYnOlxcXFxuICAgICAgICBhcmVhID0gMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5pel5pysJzpcXFxcbiAgICAgICAgYXJlYSA9IDI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e+juWbvSc6XFxcXG4gICAgICAgIGFyZWEgPSAzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfoi7Hlm70nOlxcXFxuICAgICAgICBhcmVhID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5Lit5Zu95riv5Y+wJzpcXFxcbiAgICAgICAgYXJlYSA9IFs2LCA3XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn6Z+p5Zu9JzpcXFxcbiAgICAgICAgYXJlYSA9IDg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+azleWbvSc6XFxcXG4gICAgICAgIGFyZWEgPSA5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfms7Dlm70nOlxcXFxuICAgICAgICBhcmVhID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ilv+ePreeJmSc6XFxcXG4gICAgICAgIGFyZWEgPSAxMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5b635Zu9JzpcXFxcbiAgICAgICAgYXJlYSA9IDE1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmhI/lpKfliKknOlxcXFxuICAgICAgICBhcmVhID0gMzU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFtuS7lic6XFxcXG4gICAgICAgIC8vIOWPquaYr+eVquWJp+eahOaDheWGtV/lhbE1Ne+8jOimgeWHj+WOu+WHuueOsOeahOKAlOKAlOeul+S6hu+8jOebtOaOpeWcqOWKqOaAgeWIhuexu+eahOaXtuWAmeWOu+aOieS6hlxcXFxuICAgICAgICBhcmVhID0gWzEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgYXJlYSA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eKtuaAgScsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJ+WujOe7kyc6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IDE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+i/nui9vSc6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IDA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+WHuuWTgScsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJ+Wkruinhic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnQkJDJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmjqLntKLpopHpgZMnOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWutuWcsOeQhic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ05ISyc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMjtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5Y6G5Y+y6aKR6YGTJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfljavop4YnOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iHquWItic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gOTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnSVRWJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICdTS1knOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ1pERic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WQiOS9nOacuuaehCc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWGheWFtuS7lic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWkluWFtuWugyc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gLTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXFxuc3dpdGNoIChnZXRNeVZhcign54mI5p2DJywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn54us5a62JzpcXFxcbiAgICAgICAgY29weXJpZ2h0ID0gMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5YW25LuWJzpcXFxcbiAgICAgICAgY29weXJpZ2h0ID0gWzEsIDIsIDRdO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBkZWZhdWx0OlxcXFxuICAgICAgICBjb3B5cmlnaHQgPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCfku5jotLknLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICflhY3otLknOlxcXFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5LuY6LS5JzpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IFsyLCA2XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5aSn5Lya5ZGYJzpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IFs0LCA2XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+Wto+W6picsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJzHmnIgnOlxcXFxuICAgICAgICBzZWFzb25fbW9udGggPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICc05pyIJzpcXFxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnN+aciCc6XFxcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJzEw5pyIJzpcXFxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbi8vIOWIpOaWreWSjOaYoOWwhOW5tOS7vVxcXFxuc3dpdGNoIChnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpKSB7XFxcXG4gICAgY2FzZSAn5Zu95YibJzpcXFxcbiAgICBjYXNlICfnlarliacnOlxcXFxuICAgICAgICAvLyDnlarliaflkozlm73liJvjgJDkuZ/mmK/lj6vlgZrlubTku73kvYblj4LmlbDlkI3jgIHmoLzlvI/lkozlhbbku5bliIbnsbvkuI3kuIDmoLfjgJFcXFxcbiAgICAgICAgYW5pbWVfeWVhciA9IGdldE15VmFyKCflubTku70nLCAn5YWo6YOoJyk7XFxcXG4gICAgICAgIHN3aXRjaCAoYW5pbWVfeWVhci5pbmNsdWRlcygnLScpKSB7XFxcXG4gICAgICAgICAgICBjYXNlIHRydWU6XFxcXG4gICAgICAgICAgICAgICAgZWFybHkgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMV07XFxcXG4gICAgICAgICAgICAgICAgbGF0ZXIgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMF07XFxcXG4gICAgICAgICAgICAgICAgeWVhciA9IGBbJHtlYXJseX0sJHtOdW1iZXIobGF0ZXIpICsgMX0pYDtcXFxcbiAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChhbmltZV95ZWFyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5OTAsMjAwMCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5ODAsMTk5MCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+abtOaXqSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1ssMTk4MCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gLTE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSBgWyR7YW5pbWVfeWVhcn0sJHtOdW1iZXIoYW5pbWVfeWVhcikgKyAxfSlgO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgLy8g6Zmk5LqG55Wq5Ymn5ZKM5Zu95Yib55qE5YW25LuW5YiG57G7XFxcXG4gICAgICAgIHR2X3llYXIgPSBnZXRNeVZhcign5bm05Lu9JywgJ+WFqOmDqCcpO1xcXFxuICAgICAgICBzd2l0Y2ggKHR2X3llYXIuaW5jbHVkZXMoJy0nKSkge1xcXFxuICAgICAgICAgICAgY2FzZSB0cnVlOlxcXFxuICAgICAgICAgICAgICAgIGVhcmx5ID0gdHZfeWVhci5zcGxpdCgnLScpWzFdO1xcXFxuICAgICAgICAgICAgICAgIGxhdGVyID0gdHZfeWVhci5zcGxpdCgnLScpWzBdO1xcXFxuICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IGBbJHtlYXJseX0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIobGF0ZXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYFxcXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgY2FzZSBmYWxzZTpcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR2X3llYXIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTDlubTku6MnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1sxOTkwLTAxLTAxIDAwOjAwOjAwLDIwMDAtMDEtMDEgMDA6MDA6MDApJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9ICdbMTk4MC0wMS0wMSAwMDowMDowMCwxOTkwLTAxLTAxIDAwOjAwOjAwKSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfmm7Tml6knOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1ssMTk4MC0wMS0wMSAwMDowMDowMCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAtMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gYFske3R2X3llYXJ9LTAxLTAxIDAwOjAwOjAwLCR7TnVtYmVyKHR2X3llYXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxufVxcXFxuc3dpdGNoIChnZXRNeVZhcign6aOO5qC8JywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn55S15b2xJzpcXFxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOeVquWJp+agj+ebrlxcXFxuICAgIGNhc2UgJ+WOn+WImyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a8q+eUu+aUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wwj+ivtOaUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a4uOaIj+aUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eJueaRhCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+W4g+iii+aIjyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eDreihgCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+epv+i2iic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wlh+W5uyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOWSi+i3s+S6huS4gOS4quaNj35cXFxcbiAgICBjYXNlICfmiJjmlpcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmkJ7nrJEnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfml6XluLgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnp5HlubsnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfokIzns7snOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmsrvmhIgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmoKHlm60nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflsJHlhL8nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfms6HpnaInOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI4O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmgYvniLEnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflsJHlpbMnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfprZTms5UnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflhpLpmaknOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfljoblj7InOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmnrbnqbonOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmnLrmiJgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnpZ7prZQnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflo7DmjqcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfov5DliqgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM4O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflirHlv5cnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfpn7PkuZAnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmjqjnkIYnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnpL7lm6InOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmmbrmlpcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflgqzms6onOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnvo7po58nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflgbblg48nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfkuZnlpbMnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfogYzlnLonOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ4O1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFxuICAgIC8vIOe7vOiJuuagj+ebruOAgeeUteW9sVxcXFxuICAgIGNhc2UgJ+WJp+aDhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WWnOWJpyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eIseaDhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOS9nCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aBkOaAlic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eKr+e9qic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aDiuaCmic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aCrOeWkSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aImOS6iSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOeUuyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S8oOiusCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WutuW6rSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+atjOiInic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e6quWunic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eBvumavic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S6uuaWhyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+enkeaKgCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wuh+WumSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iQjOWuoCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ekvuS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOeJqSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iHqueEtic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WMu+eWlyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGm+S6iyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e9quahiCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+elnuenmCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aXheihjCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+atpuS+oCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mdkuaYpSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mDveW4gic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WPpOijhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iwjeaImCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e7j+WFuCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aDheaEnyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+elnuivnSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+W5tOS7oyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGnOadkSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WIkeS+pic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGm+aXhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iuv+iwiCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iEseWPo+engCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ecn+S6uuengCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mAieengCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aXhea4uCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aZmuS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a8lOWUseS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S6suWtkCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFu+aIkCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aWh+WMlic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAxMDA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOeUteW9seagj+ebrlxcXFxuICAgIGNhc2UgJ+efreeJhyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAxMDQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gLTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXFxuLy8g5pig5bCE55yf5a6e6K+35rGC5Zyw5Z2AXFxcXG5zd2l0Y2ggKHNlYXNvblR5cGUpIHtcXFxcbiAgICBjYXNlIDQ6XFxcXG4gICAgICAgIC8vIOWbveWIm1xcXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZpc19maW5pc2g9JyArIGlzX2ZpbmlzaCArICcmY29weXJpZ2h0PScgKyBjb3B5cmlnaHQgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD00JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT00JnBhZ2VzaXplPTMwJnR5cGU9MSdcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSA1OlxcXFxuICAgICAgICAvLyDnlLXop4bliadcXFxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P2FyZWE9JyArIGFyZWEgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9NSZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9NSZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgNzpcXFxcbiAgICAgICAgLy8g57u86Im6XFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJm9yZGVyPTImc3Q9NyZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9NyZwYWdlc2l6ZT0zMCZ0eXBlPTEnO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIDE6XFxcXG4gICAgICAgIC8vIOeVquWJp1xcXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZzcG9rZW5fbGFuZ3VhZ2VfdHlwZT0nICsgc3Bva2VuX2xhbmd1YWdlX3R5cGUgKyAnJmFyZWE9JyArIGFyZWEgKyAnJmlzX2ZpbmlzaD0nICsgaXNfZmluaXNoICsgJyZjb3B5cmlnaHQ9JyArIGNvcHlyaWdodCArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmc2Vhc29uX21vbnRoPScgKyBzZWFzb25fbW9udGggKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD0xJnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT0xJnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgMzpcXFxcbiAgICAgICAgLy8g57qq5b2V54mHXFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnByb2R1Y2VyX2lkPScgKyBwcm9kdWNlcl9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9MyZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9MyZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgMjpcXFxcbiAgICAgICAgLy8g55S15b2xXFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9hcmVhPScgKyBhcmVhICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTImc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTImcGFnZXNpemU9MzAmdHlwZT0xJ1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnRydWVfdXJsID0gZW5jb2RlVVJJKHRydWVfdXJsKTtcXFxcbmxpc3QgPSBKU09OLnBhcnNlKGZldGNoKHRydWVfdXJsKSkuZGF0YS5saXN0O1xcXFxudHJ5IHtcXFxcbiAgICBsaXN0LmZvckVhY2gobW92aWUgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IG1vdmllLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGltZzogbW92aWUuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogbW92aWUub3JkZXIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBzZWFzb25faWQ6IG1vdmllLnNlYXNvbl9pZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coJ+W3sue7j+aKtei+vumhteW6lScgKyBNWV9QQUdFKTtcXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIueDreaYoOaXtumXtOihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJVcGRhdGVUYWJsZXNcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gY29sb3IodGV4dCwgY29sb3IpIHtcXFxcblxcXFxuwqAgwqAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuXFxcXG7CoCDCoCBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcblxcXFxufVxcXFxuXFxcXG52YXIgdGFicyA9IHtcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLnlarliadcXFxcXFxcIjogMSxcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLnuqrlvZXniYdcXFxcXFxcIjogMyxcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLlm73liJtcXFxcXFxcIjogNFxcXFxuXFxcXG59XFxcXG5cXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcblxcXFxuwqAgwqAgT2JqZWN0LmtleXModGFicykuZm9yRWFjaChpdGVtID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IChnZXRNeVZhcihcXFxcXFxcImp1amlcXFxcXFxcIiwgXFxcXFxcXCLlm73liJtcXFxcXFxcIikgPT0gaXRlbSA/IGNvbG9yKGl0ZW0sIFxcXFxcXFwicmVkXFxcXFxcXCIpIDogaXRlbSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChhKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXFxcXFwianVqaVxcXFxcXFwiLCBhKVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaXRlbSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJsaW5lXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgfSlcXFxcblxcXFxuwqAgwqAgbGV0IGRheXMgPSA3XFxcXG5cXFxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSA9PSBpICsgXFxcXFxcXCJcXFxcXFxcIiA/IGNvbG9yKGkgKyBcXFxcXFxcIuWkqeWJjVxcXFxcXFwiLCBcXFxcXFxcInJlZFxcXFxcXFwiKSA6IGkgKyBcXFxcXFxcIuWkqeWJjVxcXFxcXFwiKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHV0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIGkgKyBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9LCBpKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxuwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJ0b1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikgPT0gaSArIFxcXFxcXFwiXFxcXFxcXCIgPyBjb2xvcihpICsgXFxcXFxcXCLlpKnlkI5cXFxcXFxcIiwgXFxcXFxcXCJyZWRcXFxcXFxcIikgOiBpICsgXFxcXFxcXCLlpKnlkI5cXFxcXFxcIiksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXFxcXFwidG9cXFxcXFxcIiwgaSArIFxcXFxcXFwiXFxcXFxcXCIpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKClcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGkpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgwqAgwqAgfSlcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG5cXFxcbsKgIMKgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0TW92aWVzKHRhYnNbZ2V0TXlWYXIoXFxcXFxcXCJqdWppXFxcXFxcXCIsIFxcXFxcXFwi5Zu95YibXFxcXFxcXCIpXSwgZ2V0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSwgZ2V0TXlWYXIoXFxcXFxcXCJ0b1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikpLmZvckVhY2goaXRlbSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLmRhdGUgKyBcXFxcXFxcIiDlkahcXFxcXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGl0ZW0uZXBpc29kZXMuZm9yRWFjaChpID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGkudGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGltZzogaS5jb3ZlcisnQFJlZmVyZXI9JyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzppLnB1Yl9pbmRleC5tYXRjaCgv5Y2z5bCGLyk/J+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+JytpLnB1Yl9pbmRleCsnXFxcXFxcXFxuJytpLnB1Yl90aW1lKyc8L2ZvbnQ+JzogaS5wdWJfaW5kZXgrICdcXFxcXFxcXG4nICsgaS5wdWJfdGltZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJzZWFzb25faWRcXFxcXFxcIjogaS5zZWFzb25faWRcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59XFxcXG5cXFxcblxcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLnmbvlvZVcXFwiLFxcXCJwYXRoXFxcIjpcXFwibG9naW5cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuc2V0UGFnZVRpdGxlKCfotKblj7fnmbvlvZXpobXpnaInKVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ2Nvb2tpZeeZu+W9lScsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICQoJycsICfor7fovpPlhaXkvaDnmoRjb29raWUnKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCJcXFxcXFxcIikgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jb29raWXkuI3og73kuLrnqbpcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBpbnB1dFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S9oOeahGNvb2tpZeiyjOS8vOWkseaViOS6huWWlH5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHVzZXJJbmZvID0ge1xcXFxuICAgICAgICAgICAgICAgIGNvb2tpZTogaW5wdXQsXFxcXG4gICAgICAgICAgICAgICAgdXNlck5hbWU6IHVzZXJpbmZvLnVuYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVzZXJNaWQ6ICB1c2VyaW5mby5taWQsXFxcXG4gICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB1c2VyaW5mby52aXBTdGF0dXMsXFxcXG4gICAgICAgICAgICAgICAgZmFjZTogdXNlcmluZm8uZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHNldHRpbmcgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QudW5zaGlmdCh1c2VySW5mbyk7XFxcXG4gICAgICAgICAgICAvLyDov4fmu6Tmjoljb29raWXkuLrnqbrnmoTlhYPntKBcXFxcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QgPSBzZXR0aW5nLnVzZXJMaXN0LmZpbHRlcih1c2VyID0+IHVzZXIuY29va2llICE9PSAnJyk7XFxcXG4gICAgICAgICAgICBzYXZlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIiwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZykpO1xcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vY29va2ll6K6+572u5oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn55m76ZmG6K+05piOJyxcXFxcbiAgICBkZXNjOiBcXFxcXFxcIumhtemdouS4i+aWueeZu+mZhuaIkOWKn+WQju+8jOWGjeeCueWHu+ehruiupOeZu+W9leWNs+WPr1xcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn55m76ZmG5oiQ5Yqf5ZCO77yM5YaN54K55oiR77yBJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAvLyDov5nph4zotJ/otKPlhplDb29raWXvvIzlhYjor7vvvIzlho3ov73liqBcXFxcbiAgICAgICAgY29va2llID0gZ2V0VmFyKCdiaWxpQ29va2llJywnJyk7XFxcXG4gICAgICAgIGxvZyhcXFxcXFxcIuiOt+WPluWIsOeahGNvb2tpZTpcXFxcXFxcIitjb29raWUpO1xcXFxuICAgICAgICBpZiAoY29va2llID09IFxcXFxcXFwiXFxcXFxcXCIpIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6I635Y+WY29va2ll5aSx6LSl77yM5YaN562J562J55yL77yfXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICBpZiAodXNlcmluZm8uaXNMb2dpbiA9PT0gZmFsc2UpIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L2g5YWI55m75b2V77yM5YaN6I635Y+WY29va2ll77yMT0vvvJ9cXFxcXFxcIjtcXFxcbiAgICAgICAgdXNlckluZm8gPSB7XFxcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZSxcXFxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyaW5mby51bmFtZSxcXFxcbiAgICAgICAgICAgIHVzZXJNaWQ6ICB1c2VyaW5mby5taWQsXFxcXG4gICAgICAgICAgICB2aXBTdGF0dXM6IHVzZXJpbmZvLnZpcFN0YXR1cyxcXFxcbiAgICAgICAgICAgIGZhY2U6IHVzZXJpbmZvLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpO1xcXFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0LnVuc2hpZnQodXNlckluZm8pO1xcXFxuICAgICAgICAvLyDov4fmu6Tmjoljb29raWXkuLrnqbrnmoTlhYPntKBcXFxcbiAgICAgICAgc2V0dGluZy51c2VyTGlzdCA9IHNldHRpbmcudXNlckxpc3QuZmlsdGVyKHVzZXIgPT4gdXNlci5jb29raWUgIT09ICcnKTtcXFxcbiAgICAgICAgc2F2ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KHNldHRpbmcpKTtcXFxcbiAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WmguaenOayoeacieeZu+mZhuaIkOWKn++8jOW7uuiuruS9oOS4i+asoeeZu+mZhuaIkOWKn+WQjuS4jeimgeeCuemCo+S5iOW/q34nXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG59LCB7XFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcImxpc3QmJnNjcmVlbi0zMDBcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbiAoKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBmYmEuZ2V0Q29va2llKFxcXFxcXFwiaHR0cHM6Ly9tLmJpbGliaWxpLmNvbS9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIoJ2JpbGlDb29raWUnLCBjb29raWUpO1xcXFxuICAgICAgICAgICAgICAgIH0sIDEwMClcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICB0b2tlbl90aW1lcigpO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXFxcbiAgICAgICAgdWE6IE1PQklMRV9VQVxcXFxuICAgIH1cXFxcbn0pXFxcXG5zZXRSZXN1bHQoZCk7XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlvbHop4bkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZmlsbWVyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4vLyDmlbDmja7lrprkvY1cXFxcbnZhciBkID0gW107XFxcXG5pZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcXFxuICAgIHNlYXNvbl9pZCA9IE1ZX1BBUkFNUy5zZWFzb25faWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXFxcbn0gZWxzZSB7XFxcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP2VwX2lkPScgKyBNWV9QQVJBTVMuZXBfaWQpKS5yZXN1bHQ7XFxcXG59XFxcXG5pZiAoIURhdGEuY292ZXIubWF0Y2goL2h0dHBzLykpIHtcXFxcbiAgICDlsIHpnaIgPSBEYXRhLmNvdmVyLnJlcGxhY2UoJ2h0dHAnLCAnaHR0cHMnKSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCI7XFxcXG59IGVsc2Uge1xcXFxuICAgIOWwgemdoiA9IERhdGEuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiO1xcXFxufVxcXFxudHJ5IHtcXFxcbiAgICDlnLDljLogPSBEYXRhLmFyZWFzWzBdLm5hbWU7XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAg5Zyw5Yy6ID0gJ+WcsOWMuuaaguaXoCc7XFxcXG59XFxcXG7nroDku4sgPSBEYXRhLmV2YWx1YXRlO1xcXFxuLy8g5q2j54mHXFxcXG7nsbvlnosgPSBEYXRhLnBvc2l0aXZlLnRpdGxlO1xcXFxu5LiK5pig5pe26Ze0ID0gRGF0YS5wdWJsaXNoLnB1Yl90aW1lO1xcXFxudHJ5IHtcXFxcbiAgICDlvpfliIYgPSBEYXRhLnJhdGluZy5zY29yZTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICDlvpfliIYgPSAn5pqC5peg5b6XJztcXFxcbn1cXFxcbui/veWJp+aXpeWOhiA9IERhdGEubmV3X2VwLmRlc2M7XFxcXG7mm7TmlrDov5vluqYgPSBEYXRhLm5ld19lcC50aXRsZTtcXFxcbuW9seeJh+WQjeensCA9IERhdGEudGl0bGU7XFxcXG7nrKzkuozmoIfpopggPSBEYXRhLnNoYXJlX3N1Yl90aXRsZTtcXFxcbuWJp+mbhuWIl+ihqCA9IERhdGEuZXBpc29kZXMuZmlsdGVyKChsaXN0KSA9PiB7XFxcXG4gICAgLy8g6L+H5ruk6aKE5ZGK44CB6Iqx57WuXFxcXG4gICAgaWYgKGdldEl0ZW0oJ3ByZXZpZXdTd2l0Y2gnLCAnZm9sZCcpID09PSAnZm9sZCcgJiYgbGlzdC5iYWRnZS5tYXRjaCgv6aKEfOiKsee1ri8pKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICB9XFxcXG59KTtcXFxcbuefreiuryA9IFxcXFxcXFwi4q2QXFxcXFxcXCIgKyDnsbvlnosgKyBcXFxcXFxcIuKtkFxcXFxcXFwiICsg56ys5LqM5qCH6aKYICsgJ1xcXFxcXFxcbicgKyDlnLDljLogKyAnLScgKyDlvpfliIYgKyAn5YiGXFxcXFxcXFxuLScgKyDkuIrmmKDml7bpl7QgKyAnLSc7XFxcXG4vLyDph43lrprkuYnkuoznuqfpobXpnaLmlbDmja5cXFxcbnNldFBhZ2VUaXRsZSjlvbHniYflkI3np7ApO1xcXFxuc2V0UGFnZVBpY1VybCjlsIHpnaIpO1xcXFxuLy8g5YmN572u5Y+C5pWw5ZKM6aKE5aSE55CGLS0tXFxcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcXFxuLy8g5YWo5bGAbGF6eeKAlOKAlOebtOmTvivmlq3mj5JcXFxcbnZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgIHZpZGVvUGFybXMgPSBmaW5kSXRlbShpbnB1dCk7XFxcXG4gICAgYWlkID0gdmlkZW9QYXJtcy5leHRyYS5haWQ7XFxcXG4gICAgYnZpZCA9IHZpZGVvUGFybXMuZXh0cmEuYnZpZDtcXFxcbiAgICBjaWQgPSB2aWRlb1Bhcm1zLmV4dHJhLmNpZDtcXFxcbiAgICBiYWRnZSA9IHZpZGVvUGFybXMuZXh0cmEuYmFkZ2U7XFxcXG4gICAgLy8g5o+Q5Lqk5Y6G5Y+y6K6w5b2VXFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5yZXBvcnRQcm9jZXNzKGFpZCwgY2lkKTtcXFxcbiAgICB2aXBTdGF0dXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS52aXBTdGF0dXM7XFxcXG4gICAgaWYgKHZpcFN0YXR1cyAhPSAwKSB7XFxcXG4gICAgICAgIC8vIOWkp+S8muWRmFxcXFxuICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChbJ+mtlOaWreino+aekCcsICflt7LotK3kubAnXSwgMSkuc2VsZWN0KChpbnB1dCwgYWlkLCBjaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UobGluayk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBsaW5rLCBhaWQsIGNpZClcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCAxMTYpLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIik7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDmma7pgJrnlKjmiLdcXFxcbiAgICAgICAgdmFyIHNldHRpbmc9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSk7XFxcXG4gICAgICAgIHZhciBoYXNCZktleT1zZXR0aW5nLmJmS2V5IT0nJz90cnVlOmZhbHNlO1xcXFxuICAgICAgICBpZiAoIWhhc0JmS2V5KSB7XFxcXG4gICAgICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S8muWRmHzku5jotLkvKSkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCB7fSkpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgLy8g5YWx5Lqr5Lya5ZGY5pKt5pS+5p2D55uKXFxcXG4gICAgICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6a2U5pat6Kej5p6QJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufSk7XFxcXG52YXIgQ29sb3IgPSBcXFxcXFxcIiMxOUI4OURcXFxcXFxcIjtcXFxcbnZhciDmr4/pobXpm4bmlbAgPSAzMDtcXFxcbnZhciDmkJzntKLmqKHlvI8gPSAn5YiG57uEJztcXFxcbnZhciDosIPnlKjlkI3np7AgPSAn566A5b2xJztcXFxcbnB1dE15VmFyKCfmipjlj6AnLCAn5YWzJyk7XFxcXG5wdXRNeVZhcign5pel5Y6GJywgJ+WFsycpO1xcXFxucHV0TXlWYXIoJ0RhdGEnLCBEYXRhKTtcXFxcbnB1dE15VmFyKCdsYXp5JywgbGF6eSk7XFxcXG4vLyDmuIXpmaTlj5jph49cXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG6LW3Jyk7XFxcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG57uIJyk7XFxcXG4gICAgY2xlYXJNeVZhcign5oqY5Y+gJyk7XFxcXG4gICAgY2xlYXJNeVZhcign5pel5Y6GJyk7XFxcXG4gICAgY2xlYXJNeVZhcignRGF0YScpO1xcXFxuICAgIGNsZWFyTXlWYXIoJ2xhenknKTtcXFxcbiAgICBjbGVhck15VmFyKCfliafpm4bliJfooagnKTtcXFxcbn0pKVxcXFxuLy8g6K6+572u5Yqo5oCB5pyA5paw56ug6IqCXFxcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoJ2pzOicgKyAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2dldFVwZGF0ZScpKS5ydWxlKTtcXFxcbn0pKTtcXFxcbi8vIOmhtemdouWGheWuueato+aWhy0tLVxcXFxuLy8g5Z+65pys5L+h5oGv5qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiDnn63orq8sXFxcXG4gICAgZGVzYzog566A5LuLID09ICcnID8gJ+aaguaXoOeugOS7iycgOiDnroDku4suc3Vic3RyaW5nKDAsIDQ1KSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFxcXFxcIiMxQzFDMUNcXFxcXFxcIj7or6bmg4U8L2ZvbnQ+JyxcXFxcbiAgICBpbWc6IOWwgemdoixcXFxcbiAgICB1cmw6ICQoKS5ydWxlKCjnroDku4spID0+IHtcXFxcbiAgICAgICAgcmVzID0ge307XFxcXG4gICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+W9seeJh+eugOS7i++8micgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyArIOeugOS7iyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcmVzLmRhdGEgPSBkO1xcXFxuICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxcXG4gICAgfSwg566A5LuLKSxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn6aKE5ZGK44CB6Iqx57Wu5byA5YWzJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PSAnZm9sZCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgncHJldmlld1N3aXRjaCcsICdvcGVuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+mihOWRiuW3sue7j+WIh+aNouS4uuWxleekun5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6aKE5ZGK5LiN5YaN5bGV56S6flxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuLy8g5pu05paw5pel5Y6G5qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pel5Y6GJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5pel5Y6GLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6L+95Ymn5pel5Y6GLCDmm7TmlrDov5vluqYpID0+IHtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfml6XljoYnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ+i/veWJp+aXpeWOhicpO1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+aXpeWOhicsICflhbMnKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcign5pi+56S65qih5byPJywge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6IOi/veWJp+aXpeWOhiArICc8YnI+PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7mm7TmlrDoh7MnICsgKOabtOaWsOi/m+W6pi5tYXRjaCgvW1xcXFxcXFxcdTRlMDAtXFxcXFxcXFx1OWZhNV0vKSA/IOabtOaWsOi/m+W6piA6ICgn56ysJyArICjmm7TmlrDov5vluqYgPT0gJycgPyAwIDog5pu05paw6L+b5bqmKSArICfor50nKSkgKyAnPC9mb250PicsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICfov73liafml6XljoYnXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcign5pel5Y6GJywgJ+W8gCcpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliIfmjaLml6XljobkuLo6JyArIGdldE15VmFyKCfml6XljoYnLCAn5byAJylcXFxcbiAgICB9LCDov73liafml6XljoYsIOabtOaWsOi/m+W6piksXFxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnXFxcXG59KTtcXFxcbi8vIOiuoumYheaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+iuoumYhScsXFxcXG4gICAgaW1nOiBpbWdMaW5rLuiuoumYhSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBzZWxlY3Rpb25MaXN0ID0gWyforqLpmIUnLCAn5Y+W5raI6K6i6ZiFJ107XFxcXG4gICAgICAgIHJldHVybiAkKHNlbGVjdGlvbkxpc3QsIDIpLnNlbGVjdCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBzZWFzb25faWQgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpLnNlYXNvbl9pZDtcXFxcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6K6i6ZiFJykge1xcXFxuICAgICAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc3Vic2NyaWJlRmlsbShzZWFzb25faWQpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmNhbmNlbFN1YnNjcmliZUZpbG0oc2Vhc29uX2lkKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgcmVzO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNSdcXFxcbn0pO1xcXFxuLy8g6K+E6K665qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn6K+E6K66JyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5JykucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgTGlzdCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSkuZXBpc29kZXM7XFxcXG4gICAgICAgICAgICBMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2hhcmVfY29weSArICc8Zm9udCBjb2xvcj1cXFxcXFxcIiMzM2NjY2NcXFxcXFxcIj5cXFxcdOKerjwvZm9udD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGl0ZW0uYWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IDFcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcXFxufSk7XFxcXG5cXFxcbi8vIOeyvuW9qee7p+e7reaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+WRqOi+uScsXFxcXG4gICAgaW1nOiBpbWdMaW5rLuWRqOi+uSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBEYXRhID0gSlNPTi5wYXJzZShnZXRNeVZhcignRGF0YScpKTtcXFxcbiAgICAgICAgLy8g5pyJ5Lqb5rKh5pyJ55u05o6l5Y675o6J5oeS5b6X5aSE55CGflxcXFxuICAgICAgICBpZiAoRGF0YS5zZWN0aW9uKSB7XFxcXG4gICAgICAgICAgICDlkajovrnmlbDnu4QgPSBbXFxcXFxcXCLwn4+377iP55u45YWz57O75YiXXFxcXFxcXCIsIFxcXFxcXFwi8J+ko1BWJuiKsee1rlxcXFxcXFwiLCBcXFxcXFxcIvCfjYnnq5blsY/kuZ/nsr7lvalcXFxcXFxcIiwgXFxcXFxcXCLwn5Sl57K+5b2p5LqM5YibXFxcXFxcXCJdO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAg5ZGo6L655pWw57uEID0gW1xcXFxcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXFxcXFwiXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlkajovrnmlbDnu4QgPSBbXFxcXFxcXCLwn4+377iP55u45YWz57O75YiXXFxcXFxcXCIsIFxcXFxcXFwi8J+ko1BWJuiKsee1rlxcXFxcXFwiLCBcXFxcXFxcIuerluWxj+S5n+eyvuW9qVxcXFxcXFwiLCBcXFxcXFxcIueyvuW9qeS6jOWIm1xcXFxcXFwiXTtcXFxcbiAgICAgICAgcmV0dXJuICQo5ZGo6L655pWw57uELCAxLCAn4YOm57K+5b2p57un57utJykuc2VsZWN0KCgpID0+IHtcXFxcbiAgICAgICAgICAgIERhdGEgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpO1xcXFxuICAgICAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfwn4+377iP55u45YWz57O75YiXJykge1xcXFxuICAgICAgICAgICAgICAgIOezu+WIl+WQjeensCA9IERhdGEuc2Vhc29uX3RpdGxlXFxcXG4gICAgICAgICAgICAgICAg57O75YiX5pWw5o2uID0gRGF0YS5zZWFzb25zO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgo57O75YiX5pWw5o2uKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn4+377iP55u45YWz57O75YiXJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICjns7vliJfmlbDmja4gPT0gW10gfHwg57O75YiX5pWw5o2uID09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuKtkOivpeW9seeJh+ayoeacieebuOWFs+ezu+WIl+WTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICDns7vliJfmlbDmja4uZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Quc2Vhc29uX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogKGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjEwID09ICcnID8gKGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjkgPT0gJycgPyBsaXN0LmNvdmVyIDogbGlzdC5ob3Jpem9udGFsX2NvdmVyXzE2OSkgOiBsaXN0Lmhvcml6b250YWxfY292ZXJfMTYxMCkgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QubmV3X2VwLmluZGV4X3Nob3csXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImVwX2lkXFxcXFxcXCI6IGxpc3QubmV3X2VwLmlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgIH0sIOezu+WIl+aVsOaNrilcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn6SjUFYm6Iqx57WuJykge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFBW5ZKM6Iqx57Wu5pWw5o2uID0gRGF0YS5zZWN0aW9uWzBdLmVwaXNvZGVzO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKFBW5ZKM6Iqx57Wu5pWw5o2uLCBsYXp5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CfpKNQViboirHnta4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQVuWSjOiKsee1ruaVsOaNriA9PSBbXSB8fCBQVuWSjOiKsee1ruaVsOaNriA9PSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuKtkOivpeW9seeJhy/op4bpopHmsqHmnInnm7jlhbNQVuWSjOiKsee1ruWTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBQVuWSjOiKsee1ruaVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXFxcXFxuJyArIGxpc3QubG9uZ190aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgUFblkozoirHnta7mlbDmja4sIGxhenkpXFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5pyJ5pWw5o2u5ZOmfidcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+NieerluWxj+S5n+eyvuW9qScpIHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICDnq5blsY/kuZ/nsr7lvanmlbDmja4gPSBEYXRhLnNlY3Rpb25bMV0uZXBpc29kZXM7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgo56uW5bGP5Lmf57K+5b2p5pWw5o2uLCBsYXp5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CfjYnnq5blsY/kuZ/nsr7lvaknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICjnq5blsY/kuZ/nsr7lvanmlbDmja4gPT0gW10gfHwg56uW5bGP5Lmf57K+5b2p5pWw5o2uID09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+4q2Q6K+l5b2x54mHL+inhumikeayoeacieebuOWFs+erluWxj+efreinhumikeWTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICDnq5blsY/kuZ/nsr7lvanmlbDmja4uZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0LnN1YnRpdGxlICsgJ1xcXFxcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIOerluWxj+S5n+eyvuW9qeaVsOaNriwgbGF6eSlcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmnInmlbDmja7lk6Z+J1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn5Sl57K+5b2p5LqM5YibJykge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIOeyvuW9qeS6jOWIm+aVsOaNriA9IERhdGEuc2VjdGlvblsyXS5lcGlzb2RlcztcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCjnsr7lvankuozliJvmlbDmja4sIGxhenkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn8J+UpeeyvuW9qeS6jOWImycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKOeyvuW9qeS6jOWIm+aVsOaNriA9PSBbXSB8fCDnsr7lvankuozliJvmlbDmja4gPT0gJycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7irZDor6XlvbHniYcv6KeG6aKR5rKh5pyJ5LqM5Yib5L2c5ZOB5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pWs6K+35pyf5b6FficsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIOeyvuW9qeS6jOWIm+aVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmSiOWvuemDqOWIhuWPguaVsOe8uuWkseeahOaDheWGteWmguWHoeS6uuS/ruS7meS8oOWGmeeahO+8jO+8jFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmFpZCA9PSAwIHx8IGxpc3QuY2lkID09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmllZGVvRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXFxcXFwiICsgbGlzdC5saW5rLnNwbGl0KCdhdicpWzFdLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiAnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiR0VUXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IHZpZWRlb0RhdGEuYWlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidmlkID0gdmllZGVvRGF0YS5idmlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSB2aWVkZW9EYXRhLmNpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSBsaXN0LmFpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZCA9IGxpc3QuYnZpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkID0gbGlzdC5jaWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXFxcXFxuJyArIGxpc3QubG9uZ190aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGJ2aWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6IGNpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwg57K+5b2p5LqM5Yib5pWw5o2uLCBsYXp5KVxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaVsOaNruWTpn4nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mraPlnKjov5vlhaVcXFxcXFxcIiArIGlucHV0ICsgXFxcXFxcXCLnlYzpnaIuLi5cXFxcXFxcIjtcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzVcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBpZDogJ+eyvuW9qee7p+e7rSdcXFxcbiAgICB9XFxcXG59KTtcXFxcbi8vIOaYvuekuuaooeW8j+abtOaUueaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpLFxcXFxuICAgIGltZzogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnID8gaW1nTGluay7liJfooaggOiBpbWdMaW5rLuWPjOi+uSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaggPSBKU09OLnBhcnNlKGdldE15VmFyKCfmmL7npLrnmoTliafpm4bliJfooagnKSwoa2V5LHZhbHVlKT0+e1xcXFxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2FpZCcgfHwga2V5ID09PSAnY2lkJykge1xcXFxuICAgICAgICAgICAgICAgIC8vIOWwhuWkp+aVsOWtl+i9rOaNouS4ukJpZ0ludFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBCaWdJbnQodmFsdWUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgaWYgKGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJykge1xcXFxuICAgICAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2goZWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oZWwubGluaywge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JylcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGVsLmxpbmssIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgc2V0SXRlbSgn5qih5byPJywgJ+WIl+ihqCcpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXFxcbiAgICAgICAgdXBkYXRlSXRlbSgn5pi+56S65qih5byPJywge1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSxcXFxcbiAgICAgICAgICAgIGltZzogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnID8gaW1nTGluay7liJfooaggOiBpbWdMaW5rLuWPjOi+uSxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliIfmjaLmqKHlvI/kuLo6JyArIGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKVxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBpZDogJ+aYvuekuuaooeW8jydcXFxcbiAgICB9XFxcXG59LCB7XFxcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXFxcbn0pO1xcXFxuLy8g6YCJ5o+S5qih5Z2X4oCU4oCU5bGA6YOo5Yi35paw54mIXFxcXG7mnaXmupAgPSAnYmwnO1xcXFxucHV0TXlWYXIoJ+eugOaPkicsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIGxldCB0aXRsZUFyciA9IFtdXFxcXG4gICAgc2V0RmlsZSA9IHJlYWRGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGV2YWwoJ2pzb249JyArIHNldEZpbGUpO1xcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicgKyBlLm1lc3NhZ2UpO1xcXFxuICAgIH1cXFxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxcXG4gICAgbGV0IGJhcnJ5MSA9IFsn4pyN77iP6L6F5YqpJ107XFxcXG4gICAgbGV0IGJhcnJ5MiA9IFsn8J+Tpu+4j+mtlOaWrSddO1xcXFxuICAgIGxldCBiYXJyeTMgPSBbJ/CflI3mkJzntKInXTtcXFxcbiAgICB0aXRsZUFyciA9IGJhcnJ5My5jb25jYXQodGl0bGVBcnIpO1xcXFxuICAgIHRpdGxlQXJyID0gYmFycnkyLmNvbmNhdCh0aXRsZUFycik7XFxcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTEuY29uY2F0KHRpdGxlQXJyKTtcXFxcbiAgICBldmFsKCdvcD1qc29uLnNldHRpbmdzLicgKyDmnaXmupApO1xcXFxuICAgIHRpdGxlQXJyID0gdGl0bGVBcnIubWFwKChpdCkgPT4ge1xcXFxuICAgICAgICByZXR1cm4gaXQgPT09IG9wID8gJ/CfkYknICsgaXQgOiBpdDtcXFxcbiAgICB9KTtcXFxcbiAgICBwdXRNeVZhcign6Kej5p6Q5pWw57uEJywgdGl0bGVBcnIpO1xcXFxuICAgIHB1dE15VmFyKCdzZXRGaWxlJywgc2V0RmlsZSk7XFxcXG59KSlcXFxcbmV2YWwoZ2V0TXlWYXIoJ+eugOaPkicpKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfop6PmnpDvvJrwn5SYPGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArIG9wICsgJzwvZm9udD5cXFxcXFxcXHRcXFxcXFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBDb2xvciArICdcXFxcXFxcIj4nICsgKChnZXRNeVZhcign5YiG6ZuG6LW3JywgJ+mmlumhtScpID09ICfpppbpobUnKSA/ICfpppbpobUnIDogKGdldE15VmFyKCfliIbpm4botbcnKSArICctJyArIGdldE15VmFyKCfliIbpm4bnu4gnKSkpICsgJzwvZm9udD4nLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApID0+IHtcXFxcbiAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcXFxuICAgICAgICByZXR1cm4gJChldmFsKGdldE15VmFyKCfop6PmnpDmlbDnu4QnKSksIDMpLnNlbGVjdCgoanNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApID0+IHtcXFxcbiAgICAgICAgICAgIHNldEZpbGUgPSBnZXRNeVZhcignc2V0RmlsZScpO1xcXFxuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ+Kcje+4j+i+heWKqScpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2hvbWU/cnVsZT3phY3nva7liqnmiYsnKSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn5Om77iP6a2U5patJykge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CflI3mkJzntKInKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKOaQnOe0ouaooeW8jyA9PSAn5YiG57uEJykge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXFxcXFwiICsg5b2x54mH5ZCN56ewICsgXFxcXFxcXCImZ3JvdXA9XFxcXFxcXCIgKyDosIPnlKjlkI3np7A7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFxcXFxcIiArIOW9seeJh+WQjeensCArIFxcXFxcXFwiJnJ1bGU9XFxcXFxcXCIgKyDosIPnlKjlkI3np7A7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy8g5Y6f5YWI55qE6YWN572uXFxcXG4gICAgICAgICAgICBvcmlnaW5TZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KGpzb24uc2V0dGluZ3MpO1xcXFxuICAgICAgICAgICAgLy8g5L+u5pS56YWN572uXFxcXG4gICAgICAgICAgICBldmFsKCdqc29uLnNldHRpbmdzLicgKyDmnaXmupAgKyAnPWlucHV0OycpO1xcXFxuICAgICAgICAgICAgc2V0RmlsZSA9IHNldEZpbGUucmVwbGFjZShvcmlnaW5TZXR0aW5ncywgSlNPTi5zdHJpbmdpZnkoanNvbi5zZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJywgc2V0RmlsZSk7XFxcXG4gICAgICAgICAgICAvLyDliLfmlrDlhYPntKBcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+eugOaPkicpKTtcXFxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXFxcXFwiJyArIENvbG9yICsgJ1xcXFxcXFwiPicgKyBvcCArICc8L2ZvbnQ+XFxcXFxcXFx0XFxcXFxcXFx06aG156CB77yaPGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLop6PmnpDlj6PkuLo6XFxcXFxcXCIgKyBpbnB1dDtcXFxcbiAgICAgICAgfSwganNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApXFxcXG4gICAgfSwganNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApLFxcXFxuICAgIGltZzogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvdHViaWFvL2JpbGliaWxpLnN2ZycsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgaWQ6ICdvcCdcXFxcbiAgICB9XFxcXG59KTtcXFxcbi8vIOa7muWKqOWJp+mbhuadoeagj1xcXFxu5Ymn6ZuG6ZW/5bqmID0g5Ymn6ZuG5YiX6KGoLmxlbmd0aDtcXFxcbmlmICjliafpm4bplb/luqYgPiDmr4/pobXpm4bmlbApIHtcXFxcbiAgICBwdXRNeVZhcign5Yi35paw6YCJ6ZuGJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIHB1dE15VmFyKCfliIbpm4botbcnLCBzdGFydCk7XFxcXG4gICAgICAgIHB1dE15VmFyKCfliIbpm4bnu4gnLCBlbmQpO1xcXFxuICAgICAgICBldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfop6PmnpDvvJrwn5SYPGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArIG9wICsgJzwvZm9udD5cXFxcXFxcXHRcXFxcXFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBDb2xvciArICdcXFxcXFxcIj4nICsgKChnZXRNeVZhcign5YiG6ZuG6LW3JywgJ+mmlumhtScpID09ICfpppbpobUnKSA/ICfpppbpobUnIDogKGdldE15VmFyKCfliIbpm4botbcnKSArICctJyArIGdldE15VmFyKCfliIbpm4bnu4gnKSkpICsgJzwvZm9udD4nLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAvLyDliKDpmaRcXFxcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJyksKGtleSx2YWx1ZSk9PntcXFxcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdhaWQnIHx8IGtleSA9PT0gJ2NpZCcpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyDlsIblpKfmlbDlrZfovazmjaLkuLpCaWdJbnRcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KHZhbHVlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oZWwubGluayk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAvLyDmt7vliqBcXFxcbiAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxcXG4gICAgICAgIOWJp+mbhuWIl+ihqCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ+WJp+mbhuWIl+ihqCcpLChrZXksdmFsdWUpPT57XFxcXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnYWlkJyB8fCBrZXkgPT09ICdjaWQnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g5bCG5aSn5pWw5a2X6L2s5o2i5Li6QmlnSW50XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaggPSDliafpm4bliJfooaguc2xpY2Uoc3RhcnQgLSAxLCBlbmQpO1xcXFxuICAgICAgICBuZXdBcnJheSA9IFtdO1xcXFxuICAgICAgICBpbmRleCA9IDE7XFxcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJykge1xcXFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpbmRleCArPSAxO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgYWRkSXRlbUFmdGVyKGdldE15VmFyKCfmnKvpobUnKSwgbmV3QXJyYXkpO1xcXFxuICAgICAgICBwdXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJywg5pi+56S655qE5Ymn6ZuG5YiX6KGoKTtcXFxcbiAgICB9KSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgIHRpdGxlOiAn4oi3JyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiAn5Y2g5L2N56ymJyxcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIDEpO1xcXFxuICAgIHB1dE15VmFyKCfliIbpm4bnu4gnLCDmr4/pobXpm4bmlbApO1xcXFxuICAgIHB1dE15VmFyKCfliafpm4bliJfooagnLCDliafpm4bliJfooagpO1xcXFxuICAgIOaAu+mhteaVsCA9IE1hdGguY2VpbCjliafpm4bplb/luqYgLyDmr4/pobXpm4bmlbApO1xcXFxuICAgIHN0YXJ0ID0gMTtcXFxcbiAgICBlbmQgPSDmr4/pobXpm4bmlbA7XFxcXG4gICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0g5oC76aG15pWwOyBwYWdlKyspIHtcXFxcbiAgICAgICAgaWYgKGVuZCA+IOWJp+mbhumVv+W6pikge1xcXFxuICAgICAgICAgICAgZW5kID0g5Ymn6ZuG6ZW/5bqmO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogc3RhcnQgKyAnLScgKyBlbmQsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+WIt+aWsOmAiembhicpKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCBzdGFydCwgZW5kLCBDb2xvciwg5p2l5rqQKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBzdGFydCArICctJyArIGVuZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgaWYgKGVuZCA8IOWJp+mbhumVv+W6pikge1xcXFxuICAgICAgICAgICAgc3RhcnQgKz0g5q+P6aG16ZuG5pWwO1xcXFxuICAgICAgICAgICAgZW5kICs9IOavj+mhtembhuaVsDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICAvLyDorrDlvZXmnKvpobXnmoRpZFxcXFxuICAgIHB1dE15VmFyKCfmnKvpobUnLCBzdGFydCArICctJyArIGVuZCk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHB1dE15VmFyKCfliIbpm4botbcnLCAxKTtcXFxcbiAgICBwdXRNeVZhcign5YiG6ZuG57uIJywg5Ymn6ZuG6ZW/5bqmKTtcXFxcbn1cXFxcbi8vIOWxleekuuWJp+mbhjpcXFxcbuaYvuekuueahOWJp+mbhuWIl+ihqCA9IOWJp+mbhuWIl+ihqC5zbGljZSgwLCBnZXRNeVZhcign5YiG6ZuG57uIJykpO1xcXFxucHV0TXlWYXIoJ+aYvuekuueahOWJp+mbhuWIl+ihqCcsIOaYvuekuueahOWJp+mbhuWIl+ihqCk7XFxcXG5pbmRleCA9IDE7XFxcXG7mmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxcXG4gICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBsaXN0LmxvbmdfdGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICBidmlkOiBsaXN0LmJ2aWQsXFxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXFxcbiAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgaW5kZXggKz0gMTtcXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwidXDkuLvpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXBIb21lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbi8vIOmihOWkhOeQhlxcXFxucHV0TXlWYXIoJ3VwSW5mbycsICflhbMnKTtcXFxcbnNldFBhZ2VUaXRsZShNWV9QQVJBTVMudGl0bGUpO1xcXFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXFxcbi8vIOmYsuatouWPjeeIrOiZq++8jOS7juS4iuS4gOS4qumhtemdouS8oOmAkuaVsOaNruKAlOKAlOWPjeeIrOiZq+S4pemHjVxcXFxudXBNaWQgPSBNWV9QQVJBTVMubWlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbnVwTmFtZSA9IE1ZX1BBUkFNUy50aXRsZTtcXFxcbnVwRmFjZSA9IE1ZX1BBUkFNUy5mYWNlO1xcXFxucmVsYXRpb24gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnVzZXJNYXBwaW5nKHVwTWlkKTtcXFxcbi8vIOWktOWDj+agj1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXFxcXFwiYmx1ZVxcXFxcXFwiPicgKyB1cE5hbWUgKyAnPC9mb250PicsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3VwSW5mbycsICflhbMnKSA9PSAn5byAJykge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbSgndXBJbmZvJyk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcigndXBJbmZvJywgJ+WFsycpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAvLyDnlKjmiLfln7rmnKzkv6Hmga9cXFxcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogdXBNaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHRva2VuOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06ICd3ZWInLFxcXFxuICAgICAgICAgICAgICAgICAgICB3ZWJfbG9jYXRpb246IDE1NTAxMDFcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcXFxuICAgICAgICAgICAgICAgIGluZm9MaW5rID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL3diaS9hY2MvaW5mbz8nICsgcGFybXM7XFxcXG4gICAgICAgICAgICAgICAgdXBEYXRhID0gSlNPTi5wYXJzZShmZXRjaChpbmZvTGluaywge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWU9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICB1cE5hbWUgPSB1cERhdGEubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB1cFNleCA9IHVwRGF0YS5zZXg7XFxcXG4gICAgICAgICAgICAgICAgdXBTaWduID0gdXBEYXRhLnNpZ247XFxcXG4gICAgICAgICAgICAgICAgdXBCaXJ0aGRheSA9IHVwRGF0YS5iaXJ0aGRheTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cFNjaG9vbCA9IHVwRGF0YS5zY2hvb2wubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwU2Nob29sID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwSWRlbnRpZmljYXRpb24gPSB1cERhdGEub2ZmaWNpYWwudGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignY3VycmVudFVwJywge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ3VwOicgKyB1cE5hbWUgKyAnXFxcXFxcXFxubWlkOicgKyB1cE1pZCArICdcXFxcXFxcXG7mgKfliKs6JyArIHVwU2V4ICsgJ1xcXFxcXFxcbueUn+aXpTonICsgKHVwQmlydGhkYXkgPT0gJycgPyAn5pyq5aGr5YaZJyA6IHVwQmlydGhkYXkpICsgJ1xcXFxcXFxcbicgKyAodXBTY2hvb2wgPT0gJycgPyAnJyA6ICflrabmoKE6JyArIHVwU2Nob29sICsgJ1xcXFxcXFxcbicpICsgKHVwU2lnbiA9PSAnJyA/ICdcXFxcXFxcXG4nIDogdXBTaWduICsgJ1xcXFxcXFxcbicpICsgKHVwSWRlbnRpZmljYXRpb24gPT0gJycgPyAnJyA6ICforqTor4E6JyksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xvbmdfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3VwSW5mbydcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignY3VycmVudFVwJywge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WlveWDj+WHuuS6hueCueaEj+Wklu+8n+S7gOS5iOmDveacqOacieWRon4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd1cEluZm8nXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5byAJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/oeaBr+aKmOWPoDonICsgZ2V0TXlWYXIoJ3VwSW5mbycsICflvIAnKVxcXFxuICAgIH0sIHVwTWlkKSxcXFxcbiAgICBpbWc6IHVwRmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgaWQ6ICdjdXJyZW50VXAnXFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbn0pO1xcXFxuLy8g5YWs5ZGKXFxcXG5ub3RpY2VUZXh0ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvbm90aWNlP21pZD0nICsgdXBNaWQgKyAnJmpzb25wPWpzb25wJywge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICB9XFxcXG59KSkuZGF0YTtcXFxcbmlmIChub3RpY2VUZXh0ICE9ICcnKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICflhazlkYonLFxcXFxuICAgICAgICB1cmw6ICQoKS5ydWxlKChub3RpY2VUZXh0KSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WFrOWRiu+8micgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyArIG5vdGljZVRleHQsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0sIG5vdGljZVRleHQpLFxcXFxuICAgICAgICBkZXNjOiBub3RpY2VUZXh0ID09ICcnID8gJ+aaguaXoOWFrOWRiicgOiBub3RpY2VUZXh0LFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogcmVsYXRpb24sXFxcXG4gICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IGltZ0xpbmsu5re75Yqg5YWz5rOoIDogaW1nTGluay7lt7LlhbPms6gsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmNoYW5nZVVzZXJSZWxhdGlvbih1cE1pZCwgMTEpXFxcXG4gICAgfSwgdXBNaWQpLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiAncmVsYXRpb24nXFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn5Yqo5oCBJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5Yqo5oCBLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZScpLnJ1bGUoKHVwTWlkKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgbGF0ZW5ld3MgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldER5bmFtaWNEYXRhKCd1cFNwYWNlJywgdXBNaWQpO1xcXFxuICAgICAgICAgICAgZXZhbCgkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnNob3dEeW5hbWljRGF0YSgpKTtcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgfSwgdXBNaWQpXFxcXG4gICAgfSwgdXBNaWQpLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn5LiT5qCPJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5LiT5qCPLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWN0aWNsZUxpc3Q/cD1meXBhZ2VcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBtaWQ6IHVwTWlkXFxcXG4gICAgfVxcXFxufSlcXFxcbi8vIOeUqOaIt+inhumikS3lkIjpm4bjgIHns7vliJdcXFxcbnVwVmlkZW8gPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3NwYWNlL3NlYXNvbnNfc2VyaWVzX2xpc3Q/bWlkPScgKyB1cE1pZCArICcmcGFnZV9udW09MSZwYWdlX3NpemU9MTAnLCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgIH1cXFxcbn0pKS5kYXRhLml0ZW1zX2xpc3RzO1xcXFxuLy8g6KeG6aKR5ZCI6ZuG44CB57O75YiXXFxcXG50cnkge1xcXFxuICAgIHVwVmlkZW8uc2Vhc29uc19saXN0LmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgIHNlYXNvbl9pZCA9IGxpc3QubWV0YS5zZWFzb25faWQ7XFxcXG4gICAgICAgIC8vIOagh+mimC3ot7Povazmm7TlpJpcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcXFxcXCIjMzNjY2NjXFxcXFxcXCI+JyArIGxpc3QubWV0YS5uYW1lLnN1YnN0cmluZygwLCAzMCkgKyAnPC9mb250PlxcXFxcXFxcdFxcXFxcXFxcdDxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+JyArIGxpc3QubWV0YS50b3RhbCArICc8L2ZvbnQ+XFxcXHTinq4nLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWQiOmbhuaWh+S7tuWkuSxcXFxcbiAgICAgICAgICAgIC8vIGltZzogbGlzdC5tZXRhLmNvdmVyKydAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkLCBzZWFzb25faWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKCh1cE1pZCwgc2Vhc29uX2lkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvc3BhY2Uvc2Vhc29uc19hcmNoaXZlc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnNlYXNvbl9pZD0nICsgc2Vhc29uX2lkICsgJyZzb3J0X3JldmVyc2U9ZmFsc2UmcGFnZV9udW09JyArIE1ZX1BBR0UgKyAnJnBhZ2Vfc2l6ZT0zMCc7XFxcXG4gICAgICAgICAgICAgICAgICAgIFZpZGVvID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGFnZSA9IE1hdGguY2VpbChWaWRlby5wYWdlLnRvdGFsIC8gVmlkZW8ucGFnZS5wYWdlX3NpemUpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA8PSBtYXhQYWdlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBWaWRlby5wYWdlLnBhZ2VfbnVtICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyBtYXhQYWdlICsgJ+mhtSwnICsgVmlkZW8ucGFnZS50b3RhbCArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBWaWRlby5hcmNoaXZlcy5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICB9LCB1cE1pZCwgc2Vhc29uX2lkKVxcXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlYXNvbl9pZClcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlmIChsaXN0LmFyY2hpdmVzID09PSB1bmRlZmluZWQpIHtcXFxcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA8IDIpIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aW95a625LyZ77yM6L+Z5a625LyZ5rKh5pyJ5ZCI6ZuG6KeG6aKR77yBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuYXJjaGl2ZXNbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+WQiOmbhuS4uuepuicsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAnU29ycnks5rKh5pyJ5pWw5o2u5ZGificsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG50cnkge1xcXFxuICAgIHVwVmlkZW8uc2VyaWVzX2xpc3QuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgc2VyaWVzX2lkID0gbGlzdC5tZXRhLnNlcmllc19pZDtcXFxcbiAgICAgICAgLy8g5qCH6aKYLei3s+i9rOabtOWkmlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcIiMzM2NjY2NcXFxcXFxcIj4nICsgbGlzdC5tZXRhLm5hbWUuc3Vic3RyaW5nKDAsIDMwKSArICc8L2ZvbnQ+XFxcXFxcXFx0XFxcXFxcXFx0PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nICsgbGlzdC5tZXRhLnRvdGFsICsgJzwvZm9udD5cXFxcdOKericsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5ZCI6ZuG5paH5Lu25aS5LFxcXFxuICAgICAgICAgICAgLy8gaW1nOiBsaXN0Lm1ldGEuY292ZXIrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQsIHNlcmllc19pZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKHVwTWlkLCBzZXJpZXNfaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc2VyaWVzL2FyY2hpdmVzP21pZD0nICsgdXBNaWQgKyAnJnNlcmllc19pZD0nICsgc2VyaWVzX2lkICsgJyZvbmx5X25vcm1hbD10cnVlJnNvcnQ9ZGVzYyZwbj0nICsgTVlfUEFHRSArICcmcHM9MzAnO1xcXFxuICAgICAgICAgICAgICAgICAgICBWaWRlbyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwoVmlkZW8ucGFnZS50b3RhbCAvIFZpZGVvLnBhZ2Uuc2l6ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFIDw9IG1heFBhZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIFZpZGVvLnBhZ2UubnVtICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyBtYXhQYWdlICsgJ+mhtSwnICsgVmlkZW8ucGFnZS50b3RhbCArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBWaWRlby5hcmNoaXZlcy5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICB9LCB1cE1pZCwgc2VyaWVzX2lkKVxcXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlcmllc19pZClcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlmIChsaXN0LmFyY2hpdmVzID09PSB1bmRlZmluZWQpIHtcXFxcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA8IDIpIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aW95a625LyZ77yM6L+Z5a625LyZ5rKh5pyJ5ZCI6ZuG6KeG6aKR77yBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuYXJjaGl2ZXNbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+ezu+WIl+S4uuepuicsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAnU29ycnks5rKh5pyJ5pWw5o2u5ZGificsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG4vLyB1cOaKleeov1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ1RB55qE6KeG6aKRLOeCueWHu+WxleW8gOWFqOmDqCcsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICQoKS5ydWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgcXVlcnlKc29uID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBwczogMzAsXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpZDogZ2V0TXlWYXIoJ190aWQnLCAnMCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3R5cGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICBwbjogZ2V0TXlWYXIoJ19wYWdlJywgJzEnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAncHViZGF0ZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiAnd2ViJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2ViX2xvY2F0aW9uOiAxNTUwMTAxLFxcXFxuICAgICAgICAgICAgICAgICAgICBvcmRlcl9hdm9pZGVkOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHBhcm1zID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXFxcbiAgICAgICAgICAgICAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYXJjL3NlYXJjaD8nICsgcGFybXM7XFxcXG4gICAgICAgICAgICAgICAgdXBWaWRlb0RhdGEgPSBKU09OLnBhcnNlKGZldGNoKGRhdGFMaW5rLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICAgICAgICAgIHRsaXN0ID0gdXBWaWRlb0RhdGEubGlzdC50bGlzdDtcXFxcbiAgICAgICAgICAgICAgICB2bGlzdCA9IHVwVmlkZW9EYXRhLmxpc3Qudmxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgLy8g5YiG57G75ZKM6aG156CBXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCdfdGlkJywgJzAnKSA9PSAwID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+5YWo6YOoPC9mb250PicgOiAn5YWo6YOoJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAoMCArIFxcXFxcXFwiXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsICgxICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIGluIHRsaXN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHRsaXN0W2l0ZW1dLnRpZCArIFxcXFxcXFwiXFxcXFxcXCIpID09IGdldE15VmFyKCdfdGlkJywgJzAnKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPicgKyAodGxpc3RbaXRlbV0ubmFtZSArIGAoJHt0bGlzdFtpdGVtXS5jb3VudH0pYCkgKyAnPC9mb250PicgOiAodGxpc3RbaXRlbV0ubmFtZSArIGAoJHt0bGlzdFtpdGVtXS5jb3VudH0pYCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodGlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAodGlkICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsICgxICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRsaXN0W2l0ZW1dLnRpZCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBtYXhQYWdlID0gTWF0aC5jZWlsKHVwVmlkZW9EYXRhLnBhZ2UuY291bnQgLyB1cFZpZGVvRGF0YS5wYWdlLnBzKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSBtYXhQYWdlOyBwYWdlKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAocGFnZSArIFxcXFxcXFwiXFxcXFxcXCIpID09IGdldE15VmFyKCdfcGFnZScsICcxJykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nICsgKHBhZ2UgKyBcXFxcXFxcIlxcXFxcXFwiKSArICc8L2ZvbnQ+JyA6IChwYWdlICsgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgocGFnZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsIChwYWdlICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhZ2UpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIOW5s+mTuuinhumikVxcXFxuICAgICAgICAgICAgICAgIHZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1YnRpbWUgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnRpbWVDb252ZXJ0KGl0ZW0uY3JlYXRlZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgaXRlbS5wbGF5ICsgJ1xcXFxcXFxcbicgKyBwdWJ0aW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBpdGVtLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+mhtemdoui1sOS4ouS6hi4uLicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaTAuaGRzbGIuY29tL2Jmcy9nZW5lcmFsL2Y3YjY2NzAxMWE0NjYxNTczMmM3MDFmNGJiMWQwN2Y3OTNmOGQxZGYucG5nQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICflpKrpopHnuYHkuobvvIHnqI3lkI7lho3or5V+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgfSwgdXBNaWQpXFxcXG4gICAgfSwgdXBNaWQpXFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJ1cOaQnOe0olxcXCIsXFxcInBhdGhcXFwiOlxcXCJ1cFNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNlYXdvcmQgPSBNWV9QQVJBTVMuc2Vhd29yZDtcXFxcbnZhciBkID0gW107XFxcXG5yZXN1bHREYXRhPSQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0U2VhcmNoUmVzKCdiaWxpX3VzZXInLHNlYXdvcmQsTVlfUEFHRSwzNik7XFxcXG5pZiAoTVlfUEFHRSA8PSByZXN1bHREYXRhLm51bVBhZ2VzKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIHJlc3VsdERhdGEucGFnZSArICfpobVcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlhbHmnIknICsgcmVzdWx0RGF0YS5udW1QYWdlcyArICfpobUsJyArIHJlc3VsdERhdGEubnVtUmVzdWx0cyArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgcmVzdWx0RGF0YS5yZXN1bHQuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXFxcXFwiICsgbGlzdC51bmFtZSArIFxcXFxcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFxcXFxcIiArIGxpc3QudXNpZ24gKyBcXFxcXFxcIjwvc21hbGw+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovLycgKyBsaXN0LnVwaWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1pZCxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC51bmFtZSxcXFxcbiAgICAgICAgICAgICAgICBmYWNlOiAnaHR0cHM6Ly8nICsgbGlzdC51cGljXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0U2VhcmNoUmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwidmlkZW/mkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwidmlkZW9TZWFyY2hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZWF3b3JkID0gTVlfUEFSQU1TLnNlYXdvcmQ7XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIHJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRTZWFyY2hSZXMoJ3ZpZGVvJyxzZWF3b3JkLE1ZX1BBR0UsNDIpO1xcXFxudmFyIHt0aW1lQ29udmVydH09JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKTtcXFxcbmlmIChNWV9QQUdFIDw9IHJlc3VsdERhdGEubnVtUGFnZXMpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgcmVzdWx0RGF0YS5wYWdlICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyByZXN1bHREYXRhLm51bVBhZ2VzICsgJ+mhtSwnICsgcmVzdWx0RGF0YS5udW1SZXN1bHRzICsgJ+adoeaVsOaNricsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICByZXN1bHREYXRhLnJlc3VsdC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAvLyB0aXRsZT1saXN0LnRpdGxlLnJlcGxhY2UoJzxlbSBjbGFzcz1cXFxcXFxcXFxcXFxcXFwia2V5d29yZFxcXFxcXFxcXFxcXFxcXCI+JywnPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nKS5yZXBsYWNlKCc8L2VtPicsJzwvZm9udD4nKVxcXFxuICAgICAgICB0aXRsZSA9IGxpc3QudGl0bGUucmVwbGFjZSgvPGVtIGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJrZXl3b3JkXFxcXFxcXFxcXFxcXFxcIj4vZywgJycpLnJlcGxhY2UoLzxcXFxcXFxcXC9lbT4vZywgJycpXFxcXG4gICAgICAgIHBidGltZT10aW1lQ29udmVydChsaXN0LnB1YmRhdGUpO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly8nICsgbGlzdC5waWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+5pKt5pS+6YePOicrbGlzdC5wbGF5KydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZU6JytsaXN0LmRhbm1ha3UrJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonK2xpc3QubGlrZSsnXFxcXFxcXFxu5Y+R5biD5pe26Ze0OicrcGJ0aW1lKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAvLyDop4bpopHmoIfor4ZcXFxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcXFxuICAgICAgICAgICAgICAgIGJ2aWQ6bGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFNlYXJjaFJlc3VsdChkKTtcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXFwibmFtZVxcXCI6XFxcIuaOqOmAgVxcXCIsXFxcInBhdGhcXFwiOlxcXCJmZWVkXFxcIixcXFwicnVsZVxcXCI6XFxcIiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0RmVlZCgpLmZvckVhY2goaXRlbSA9PiB7XFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBpbWc6IGl0ZW0ucGljKydAUmVmZXJlcj0nLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBkZXNjOiAndXA6JyArIGl0ZW0ub3duZXIubmFtZSArICdcXFxcXFxcXG4nICsgaXRlbS5zdGF0LnZpZXcgKyBcXFxcXFxcIuaSreaUvuKAu1xcXFxcXFwiICsgaXRlbS5zdGF0Lmxpa2UgKyBcXFxcXFxcIueCuei1nlxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIC8vIGlk5YW25a6e5pivYWlkXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGFpZDogaXRlbS5pZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY2lkOiBpdGVtLmNpZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59KVxcXFxuXFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBJXFxcIixcXFwicGF0aFxcXCI6XFxcImFwaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIvLyBwYXJ0MTrogZrlkIjlh73mlbAtLS0tLS0tLS0tLS0tLS0tXFxcXG4vLyDnmbvlvZXpqozor4FcXFxcbiQuZXhwb3J0cy5pc0xvZ2dlZEluID0gZnVuY3Rpb24gKCkge1xcXFxuICAgIGlmIChmaWxlRXhpc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGJpbGlEYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSk7XFxcXG4gICAgICAgIGlmIChiaWxpRGF0YS51c2VyTGlzdC5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInVzZXJOYW1lXFxcXFxcXCI6ICfmnKrnmbvlvZUnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck1pZFxcXFxcXFwiOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInVzZXJGYWNlXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBmYWxzZVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjdXJyZW50VXNlciA9IGJpbGlEYXRhLnVzZXJMaXN0WzBdO1xcXFxuICAgICAgICB2YXIgY29va2llID0gY3VycmVudFVzZXIuY29va2llO1xcXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck5hbWVcXFxcXFxcIjogJ+acqueZu+W9lScsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlckZhY2VcXFxcXFxcIjogJycsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IGZhbHNlXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIudXNlck5hbWUgPSB1c2VyaW5mby51bmFtZTtcXFxcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnVzZXJNaWQgPSB1c2VyaW5mby5taWQ7XFxcXG4gICAgICAgICAgICAvLyAx77ya5Lya5ZGY5byA6YCa77ybMO+8muacquW8gOmAmlxcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIudmlwU3RhdHVzID0gdXNlcmluZm8udmlwU3RhdHVzO1xcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIuZmFjZSA9IHVzZXJpbmZvLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnLCBKU09OLnN0cmluZ2lmeShiaWxpRGF0YSkpO1xcXFxuICAgICAgICAgICAgLy8gcmV0dXJuIHRydWU7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck5hbWVcXFxcXFxcIjogY3VycmVudFVzZXIudXNlck5hbWUsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6IGN1cnJlbnRVc2VyLnVzZXJNaWQsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyRmFjZVxcXFxcXFwiOiBjdXJyZW50VXNlci5mYWNlLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiB0cnVlXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBcXFxcXFxcInVzZXJOYW1lXFxcXFxcXCI6ICfmnKrnmbvlvZUnLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1c2VyRmFjZVxcXFxcXFwiOiAnJyxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBmYWxzZVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcXG4vLyDlk5Tlk6nop4bpopHop6PmnpDvvJrojrflj5bmkq3mlL7lnLDlnYAr5o+Q5Lqk5pKt5pS+6K6w5b2VXFxcXG4kLmV4cG9ydHMuYmlsaUxhenkgPSBmdW5jdGlvbiAoaWQsIGNpZCwgcW4pIHtcXFxcbiAgICAvLyDph43nva7ljp/nlJ/lvLnluZXnu5/kuIDlvLnluZXlpKflsI/jgIHkv67mlLnmraXplb9cXFxcbiAgICBmdW5jdGlvbiBvdmVycmlkZVNhdmUoZG0pIHtcXFxcbiAgICAgICAgdmFyIGRhbm11RGF0YSA9IHJlcXVlc3QoZG0pO1xcXFxuICAgICAgICAvLyDlrZfkvZPlpKflsI/jgIHlvLnluZXmraXplb9cXFxcbiAgICAgICAgdmFyIGRhbm11U2V0dGluZyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2hpa2VyOi8vZmlsZXMvZG3nm5LlrZAvc2V0dGluZ3MuanNvbicpKTtcXFxcbiAgICAgICAgdmFyIHNpemUgPSBkYW5tdVNldHRpbmcuZm9udFNpemU7XFxcXG4gICAgICAgIHZhciBzdGVwID0gZGFubXVTZXR0aW5nLnN0ZXA7XFxcXG4gICAgICAgIHZhciBkYXRhID0gJyc7XFxcXG4gICAgICAgIHRkID0gcGRmYShkYW5tdURhdGEsICdpJiZkJyk7XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGQubGVuZ3RoOyBpICs9IHN0ZXApIHtcXFxcbiAgICAgICAgICAgIHRpbWVwb2ludCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcXFxcXCIsXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgY3QgPSBwZGZoKHRkW2ldLCAnZCYmcCcpLnNwbGl0KFxcXFxcXFwiLFxcXFxcXFwiKVsxXTtcXFxcbiAgICAgICAgICAgIGNvbG9yID0gcGRmaCh0ZFtpXSwgJ2QmJnAnKS5zcGxpdChcXFxcXFxcIixcXFxcXFxcIilbM107XFxcXG4gICAgICAgICAgICAvLyDlvLnluZXlhoXlrrlcXFxcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwZGZoKHRkW2ldLCAnZCYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgaWYgKGNvbnRlbnQuaW5kZXhPZignPCcpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignPicpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignJicpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignXFxcXFxcXFx1MDAwMCcpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignXFxcXFxcXFxiJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHRlbXBkYXRhID0gYDxkIHA9XFxcXFxcXCIke01hdGgucm91bmQodGltZXBvaW50KX0sJHtjdH0sJHtzaXplfSwke2NvbG9yfSwwXFxcXFxcXCI+JHtjb250ZW50fTwvZD5cXFxcXFxcXG5gO1xcXFxuICAgICAgICAgICAgZGF0YSArPSB0ZW1wZGF0YTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXFxcXFwiMS4wXFxcXFxcXCIgZW5jb2Rpbmc9XFxcXFxcXCJVVEYtOFxcXFxcXFwiPz5cXFxcXFxcXG48aT5cXFxcXFxcXG4ke2RhdGF9PC9pPmA7XFxcXG4gICAgICAgIHNhdmVGaWxlKGRtLCBkYW5tdXN0cik7XFxcXG4gICAgfVxcXFxuICAgIC8vIOWIpOaWreaYr+WQpumHjeWGmVxcXFxuICAgIHZhciBkbSA9ICdodHRwczovL2NvbW1lbnQuYmlsaWJpbGkuY29tLycgKyBjaWQgKyAnLnhtbCc7XFxcXG4gICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxcXG4gICAgICAgIGZpbGUgPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcXFxuICAgICAgICBkbSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11LycgKyAnYmlsaV9mcm9tXycgKyBnZXRQYWdlVGl0bGUoKSArICcueG1sJztcXFxcbiAgICAgICAgZG93bmxvYWRGaWxlKGZpbGUsIGRtKTtcXFxcbiAgICAgICAgb3ZlcnJpZGVTYXZlKGRtKTtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGRhdGEgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFVybChpZCwgY2lkLCBxbik7XFxcXG4gICAgLy8g5o+Q5Lqk5Y6G5Y+y6K6w5b2VXFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5yZXBvcnRQcm9jZXNzKGlkLCBjaWQpO1xcXFxuICAgIC8vIHF1YWxpdHlOdW09ZGFzaC5hdWRpby5sZW5ndGg75LiN6ZyA6KaB5LqG77yM5om+5Yiw5LqG5pu05aW955qE5Yik5pat5pa55rOV77yM6Jm954S25oiR5bm25LiN55+l6YGT6L+Z5Lqb5Y+C5pWw55qE5ZCr5LmJ5piv5LuA5LmIXFxcXG4gICAgdmlkZW9MaXN0ID0gW107XFxcXG4gICAgYXVkaW9MaXN0ID0gW107XFxcXG4gICAgbmFtZUxpc3QgPSBbXTtcXFxcbiAgICBoZWFkZXJzID0gW107XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgZGF0YS5hdWRpby5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgYXVkaW9MaXN0LnB1c2goaXRlbS5iYXNlVXJsKTtcXFxcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGRhdGEudmlkZW8uZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmNvZGVjaWQgPT0gNykge1xcXFxuICAgICAgICAgICAgICAgIHZpZGVvTGlzdC5wdXNoKGl0ZW0uYmFzZVVybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT0gMTI2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJ+adnOavlOinhueVjCcpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMjUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnSERSIOecn+W9qeiJsicpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMjApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNEvotoXmuIUnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTE2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQNjDpq5jluKfnjocnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTEyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQK+mrmOeggeeOhycpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA4MCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUOmrmOa4hScpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA3NCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc3MjBQNjDpq5jluKfnjocnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNjQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUOmrmOa4hScpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAzMikge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc0ODBQ5riF5pmwJyk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDE2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzM2MFDmtYHnlYUnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNikge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcyNDBQ5p6B6YCfJyk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgLy8g5L+d5oyB6ZW/5bqm5LiA6Ie0XFxcXG4gICAgICAgIHdoaWxlIChhdWRpb0xpc3QubGVuZ3RoIDwgdmlkZW9MaXN0Lmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGF1ZGlvTGlzdCDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXFxcbiAgICAgICAgICAgIGF1ZGlvTGlzdC5wdXNoKGF1ZGlvTGlzdFthdWRpb0xpc3QubGVuZ3RoIC0gMV0pO1xcXFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGhlYWRlcnMg5Lit5pyA5ZCO5LiA5Liq5YWD57Sg5bm26L+95Yqg5Yiw5pWw57uE5pyr5bC+XFxcXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyc1toZWFkZXJzLmxlbmd0aCAtIDFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdXJsczogdmlkZW9MaXN0LFxcXFxuICAgICAgICAgICAgYXVkaW9VcmxzOiBhdWRpb0xpc3QsXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxuICAgICAgICAgICAgbmFtZXM6IG5hbWVMaXN0LFxcXFxuICAgICAgICAgICAgZGFubXU6IGRtXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCLmraPluLjop6Pph4rlpLHotKXvvIzov5vooYzmnIDlkI7lsJ3or5U6XFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdXJsczogW2RhdGEuZHVybFswXS51cmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgbmFtZXM6IFtkYXRhLnF1YWxpdHkgKyBcXFxcXFxcIlxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIGRhbm11OiBkbSxcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgICAgICB9XVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFxcbi8vIOeojeWQjuWcqOeci+KAlOKAlOaAu+aTjeS9nOWIpOaWrVxcXFxuJC5leHBvcnRzLmp1ZGdlVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIHNlbGVjdGlvbiA9IFsn5re75YqgJywgJ+enu+mZpCddO1xcXFxuICAgIHJldHVybiAkKHNlbGVjdGlvbiwgMSkuc2VsZWN0KChhaWQpID0+IHtcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICfmt7vliqAnKSB7XFxcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmFkZFRvdmlldyhhaWQpO1xcXFxuICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mt7vliqDmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTEwMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6LSm5Y+35pyq55m75b2VXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL2NzcmbmoKHpqozlpLHotKVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTQwMCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDkwMDAxKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liJfooajlt7Lmu6FcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gOTAwMDMpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eov+S7tuW3sue7j+iiq+WIoOmZpFxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZGVsVG92aWV3KGFpZCk7XFxcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+enu+mZpOaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBhaWQpXFxcXG59XFxcXG4vLyDmk43kvZznlKjmiLflhbPns7tcXFxcbiQuZXhwb3J0cy5jaGFuZ2VVc2VyUmVsYXRpb24gPSBmdW5jdGlvbiAobWlkLCByZV9zcmMpIHtcXFxcbiAgICBzZWxlY3Rpb24gPSBbJ+WFs+azqCcsICflj5blhbMnLCAn5oKE5oKE5YWz5rOoJywgJ+WPlua2iOaChOaChOWFs+azqCcsICfmi4npu5EnLCAn5Y+W5raI5ouJ6buRJywgJ+i4ouWHuueyieS4nScsICfnp7vliqjliIbnu4QnXTtcXFxcbiAgICByZXR1cm4gJChzZWxlY3Rpb24sIDIpLnNlbGVjdCgobWlkLCByZV9zcmMpID0+IHtcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICfnp7vliqjliIbnu4QnKSB7XFxcXG4gICAgICAgICAgICBiZWZvcmVUYWdpZHMgPSBbXTtcXFxcbiAgICAgICAgICAgIGdyb3VwcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0VXNlckdyb3VwKG1pZCk7XFxcXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JvdXBzKSA9PSAne30nKSB7XFxcXG4gICAgICAgICAgICAgICAgYmVmb3JlVGFnaWRzLnB1c2goMCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZ3JvdXBzKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZ2lkcy5wdXNoKHBhcnNlSW50KHByb3ApKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvLyDojrflj5bmiJHnmoTliIbnu4RcXFxcbiAgICAgICAgICAgIGZvY3VzR3JvdXBMaXN0ID0gW107XFxcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldE15QXR0ZW50aW9uR3JvdXBMaXN0KCkuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmb2N1c0dyb3VwTGlzdC5wdXNoKGxpc3QubmFtZSArICcgJyArIGxpc3QudGFnaWQpO1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChmb2N1c0dyb3VwTGlzdCwgMSkuc2VsZWN0KChiZWZvcmVUYWdpZHMsIG1pZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGFmdGVyVGFnaWRzID0gW107XFxcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMucHVzaChwYXJzZUludChpbnB1dC5zcGxpdCgnICcpWzFdKSk7XFxcXG4gICAgICAgICAgICAgICAgZmlkcyA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGZpZHMucHVzaChOdW1iZXIobWlkKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5tb3ZlVXNlcnMoYmVmb3JlVGFnaWRzLCBhZnRlclRhZ2lkcywgZmlkcyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v56e75Yqo55So5oi35YiwXFxcXFxcXCIgKyBpbnB1dC5zcGxpdCgnICcpWzBdICsgXFxcXFxcXCLliIbnu4TmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjEwNCkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+aXoOadg+mZkFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gMjIxMDUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mnKrlhbPms6hcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBiZWZvcmVUYWdpZHMsIG1pZCk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+WFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPluWFsycpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+aChOaChOWFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMztcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaChOaChOWFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+aLiem7kScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaLiem7kScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+i4ouWHuueyieS4nScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYWRkQXR0ZW50aW9uKG1pZCwgYWN0LCByZV9zcmMpO1xcXFxuICAgICAgICAgICAgcmVsYXRpb24gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnVzZXJNYXBwaW5nKG1pZCk7XFxcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdyZWxhdGlvbicsIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVsYXRpb24sXFxcXG4gICAgICAgICAgICAgICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mt7vliqDlhbPms6ggOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey5YWz5rOoXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyBpbnB1dCArIFxcXFxcXFwi5oiQ5YqfXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjAwMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5LiN6IO95a+56Ieq5bex6L+b6KGM5q2k5pON5L2cXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMDAzKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/nlKjmiLfkvY3kuo7pu5HlkI3ljZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBtaWQsIHJlX3NyYylcXFxcbn1cXFxcbi8vIOaYoOWwhOeUqOaIt+WFs+ezu1xcXFxuJC5leHBvcnRzLnVzZXJNYXBwaW5nID0gZnVuY3Rpb24gKG1pZCkge1xcXFxuICAgIHJlbGF0aW9uUmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRSZWxhdGlvbihtaWQpO1xcXFxuICAgIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMCkge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICfmnKrlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMSkge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICfmgoTmgoTlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMikge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICflt7LlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gNikge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICflt7LkupLnsoknXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMTI4KSB7XFxcXG4gICAgICAgIHJlbGF0aW9uID0gJ+W3suaLiem7kSdcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIHJlbGF0aW9uO1xcXFxufVxcXFxuLy8g54K56LWe5pON5L2c6YC76L6RXFxcXG4kLmV4cG9ydHMubGlrZUxvZ2ljID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIGhhc0xpa2UgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0xpa2UoYWlkKTtcXFxcbiAgICBpZiAoaGFzTGlrZSA9PSAwKSB7XFxcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc2V0TGlrZShhaWQsIDEpO1xcXFxuICAgICAgICBpZiAocmVzID09IDApIHtcXFxcbiAgICAgICAgICAgIGxpa2UgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFxcXFxcIiArIGFpZCkpLmRhdGEuc3RhdC5saWtlO1xcXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0TGlrZScsIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogKGxpa2UgKyAxKSArICcnLFxcXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3sueCuei1nlxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eCuei1nuaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ngrnotZ7lh7rplJnkuoZ+XFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnNldExpa2UoYWlkLCAyKTtcXFxcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhLnN0YXQubGlrZTtcXFxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NldExpa2UnLCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mnKrngrnotZ5cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj5bmtojngrnotZ7miJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+W5raI54K56LWe5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXFxuLy8g5pS26JeP5pON5L2c6YC76L6RXFxcXG4kLmV4cG9ydHMuZmF2b3VyTG9naWMgPSBmdW5jdGlvbiAoYWlkLCBtaWQpIHtcXFxcbiAgICBoYXNGYXZvdXIgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0Zhdm91cihhaWQpO1xcXFxuICAgIGlmIChoYXNGYXZvdXIpIHtcXFxcbiAgICAgICAgLy8g56e75Ye65pS26JePXFxcXG4gICAgICAgIGZhdm91cklkTGlzdCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0RmF2b3VySWRMaXN0KGFpZCwgbWlkKTtcXFxcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5zZXRGYXZvdXIoYWlkLCAnJywgZmF2b3VySWRMaXN0KTtcXFxcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhLnN0YXQuZmF2b3JpdGU7XFxcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mnKrmlLbol49cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj5bmtojmlLbol4/miJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+W5raI5pS26JeP5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g6YCJ5oup5pS26JePXFxcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0Q29sbGVjdGlvbkdyb3VwTGlzdCgpWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3Q7XFxcXG4gICAgICAgIEdyb3VwTGlzdCA9IFtdO1xcXFxuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIEdyb3VwTGlzdC5wdXNoKGl0ZW0udGl0bGUgKyAnICcgKyBpdGVtLmlkKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHJldHVybiAkKEdyb3VwTGlzdCwgMSkuc2VsZWN0KChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgIHNlbGVjdElkID0gcGFyc2VJbnQoaW5wdXQuc3BsaXQoJyAnKVsxXSlcXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc2V0RmF2b3VyKGFpZCwgc2VsZWN0SWQsICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIGxpa2UgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFxcXFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSArIDEpICsgJycsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3suaUtuiXj1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pS26JeP5oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pS26JeP5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBhaWQpO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuLy8gcGFydDI65pWj6KOFQVBJLS0tLS0tLS0tLS0tLS0tLVxcXFxuLy8g6I635Y+W5pCc57Si57uT5p6cXFxcXG4kLmV4cG9ydHMuZ2V0U2VhcmNoUmVzID0gZnVuY3Rpb24gKHNlYXJjaF90eXBlLCBzZWF3b3JkLCBwYWdlLCBwYWdlU2l6ZSkge1xcXFxuICAgIHF1ZXJ5SnNvbiA9IHtcXFxcbiAgICAgICAgX19yZWZyZXNoX186IHRydWUsXFxcXG4gICAgICAgIF9leHRyYTogJycsXFxcXG4gICAgICAgIGNvbnRleHQ6ICcnLFxcXFxuICAgICAgICBwYWdlOiBwYWdlLFxcXFxuICAgICAgICBwYWdlX3NpemU6IHBhZ2VTaXplLFxcXFxuICAgICAgICBvcmRlcjogJycsXFxcXG4gICAgICAgIGR1cmF0aW9uOiAnJyxcXFxcbiAgICAgICAgZnJvbV9zb3VyY2U6ICcnLFxcXFxuICAgICAgICBmcm9tX3NwbWlkOiAzMzMuMzM3LFxcXFxuICAgICAgICBwbGF0Zm9ybTogJ3BjJyxcXFxcbiAgICAgICAgaGlnaGxpZ2h0OiAxLFxcXFxuICAgICAgICBzaW5nbGVfY29sdW1uOiAwLFxcXFxuICAgICAgICBrZXl3b3JkOiBzZWF3b3JkLFxcXFxuICAgICAgICBzZWFyY2hfdHlwZTogc2VhcmNoX3R5cGUsXFxcXG4gICAgICAgIHByZWxvYWQ6IHRydWUsXFxcXG4gICAgICAgIGNvbTJjbzogdHJ1ZVxcXFxuICAgIH1cXFxcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0V2JpRW5jKHF1ZXJ5SnNvbik7XFxcXG4gICAgZGF0YUxpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS93Ymkvc2VhcmNoL3R5cGU/JyArIHBhcm1zO1xcXFxuICAgIGNvb2tpZSA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZTtcXFxcbiAgICByZXMgPSBKU09OLnBhcnNlKGZldGNoKGRhdGFMaW5rLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiR0VUXFxcXFxcXCJcXFxcbiAgICB9KSkuZGF0YTtcXFxcbiAgICByZXR1cm4gcmVzO1xcXFxufVxcXFxuLy8g6KeG6aKR5o6o6I2QXFxcXG4kLmV4cG9ydHMuZ2V0RmVlZCA9IGZ1bmN0aW9uICgpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9pbmRleC90b3AvZmVlZC9yY21kXFxcXFxcXCI7XFxcXG4gICAgdmFyIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKTtcXFxcbiAgICByZXR1cm4gcmVzLmRhdGEuaXRlbVxcXFxufVxcXFxuLy8g6I635Y+W5pKt5pS+5Zyw5Z2AXFxcXG4kLmV4cG9ydHMuZ2V0VXJsID0gZnVuY3Rpb24gKGF2aWQsIGNpZCwgcW4pIHtcXFxcbiAgICB2YXIgc2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpO1xcXFxuICAgIHZhciBDb29raWUgPSBzZXR0aW5nLmJmS2V5ICE9ICcnID8gYmFzZTY0RGVjb2RlKGJhc2U2NERlY29kZShzZXR0aW5nLmJmS2V5KSkgOiBzZXR0aW5nLnVzZXJMaXN0WzBdLmNvb2tpZTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3BsYXllci9wbGF5dXJsXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiYXZpZFxcXFxcXFwiOiBTdHJpbmcoYXZpZCksXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNpZFxcXFxcXFwiOiBTdHJpbmcoY2lkKSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicW5cXFxcXFxcIjogcW4sXFxcXG4gICAgICAgICAgICBcXFxcXFxcImZudmVyXFxcXFxcXCI6IDAsXFxcXG4gICAgICAgICAgICAvLyBcXFxcXFxcImZudmFsXFxcXFxcXCI6IDQwNDgsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImZudmFsXFxcXFxcXCI6IDE2LFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJmb3Vya1xcXFxcXFwiOiAxXFxcXG4gICAgICAgIH0pLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgQ29va2llOiBDb29raWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgcmVzID0gSlNPTi5wYXJzZSh1KTtcXFxcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhc2gpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5kYXNoO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwi5rKh5pyJ5om+5YiwZGFzaOWtl+autVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdXBwb3J0X2Zvcm1hdHMpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAodS5pbmNsdWRlcyhcXFxcXFxcIuivleeci1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBtc2cgPSBcXFxcXFxcIuaCqOWImuaJjeingueci+eahOinhumikeaYr+ivleeci+inhumike+8jOingueci+WujOaVtOeJh+auteivt+WJjeW+gOWumOe9kei0reS5sO+8gVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2cobXNnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+a4qemmqOaPkOekuicsIGNvbnRlbnQ6IG1zZywgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgY2FuY2VsOiAkLnRvU3RyaW5nKCgpID0+IHt9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vIOS4gOS6uuS5i+S4i+esrOS4gOWto+eahOesrDHvvIwy6ZuG4oCU4oCU5Y+v5Lul6I635Y+W5aSn5Lya5ZGY5Ymn6ZuG55qE5YmNM21pblxcXFxuICAgICAgICAgICAgbG9nKCflsJ3or5Xmm7TmlLnor7fmsYLmjqXlj6MuLi46JyArIGUpO1xcXFxuICAgICAgICAgICAgbGV0IHUgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9wbGF5ZXIvd2ViL3BsYXl1cmxcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiYXZpZFxcXFxcXFwiOiBTdHJpbmcoYXZpZCksXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogU3RyaW5nKGNpZCksXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJxblxcXFxcXFwiOiBxbixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZudmVyXFxcXFxcXCI6IDAsXFxcXG4gICAgICAgICAgICAgICAgLy8gXFxcXFxcXCJmbnZhbFxcXFxcXFwiOiA0MDQ4LFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZm52YWxcXFxcXFxcIjogMTYsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJmb3Vya1xcXFxcXFwiOiAxXFxcXG4gICAgICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgQ29va2llOiBDb29raWVcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgLy8g5LuZ546L55qE5pel5bi456ys5LiJ5a2j56ysMTDpm4bvvIzmsqHmnIlkYXNo77yM5pyN5LqGXFxcXG4gICAgICAgICAgICBpZiAoSlNPTi5wYXJzZSh1KS5yZXN1bHQuZGFzaCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHUpLnJlc3VsdC5kYXNoO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBsb2coJ+Wwneivlei1sOWNlee6v+i3r+eUu+i0qH4nKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5yZXN1bHQ7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxcXG4gICAgICAgICAgICBsb2coJ2Nvb2tpZeacieayoeacieWPr+iDveWkseaViOS6huWRon4nKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn1cXFxcbi8vIOaPkOS6pOaSreaUvuiusOW9lVxcXFxuJC5leHBvcnRzLnJlcG9ydFByb2Nlc3MgPSBmdW5jdGlvbiAoYXZpZCwgY2lkKSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHJlcyA9IHBvc3QoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvcmVwb3J0XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYXZpZCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2lkXFxcXFxcXCI6IGNpZCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJwcm9ncmVzc1xcXFxcXFwiOiAwXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufVxcXFxuXFxcXG4vLyDojrflj5bor4TorrpcXFxcbiQuZXhwb3J0cy5nZXRDb21tZW50cyA9IGZ1bmN0aW9uIChpZCwgdHlwZSwgcGFnZSkge1xcXFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IHR5cGUsXFxcXG4gICAgICAgIFxcXFxcXFwib2lkXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcInBuXFxcXFxcXCI6IHBhZ2VcXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdCh1LCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuZGF0YS5yZXBsaWVzXFxcXG59XFxcXG4vLyDmt7vliqDnqI3lkI7lnKjnnIvigJTigJTnnJ/nmoTpurvkuobvvIzkuLrku4DkuYhmZXRjaOWwsemUmeWRon5cXFxcbiQuZXhwb3J0cy5hZGRUb3ZpZXcgPSBmdW5jdGlvbiAoYWlkKSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L2FkZFxcXFxcXFwiO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZixcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kOiBcXFxcXFxcIlBPU1RcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcXFxufVxcXFxuLy8g5Yig6Zmk56iN5ZCO5Zyo55yLXFxcXG4kLmV4cG9ydHMuZGVsVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L2RlbFxcXFxcXFwiO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZixcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kOiBcXFxcXFxcIlBPU1RcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcXFxufVxcXFxuLy8g6K6i6ZiF5b2x6KeGKOi/veeVquOAgei/veWJpylcXFxcbiQuZXhwb3J0cy5zdWJzY3JpYmVGaWxtID0gZnVuY3Rpb24gKHNlYXNvbl9pZCkge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3dlYi9mb2xsb3cvYWRkXFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcInNlYXNvbl9pZFxcXFxcXFwiOiBzZWFzb25faWQsXFxcXG4gICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmLFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLnJlc3VsdC50b2FzdDtcXFxcbn1cXFxcbi8vIOWPlua2iOiuoumYhVxcXFxuJC5leHBvcnRzLmNhbmNlbFN1YnNjcmliZUZpbG0gPSBmdW5jdGlvbiAoc2Vhc29uX2lkKSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL2ZvbGxvdy9kZWxcXFxcXFxcIjtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwic2Vhc29uX2lkXFxcXFxcXCI6IHNlYXNvbl9pZCxcXFxcbiAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmYsXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykucmVzdWx0LnRvYXN0O1xcXFxufVxcXFxuLyrmk43kvZznlKjmiLflhbPns7tcXFxcbmZpZDrnlKjmiLdtaWRcXFxcbmFjdDrmk43kvZzku6PnoIFcXFxcbnJlX3NyY++8muWFs+azqOadpea6kFxcXFxuKi9cXFxcbiQuZXhwb3J0cy5hZGRBdHRlbnRpb24gPSBmdW5jdGlvbiAobWlkLCBhY3QsIHJlX3NyYykge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi9tb2RpZnlcXFxcXFxcIjtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwiZmlkXFxcXFxcXCI6IG1pZCxcXFxcbiAgICAgICAgXFxcXFxcXCJhY3RcXFxcXFxcIjogYWN0LFxcXFxuICAgICAgICBcXFxcXFxcInJlX3NyY1xcXFxcXFwiOiByZV9zcmMsXFxcXG4gICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXFxcbn1cXFxcbi8vIOenu+WKqOWFs+azqOeUqOaIt+WIhue7hFxcXFxuJC5leHBvcnRzLm1vdmVVc2VycyA9IGZ1bmN0aW9uIChiZWZvcmVUYWdpZHMsIGFmdGVyVGFnaWRzLCBmaWRzKSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZ3MvbW92ZVVzZXJzXFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcImJlZm9yZVRhZ2lkc1xcXFxcXFwiOiBiZWZvcmVUYWdpZHMudG9TdHJpbmcoKSxcXFxcbiAgICAgICAgXFxcXFxcXCJhZnRlclRhZ2lkc1xcXFxcXFwiOiBhZnRlclRhZ2lkcy50b1N0cmluZygpLFxcXFxuICAgICAgICBcXFxcXFxcImZpZHNcXFxcXFxcIjogZmlkcy50b1N0cmluZygpLFxcXFxuICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxcXG59XFxcXG4vLyDojrflj5bnlKjmiLflhbPns7tcXFxcbiQuZXhwb3J0cy5nZXRSZWxhdGlvbiA9IGZ1bmN0aW9uIChtaWQpIHtcXFxcbiAgICAvLyBodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hY2MvcmVsYXRpb24/bWlkPSzml6fmjqXlj6NcXFxcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0V2JpRW5jKHsgbWlkOiBtaWQgfSk7XFxcXG4gICAgaW5mb0xpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FjYy9yZWxhdGlvbj8nICsgcGFybXM7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChpbmZvTGluaywge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKS5kYXRhXFxcXG59XFxcXG4vLyDmn6Xor6Lnm67moIfnlKjmiLfmiYDlnKjnmoTliIbnu4RcXFxcbiQuZXhwb3J0cy5nZXRVc2VyR3JvdXAgPSBmdW5jdGlvbiAobWlkKSB7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZy91c2VyP2ZpZD1cXFxcXFxcIiArIG1pZCwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKS5kYXRhXFxcXG59XFxcXG4vLyDojrflj5blhbPms6jliIbnu4RcXFxcbiQuZXhwb3J0cy5nZXRNeUF0dGVudGlvbkdyb3VwTGlzdCA9IGZ1bmN0aW9uICgpIHtcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZ3M/anNvbnA9anNvbnBcXFxcXFxcIiwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKS5kYXRhO1xcXFxufVxcXFxuLy8g5piv5ZCm54K56LWeXFxcXG4kLmV4cG9ydHMuaGFzTGlrZSA9IGZ1bmN0aW9uIChhaWQpIHtcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvaGFzL2xpa2VcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBhaWRcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKS5kYXRhXFxcXG59XFxcXG4vLyDmmK/lkKbmlLbol49cXFxcbiQuZXhwb3J0cy5oYXNGYXZvdXIgPSBmdW5jdGlvbiAoYWlkKSB7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvZmF2L3ZpZGVvL2Zhdm91cmVkXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYWlkXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YS5mYXZvdXJlZFxcXFxufVxcXFxuLy8g6KeG6aKR54K56LWeXFxcXG4kLmV4cG9ydHMuc2V0TGlrZSA9IGZ1bmN0aW9uIChhaWQsIGRlYWxXYXkpIHtcXFxcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXFxcbiAgICBsZXQgcmVzID0gcG9zdChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2xpa2VcXFxcXFxcIiwge1xcXFxuICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBhaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImxpa2VcXFxcXFxcIjogZGVhbFdheSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxcXG59XFxcXG4vLyDojrflj5bmlLbol4/liJfooahcXFxcbiQuZXhwb3J0cy5nZXRDb2xsZWN0aW9uR3JvdXBMaXN0ID0gZnVuY3Rpb24gKCkge1xcXFxuICAgIHJldHVybiBjb2xsZWN0aW9ucyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFxcXFxcIiwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YTtcXFxcbn1cXFxcbi8vIOaUtuiXjy/lj5bmtojop4bpopFBUElcXFxcbiQuZXhwb3J0cy5zZXRGYXZvdXIgPSBmdW5jdGlvbiAoYWlkLCBhZGRfbWVkaWFfaWRzLCBkZWxfbWVkaWFfaWRzKSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHJlcyA9IHBvc3QoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9tZWRpYWxpc3QvZ2F0ZXdheS9jb2xsL3Jlc291cmNlL2RlYWxcXFxcXFxcIiwge1xcXFxuICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcInJpZFxcXFxcXFwiOiBhaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiYWRkX21lZGlhX2lkc1xcXFxcXFwiOiBhZGRfbWVkaWFfaWRzLnRvU3RyaW5nKCksXFxcXG4gICAgICAgICAgICBcXFxcXFxcImRlbF9tZWRpYV9pZHNcXFxcXFxcIjogZGVsX21lZGlhX2lkcy50b1N0cmluZygpLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmZcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcXFxufVxcXFxuLy8g6I635Y+W6KeG6aKR5omA5Zyo5pS26JeP5aS5XFxcXG4kLmV4cG9ydHMuZ2V0RmF2b3VySWRMaXN0ID0gZnVuY3Rpb24gKGFpZCwgdXNlck1pZCkge1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2NyZWF0ZWQvbGlzdC1hbGxcXFxcXFxcIjtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiAyLFxcXFxuICAgICAgICBcXFxcXFxcInJpZFxcXFxcXFwiOiBhaWQsXFxcXG4gICAgICAgIFxcXFxcXFwidXBfbWlkXFxcXFxcXCI6IHVzZXJNaWQsXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGZhdm91cklkTGlzdCA9IFtdO1xcXFxuICAgIEpTT04ucGFyc2UocmVzKS5kYXRhLmxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xcXFxuICAgICAgICBpZiAoaXRlbS5mYXZfc3RhdGUgPT0gMSkge1xcXFxuICAgICAgICAgICAgZmF2b3VySWRMaXN0LnB1c2goaXRlbS5pZCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBmYXZvdXJJZExpc3Q7XFxcXG59XFxcXG4vLyDng63mmKDliafpm4bml7bpl7TovbRcXFxcbiQuZXhwb3J0cy5nZXRNb3ZpZXMgPSBmdW5jdGlvbiAodHlwZSwgYmVmb3JlLCBhZnRlcikge1xcXFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL3RpbWVsaW5lXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlc1xcXFxcXFwiOiB0eXBlLFxcXFxuICAgICAgICBcXFxcXFxcImJlZm9yZVxcXFxcXFwiOiBiZWZvcmUsXFxcXG4gICAgICAgIFxcXFxcXFwiYWZ0ZXJcXFxcXFxcIjogYWZ0ZXJcXFxcbiAgICB9KVxcXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKVxcXFxuICAgIHJldHVybiByZXMucmVzdWx0XFxcXG59XFxcXG4vLyDojrflj5bkuJPmoI/mlofnq6BcXFxcbiQuZXhwb3J0cy5nZXRVc2VyQXJ0aWNsZSA9IGZ1bmN0aW9uICh1cE1pZCwgcGFnZSkge1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hcnRpY2xlXFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcIm1pZFxcXFxcXFwiOiB1cE1pZCxcXFxcbiAgICAgICAgXFxcXFxcXCJwblxcXFxcXFwiOiBwYWdlLFxcXFxuICAgICAgICBcXFxcXFxcInBzXFxcXFxcXCI6IDEyLFxcXFxuICAgICAgICBcXFxcXFxcInNvcnRcXFxcXFxcIjogJ3B1Ymxpc2hfdGltZSdcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhO1xcXFxufVxcXFxuLy8g6I635Y+W5Yqo5oCB5pWw5o2uXFxcXG4kLmV4cG9ydHMuZ2V0RHluYW1pY0RhdGEgPSBmdW5jdGlvbiAoZnJvbSwgdXBNaWQpIHtcXFxcbiAgICB2YXIgbmV4dEluZm8gPSB7fTtcXFxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgICAgIGlmIChmcm9tID09ICd1cFNwYWNlJykge1xcXFxuICAgICAgICAgICAgdmFyIHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9zcGFjZT9vZmZzZXQ9Jmhvc3RfbWlkPVxcXFxcXFwiICsgdXBNaWQgKyBcXFxcXFxcIiZ0aW1lem9uZV9vZmZzZXQ9LTQ4MFxcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9hbGw/dGltZXpvbmVfb2Zmc2V0PS00ODAmdHlwZT1hbGxcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsYXRlbmV3cyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICBuZXh0SW5mby5vZmZzZXQgPSBsYXRlbmV3cy5vZmZzZXQ7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgaWYgKGZyb20gPT0gJ3VwU3BhY2UnKSB7XFxcXG4gICAgICAgICAgICB2YXIgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL3NwYWNlP29mZnNldD1cXFxcXFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KE1ZX1BBR0UpKS5vZmZzZXQgKyBcXFxcXFxcIiZob3N0X21pZD1cXFxcXFxcIiArIHVwTWlkICsgXFxcXFxcXCImdGltZXpvbmVfb2Zmc2V0PS00ODBcXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3dlYi1keW5hbWljL3YxL2ZlZWQvYWxsP3RpbWV6b25lX29mZnNldD0tNDgwJnR5cGU9YWxsJm9mZnNldD1cXFxcXFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KE1ZX1BBR0UpKS5vZmZzZXQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgIG5leHRJbmZvLm9mZnNldCA9IGxhdGVuZXdzLm9mZnNldDtcXFxcbiAgICB9XFxcXG4gICAgc3RvcmFnZTAucHV0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSArIDEpLCBuZXh0SW5mbyk7XFxcXG4gICAgcmV0dXJuIGxhdGVuZXdzO1xcXFxufVxcXFxuXFxcXG4vLyDigJTigJTnibnliKvnmoTooYzkuLrjgIHlt6Xlhbflh73mlbDigJTigJRcXFxcbi8vIOWxleekuuWKqOaAgeaVsOaNrijov5Tlm57lh73mlbDmlrnms5XnmoTlj6/miafooYzlrZfnrKbkuLIpXFxcXG4kLmV4cG9ydHMuc2hvd0R5bmFtaWNEYXRhID0gZnVuY3Rpb24gKCkge1xcXFxuICAgIHJldHVybiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXFxcbiAgICAgICAgbGF0ZW5ld3MuaXRlbXMuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9BVicpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyDmipXnqL/op4bpopHvvIjlvZPliY3lj5HluIPvvIniiJpcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJy0nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX2FjdGlvbiArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyDkuI3kuIDlrprmnInmloflrZfllYpcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z5Liq5LiN6IO955SobG9uZ190ZXh0XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmJhc2ljLmNvbW1lbnRfaWRfc3RyLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj7nlZnoqIA6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5jb21tZW50LmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXFxcXFx0XFxcXFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nTGluay7liqjmgIHotrPov7ksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfRk9SV0FSRCcpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyDlvJXnlKjvvIzlpJrlh7rkuoZvcmln5oyH5ZCR5LiA5LiqKOi/h+WOuynlt7Llj5HluIPnmoTop4bpopEs5YeG56Gu55qE6K+05piv5byV55So5LmL5YmN55qE5biW5a2Q5LiN5LiA5a6a5piv6KeG6aKR4oiaXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFxcXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXFxcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS5n+aYr+e6r+aWh+Wtl++8jOWboOS4uuWPquaYr+aWh+WtlyvlvJXnlKjml6nlt7LmipXnqL/nmoTop4bpopFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAvLyDlvJXnlKjnmoTlhoXlrrnigJTigJTmiKrmlq3vvIjmoLnmja7kuI3lkIznmoTlvJXnlKjnsbvlnovov5vooYzlpITnkIbvvIlcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJzxzbWFsbD48c21hbGw+5LiL6Z2i5YaF5a655p2l6Ieq5byV55So55qE5biW5a2QLHVw5pivOjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcXFxcXCI+JyArIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSArICc8L2E+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOinhumikeivtOivtFxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0Lm9yaWcudHlwZSA9PSAnRFlOQU1JQ19UWVBFX1dPUkQnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOaWh+Wtl+ivtOivtFxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOivhOiuumlk5p2l5rqQ6YO95LiN5LiA5qC3XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Qub3JpZy5pZF9zdHIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g57qv5paH5a2XXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfRFJBVycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g5byV55So5Zu+54mH6K+06K+0XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFxcXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXFxcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxMVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18zX3NxdWFyZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnNyYyArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKCflj6/og73ov5jmnInmnKrpgILphY3nmoTor7Tor7TnsbvlnosnKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8g5YiG5YmyXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX1dPUkQnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g57qv5paH5a2XXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFxcXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXFxcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0RSQVcnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g5Zu+54mH6K+06K+0XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFxcXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXFxcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOebuOewv++8iOWbvueJh+WKqOaAge+8iVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTFcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5kcmF3Lml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzNfc3F1YXJlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS5zcmMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj7nlZnoqIA6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5jb21tZW50LmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXFxcXFx0XFxcXFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nTGluay7liqjmgIHotrPov7ksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSlcXFxcbn1cXFxcbi8vIOaXtumXtOaXpeacn+i9rOaNouWHveaVsFxcXFxuJC5leHBvcnRzLnRpbWVDb252ZXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcXFxcbiAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGUsIHQpIHtcXFxcbiAgICAgICAgZSA9IG5ldyBEYXRlKGUgKiAxMDAwKTsgLy/ml7bpl7TmiLPkuLoxMOS9jemcgCoxMDAw77yM5pe26Ze05oiz5Li6MTPkvY3nmoTor53kuI3pnIDkuZgxMDAwXFxcXG4gICAgICAgIHJldHVybiB0LnJlcGxhY2UoL3l5eXl8WVlZWS8sIGUuZ2V0RnVsbFllYXIoKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC95eXxZWS8sIHIoZS5nZXRGdWxsWWVhcigpICUgMTAwLCAyKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9tbXxNTS8sIHIoZS5nZXRNb250aCgpICsgMSwgMikpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvbXxNL2csIGUuZ2V0TW9udGgoKSArIDEpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvZGR8REQvLCByKGUuZ2V0RGF0ZSgpLCAyKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9kfEQvZywgZS5nZXREYXRlKCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvaGh8SEgvLCByKGUuZ2V0SG91cnMoKSwgMikpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvaHxIL2csIGUuZ2V0SG91cnMoKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9paXxJSS8sIHIoZS5nZXRNaW51dGVzKCksIDIpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2l8SS9nLCBlLmdldE1pbnV0ZXMoKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9zc3xTUy8sIHIoZS5nZXRTZWNvbmRzKCksIDIpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL3N8Uy9nLCBlLmdldFNlY29uZHMoKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC93L2csIGUuZ2V0RGF5KCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvVy9nLCBbXFxcXFxcXCLml6VcXFxcXFxcIiwgXFxcXFxcXCLkuIBcXFxcXFxcIiwgXFxcXFxcXCLkuoxcXFxcXFxcIiwgXFxcXFxcXCLkuIlcXFxcXFxcIiwgXFxcXFxcXCLlm5tcXFxcXFxcIiwgXFxcXFxcXCLkupRcXFxcXFxcIiwgXFxcXFxcXCLlha1cXFxcXFxcIl1bZS5nZXREYXkoKV0pXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gcihlLCB0KSB7XFxcXG4gICAgICAgIGZvciAodmFyIHIgPSAwLCBuID0gdCAtIChlICsgXFxcXFxcXCJcXFxcXFxcIikubGVuZ3RoOyByIDwgbjsgcisrKSBlID0gXFxcXFxcXCIwXFxcXFxcXCIgKyBlO1xcXFxuICAgICAgICByZXR1cm4gZSArIFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGZvcm1hdERhdGUodGltZSwgJ1lZWVktTU0tREQgaGg6aWk6c3MnKTtcXFxcbiAgICAvLyBjb25zb2xlLmxvZyhmb3JtYXREYXRlKDE2NjQwODk1MzIsICdZWVlZLU1NLUREIGhoOmlpOnNzJykpO1xcXFxufVxcXFxuLy8g56eS5pWw5YiG6ZKf6KGo6L6+6L2s5o2i5Ye95pWwXFxcXG4kLmV4cG9ydHMuZm9ybWF0U2Vjb25kcyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XFxcXG4gICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7IC8vIOiuoeeul+WIhumSn+aVsFxcXFxuICAgIGxldCByZW1haW5pbmdTZWNvbmRzID0gc2Vjb25kcyAlIDYwOyAvLyDorqHnrpfliankvZnnmoTnp5LmlbBcXFxcbiAgICBsZXQgZm9ybWF0dGVkVGltZSA9IGAke21pbnV0ZXN9OiR7U3RyaW5nKHJlbWFpbmluZ1NlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyl9YDtcXFxcbiAgICByZXR1cm4gZm9ybWF0dGVkVGltZTtcXFxcbn1cXFxcblxcXFxuLy8gQuermVdiaeetvuWQjeeul+azlShBZnRlciAyMDIzLTMsZ2V0IHJlcXVlc3Qgd2l0aCB3YmkuKVxcXFxuJC5leHBvcnRzLmdldFdiaUVuYyA9IGZ1bmN0aW9uIChxdWVyeUpzb24pIHtcXFxcbiAgICBjb25zdCBtaXhpbktleUVuY1RhYiA9IFtcXFxcbiAgICAgICAgNDYsIDQ3LCAxOCwgMiwgNTMsIDgsIDIzLCAzMiwgMTUsIDUwLCAxMCwgMzEsIDU4LCAzLCA0NSwgMzUsIDI3LCA0MywgNSwgNDksXFxcXG4gICAgICAgIDMzLCA5LCA0MiwgMTksIDI5LCAyOCwgMTQsIDM5LCAxMiwgMzgsIDQxLCAxMywgMzcsIDQ4LCA3LCAxNiwgMjQsIDU1LCA0MCxcXFxcbiAgICAgICAgNjEsIDI2LCAxNywgMCwgMSwgNjAsIDUxLCAzMCwgNCwgMjIsIDI1LCA1NCwgMjEsIDU2LCA1OSwgNiwgNjMsIDU3LCA2MiwgMTEsXFxcXG4gICAgICAgIDM2LCAyMCwgMzQsIDQ0LCA1MlxcXFxuICAgIF07XFxcXG5cXFxcbiAgICAvLyDlr7kgaW1nS2V5IOWSjCBzdWJLZXkg6L+b6KGM5a2X56ym6aG65bqP5omT5Lmx57yW56CBXFxcXG4gICAgZnVuY3Rpb24gZ2V0TWl4aW5LZXkob3JpZykge1xcXFxuICAgICAgICBsZXQgdGVtcCA9ICcnO1xcXFxuICAgICAgICBtaXhpbktleUVuY1RhYi5mb3JFYWNoKChuKSA9PiB7XFxcXG4gICAgICAgICAgICB0ZW1wICs9IG9yaWdbbl1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHJldHVybiB0ZW1wLnNsaWNlKDAsIDMyKTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvLyDkuLror7fmsYLlj4LmlbDov5vooYwgd2JpIOetvuWQjVxcXFxuICAgIGZ1bmN0aW9uIGVuY1diaShwYXJhbXMsIGltZ19rZXksIHN1Yl9rZXkpIHtcXFxcbiAgICAgICAgY29uc3QgbWl4aW5fa2V5ID0gZ2V0TWl4aW5LZXkoaW1nX2tleSArIHN1Yl9rZXkpLFxcXFxuICAgICAgICAgICAgY3Vycl90aW1lID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCksXFxcXG4gICAgICAgICAgICBjaHJfZmlsdGVyID0gL1shJ1xcXFxcXFxcKFxcXFxcXFxcKSpdL2dcXFxcbiAgICAgICAgbGV0IHF1ZXJ5ID0gW107XFxcXG4gICAgICAgIHBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7IHd0czogY3Vycl90aW1lIH0pOyAgICAvLyDmt7vliqAgd3RzIOWtl+autVxcXFxuICAgICAgICAvLyDmjInnhacga2V5IOmHjeaOkuWPguaVsFxcXFxuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLnNvcnQoKS5mb3JFYWNoKChrZXkpID0+IHtcXFxcbiAgICAgICAgICAgIHF1ZXJ5LnB1c2goXFxcXG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgK1xcXFxuICAgICAgICAgICAgICAgICc9JyArXFxcXG4gICAgICAgICAgICAgICAgLy8g6L+H5rukIHZhbHVlIOS4reeahCBcXFxcXFxcIiEnKCkqXFxcXFxcXCIg5a2X56ymXFxcXG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KCgnJyArIHBhcmFtc1trZXldKS5yZXBsYWNlKGNocl9maWx0ZXIsICcnKSlcXFxcbiAgICAgICAgICAgIClcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5qb2luKCcmJyk7XFxcXG4gICAgICAgIGNvbnN0IHdiaV9zaWduID0gbWQ1KHF1ZXJ5ICsgbWl4aW5fa2V5KTsgLy8g6K6h566XIHdfcmlkXFxcXG4gICAgICAgIHJldHVybiBxdWVyeSArICcmd19yaWQ9JyArIHdiaV9zaWduO1xcXFxuICAgIH1cXFxcblxcXFxuICAgIC8vIOiOt+WPluacgOaWsOeahCBpbWdfa2V5IOWSjCBzdWJfa2V5XFxcXG4gICAgZnVuY3Rpb24gZ2V0V2JpS2V5cygpIHtcXFxcbiAgICAgICAgY29uc3QganNvbl9jb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXYnLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcXFxcbiAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgIGltZ191cmwgPSBqc29uX2NvbnRlbnQud2JpX2ltZy5pbWdfdXJsO1xcXFxuICAgICAgICBzdWJfdXJsID0ganNvbl9jb250ZW50LndiaV9pbWcuc3ViX3VybDtcXFxcbiAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgIGltZ19rZXk6IGltZ191cmwuc3Vic3RyaW5nKGltZ191cmwubGFzdEluZGV4T2YoJy8nKSArIDEsIGltZ191cmwubGVuZ3RoKS5zcGxpdCgnLicpWzBdLFxcXFxuICAgICAgICAgICAgc3ViX2tleTogc3ViX3VybC5zdWJzdHJpbmcoc3ViX3VybC5sYXN0SW5kZXhPZignLycpICsgMSwgc3ViX3VybC5sZW5ndGgpLnNwbGl0KCcuJylbMF1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuICAgIGNvbnN0IHdiaV9rZXlzID0gZ2V0V2JpS2V5cygpO1xcXFxuXFxcXG4gICAgY29uc3QgcXVlcnkgPSBlbmNXYmkoXFxcXG4gICAgICAgIHF1ZXJ5SnNvbixcXFxcbiAgICAgICAgd2JpX2tleXMuaW1nX2tleSxcXFxcbiAgICAgICAgd2JpX2tleXMuc3ViX2tleVxcXFxuICAgICk7XFxcXG4gICAgcmV0dXJuIHF1ZXJ5O1xcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwidmlkZW9QYWdlXFxcIixcXFwicGF0aFxcXCI6XFxcInZpZGVvXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbi8vIOmihOWkhOeQhlxcXFxucHV0TXlWYXIoJ+WKn+iDveaKmOWPoCcsICflhbMnKTtcXFxcbmltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxcXG5haWQgPSBNWV9QQVJBTVMuYWlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbi8vIGJ2aWQgPSBNWV9QQVJBTVMuYnZpZCArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5taWQgPSBNWV9QQVJBTVMubWlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbnZhciB7Zm9ybWF0U2Vjb25kc309JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKTtcXFxcbnRyeSB7XFxcXG4gICAgLy/ojrflj5bop4bpopHliIZQ5L+h5oGvXFxcXG4gICAgdmFyIHAgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFxcXFxcIiArIGFpZCkpLmRhdGE7XFxcXG4gICAgaGFzTGlrZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuaGFzTGlrZShhaWQpO1xcXFxuICAgIGhhc0Zhdm91ciA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuaGFzRmF2b3VyKGFpZCk7XFxcXG4gICAgc2V0UGFnZVRpdGxlKHAudGl0bGUpO1xcXFxuICAgIHNldFBhZ2VQaWNVcmwocC5waWMgKyAnQFJlZmVyZXI9Jyk7XFxcXG4gICAgLy8g5Y+q5pyJMVDnmoTmg4XlhrVcXFxcbiAgICBpZiAocC5wYWdlcy5sZW5ndGggPT0gMSkge1xcXFxuICAgICAgICBjaWQgPSBwLnBhZ2VzWzBdLmNpZDtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcXFxuICAgICAgICAgICAgICAgIC8vIOecn+emu+S6huS4quWkp+iwse+8jOaYjuaYjuabv+aNouaOieS6hu+8jHVh5a2X56ym5Liy5Y+I5Y+Y5Zue5p2l5LqG77yM5Y+I6KaB5aSE55CG5LiA5qyhXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfSwgYWlkICsgXFxcXFxcXCJcXFxcXFxcIiwgY2lkICsgXFxcXFxcXCJcXFxcXFxcIiwgJzExMicpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGRlc2M6J+aSreaUvumHjzonK3Auc3RhdC52aWV3KydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZXmlbA6JytwLnN0YXQuZGFubWFrdSsnXFxcXFxcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS50aW1lQ29udmVydChwLmN0aW1lKSxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXFxcXFwiYmx1ZVxcXFxcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIC8vIOiZveeEtuWPquaciTFQLOS9huWPr+iDveWkhOS6juWQiOmbhuinhumikeS4re+8jOW+gOW+gOWcqHVw5LiK5Lyg5Lit5bGe5LqO5LiA5aWX5b2x54mHXFxcXG4gICAgICAgIGlmIChwLnVnY19zZWFzb24pIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OB5omA5bGe5ZCI6ZuG77yaPGEgaHJlZj1cXFxcXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uVmllZG9cXFxcXFxcIj4nK3AudWdjX3NlYXNvbi50aXRsZSsnPC9hPicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uVmllZG8jbm9IaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTogeyBcXFxcXFxcInRleHRTaXplXFxcXFxcXCI6IDEyLCBhaWQ6IGFpZCB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQubGlrZSxcXFxcbiAgICAgICAgICAgIGltZzogaGFzTGlrZSA9PSAxID8gaW1nTGluay7lt7LngrnotZ4gOiBpbWdMaW5rLuacqueCuei1nixcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5saWtlTG9naWMoYWlkKVxcXFxuICAgICAgICAgICAgfSwgYWlkKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogJ3NldExpa2UnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQuZmF2b3JpdGUsXFxcXG4gICAgICAgICAgICBpbWc6IGhhc0Zhdm91ciA/IGltZ0xpbmsu5bey5pS26JePIDogaW1nTGluay7mnKrmlLbol48sXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdXBNaWQgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTWlkO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmZhdm91ckxvZ2ljKGFpZCwgdXBNaWQpXFxcXG4gICAgICAgICAgICB9LCBhaWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0RmF2b3VyJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+eojeWQjuWGjeeciycsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu56iN5ZCO5YaN55yLLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmp1ZGdlVG92aWV3KGFpZClcXFxcbiAgICAgICAgICAgIH0sIGFpZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvor4TorronLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJpZFxcXFxcXFwiOiBhaWQsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IDFcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC5kZXNjLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIC8vIOWtmOWcqOWkmumbhuWIhlBcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgZGVzYzon5pKt5pS+6YePOicrcC5zdGF0LnZpZXcrJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOW8ueW5leaVsDonK3Auc3RhdC5kYW5tYWt1KydcXFxcXFxcXG7lj5HluIPml6XmnJ86JyskLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnRpbWVDb252ZXJ0KHAuY3RpbWUpLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHApID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKChwKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsb25nX3RleHRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHApXFxcXG4gICAgICAgICAgICB9LCBwKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXFxcXFwiYmx1ZVxcXFxcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0Lmxpa2UsXFxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikubGlrZUxvZ2ljKGFpZClcXFxcbiAgICAgICAgICAgIH0sIGFpZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRMaWtlJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0LmZhdm9yaXRlLFxcXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHVwTWlkID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlck1pZDtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5mYXZvdXJMb2dpYyhhaWQsIHVwTWlkKVxcXFxuICAgICAgICAgICAgfSwgYWlkKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogJ3NldEZhdm91cidcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfnqI3lkI7lho3nnIsnLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLueojeWQjuWGjeeciyxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5qdWRnZVRvdmlldyhhaWQpXFxcXG4gICAgICAgICAgICB9LCBhaWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL6K+E6K66JyxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiAxXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn6YCJ6ZuG5YiX6KGoJyxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPuWFsScgKyBwLnZpZGVvcyArICfmnaHop4bpopE8L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7liJfooagsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcC5wYWdlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnBhcnQsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzpmb3JtYXRTZWNvbmRzKGl0ZW0uZHVyYXRpb24pLFxcXFxuICAgICAgICAgICAgICAgIC8vIGltZzppbWdMaW5rLuWIhlDliJfooajpobksXFxcXG4gICAgICAgICAgICAgICAgaW1nOml0ZW0uZmlyc3RfZnJhbWUrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfSwgYWlkICsgXFxcXFxcXCJcXFxcXFxcIiwgY2lkICsgXFxcXFxcXCJcXFxcXFxcIiwgJzExNicpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coZSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcXFxuICAgICAgICBpbWc6ICdodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZ2VuZXJhbC9mN2I2NjcwMTFhNDY2MTU3MzJjNzAxZjRiYjFkMDdmNzkzZjhkMWRmLnBuZ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAn5aSn5qaC546H6KeG6aKR6KKr5bCB56aB77yM5oiW6ICFdXDlt7Lot5Hot69+JyxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImxvbmdfdGV4dFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLor4TorrpcXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ29tbWVudHNcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIGlkID0gTVlfUEFSQU1TLmlkO1xcXFxudmFyIHR5cGUgPSBNWV9QQVJBTVMudHlwZTtcXFxcbmxvZyhpZCk7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgLy8g6LKM5Ly85pqC5pe25Y+q6IO95paH5a2XK+aVsOWtl1xcXFxuICAgIGQudW5zaGlmdCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuWPkeadoeivhOiuuuWQp1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKGlkLHR5cGUpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkuY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXFxcbiAgICAgICAgICAgIHBvc3QoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5L2FkZFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogdHlwZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJvaWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIm1lc3NhZ2VcXFxcXFxcIjogaW5wdXRcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkuY29va2llXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgfSwgaWQsdHlwZSlcXFxcbiAgICB9KVxcXFxufVxcXFxubGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldENvbW1lbnRzKGlkLHR5cGUsTVlfUEFHRSk7XFxcXG4vLyBsb2coZGF0YSk7XFxcXG5pZihkYXRhKXtcXFxcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5tZW1iZXIudW5hbWUsXFxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0ubWVtYmVyLmF2YXRhcisnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxcXG4gICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicraXRlbS5yZXBseV9jb250cm9sLmxvY2F0aW9uICsgXFxcXFxcXCIgXFxcXFxcXCIgKyBpdGVtLnJlcGx5X2NvbnRyb2wudGltZV9kZXNjKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgbWlkOiBpdGVtLm1lbWJlci5taWQsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcXFxuICAgICAgICAgICAgICAgIGZhY2U6IGl0ZW0ubWVtYmVyLmF2YXRhclxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uY29udGVudC5tZXNzYWdlLFxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pXFxcXG59ZWxzZXtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+WlveWDj+ayoeacieivhOiuuuS6huWVpu+8jO+8gScsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K6i6ZiF5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcInN1YnNjcmlwdGlvblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAoZ2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzEnKSA9PSAnMScpIHtcXFxcblxcXFxuwqAgwqAgdHlwZXJOYW1lID0gJ+i/veeVqic7XFxcXG5cXFxcbn0gZWxzZSB7XFxcXG5cXFxcbsKgIMKgIHR5cGVyTmFtZSA9ICfov73liacnO1xcXFxuXFxcXG59XFxcXG5cXFxcbmQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIHRpdGxlOiAn6L+955WqJyA9PSB0eXBlck5hbWUgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7ov73nlao8L2ZvbnQ+JyA6ICfov73nlaonLFxcXFxuXFxcXG7CoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHNldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJylcXFxcblxcXFxuwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFxuwqAgwqAgfSksXFxcXG5cXFxcbsKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcblxcXFxufSx7XFxcXG5cXFxcbsKgIMKgIHRpdGxlOiAn6L+95YmnJyA9PSB0eXBlck5hbWUgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7ov73liac8L2ZvbnQ+JyA6ICfov73liacnLFxcXFxuXFxcXG7CoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHNldEl0ZW0oJ+iuoumYheexu+WeiycsICcyJylcXFxcblxcXFxuwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFxuwqAgwqAgfSksXFxcXG5cXFxcbsKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcblxcXFxufSk7XFxcXG5cXFxcbnN1YnNjcmlwdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYmFuZ3VtaS9mb2xsb3cvbGlzdD90eXBlPVxcXFxcXFwiICsgZ2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzEnKSArIFxcXFxcXFwiJmZvbGxvd19zdGF0dXM9MCZwbj1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZwcz0xNSZ2bWlkPVxcXFxcXFwiICsgbWlkLCB7XFxcXG5cXFxcbsKgIMKgIGhlYWRlcnM6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxufSkpLmRhdGE7XFxcXG5cXFxcbmlmIChwYWdlID09IDEpIHtcXFxcblxcXFxuwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgdGl0bGU6IFxcXFxcXFwi5b2T5YmNXFxcXFxcXCIgKyB0eXBlck5hbWUgKyBcXFxcXFxcIuaVsOmHjzpcXFxcXFxcIiArIHN1YnNjcmlwdGlvbnMudG90YWwsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59XFxcXG5cXFxcbnN1YnNjcmlwdGlvbnMubGlzdC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuXFxcXG7CoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCB0aXRsZTogbGlzdC50aXRsZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgZGVzYzogbGlzdC5ldmFsdWF0ZS5zdWJzdHJpbmcoMCwgMTIpICsgJ+KAmOKAmOKAmeKAmeKApjxmb250IGNvbG9yPVxcXFxcXFwiIzFDMUMxQ1xcXFxcXFwiPuivpuaDhTwvZm9udD4nICsgJ1xcXFxcXFxcbicgKyBsaXN0LnNlYXNvbl90eXBlX25hbWUgKyAnfCcgKyAobGlzdC5hcmVhcz09PXVuZGVmaW5lZD8nJzpsaXN0LmFyZWFzWzBdLm5hbWUgKyAnXFxcXFxcXFxuJykgKyAobGlzdC5wcm9ncmVzcyA9PSAnJyA/ICflsJrmnKrop4LnnIsnIDogbGlzdC5wcm9ncmVzcykgKyAobGlzdC5uZXdfZXAuaW5kZXhfc2hvdz09PXVuZGVmaW5lZD8nJzonfCcrKGxpc3QubmV3X2VwLmluZGV4X3Nob3cubWF0Y2goL+abtOaWsHzljbPlsIYvKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPicgKyBsaXN0Lm5ld19lcC5pbmRleF9zaG93ICsgJzwvZm9udD4nOiBsaXN0Lm5ld19lcC5pbmRleF9zaG93KSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBzZWFzb25faWQ6IGxpc3Quc2Vhc29uX2lkXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgfSk7XFxcXG5cXFxcbn0pO1xcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlhbPms6jliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXR0ZW50aW9uXFxcIixcXFwicnVsZVxcXCI6XFxcImlmIChNWV9QQUdFID09IDEpIHtcXFxcblxcXFxuwqAgwqAgZm9jdXNHcm91cHM9JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRNeUF0dGVudGlvbkdyb3VwTGlzdCgpO1xcXFxuXFxcXG7CoCDCoCBwdXRNeVZhcigndGVtcElkJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMV0udGFnaWQpKTtcXFxcblxcXFxuwqAgwqAgZm9jdXNHcm91cHMuZm9yRWFjaChsaXN0ID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGFnaWQgPT0gZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMV0uaWQpKSA/IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+XFxcXFxcXCIgKyBsaXN0Lm5hbWUgKyBsaXN0LmNvdW50ICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIgOiBsaXN0Lm5hbWUgKyBsaXN0LmNvdW50LFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgobGlzdCkgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXRJdGVtKCflhbPms6jliIbnu4QnLCBKU09OLnN0cmluZ2lmeShsaXN0LnRhZ2lkKSk7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WIh+aNouWFs+azqOWIhue7hOS4ujpcXFxcXFxcIiArIGxpc3QubmFtZTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgbGlzdCksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pO1xcXFxuXFxcXG7CoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgLy8g5pyr5bC+6KGl5YWF5oKE5oKE5YWz5rOo5YiG57uEXFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiAn5oKE5oKE5YWz5rOoJyA9PSBnZXRJdGVtKCflhbPms6jliIbnu4QnLCBKU09OLnN0cmluZ2lmeShmb2N1c0dyb3Vwc1swXS5pZCkpID8gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0ncmVkJz7mgoTmgoTlhbPms6g8L2ZvbnQ+XFxcXFxcXCIgOiBcXFxcXFxcIuaChOaChOWFs+azqFxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHNldEl0ZW0oJ+WFs+azqOWIhue7hCcsIFxcXFxcXFwi5oKE5oKE5YWz5rOoXFxcXFxcXCIpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLlhbPms6jliIbnu4TkuLo6XFxcXFxcXCIgKyBcXFxcXFxcIuaChOaChOWFs+azqFxcXFxcXFwiO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcblxcXFxuwqAgwqAgfSx7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbGluZSdcXFxcblxcXFxuwqAgwqAgfSk7XFxcXG5cXFxcbn1cXFxcblxcXFxuaWYgKGdldEl0ZW0oJ+WFs+azqOWIhue7hCcpPT0n5oKE5oKE5YWz5rOoJykge1xcXFxuXFxcXG7CoCDCoCBncm91cENvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vd2hpc3BlcnM/cG49XFxcXFxcXCIrcGFnZStcXFxcXFxcIiZwcz0yMCZqc29ucD1qc29ucFxcXFxcXFwiLCB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgfSkpLmRhdGEubGlzdDtcXFxcblxcXFxuwqAgwqAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBcXFxcXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXFxcXFwiICsgbGlzdC51bmFtZSArIFxcXFxcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFxcXFxcIiArIGxpc3Quc2lnbiArIFxcXFxcXFwiPC9zbWFsbD5cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1pZDogbGlzdC5taWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnVuYW1lLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBmYWNlOiBsaXN0LmZhY2VcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgfSk7XFxcXG5cXFxcbn1lbHNle1xcXFxuXFxcXG7CoCDCoCBncm91cENvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFnP21pZD1cXFxcXFxcIiArIG1pZCArIFxcXFxcXFwiJnRhZ2lkPVxcXFxcXFwiICsgZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgZ2V0TXlWYXIoJ3RlbXBJZCcpKSArIFxcXFxcXFwiJnBuPVxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwiJnBzPTIwJmpzb25wPWpzb25wXFxcXFxcXCIsIHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KSkuZGF0YTtcXFxcblxcXFxuwqAgwqAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBcXFxcXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXFxcXFwiICsgbGlzdC51bmFtZSArIFxcXFxcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFxcXFxcIiArIGxpc3Quc2lnbiArIFxcXFxcXFwiPC9zbWFsbD5cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1pZDogbGlzdC5taWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnVuYW1lLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBmYWNlOiBsaXN0LmZhY2VcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgfSk7XFxcXG5cXFxcbn1cXFxcblxcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlLbol4/liJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29sZWN0aW9uXFxcIixcXFwicnVsZVxcXCI6XFxcImlmIChwYWdlID09IDEpIHtcXFxcclxcXFxuICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6ICfmiJHliJvlu7rnmoTmlLbol4/lpLknID09IGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuaIkeWIm+W7uueahOaUtuiXj+WkuTwvZm9udD4nIDogJ+aIkeWIm+W7uueahOaUtuiXj+WkuScsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JylcXFxcclxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcclxcXFxuICAgICAgICB9KSxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXHJcXFxcbiAgICB9LCB7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6ICfnqI3lkI7lnKjnnIsnID09IGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPueojeWQjuWcqOecizwvZm9udD4nIDogJ+eojeWQjuWcqOeciycsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn56iN5ZCO5Zyo55yLJylcXFxcclxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcclxcXFxuICAgICAgICB9KSxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXHJcXFxcbiAgICB9KTtcXFxcclxcXFxufVxcXFxyXFxcXG5pZiAoZ2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpID09ICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSB7XFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIC8vIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXHJcXFxcbiAgICAgICAgICAgIH0sICk7XFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIGNvbGxlY3Rpb25zID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YzL2Zhdi9mb2xkZXIvbGlzdDRuYXZpZ2F0ZVxcXFxcXFwiLCB7XFxcXHJcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgfSkpLmRhdGE7XFxcXHJcXFxcbiAgICAgICAgZ3JvdXBzID0gY29sbGVjdGlvbnNbMF0ubWVkaWFMaXN0UmVzcG9uc2UubGlzdDtcXFxcclxcXFxuICAgICAgICBwdXRNeVZhcigndGVtcElkJywgSlNPTi5zdHJpbmdpZnkoZ3JvdXBzWzBdLmlkKSk7XFxcXHJcXFxcbiAgICAgICAgZ3JvdXBzLmZvckVhY2gobGlzdCA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5pZCA9PSBnZXRJdGVtKCfmlLbol4/lpLknLCBKU09OLnN0cmluZ2lmeShncm91cHNbMF0uaWQpKSA/IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+XFxcXFxcXCIgKyBsaXN0LnRpdGxlICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIgOiBsaXN0LnRpdGxlLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGxpc3QpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCfmlLbol4/lpLknLCBKU09OLnN0cmluZ2lmeShsaXN0LmlkKSk7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLmlLbol4/lpLnkuLo6XFxcXFxcXCIgKyBsaXN0LnRpdGxlO1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgfSwgbGlzdCksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxyXFxcXG4gICAgICAgICAgICB9KTtcXFxcclxcXFxuICAgICAgICB9KTtcXFxcclxcXFxuICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXHJcXFxcbiAgICAgICAgfSk7XFxcXHJcXFxcbiAgICAgICAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YzL2Zhdi9yZXNvdXJjZS9saXN0P21lZGlhX2lkPVxcXFxcXFwiICsgZ2V0SXRlbSgn5pS26JeP5aS5JywgZ2V0TXlWYXIoJ3RlbXBJZCcpKSArIFxcXFxcXFwiJnBuPVxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwiJnBzPTIwJmtleXdvcmQ9Jm9yZGVyPW10aW1lJnR5cGU9MCZ0aWQ9MCZwbGF0Zm9ybT13ZWImanNvbnA9anNvbnBcXFxcXFxcIiwge1xcXFxyXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIH0pKS5kYXRhLm1lZGlhcztcXFxcclxcXFxuICAgICAgICBncm91cENvbnRlbnQuZm9yRWFjaChsaXN0ID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnVVA6JyArIGxpc3QudXBwZXIubmFtZSArICdcXFxcXFxcXG4nICsgbGlzdC5pbnRybyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmlkLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC51cHBlci5taWRcXFxcclxcXFxuICAgICAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICAgICAgfSk7XFxcXHJcXFxcbiAgICAgICAgfSk7XFxcXHJcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXHJcXFxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+WFhOW8n++8jOS9oOehruiupOS9oOacieaUtuiXj+WQl++8jOW/q+WOu+aUtuiXj+S4gOS4quinhumikX4nKTtcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufSBlbHNlIHtcXFxcclxcXFxuICAgIGxhdGVyVmlld3MgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS90b3ZpZXcvd2ViP2pzb25wPWpzb25wXFxcXFxcXCIsIHtcXFxcclxcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXHJcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgIH0pKS5kYXRhO1xcXFxyXFxcXG4gICAgY291bnQgPSBsYXRlclZpZXdzLmNvdW50O1xcXFxyXFxcXG4gICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLlhbHmnIlcXFxcXFxcIiArIGNvdW50ICsgXFxcXFxcXCLmnaHlvoXnnIvop4bpopHorrDlvZVcXFxcXFxcIixcXFxcclxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxyXFxcXG4gICAgfSk7XFxcXHJcXFxcbiAgICBsYXRlclZpZXdzLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXFxcclxcXFxuICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcclxcXFxuICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXHJcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcclxcXFxuICAgICAgICAgICAgZGVzYzogJ1VQOicgKyBsaXN0Lm93bmVyLm5hbWUgKyAnXFxcXFxcXFxuJyArIGxpc3QuZGVzYyxcXFxcclxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBtaWQ6IGxpc3Qub3duZXIubWlkXFxcXHJcXFxcbiAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICB9KTtcXFxcclxcXFxuICAgIH0pO1xcXFxyXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Laz6L+5XFxcIixcXFwicGF0aFxcXCI6XFxcInRyYWNrXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBuZXh0SW5mbyA9IHt9O1xcXFxuXFxcXG5pZiAocGFnZSA9PSAxKSB7XFxcXG5cXFxcbsKgIMKgIGhpc3RvcmllcyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2hpc3RvcnkvY3Vyc29yP21heD0wJnZpZXdfYXQ9MCZidXNpbmVzcz1cXFxcXFxcIiwge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIH0pKS5kYXRhO1xcXFxuXFxcXG7CoCDCoCBuZXh0SW5mby5tYXggPSBoaXN0b3JpZXMuY3Vyc29yLm1heDtcXFxcblxcXFxuwqAgwqAgbmV4dEluZm8udmlld19hdCA9IGhpc3Rvcmllcy5jdXJzb3Iudmlld19hdDtcXFxcblxcXFxuwqAgwqAgbmV4dEluZm8uYnVzaW5lc3MgPSBoaXN0b3JpZXMuY3Vyc29yLmJ1c2luZXNzO1xcXFxuXFxcXG59IGVsc2Uge1xcXFxuXFxcXG7CoCDCoCBoaXN0b3JpZXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9oaXN0b3J5L2N1cnNvcj9tYXg9XFxcXFxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkubWF4ICsgXFxcXFxcXCImdmlld19hdD1cXFxcXFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KHBhZ2UpKS52aWV3X2F0ICsgXFxcXFxcXCImYnVzaW5lc3M9XFxcXFxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkuYnVzaW5lc3MsIHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KSkuZGF0YTtcXFxcblxcXFxuwqAgwqAgbmV4dEluZm8ubWF4ID0gaGlzdG9yaWVzLmN1cnNvci5tYXg7XFxcXG5cXFxcbsKgIMKgIG5leHRJbmZvLnZpZXdfYXQgPSBoaXN0b3JpZXMuY3Vyc29yLnZpZXdfYXQ7XFxcXG5cXFxcbsKgIMKgIG5leHRJbmZvLmJ1c2luZXNzID0gaGlzdG9yaWVzLmN1cnNvci5idXNpbmVzcztcXFxcblxcXFxufVxcXFxuXFxcXG5zdG9yYWdlMC5wdXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlICsgMSksIG5leHRJbmZvKTtcXFxcblxcXFxuaGlzdG9yaWVzLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXFxcblxcXFxuwqAgwqAgdmlld1RpbWU9cGJ0aW1lID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS50aW1lQ29udmVydChsaXN0LnZpZXdfYXQpO1xcXFxuXFxcXG7CoCDCoCBpZiAobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdhcnRpY2xlJykge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCAvLyDkuJPmoI/mlofnq6BcXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlcnNbMF0gKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXFxcXFxuJyApKyB2aWV3VGltZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaGlzdG9yeS5vaWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH0gZWxzZSBpZihsaXN0Lmhpc3RvcnkuYnVzaW5lc3MgPT0gJ2FydGljbGUtbGlzdCcpe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCAvLyDmlofnq6DliJfooajvvJ/vvIjlj43mraNpZOWtmOaUvuS9jee9ruS4jeS4gOagt++8iVxcXFxuXFxcXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyc1swXSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZURldGFpbFxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/dmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcXFxcXG4nICkrIHZpZXdUaW1lLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZDogbGlzdC5oaXN0b3J5LmNpZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgfWVsc2UgaWYobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdwZ2MnKXtcXFxcblxcXFxuwqAgwqAgwqAgwqAgLy8g57O75YiX5Ymn6ZuG77yI5Y2V6ZuG77yJXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2ZpbG1lcmppI2ltbWVyc2l2ZVRoZW1lI1xcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/bGlzdC50YWdfbmFtZSsnXFxcXFxcXFx0XFxcXFxcXFx0JytsaXN0Lm5ld19kZXNjKydcXFxcXFxcXG4nK3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXFxcXFxuJyt2aWV3VGltZSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVwX2lkOmxpc3QuaGlzdG9yeS5lcGlkXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH1lbHNlIHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgLy8g5pmu6YCadmlkZW9cXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlciArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP2xpc3QudGFnX25hbWUrJ1xcXFxcXFxcdFxcXFxcXFxcdCcrbGlzdC5uZXdfZGVzYysnXFxcXFxcXFxuJyt2aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxcXFxcbicrdmlld1RpbWUpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhaWQ6IGxpc3QuaGlzdG9yeS5vaWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxufSk7XFxcXG5cXFxcblxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Yqo5oCBXFxcIixcXFwicGF0aFxcXCI6XFxcImxhdGV0TmV3c1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG5cXFxcbn0pO1xcXFxuXFxcXG5sYXRlbmV3cz0kLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldER5bmFtaWNEYXRhKCdteUhvbWUnKTtcXFxcblxcXFxuZXZhbCgkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnNob3dEeW5hbWljRGF0YSgpKTtcXFxcblxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LiT5qCP5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImFjdGljbGVMaXN0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuXFxcXG52YXIgZD1bXTtcXFxcblxcXFxucGFnZT1NWV9QQUdFO1xcXFxuXFxcXG51cE1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuXFxcXG5hcnRpY2xlTGlzdD0kLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFVzZXJBcnRpY2xlKHVwTWlkLHBhZ2UpO1xcXFxuXFxcXG5hcnRpY2xlTnVtPWFydGljbGVMaXN0LmNvdW50O1xcXFxuXFxcXG5pZiAoYXJ0aWNsZU51bT09dW5kZWZpbmVkKSB7XFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiAn6L+ZdXDmsqHmnInkuJPmoI/mlofnq6AnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIH0pO1xcXFxuXFxcXG59ZWxzZXtcXFxcblxcXFxuwqAgwqAgbWF4UGFnZSA9IE1hdGguY2VpbChhcnRpY2xlTnVtIC8gYXJ0aWNsZUxpc3QucHMpO1xcXFxuXFxcXG7CoCDCoCBpZiAocGFnZSA8PSBtYXhQYWdlKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBhcnRpY2xlTGlzdC5wbiArICfpobVcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIGFydGljbGVOdW0gKyAn5p2h5pWw5o2uJyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgYXJ0aWNsZUxpc3QuYXJ0aWNsZXMuZm9yRWFjaChsaXN0ID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgcGJ0aW1lPSQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikudGltZUNvbnZlcnQobGlzdC5wdWJsaXNoX3RpbWUpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC50aXRsZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmJhbm5lcl91cmw9PScnPyAobGlzdC5pbWFnZV91cmxzKyAnQFJlZmVyZXI9Jyk6KGxpc3QuYmFubmVyX3VybCsgJ0BSZWZlcmVyPScpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPicrbGlzdC5zdGF0cy52aWV3KyfnnIvov4dcXFxcXFxcXHRcXFxcXFxcXHQnK2xpc3Quc3RhdHMubGlrZSsn5Zac5qyiXFxcXFxcXFx0XFxcXFxcXFx0JytsaXN0LnN0YXRzLmZhdm9yaXRlKyfmlLbol49cXFxcXFxcXG4nICsgcGJ0aW1lKyc8L3NtYWxsPicsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZURldGFpbFxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvLyDkuJPmoI/mlofnq6BpZFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZDogbGlzdC5pZFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH0pO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG59XFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFxcblxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LiT5qCP5paH56ugWDVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXJ0aWNsZURldGFpbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcblxcXFxudmFyIGQgPSBbXTtcXFxcblxcXFxucGFnZSA9IE1ZX1BBR0U7XFxcXG5cXFxcbmN2aWQgPSBNWV9QQVJBTVMuaWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuXFxcXG7CoCDCoCB1cmw6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3JlYWQvY3ZcXFxcXFxcIitjdmlkLFxcXFxuXFxcXG7CoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCBkZXNjOiBcXFxcXFxcIjEwMCUmJmZsb2F0XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNhbkJhY2s6IHRydWVcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG59KVxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIue7vOWQiOeDremXqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJob3RWaWRlb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9wb3B1bGFyP3BuPVxcXFxcXFwiICsgTVlfUEFHRSwge1xcXFxuXFxcXG7CoCDCoCBoZWFkZXJzOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkuY29va2llXFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxufSkpLmRhdGFcXFxcblxcXFxucmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcblxcXFxuwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGltZzogaXRlbS5waWMrIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgZGVzYzogaXRlbS5wdWJfbG9jYXRpb24sXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzJcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJhaWRcXFxcXFxcIjogaXRlbS5haWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXFxcXFwiY2lkXFxcXFxcXCI6IGl0ZW0uY2lkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIH0pXFxcXG5cXFxcbn0pXFxcXG5cXFxcblxcXFxuXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5ZOU5ZOp5pyA5paw56ug6IqCXFxcIixcXFwicGF0aFxcXCI6XFxcImdldFVwZGF0ZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcXFxuICAgIHNlYXNvbl9pZCA9IE1ZX1BBUkFNUy5zZWFzb25faWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXFxcbn0gZWxzZSB7XFxcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP2VwX2lkPScgKyBNWV9QQVJBTVMuZXBfaWQpKS5yZXN1bHQ7XFxcXG59XFxcXG7ov73liafml6XljoYgPSBEYXRhLm5ld19lcC5kZXNjO1xcXFxu5pu05paw6L+b5bqmID0gRGF0YS5uZXdfZXAudGl0bGU7XFxcXG7mm7TmlrDnirbmgIEgPSDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6ICfmm7TmlrDoh7MnICsgKOabtOaWsOi/m+W6pi5tYXRjaCgvW1xcXFxcXFxcdTRlMDAtXFxcXFxcXFx1OWZhNV0vKSA/IOabtOaWsOi/m+W6piA6ICgn56ysJyArICjmm7TmlrDov5vluqYgPT0gJycgPyAwIDog5pu05paw6L+b5bqmKSkgKyAn6K+dJylcXFxcbnNldFJlc3VsdCjmm7TmlrDnirbmgIEpO1xcXCJ9LHtcXFwibmFtZVxcXCI6XFxcInVw5ZCI6ZuG6KeG6aKRXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbGxlY3Rpb25WaWVkb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG4vLyDpooTlpITnkIZcXFxcbnB1dE15VmFyKCflip/og73mipjlj6AnLCAn5YWzJyk7XFxcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcXFxuYWlkID0gTVlfUEFSQU1TLmFpZCArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4vLyBidmlkID0gTVlfUEFSQU1TLmJ2aWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuLy8gbWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG50cnkge1xcXFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhO1xcXFxuICAgIC8vIOWQiOmbhuS/oeaBr1xcXFxuICAgIHZhciB2aWRlb0RhdGEgPSBwLnVnY19zZWFzb247XFxcXG4gICAgc2V0UGFnZVRpdGxlKHZpZGVvRGF0YS50aXRsZSk7XFxcXG4gICAgc2V0UGFnZVBpY1VybCh2aWRlb0RhdGEuY292ZXIgKyAnQFJlZmVyZXI9Jyk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHZpZGVvRGF0YS50aXRsZSxcXFxcbiAgICAgICAgZGVzYzp2aWRlb0RhdGEuaW50cm8sXFxcXG4gICAgICAgIGltZzogdmlkZW9EYXRhLmNvdmVyICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChpbnRybykgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgoaW50cm8pID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpbnRybyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICB9LCBpbnRybylcXFxcbiAgICAgICAgfSwgdmlkZW9EYXRhLmludHJvKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcImJsdWVcXFxcXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiLFxcXFxuICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD7lhbHmnIknICsgdmlkZW9EYXRhLmVwX2NvdW50ICsgJ+adoeinhumikeaVsOaNrjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgbWlkOiBwLm93bmVyLm1pZCxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxcXG4gICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgIH0pO1xcXFxuICAgIHZhciBpbmRleCA9IDE7XFxcXG4gICAgc3RvcmFnZTAucHV0VmFyKCd2aWRlb1NlY3Rpb25zJywgdmlkZW9EYXRhLnNlY3Rpb25zKTtcXFxcbiAgICB2aWRlb0RhdGEuc2VjdGlvbnMuZm9yRWFjaChlbCA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ/Cfk4EnICsgZWwudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAneScpID09ICd5Jykge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaXNGb2xkXycraW5kZXgsICduJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscygnc2VjdGlvbicgKyBpbmRleCArICctcGFydCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oqY5Y+gJztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaXNGb2xkXycraW5kZXgsICd5Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU2VjdGlvbnMgPSBzdG9yYWdlMC5nZXRWYXIoJ3ZpZGVvU2VjdGlvbnMnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvblBhcnRMaXN0ID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU2VjdGlvbnNbaW5kZXggLSAxXS5lcGlzb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkID0gaXRlbS5haWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBpdGVtLmFyYy5zdGF0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvblBhcnRMaXN0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0PHNtYWxsPjwvZm9udD7ilrbvuI4nICsgaXRlbS50aXRsZSArICdcXFxcXFxcXG5cXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHQ8L2ZvbnQ+PC9zbWFsbD48c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPWdyYXk+5pKt5pS+6YeP77yaJyArIHN0YXQudmlldyArICdcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZXvvJonICsgc3RhdC5kYW5tYWt1ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWWnOasou+8micgKyBzdGF0Lmxpa2UgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGNpZCArIFxcXFxcXFwiXFxcXFxcXCIsICcxMTYnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UsIGNsczogJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnLGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignU2VjdGlvbicgKyBpbmRleCwgc2VjdGlvblBhcnRMaXN0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWxleW8gCc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSwgaW5kZXgpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHsgaWQ6ICdTZWN0aW9uJyArIGluZGV4IH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGVsLmVwaXNvZGVzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBhaWQgPSBpdGVtLmFpZDtcXFxcbiAgICAgICAgICAgIGNpZCA9IGl0ZW0uY2lkO1xcXFxuICAgICAgICAgICAgc3RhdCA9IGl0ZW0uYXJjLnN0YXQ7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0PHNtYWxsPjwvZm9udD7ilrbvuI4nICsgaXRlbS50aXRsZSArICdcXFxcXFxcXG5cXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHQ8L2ZvbnQ+PC9zbWFsbD48c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPWdyYXk+5pKt5pS+6YeP77yaJyArIHN0YXQudmlldyArICdcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZXvvJonICsgc3RhdC5kYW5tYWt1ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWWnOasou+8micgKyBzdGF0Lmxpa2UgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGNpZCArIFxcXFxcXFwiXFxcXFxcXCIsICcxMTYnKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UsIGNsczogJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnLGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGluZGV4Kys7XFxcXG4gICAgfSlcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coZSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcXFxuICAgICAgICBpbWc6ICdodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZ2VuZXJhbC9mN2I2NjcwMTFhNDY2MTU3MzJjNzAxZjRiYjFkMDdmNzkzZjhkMWRmLnBuZ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAn5aSn5qaC546H6KeG6aKR6KKr5bCB56aB77yM5oiW6ICFdXDlt7Lot5Hot69+JyxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5Zu+5qCH5LiL6L29XFxcIixcXFwicGF0aFxcXCI6XFxcInNhdmVMb2NhbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMuc2F2ZUxvY2FsID0gKCkgPT4ge1xcXFxuICAgIGNvbnN0IGJhc2U2NFRvSGV4ID0gKGJhc2U2NFN0cikgPT4ge1xcXFxuICAgICAgICAvLyDliKDpmaTliY3nvIDlubbop6PnoIFCYXNlNjTlrZfnrKbkuLJcXFxcbiAgICAgICAgdmFyIGJpbmFyeVN0ciA9IHdpbmRvdzAuYXRvYihiYXNlNjRTdHIuc3BsaXQoJywnKVsxXSk7XFxcXG5cXFxcbiAgICAgICAgLy8g6L2s5o2i5Li6MTbov5vliLblrZfnrKbkuLJcXFxcbiAgICAgICAgdmFyIGhleFN0ciA9ICcnO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFyeVN0ci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgdmFyIGhleCA9IGJpbmFyeVN0ci5jaGFyQ29kZUF0KGkpLnRvU3RyaW5nKDE2KTtcXFxcbiAgICAgICAgICAgIGhleFN0ciArPSAoaGV4Lmxlbmd0aCA9PT0gMiA/IGhleCA6ICcwJyArIGhleCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGhleFN0cjtcXFxcbiAgICB9O1xcXFxuICAgIHNob3dMb2FkaW5nKFxcXFxcXFwi5Zu+5qCH5Yid5aeL5YyW5LitLi4uXFxcXFxcXCIpO1xcXFxuICAgIHZhciB0dWJpYW8gPSB7fTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICAvLyDliarotLTmnb/nur/ot69cXFxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vbmV0Y3V0LmNuL3AvYTFmY2YwZDNiMGEyN2YxMycpO1xcXFxuICAgICAgICBkYXRhID0gaHRtbC5tYXRjaCgvey4qbm90ZV9jb250ZW50Lip1cGRhdGVkX2F0Lip9LylbMF07XFxcXG4gICAgICAgIGV2YWwoJ3R1YmlhbyA9JyArIEpTT04ucGFyc2UoZGF0YSkubm90ZV9jb250ZW50KTtcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGxvZygn5Ymq6LS05p2/5Ye66ZSZLOWIh+aNouaJmOeuoee6v+i3rycpO1xcXFxuICAgICAgICByb3V0ZSA9IFtcXFxcbiAgICAgICAgICAgICdodHRwczovL2dpdGNvZGUubmV0L3FxXzIzODQ3ODE5L2hpa2VyLy0vcmF3L21hc3Rlci90dWJpYW8uanNvbicsXFxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRlYS5jb20vY3kvaGlrZXIvcmF3L2NvbW1pdC9iZTIxNjBjNmEwMWRiODczZDlmOTY4MWJhN2U4NmVlYmZhMTE4ZDg2L3R1Ymlhby5qc29uJyxcXFxcbiAgICAgICAgICAgICdodHRwczovL3Jhdy5jb2RlaHViLmNuL3AvaGlrZXIvZC90dWJpYW8vZ2l0L3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24/dG9rZW49R0dkbEl1VkdxWTNiM0x5ZElvd3Jrc2JVQkNmTXl4MmZGMzFXVVplbzRtJyxcXFxcbiAgICAgICAgICAgICdodHRwczovL2dpdGVlLmNvbS9teHhsLWN5L2hpa2VyL3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24nXFxcXG4gICAgICAgIF07XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGUubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndHViaWFvID0nICsgcmVxdWVzdChyb3V0ZVtpXSkpO1xcXFxuICAgICAgICAgICAgICAgIGlmICh0dWJpYW9bXFxcXFxcXCLkupTlpKdcXFxcXFxcIl0gJiYgdHViaWFvW1xcXFxcXFwi5ZOU5ZOpXFxcXFxcXCJdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn57q/6Lev77yaJyArIHR1Ymlhb1tpXSArICfooqvlopnkuoYuLi4nKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCfnur/ot6/vvJonICsgdHViaWFvW2ldICsgJ+WHuumUmeS6hi4uLicpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIHZhciB3dWRhID0gdHViaWFvW1xcXFxcXFwi5LqU5aSnXFxcXFxcXCJdO1xcXFxuICAgICAgICB2YXIgYmlsaSA9IHR1Ymlhb1tcXFxcXFxcIuWTlOWTqVxcXFxcXFwiXTtcXFxcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcXFxcbiAgICAgICAgZm9yIChsZXQgaXRlbSBpbiB3dWRhKSB7XFxcXG4gICAgICAgICAgICB3cml0ZUhleEZpbGUoYGhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvdHViaWFvLyR7aXRlbX0uc3ZnYCwgYmFzZTY0VG9IZXgod3VkYVtpdGVtXSkpO1xcXFxuICAgICAgICAgICAgbG9nKGDliJ3lp4vljJbnrKwke2luZGV4Kyt95Liq5Zu+5qCHOiR7aXRlbX0uLi5gKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBmb3IgKGxldCBpdGVtIGluIGJpbGkpIHtcXFxcbiAgICAgICAgICAgIHdyaXRlSGV4RmlsZShgaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy8ke2l0ZW19LnBuZ2AsIGJhc2U2NFRvSGV4KGJpbGlbaXRlbV0pKTtcXFxcbiAgICAgICAgICAgIGxvZyhg5Yid5aeL5YyW56ysJHtpbmRleCsrfeS4quWbvuaghzoke2l0ZW19Li4uYCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+Wbvuagh+WIneWni+WMluWujOaIkO+8muWFseiuoScgKyBpbmRleCArICfkuKrlm77moIcnKTtcXFxcbiAgICAgICAgaGlkZUxvYWRpbmcoKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIHNob3dMb2FkaW5nKCflm77moIfliJ3lp4vljJblpLHotKUnKTtcXFxcbiAgICAgICAgbG9nKCflm77moIfliJ3lp4vljJblpLHotKU6JyArIGUpO1xcXFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcXFxuICAgIH1cXFxcblxcXFxufTtcXFxcblxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInBpY1VybCI6Imh0dHA6Ly9pMi5oZHNsYi5jb20vYmZzL2FyY2hpdmUvNDhkZmIyMjlhZmEyOGQ3YTEyNjRkYTRkODUxOTMyYTk2MDEwOWQxZC5qcGdAUmVmZXJlcj0iLCJ0aXRsZSI6IuW5tOW6pueIveaWh++8geiiq+aJk+WQjuaJi+aKiuaJi+aVmeS9oOaLv+WIsOS6uueUn+esrOS4gOahtumHke+8geOAkOiiq+aJk+WQjue7rSDpgJDluKfliIbmnpDjgJEifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement