Advertisement
xiaomianao666

邀您一起看:管理解析-新 建 解 析

Jul 15th, 2023
1,021
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥管理解析-新 建 解 析@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmh0bWxcIixcInBhdGhcIjpcIlBhcnNlX0RuLmh0bWxcIixcInJ1bGVcIjpcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCI+XFxuICAgIDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG4gICAgPCEtLVxcbiAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS92dWVAMi41LjE2L2Rpc3QvdnVlLm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjQubWluLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgXFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy9qcXVlcnkvMi4xLjQvanF1ZXJ5Lm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy92dWUvMS4wLjE0L3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIC0tPlxcbiAgICA8dGl0bGU+UGFyc2VfRG48L3RpdGxlPlxcbiAgICA8c3R5bGUgdHlwZT10ZXh0L2Nzcz5cXG4gICAgICAgIGh0bWwsIGJvZHkge1xcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICAgICAgYm9keSB7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXG4gICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNGOUYwREE7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjZGl2MntcXG4gICAgICAgICAgIG1hcmdpbi10b3A6MzVweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG54i25YWD57SgKi9cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIGhlaWdodDogNTNweDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDkyJTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlucHV0LCBsYWJlbCwgLmxpZWIgYnV0dG9uIHtcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gICAgICAgIH1cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1IDU1NXB4IDU1NXB4IDU1NTtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXG4gICAgICAgIC5iYXIgaW5wdXQge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7XFxuICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgI0QwNkI2QztcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBidXR0b24ge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIHdpZHRoOiAyN3B4O1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBidXR0b257XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIGNvbG9yOiAjRjlGMERBO1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlpLTlg48qL1xcbiAgICAgICAgLnJvdW5kX2ljb257XFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXG4gICAgICAgICAgICB6LWluZGV4OiA5OTk7XFxuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxuICAgICAgICAgICAvLyBsZWZ0OiAxMCU7XFxuICAgICAgICB9XFxuICAgICAgICAuangtdWwsIC5jai11bCB7XFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5qeC11bCB7XFxuICAgICAgICAgICAgdG9wOiAzJTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5jai11bCB7XFxuICAgICAgICAgICAgdG9wOiAzMCU7XFxuICAgICAgICB9XFxuICAgICAgICBsaSB7XFxuICAgICAgICAgICAgaGVpZ2h0OiAzNXB4O1xcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMWJmZGE7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM1cHg7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgICAgICB9XFxuICAgICAgICBsaSB7XFxuICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpOmhvdmVyIHtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDEzMSwgMTIwLCAwLjkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlbY2hlY2s9XFxcInRydWVcXFwiXSB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDAsIDAsIDAuOSk7XFxuICAgICAgICB9XFxuXFxuICAgIDwvc3R5bGU+XFxuPC9oZWFkPlxcblxcbjxib2R5PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogI2M1NDY0YTt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXCIgb25jbGljaz1cXFwiY2FuY2VsKCk7XFxcIj7lhbMg6ZetPC9idXR0b24+XFxuICAgICAgICA8L2E+XFxuICAgICAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHRcXFwiPlxcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA2ODAwNjt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXCJvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFwiPuS/nSDlrZg8L2J1dHRvbj4gXFxuICAgICAgICA8L2E+XFxuICAgIDwvZGl2PlxcbiAgICA8YnI+XFxuICAgIDxkaXYgaWQ9XFxcImRpdjJcXFwiPjwvZGl2PlxcbiAgICA8ZGl2PlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDo1cHg7XFxcIiBvbmNsaWNrPVxcXCJvcGVuRG5QYWdlKClcXFwiPlxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXCJodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZ1xcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8L2E+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwibGluZS1oZWlnaHQ6NjBweDtmb250LXNpemU6MThweDtjb2xvcjogZ3JleTtcXFwiPiZuYnNwOyZuYnNwO+aWrSZuYnNwO+W/tTwvc3Bhbj5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjVweDtcXFwiPlxcbiAgICAgICAgICAgIDxidXR0b24gIHN0eWxlPVxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNUJGQzU7d2lkdGg6IDE4NXB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIiBvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFwiPuS/neWtmOiuvue9ruW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcbiAgICAgICAgPC9hPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiemotZGl2XFxcIj5cXG4gICAgICAgIDx1bCBjbGFzcz1cXFwiangtdWxcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6NDQ0cHg7b3ZlcmZsb3cteTphdXRvO1xcXCI+XFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXCJteUNob2ljZVxcXCIgc3R5bGU9XFxcInotaW5kZXg6OTk5OTtwb3NpdGlvbjogZml4ZWQ7d2lkdGg6NzYuNSU7Y29sb3I6cmVkO1xcXCI+PC9saT5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcInVzZWxlc3NcXFwiPjwvbGk+XFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXCJ4bExpc3RcXFwiIHYtZm9yPVxcXCJpdGVtIGluIGp4RGF0YVxcXCI+e3tpdGVtfX08L2xpPlxcbiAgICAgICAgPC91bD5cXG4gICAgICAgIDx1bCBjbGFzcz1cXFwiY2otdWxcXFwiPlxcbiAgICAgICAgICAgIDxsaSBzdHlsZT1cXFwiYmFja2dyb3VuZDpncmV5O1xcXCI+6K+36YCJ5oup5o+S5Lu2PC9saT5cXG4gICAgICAgICAgICA8bGkgdi1mb3I9XFxcIml0ZW0gaW4gY2pEYXRhXFxcIj57e2l0ZW19fTwvbGk+XFxuICAgICAgICA8L3VsPlxcbiAgICA8L2Rpdj5cXG48L2JvZHk+XFxuPHNjcmlwdD5cXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2pxdWVyeUAyLjEuNC5qc1xcXCIpKTtcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL3Z1ZUAyLjUuMTYuanNcXFwiKSk7XFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5nZXRJbnRlcm5hbEpzKCkpO1xcbiAgICBcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcbiAgICAgICAgcXk6ICd5dW4xNzE3JyxcXG4gICAgICAgIHlrOiAneXVuMTcxNycsXFxuICAgICAgICB0eDogJ3l1bjE3MTcnLFxcbiAgICAgICAgbWc6ICd5dW4xNzE3JyxcXG4gICAgICAgIGJsOiAneXVuMTcxNycsXFxuICAgICAgICBvdGg6ICd5dW4xNzE3JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIHZhciBuZXdDb25maWcgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIHRyeXtcXG4gICAgICAgIGV2YWwoXFxcIm5ld0NvbmZpZyA9XFxcIiArIG5ld0NvbmZpZyArIFxcXCI7XFxcIik7XFxuICAgICAgICBzZXR0aW5ncyA9IG5ld0NvbmZpZy5zZXR0aW5ncy5xanUgPT0gdW5kZWZpbmVkID8gc2V0dGluZ3MgOiBuZXdDb25maWcuc2V0dGluZ3M7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcbiAgICAgICAgICAgIHZhciBUaXRsZXMgPSBuZXdDb25maWcudGl0bGVbaV07XFxuICAgICAgICAgICAgaWYoeWNUaXRsZS5pbmNsdWRlcyhUaXRsZXMpID09IGZhbHNlKXtcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfWNhdGNoKGUpe31cXG4gICAgdmFyIHNmUmVmcmVzaCA9IHNldHRpbmdzLmNqO1xcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXG4gICAgfVxcbiAgICBcXG4gICAgaWYobXlTZXQgPT0gJycpe1xcbiAgICAgICAgRGlkKFxcXCJkaXYyXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywnXFxcXFxcbjxoND7mj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muWwj+eoi+W6j+mmlumhteeCueWHu+aBouWkjem7mOiupOaPkuS7tu+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+mYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj48L2g0PicpO1xcbiAgICB9XFxuICAgIFxcbiAgICB2YXIgYm94RGF0YSA9IFtcXG4gICAgICAgIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWlhyDlpYdcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwicXlcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xeSxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumFtyDphbdcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwieWtcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy55ayxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuiFviDohb5cXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwidHhcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy50eCxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaenCDmnpxcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwibWdcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5tZyxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWTqSDlk6lcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwiYmxcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5ibCxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWFtiDku5ZcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwib3RoXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3Mub3RoLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5YWoIOWxgFxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJxanVcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xanUsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmj5Ig5Lu2XFxcIixcXG4gICAgICAgICAgICBpZDogXFxcImNqXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuY2osXFxuICAgICAgICB9XFxuICAgIF07XFxuXFxuICAgIHZhciBpbnB1dEJveCA9IFxcXCJcXFwiO1xcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxuICAgICAgICBsZXQgYiA9IGJveERhdGFbaV07XFxuICAgICAgICBpbnB1dEJveCArPSAnPGRpdiBjbGFzcz1cXFwiYm94IGJhclxcXCI+XFxcXFxcbiAgICAgICAgICAgIDxmb3JtPlxcXFxcXG4gICAgICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCI+JyArIGIudGl0bGUgKyAnPC9sYWJlbD5cXFxcXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBwbGFjZWhvbGRlcj1cXFwi6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uXFxcIiB2YWx1ZT1cXFwiJyArIGIudmFsdWUgKyAnXFxcIiBpZD1cXFwiJyArIGIuaWQgKyAnXFxcIj5cXFxcXFxuICAgICAgICAgICAgPC9mb3JtPlxcXFxcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJsaWViXFxcIj5cXFxcXFxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XFxcIicgKyBiLmlkICsgJ1NlbGVjdFxcXCI+4piwPC9idXR0b24+XFxcXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxcXG4gICAgICAgIDwvZGl2Pic7XFxuICAgIH1cXG4gICAgRGlkKFxcXCJkaXYyXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGlucHV0Qm94KTtcXG4gICAgRGlkKFxcXCJjalxcXCIpLnBsYWNlaG9sZGVyID0gXFxcIui+k+WFpeaPkuS7tuWcsOWdgC4uLi4uLlxcXCI7XFxuICAgIERpZChcXFwicWp1XFxcIikucGxhY2Vob2xkZXIgPSBcXFwi5q2k6aG55bu66K6u55WZ56m65oiW6ICF5aGr6buY6K6k5Lik5Liq5a2XXFxcIjtcXG4gICAgXFxuICAgIG5ldyBWdWUoe1xcbiAgICAgICAgZWw6IFxcXCIuemotZGl2XFxcIixcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBqeERhdGE6IG15U2VsZWN0LFxcbiAgICAgICAgICAgIGNqRGF0YTogW1xcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIiwgXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzXFxcIiwgXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanNcXFwiXVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgbGVuID0gJCgnLmp4LXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcbiAgICAgICAgdmFyIGxlbjIgPSAkKCcuY2otdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxuICAgICAgICAkKCcubGllYiBidXR0b24nKS5jbGljayhmdW5jdGlvbihlKSB7XFxuICAgICAgICAgICAgaWYoJCgnLmxpZWIgYnV0dG9uJykudGV4dCgpLmluY2x1ZGVzKCfilIEnKSl7XFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICQodGhpcykudGV4dCgn4pSBJyk7XFxuICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JlZCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAkKCdsaScpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgdmFyIGlucHV0aWQgPSBcXFwiI1xcXCIgKyB0aGlzLmlkLnNwbGl0KFxcXCJTZWxlY3RcXFwiKVswXTtcXG4gICAgICAgICAgICB2YXIgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcbiAgICAgICAgICAgIGFyciA9IGFyclswXSA9PSAnJyA/IFtdIDogYXJyO1xcbiAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICBpZiAoaW5wdXRpZCAhPT0gJyNjaicgJiYgJCgnLmNqLXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJykge1xcbiAgICAgICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVRvZ2dsZSgzMDApO1xcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIganhMaXN0ID0gJCgnLmp4LXVsIGxpOm5vdCgubXlDaG9pY2UpJykuZXEoaSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmluY2x1ZGVzKGp4TGlzdC50ZXh0KCkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganhMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4TGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignY2hlY2snKSAhPT0gXFxcInRydWVcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIudW5zaGlmdCgkKHRoaXMpLnRleHQoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXJyLmxlbmd0aDsgYSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2FdID09ICQodGhpcykudGV4dCgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShhLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2UgaWYoJCgnLmp4LXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJyl7XFxuICAgICAgICAgICAgICAgICQoJy5jai11bCcpLnNsaWRlVG9nZ2xlKDIwMCk7XFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY2pMaXN0ID0gJCgnLmNqLXVsIGxpJykuZXEoaSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoJChpbnB1dGlkKS52YWwoKSA9PSBjakxpc3QudGV4dCgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGNqTGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJCh0aGlzKS50ZXh0KCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgJChkb2N1bWVudCkubm90KCQoJy54bExpc3QnKSkuY2xpY2soZnVuY3Rpb24oZSkge1xcbiAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVXAoKTtcXG4gICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVVwKCk7XFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAkKGZ1bmN0aW9uKCl7XFxuICAgICAgICAgICAgJCgnbGFiZWwnKS5tb3VzZXVwKGZ1bmN0aW9uKCl7XFxuICAgICAgICAgICAgICAgIGxldCBpbnB1dGlkID0gJyMnICsgJCh0aGlzKS5uZXh0KCkuYXR0cignaWQnKTtcXG4gICAgICAgICAgICAgICAgb25lT3JEYmwoaW5wdXRpZCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcXG4gICAgICAgICAgICB2YXIgdGltZXI7XFxuICAgICAgICAgICAgZnVuY3Rpb24gb25lT3JEYmwoaW5wdXRpZCl7XFxuICAgICAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICAgICAgICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvdW50ID09IDEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSgwLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJycpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XFxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7XFxuICAgICAgICAgICAgICAgIH0sMjYwKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0pO1xcbiAgICBcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXsgIFxcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247ICBcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnOyAgXFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7ICBcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7ICBcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ICBcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTsgIFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsgIFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJzsgIFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApOyAgXFxuICAgICAgICB9LCBkdXJhdGlvbik7ICBcXG4gICAgfSAgXFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi566h55CG6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdO2V2YWwoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtz4bSw4oG/LnR4dCcpKTtyZXF1aXJlKGZMaW5rcy5qeEl0VXJsKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcIlxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcbiAgICAgICAgaWYobXlTZXQ9PScnKXtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxuICAgICAgICAgICAgbGV0IGlkID0gYm94RGF0YVtpXS5pZDtcXG4gICAgICAgICAgICBzZXR0aW5nc1tpZF0gPSBEaWQoaWQpLnZhbHVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoc2V0dGluZ3MucWp1ID09ICcnKXtcXG4gICAgICAgICAgICBzZXR0aW5ncy5xanUgPSAn6buY6K6kJztcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBldmFsKCd2YXIgYmNDb25maWc9JyArIGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpKTtcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkoYmNDb25maWcpKTtcXG4gICAgICAgIH1jYXRjaChlKXt9XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXG4gICAgICAgIGlmKHRpdGxlPT1cXFwi5YWzXFxcIil7XFxuICAgICAgICAgICAgaWYoc2ZSZWZyZXNoICE9IERpZChcXFwiY2pcXFwiKS52YWx1ZSl7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG48L3NjcmlwdD4gICBcXG48L2h0bWw+XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi5qc1wiLFwicGF0aFwiOlwiUGFyc2VfRG4uanNcIixcInJ1bGVcIjpcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxuLy/vvI3vvI3vvI09Xl9ePVxcbi8vQOaWreW/tVxcblxcbnZhciBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSB7fTtcXG5pZiAoZmlsZUV4aXN0KHBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCLwn6WaXFxcIixcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcIixcXG4gICAgXFxcImh0dHBzOi8vb2tqeC5jYy8/dXJsPVxcXCIsXFxuICAgIFxcXCJodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD1cXFwiLFxcbiAgICBcXFwiaHR0cHM6Ly9zYi41Z3Nlby5uZXQvP3VybD1cXFwiXFxuXTtcXG5cXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvZGNiZi9tL3YvUm91dGUuanMnKTtSb3V0ZS5zZXRQYXJzZSgpO3NldFJlc3VsdChkKTtcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYHJlcXVpcmUoJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL2RjYmYvbS92L1JvdXRlLmpzJyk7YXl0bVBhcnNlKGlucHV0KWA7XFxuXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxuLy8g5YWo5rCRaHR0cHM6Ly9wY3ZpZGVvYWxpeXVuLnRpYW5zaGFuZ3JlbmppYW4ubWd0di5jb20uODh3dW1hLmNvbS8/dXJsPVxcblxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcbi8qXFxuICog5b2x6KeG5bel5Zy677yaIGh0dHBzOi8veXNnYy5jYy9cXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXG4gKiDmsZ/muZY6IGh0dHA6Ly93d3cudGlhbnNodXl1bi5uZXQvaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzQ0ODM3Ny9zaWQvMS9uaWQvMS5odG1sXFxuICog5rGf5rmWMjogaHR0cDovLzk4aHlrLmNuL2luZGV4LnBocC92b2QvcGxheS9pZC83Mjg0MS9zaWQvMS9uaWQvMS5odG1sXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcbiAqIFxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXG4gKiBcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgaGFuZGxlVXJsOiBmdW5jdGlvbih1cmwsIHZpcFVybCwgbmFtZSkge1xcbiAgICAgICAgaWYodXJsID09IFxcXCJcXFwiIHx8IHVybCA9PSB2aXBVcmwpIHtcXG4gICAgICAgICAgICBsb2cobmFtZSArIFxcXCLop6PmnpDlpLHotKVcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybFswXSA9PSAnLycpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPWh0dHAnKSAhPSAtMSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh2aXBVcmwuaW5kZXhPZignbWd0di5jb20nKSAhPSAtMSAmJiB1cmwuaW5kZXhPZignVXNlci1BZ2VudCcpID09IC0xKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHB9JztcXG4gICAgICAgIH0gZWxzZSBpZiAodXJsLmluZGV4T2YoJy5mbHYnKSAhPSAtMSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgfVxcbn07XFxuXFxudmFyIFBhcnNlUyA9IHt9O1xcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXG4gICAgQ2l0eUlQOiAnaHR0cDovL3B2LnNvaHUuY29tL2NpdHlqc29uJyxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFzvvJtcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCkge1xcbiAgICAgICAgc2hvd0xvYWRpbmcoXFxcIuato+WcqOiwg+eUqOe9kemhteino+aekC4uLlxcXCIpO1xcbiAgICAgICAgcmV0dXJuICQodXJsKS53ZWJMYXp5KCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgVXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgdmFyIFJlZzEgPSAvXFxcXC5tcDR8XFxcXC5tM3U4XFxcXD98Lm0zdTgkfFxcXFwuZmx2fFxcXFwuYXZpfFxcXFwucm12Yi87XFxuICAgICAgICAgICAgdmFyIFJlZzIgPSAvcGxheW0zdTh8LmNzcyR8LmpzJHwuaWNvJHxjbnp6XFxcXC4vO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgVXJscy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXNVcmwgPSBVcmxzW2ldO1xcbiAgICAgICAgICAgICAgICBpZiAoUmVnMS50ZXN0KGlzVXJsKSAmJiAhUmVnMi50ZXN0KGlzVXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmhpZGVMb2FkaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIG1hb3NzOiBmdW5jdGlvbihqeHVybCwgcmVmLCBrZXkpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGtleSA9IGtleSA9PSB1bmRlZmluZWQgPyAnZHZ5WVJRbG5QUkNNZFFTZScgOiBrZXk7XFxuICAgICAgICAgICAgaWYgKHJlZikge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCcmYnR3YWY9JykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcIi8pWzFdLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdCgnX3Rva2VuID0gXFxcIicpWzFdLnNwbGl0KCdcXFwiJylbMF07XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdICsgJycpO1xcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBrZXksIGl2KSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICAvKnZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXG4gICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxuICAgICAgICAqL1xcbiAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcbiAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxuICAgICAgICAvL3ZhciBhcGkgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2FwaS5waHAnO1xcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcImh0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSBcXFwiaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwXFxcIjtcXG4gICAgICAgIGlmIChkYXRhKSB7XFxuICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXG4gICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxuICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxuICAgICAgICB2YXIganNvbiA9IHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IHBhcnNlXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiBcXFwidXJsPVxcXCIgKyB2aXBVcmwgKyBcXFwiJnJlZmVyZXI9XFxcIiArIGJhc2U2NEVuY29kZShwYXJzZSkgKyBcXFwiJnJlZj0xJnRpbWU9XFxcIiArIFRpbWUgKyBcXFwiJnR5cGU9Jm90aGVyPVxcXCIgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArIFxcXCImaW9zPTBcXFwiLFxcbiAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciB1cmwgPSBqc29uWzBdID09IFxcXCJ7XFxcIiA/IEpTT04ucGFyc2UoanNvbikudXJsIDogXFxcIlxcXCI7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9LFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxuICAgICAgICB2YXIgcmVmID0gXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFwiO1xcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcbiAgICB9LFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvL2lmKHZpcFVybC5pbmRleE9mKCd2LnlvdWt1JykhPS0xKXtcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXD8uKi8sJycpO1xcbiAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gcmVmO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBcXFwi8J+lmlxcXCI6IGZ1bmN0aW9uKHZpcFVybCkge1xcbiAgICAgICAgbGV0IOS9nOiAhV/op4bnlYznn6XlkI3lpKfkvaw7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBwbGF5ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL3d3dy56cnVpcnkuY29tL3l1bi9hcGkucGhwXFxcIiwge1xcbiAgICAgICAgICAgICAgICBib2R5OiBcXFwidXJsPVxcXCIgKyBpbnB1dCxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgIGlmIChwbGF5LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBwbGF5O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59O1xcblxcbnZhciBmcm9tcyA9IFsnZHVvZHVvenknLCAncngnLCAncmVucmVubWknLCAnbHRuYicsICd4Znl1biddO1xcbmZvcihsZXQgaSBpbiBmcm9tcykge1xcbiAgICBsZXQgbmFtZSA9IGZyb21zW2ldICsgXFxcIijpgJrnlKjlh73mlbApXFxcIjtcXG4gICAgUGFyc2VTW25hbWVdID0gZnVuY3Rpb24oVXJsLCByZWZlcmVyKXtcXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQYXJzZShyZWZlcmVyKTtcXG4gICAgfTtcXG59XFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXG5cXG5cXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLCBwYXJzZU5hbWUpIHtcXG4gICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcbiAgICAgICAgaWYoaXNOYU4ocGFyYW0xLnRpbWVvdXQpKSB7XFxuICAgICAgICAgICAgcGFyYW0xLnRpbWVvdXQgPSAzMDAwO1xcbiAgICAgICAgfVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRTtcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfcmVxdWVzdC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpO1xcbiAgICAgICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcIlxcXCI7XFxuICAgIH07XFxuICAgIHRoaXMuZmV0Y2ggPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxuICAgICAgICBwYXJhbTEuaGVhZGVycyA9IHBhcmFtMS5oZWFkZXJzID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xLmhlYWRlcnM7XFxuICAgICAgICBwYXJhbTEuaGVhZGVyc1snVXNlci1BZ2VudCddID0gUENfVUE7XFxuICAgICAgICBpZihpc05hTihwYXJhbTEudGltZW91dCkpIHtcXG4gICAgICAgICAgICBwYXJhbTEudGltZW91dCA9IDMwMDA7XFxuICAgICAgICB9XFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9mZXRjaC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpO1xcbiAgICAgICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcIlxcXCI7XFxuICAgIH07XFxuICAgIHZhciBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcLiguKj8pXFxcXC8vKTtcXG4gICAgaG9zdCA9IGhvc3QgPT0gbnVsbCA/IG51bGwgOiBob3N0WzFdO1xcbiAgICB2YXIgbm9VcmwgPSBcXFwidG9hc3Q6Ly/mjqXmlLbliLDnmoTpk77mjqXkuLo6IFxcXCI7XFxuICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxuICAgICAgICBjYXNlIFxcXCLpu5jorqRcXFwiOlxcbiAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJxcS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwiaXFpeWkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcInlvdWt1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJtZ3R2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJiaWxpYmlsaS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQub3RoO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0LnFqdTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbiAgICBpZiAocGFyc2VOYW1lKSB7XFxuICAgICAgICBzdHIgPSBwYXJzZU5hbWU7XFxuICAgIH1cXG4gICAgbGV0IG15Q2hvaWNlID0gc3RyLnNwbGl0KCcsJyk7XFxuICAgIGxldCBsZW4gPSBteUNob2ljZS5sZW5ndGg7XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcXG4gICAgICAgIGxldCBuYW1lID0gbXlDaG9pY2VbaV07XFxuICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFBhcnNlU1tuYW1lXSh2aXBVcmwpO1xcbiAgICAgICAgICAgIGxldCBSZWcgPSBuZXcgUmVnRXhwKFxcXCJtM3U4fG1wNHxcXFwiICsgdmlwVXJsICsgXFxcInxodHRwXFxcIik7XFxuICAgICAgICAgICAgaWYgKGkgIT0gbGVuIC0gMSAmJiAhUmVnLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICBsb2cobmFtZSArICfop6PmnpDlpLHotKUnKTtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0b29scy5oYW5kbGVVcmwodXJsLCB2aXBVcmwsIG5hbWUpO1xcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdzdHJpbmcnKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2UoUGFyc2VTW25hbWVdICsgdmlwVXJsLCB0b29scy5oYW5kbGVVcmwsIG5hbWUpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgNCkgPT0gXFxcImh0dHBcXFwiIHx8IGhvc3QgPT0gbnVsbCA/IG5hbWUgKyB2aXBVcmwgOiBcXFwidG9hc3Q6Ly9cXFwiICsgbmFtZSArIFxcXCIg5LiN5piv55u06ZO+5Lmf5LiN5piv5YWN5ZeFXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuXFxudmFyIHBsYXlQYXJzZSA9IHtcXG4gICAgcGxheWVyUzogZnVuY3Rpb24oanVybCkge1xcbiAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp1cmwpLFxcbiAgICAgICAgICAgIFVybCA9ICcnLFxcbiAgICAgICAgICAgIGZyb20gPSAnJztcXG4gICAgICAgIHZhciBjb2RlMSA9IGh0bWwubWF0Y2goL3ZhciBwbGF5ZXJfW1xcXFxzXFxcXFNdKj91cmxbXFxcXHNcXFxcU10qP30vKTtcXG4gICAgICAgIHZhciBkcFVybCA9IHBkZmgoaHRtbCwgXFxcImlmcmFtZSYmZGF0YS1wbGF5XFxcIik7XFxuICAgICAgICBpZiAoY29kZTEgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIGV2YWwoY29kZTFbMF0ucmVwbGFjZSgvcGxheWVyXy4qP3svLCAncGRhdGE9eycpKTtcXG4gICAgICAgICAgICBVcmwgPSBwZGF0YS51cmw7XFxuICAgICAgICAgICAgZnJvbSA9IHBkYXRhLmZyb207XFxuICAgICAgICB9IGVsc2UgaWYgKGRwVXJsICE9ICcnKSB7XFxuICAgICAgICAgICAgVXJsID0gZHBVcmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpID8gZGRwVXJsIDogZHBVcmwuc2xpY2UoMyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNvZGUyID0gaHRtbC5tYXRjaCgvdmFyIG5vd1tcXFxcc1xcXFxTXSo/dmFyIHBuW1xcXFxzXFxcXFNdKj87Lyk7XFxuICAgICAgICAgICAgaWYgKGNvZGUyICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChjb2RlMlswXSk7XFxuICAgICAgICAgICAgICAgIFVybCA9IG5vdztcXG4gICAgICAgICAgICAgICAgZnJvbSA9IHBuO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChVcmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pIHx8IFVybC5zdGFydHNXaXRoKFxcXCJhSFIwXFxcIikpIHtcXG4gICAgICAgICAgICBVcmwgPSBiYXNlNjREZWNvZGUoVXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChVcmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcbiAgICAgICAgICAgIFVybCA9IHVuZXNjYXBlKFVybCk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZnJvbXMuaW5jbHVkZXMoZnJvbSkpIHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGZyb20gKyAnKOmAmueUqOWHveaVsCknO1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbbmFtZV0oVXJsLCBqdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgvaHRtbHxiaWxpYmlsaS8udGVzdChVcmwpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShVcmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSA/IFVybCArICcjaXNWaWRlbz10cnVlIycgOiBQYXJzZVMuZGVmYXVsdFBhcnNlKGp1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwpIHtcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBldmFsKGZldGNoKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJykpLmNqKSk7XFxuICAgICAgICAgICAgcmV0dXJuIHBsYXlQYXJzZS5wbGF5ZXJTKGlucHV0KTtcXG4gICAgICAgIH0pIFxcbiAgICB9XFxufTtcXG5cXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXG4gICAgdGhpcy5kID0gW107XFxuICAgIHJlcXVpcmUoJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL2RjYmYvbS92L1JvdXRlLmpzJyk7XFxuICAgIFJvdXRlLnNldFBhcnNlKCk7XFxuICAgIHNldFJlc3VsdChkKTtcXG59XCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi8J2RgPCdkabwnZC58J2RlvCdkZLwnZGZ8J2RkeG0sOKBv1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IztnZXQ7VVRGLTg7e1VzZXItQWdlbnRATW96aWxsYS81LjAgKExpbnV477yb77ybIEFuZHJvaWQgMTHvvJvvvJsgTWkgMTAgUHJvKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODguMC40MzI0LjE1MiBNb2JpbGUgU2FmYXJpLzUzNy4zNn1cIixcImNvbF90eXBlXCI6XCJ0ZXh0X2NlbnRlcl8xXCIsXCJmaW5kX3J1bGVcIjpcImpzOihcXG4oKSA9PiB7XFxuICAgIHZhciBkID0gW107XFxuICAgIGNsZWFyVmFyKFxcXCJpc01lcmdlXFxcIik7XFxuICAgIGV2YWwoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtzXFxcXHUxZDMwXFxcXHUyMDdmLnR4dFxcXCIpKTtcXG4gICAgcmVxdWlyZShmTGlua3MuX2JqVXJsKTtcXG4gICAgZC5wdXNoKHt0aXRsZTogXFxcIlxcXFx1NGZkZCBcXFxcdTViNThcXFwiLCBjb2xfdHlwZTogXFxcImlucHV0XFxcIiwgZGVzYzogXFxcIlxcXFx1OGY5M1xcXFx1NTE2NVxcXFx1NmI2M1xcXFx1Nzg2ZVxcXFx1NjgzY1xcXFx1NWYwZlxcXFx1NTE4NVxcXFx1NWJiOVxcXCIsIGV4dHJhOiB7b25DaGFuZ2U6IFxcXCJwdXRWYXIoXFxcXFxcXCJpbnB1dF9hZGRcXFxcXFxcIiwgaW5wdXQpO1xcXCIsIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsIGhlaWdodDogXFxcIi0xXFxcIiwgdGl0bGVWaXNpYmxlOiBmYWxzZSwgZGVmYXVsdFZhbHVlOiBnZXRWYXIoXFxcImlucHV0X2FkZFxcXCIpfX0pO1xcbiAgICBkLnB1c2goe3RpdGxlOiBcXFwiXFxcXHUyMDE4XFxcXHUyMDE4XFxcXHUyMDE5XFxcXHUyMDE5PHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPlxcXFx1NjMwOVxcXFx1NjNjZlxcXFx1OGZmMFxcXFx1OGJjOVxcXFx1NjgzY1xcXFx1NWYwZlxcXFx1OGY5M1xcXFx1NTE2NSwgXFxcXHU4YmY3XFxcXHU1MmZmXFxcXHU1ODZiXFxcXHU1MTY1XFxcXHU1MTc2XFxcXHU0ZWQ2XFxcXHU2ODNjXFxcXHU1ZjBmPGJyPlxcXFx1NjcyY1xcXFx1NTczMFxcXFx1NTNlM1xcXFx1NGVlNDogXFxcXHU2NGNkXFxcXHU0ZjVjXFxcXHU3YzdiXFxcXHU1NzhiXFxcXHUyNjA1XFxcXHU1NDBkXFxcXHU3OWYwXFxcXHUyNjA1XFxcXHU0ZWUzXFxcXHU3ODAxPGJyPlxcXFx1NGU5MVxcXFx1NTNlM1xcXFx1NGVlNDogXFxcXHU5NGZlXFxcXHU2M2E1XFxcXHUyNjA1XFxcXHUyNjA1XFxcXHUyNjA1XFxcXHU1NDBkXFxcXHU3OWYwOyBcXFxcdTdlYWZcXFxcdTdmNTFcXFxcdTU3NDA6IFxcXFx1NzZmNFxcXFx1OTRmZVxcXFx1MjYwNXVybDFcXFxcdTI2MDV1cmwyXFxcIiwgZGVzYzogXFxcIlxcXFx1MjAxOFxcXFx1MjAxOFxcXFx1MjAxOVxcXFx1MjAxOTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj5cXFxcdTRmZGQgXFxcXHU1YjU4XFxcIiwgdXJsOiAkKFxcXCJub0xvYWRpbmdcXFwiKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcbiAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKFxcXCJpbnB1dF9hZGRcXFwiKSk7XFxuICAgIH1cXG4gICAgLCBzYXZlQnV0dG9uKSwgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIn0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbikoKVwiLFwiZ3JvdXBcIjpcIuW3peWFt1wiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiLy/lpoLmnpzlh7rnjrDojrflj5bkuI3liLDov5znqIvotYTmupDnmoTmg4XlhrXvvIzmiorigJwvL2tU4oCd55qE4oCcLy/igJ3ljrvmjonnhLblkI7ph43lkK9BUFBcXG5cXG52YXIga1QgPSBcXFwiaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvZGNiZi9tL3YvXFxcIixcXG4gICAga1QyID0ga1Q7XFxuICAgIGtUMyA9IGtUO1xcbi8va1QgPSBrVDI7XFxudmFyIGZMaW5rcyA9IHtcXG4gICAga1Q6IGtULFxcbiAgICBrVDI6IGtUMixcXG4gICAga1QzOiBrVDMsXFxuICAgIGNqRnJvbTogJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcycsXFxuICAgIHg1RnJvbTogJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sJyxcXG4gICAgX2JqVXJsOiBrVCArICdqeEl0ZW1fYmouanMnLFxcbiAgICBqeEl0VXJsOiBrVCArICdqeEl0ZW0uanMnLFxcbiAgICByb3V0ZVVybDogJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL2RjYmYvbS92L1JvdXRlLmpzJyxcXG4gICAgY2pjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLFxcbiAgICB4NWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXG4gICAgcGxnbDogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxnbFBhcnNlLmh0bWwnLFxcbiAgICBMYW5KaWU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL3g1UGFyc2VMYW5KaWUudHh0JyxcXG4gICAgY29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcbiAgICBwYXJzZXM6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIGN6enk6ICdodHRwczovL2RvY3MucXEuY29tL2RvYy9EVlhOR1ZHZExSRUZQWTNaeicsXFxuICAgIGd4cno6ICdodHRwczovL3d3dy55dXF1ZS5jb20vZHVhbm5pYW4tY29xdGIvZWx5OGNhL2dhZjdvcCcsXFxuICAgIHZ1ZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdnVlQDIuNS4xNi5qcycsXFxuICAgIGpxdWVyeTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvanF1ZXJ5QDIuMS40LmpzJyxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlLydcXG59O1xcbmxldCBmUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9maWxlTGlua3PhtLDigb8udHh0JztcXG5pZiAoIWdldFZhcignanhJdGVtVicpIHx8IGdldFZhcignanhJdE5ld1YnLCAnMCcpICE9PSAnMCcpIHtcXG4gICAgd3JpdGVGaWxlKGZSb3V0ZSwgJ3ZhciBmTGlua3M9JyArICQuc3RyaW5naWZ5KGZMaW5rcykpO1xcbn1cIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInBhdGhcXFwiOlxcXCJQYXJzZV9Ebi5odG1sXFxcIixcXFwicnVsZVxcXCI6XFxcIjwhRE9DVFlQRSBodG1sPlxcXFxuPGh0bWw+XFxcXG48aGVhZD5cXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFwidXRmLThcXFxcXFxcIj5cXFxcbiAgICA8bWV0YSBuYW1lPVxcXFxcXFwidmlld3BvcnRcXFxcXFxcIiBjb250ZW50PVxcXFxcXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFxcXFxcIiAvPlxcXFxuICAgIDwhLS1cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdnVlQDIuNS4xNi9kaXN0L3Z1ZS5taW4uanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0yLjEuNC5taW4uanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICBcXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL2pxdWVyeS8yLjEuNC9qcXVlcnkubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy92dWUvMS4wLjE0L3Z1ZS5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIC0tPlxcXFxuICAgIDx0aXRsZT5QYXJzZV9EbjwvdGl0bGU+XFxcXG4gICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+XFxcXG4gICAgICAgIGh0bWwsIGJvZHkge1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBib2R5IHtcXFxcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXFxcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAwO1xcXFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXFxcXFwiTWljcm9zb2Z0IFlhSGVpXFxcXFxcXCIsXFxcXFxcXCLlrovkvZNcXFxcXFxcIixcXFxcXFxcIlNlZ29lIFVJXFxcXFxcXCIsIFxcXFxcXFwiTHVjaWRhIEdyYW5kZVxcXFxcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjZGl2MntcXFxcbiAgICAgICAgICAgbWFyZ2luLXRvcDozNXB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q6L6T5YWl5qGG54i25YWD57SgKi9cXFxcbiAgICAgICAgZGl2LmJveCB7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDUzcHg7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxcXG4gICAgICAgIGZvcm0ge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgICAgICB3aWR0aDogOTIlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlucHV0LCBsYWJlbCwgLmxpZWIgYnV0dG9uIHtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXFxcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcXFxuICAgICAgICBpbnB1dCB7XFxcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsYWJlbCB7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlsI/moYYqL1xcXFxuICAgICAgICAuYmFyIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTUgNTU1cHggNTU1cHggNTU1O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxcXG4gICAgICAgIC5iYXIgaW5wdXQge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICNEMDZCNkM7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICAubGllYiBidXR0b24ge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDI3cHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICAubGllYiBidXR0b257XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5aS05YOPKi9cXFxcbiAgICAgICAgLnJvdW5kX2ljb257XFxcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcXFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcXFxuICAgICAgICAgICAgei1pbmRleDogOTk5O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcbiAgICAgICAgICAgLy8gbGVmdDogMTAlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmp4LXVsIHtcXFxcbiAgICAgICAgICAgIHRvcDogMyU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIHRvcDogMzAlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpIHtcXFxcbiAgICAgICAgICAgIGhlaWdodDogMzVweDtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMWJmZGE7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XFxcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXFxcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGkge1xcXFxuICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaTpob3ZlciB7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMTMxLCAxMjAsIDAuOSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGlbY2hlY2s9XFxcXFxcXCJ0cnVlXFxcXFxcXCJdIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCAwLCAwLCAwLjkpO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICA8L3N0eWxlPlxcXFxuPC9oZWFkPlxcXFxuXFxcXG48Ym9keT5cXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFwiZnVuZ1xcXFxcXFwiPlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogI2M1NDY0YTt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjYW5jZWwoKTtcXFxcXFxcIj7lhbMg6ZetPC9idXR0b24+XFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA2ODAwNjt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwib25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXFxcXFwiPuS/nSDlrZg8L2J1dHRvbj4gXFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICA8L2Rpdj5cXFxcbiAgICA8YnI+XFxcXG4gICAgPGRpdiBpZD1cXFxcXFxcImRpdjJcXFxcXFxcIj48L2Rpdj5cXFxcbiAgICA8ZGl2PlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDo1cHg7XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcIm9wZW5EblBhZ2UoKVxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcXFxcXCJodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZ1xcXFxcXFwiIGNsYXNzPVxcXFxcXFwicm91bmRfaWNvblxcXFxcXFwiICBhbHQ9XFxcXFxcXCJcXFxcXFxcIj5cXFxcbiAgICAgICAgPC9hPlxcXFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFxcXFxcImxpbmUtaGVpZ2h0OjYwcHg7Zm9udC1zaXplOjE4cHg7Y29sb3I6IGdyZXk7XFxcXFxcXCI+Jm5ic3A7Jm5ic3A75patJm5ic3A75b+1PC9zcGFuPlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6NXB4O1xcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNUJGQzU7d2lkdGg6IDE4NXB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXFxcXFwiPuS/neWtmOiuvue9ruW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgPC9kaXY+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcInpqLWRpdlxcXFxcXFwiPlxcXFxuICAgICAgICA8dWwgY2xhc3M9XFxcXFxcXCJqeC11bFxcXFxcXFwiIHN0eWxlPVxcXFxcXFwiaGVpZ2h0OjQ0NHB4O292ZXJmbG93LXk6YXV0bztcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcIm15Q2hvaWNlXFxcXFxcXCIgc3R5bGU9XFxcXFxcXCJ6LWluZGV4Ojk5OTk7cG9zaXRpb246IGZpeGVkO3dpZHRoOjc2LjUlO2NvbG9yOnJlZDtcXFxcXFxcIj48L2xpPlxcXFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXFxcXFwidXNlbGVzc1xcXFxcXFwiPjwvbGk+XFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXCJ4bExpc3RcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIml0ZW0gaW4ganhEYXRhXFxcXFxcXCI+e3tpdGVtfX08L2xpPlxcXFxuICAgICAgICA8L3VsPlxcXFxuICAgICAgICA8dWwgY2xhc3M9XFxcXFxcXCJjai11bFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGxpIHN0eWxlPVxcXFxcXFwiYmFja2dyb3VuZDpncmV5O1xcXFxcXFwiPuivt+mAieaLqeaPkuS7tjwvbGk+XFxcXG4gICAgICAgICAgICA8bGkgdi1mb3I9XFxcXFxcXCJpdGVtIGluIGNqRGF0YVxcXFxcXFwiPnt7aXRlbX19PC9saT5cXFxcbiAgICAgICAgPC91bD5cXFxcbiAgICA8L2Rpdj5cXFxcbjwvYm9keT5cXFxcbjxzY3JpcHQ+XFxcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9qcXVlcnlAMi4xLjQuanNcXFxcXFxcIikpO1xcXFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvdnVlQDIuNS4xNi5qc1xcXFxcXFwiKSk7XFxcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmdldEludGVybmFsSnMoKSk7XFxcXG4gICAgXFxcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcXFxuICAgICAgICBxeTogJ3l1bjE3MTcnLFxcXFxuICAgICAgICB5azogJ3l1bjE3MTcnLFxcXFxuICAgICAgICB0eDogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBtZzogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBibDogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBvdGg6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxuICAgIH07XFxcXG4gICAgXFxcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxuICAgIHZhciBteVNldCA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gob2xkUm91dGUpO1xcXFxuICAgIFxcXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbmV3Q29uZmlnID0gZnlfYnJpZGdlX2FwcC5mZXRjaChuZXdSb3V0ZSk7XFxcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxcXG4gICAgdHJ5e1xcXFxuICAgICAgICBldmFsKFxcXFxcXFwibmV3Q29uZmlnID1cXFxcXFxcIiArIG5ld0NvbmZpZyArIFxcXFxcXFwiO1xcXFxcXFwiKTtcXFxcbiAgICAgICAgc2V0dGluZ3MgPSBuZXdDb25maWcuc2V0dGluZ3MucWp1ID09IHVuZGVmaW5lZCA/IHNldHRpbmdzIDogbmV3Q29uZmlnLnNldHRpbmdzO1xcXFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXFxcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5ld0NvbmZpZy50aXRsZS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgICAgICB2YXIgVGl0bGVzID0gbmV3Q29uZmlnLnRpdGxlW2ldO1xcXFxuICAgICAgICAgICAgaWYoeWNUaXRsZS5pbmNsdWRlcyhUaXRsZXMpID09IGZhbHNlKXtcXFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdC5wdXNoKFRpdGxlcyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9Y2F0Y2goZSl7fVxcXFxuICAgIHZhciBzZlJlZnJlc2ggPSBzZXR0aW5ncy5jajtcXFxcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcXFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcXFxuICAgIH1cXFxcbiAgICBcXFxcbiAgICBpZihteVNldCA9PSAnJyl7XFxcXG4gICAgICAgIERpZChcXFxcXFxcImRpdjJcXFxcXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywnXFxcXFxcXFxcXFxcbjxoND7mj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muWwj+eoi+W6j+mmlumhteeCueWHu+aBouWkjem7mOiupOaPkuS7tu+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+mYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj48L2g0PicpO1xcXFxuICAgIH1cXFxcbiAgICBcXFxcbiAgICB2YXIgYm94RGF0YSA9IFtcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aWHIOWlh1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicXlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xeSxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6YW3IOmFt1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwieWtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy55ayxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6IW+IOiFvlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwidHhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy50eCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5p6cIOaenFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwibWdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5tZyxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5ZOpIOWTqVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwiYmxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5ibCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5YW2IOS7llxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwib3RoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3Mub3RoLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlhagg5bGAXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJxanVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xanUsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaPkiDku7ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcImNqXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuY2osXFxcXG4gICAgICAgIH1cXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgdmFyIGlucHV0Qm94ID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgIGxldCBiID0gYm94RGF0YVtpXTtcXFxcbiAgICAgICAgaW5wdXRCb3ggKz0gJzxkaXYgY2xhc3M9XFxcXFxcXCJib3ggYmFyXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDxmb3JtPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcXFxcXCJzdWJtaXRcXFxcXFxcIj4nICsgYi50aXRsZSArICc8L2xhYmVsPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcXFxcXCJ0ZXh0XFxcXFxcXCIgcGxhY2Vob2xkZXI9XFxcXFxcXCLovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi5cXFxcXFxcIiB2YWx1ZT1cXFxcXFxcIicgKyBiLnZhbHVlICsgJ1xcXFxcXFwiIGlkPVxcXFxcXFwiJyArIGIuaWQgKyAnXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDwvZm9ybT5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFxcXFxcImxpZWJcXFxcXFxcIj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XFxcXFxcXCInICsgYi5pZCArICdTZWxlY3RcXFxcXFxcIj7imLA8L2J1dHRvbj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXFxcXFxcXFxcbiAgICAgICAgPC9kaXY+JztcXFxcbiAgICB9XFxcXG4gICAgRGlkKFxcXFxcXFwiZGl2MlxcXFxcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgaW5wdXRCb3gpO1xcXFxuICAgIERpZChcXFxcXFxcImNqXFxcXFxcXCIpLnBsYWNlaG9sZGVyID0gXFxcXFxcXCLovpPlhaXmj5Lku7blnLDlnYAuLi4uLi5cXFxcXFxcIjtcXFxcbiAgICBEaWQoXFxcXFxcXCJxanVcXFxcXFxcIikucGxhY2Vob2xkZXIgPSBcXFxcXFxcIuatpOmhueW7uuiurueVmeepuuaIluiAheWhq+m7mOiupOS4pOS4quWtl1xcXFxcXFwiO1xcXFxuICAgIFxcXFxuICAgIG5ldyBWdWUoe1xcXFxuICAgICAgICBlbDogXFxcXFxcXCIuemotZGl2XFxcXFxcXCIsXFxcXG4gICAgICAgIGRhdGE6IHtcXFxcbiAgICAgICAgICAgIGp4RGF0YTogbXlTZWxlY3QsXFxcXG4gICAgICAgICAgICBjakRhdGE6IFtcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFxcXFxcIiwgXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qc1xcXFxcXFwiLCBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanNcXFxcXFxcIl1cXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBsZW4gPSAkKCcuangtdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxcXG4gICAgICAgIHZhciBsZW4yID0gJCgnLmNqLXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcXFxuICAgICAgICAkKCcubGllYiBidXR0b24nKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICBpZigkKCcubGllYiBidXR0b24nKS50ZXh0KCkuaW5jbHVkZXMoJ+KUgScpKXtcXFxcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnRleHQoJ+KUgScpO1xcXFxuICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JlZCcpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgJCgnbGknKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgdmFyIGlucHV0aWQgPSBcXFxcXFxcIiNcXFxcXFxcIiArIHRoaXMuaWQuc3BsaXQoXFxcXFxcXCJTZWxlY3RcXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICB2YXIgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcXFxuICAgICAgICAgICAgYXJyID0gYXJyWzBdID09ICcnID8gW10gOiBhcnI7XFxcXG4gICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXRpZCAhPT0gJyNjaicgJiYgJCgnLmNqLXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJykge1xcXFxuICAgICAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVG9nZ2xlKDMwMCk7XFxcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqeExpc3QgPSAkKCcuangtdWwgbGk6bm90KC5teUNob2ljZSknKS5lcShpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5pbmNsdWRlcyhqeExpc3QudGV4dCgpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBqeExpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdjaGVjaycpICE9PSBcXFxcXFxcInRydWVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci51bnNoaWZ0KCQodGhpcykudGV4dCgpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXJyLmxlbmd0aDsgYSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJbYV0gPT0gJCh0aGlzKS50ZXh0KCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoYSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZigkKCcuangtdWwnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKXtcXFxcbiAgICAgICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVRvZ2dsZSgyMDApO1xcXFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4yOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNqTGlzdCA9ICQoJy5jai11bCBsaScpLmVxKGkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJChpbnB1dGlkKS52YWwoKSA9PSBjakxpc3QudGV4dCgpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpc3QuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGNqTGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCQodGhpcykudGV4dCgpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCkuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAkKGRvY3VtZW50KS5ub3QoJCgnLnhsTGlzdCcpKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVVwKCk7XFxcXG4gICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVVwKCk7XFxcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS50ZXh0KCfimLAnKTtcXFxcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgICQoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICQoJ2xhYmVsJykubW91c2V1cChmdW5jdGlvbigpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBpbnB1dGlkID0gJyMnICsgJCh0aGlzKS5uZXh0KCkuYXR0cignaWQnKTtcXFxcbiAgICAgICAgICAgICAgICBvbmVPckRibChpbnB1dGlkKTtcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcXFxcbiAgICAgICAgICAgIHZhciB0aW1lcjtcXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uZU9yRGJsKGlucHV0aWQpe1xcXFxuICAgICAgICAgICAgICAgIGNvdW50Kys7XFxcXG4gICAgICAgICAgICAgICAgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe1xcXFxuICAgICAgICAgICAgICAgICAgICBpZihjb3VudCA9PSAxKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKDAsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDtcXFxcbiAgICAgICAgICAgICAgICB9LDI2MClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KTtcXFxcbiAgICBcXFxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24peyAgXFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uOyAgXFxcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcXFxcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7ICBcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7ICBcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTsgIFxcXFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAgXFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTsgIFxcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nOyAgXFxcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7ICBcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApOyAgXFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTsgIFxcXFxuICAgIH0gIFxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnrqHnkIbop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGZpbmRSdWxlOiBcXFxcXFxcImpzOnRoaXMuZD1bXTtldmFsKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2ZpbGVMaW5rc+G0sOKBvy50eHQnKSk7cmVxdWlyZShmTGlua3MuanhJdFVybCk7anhJdGVtLmp4TGlzdCgpO3NldFJlc3VsdChkKVxcXFxcXFwiXFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxcXG4gICAgICAgIGlmKG15U2V0PT0nJyl7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKGZhbHNlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxcXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBib3hEYXRhLmxlbmd0aDsgaSsrKXtcXFxcbiAgICAgICAgICAgIGxldCBpZCA9IGJveERhdGFbaV0uaWQ7XFxcXG4gICAgICAgICAgICBzZXR0aW5nc1tpZF0gPSBEaWQoaWQpLnZhbHVlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmKHNldHRpbmdzLnFqdSA9PSAnJyl7XFxcXG4gICAgICAgICAgICBzZXR0aW5ncy5xanUgPSAn6buY6K6kJztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBldmFsKCd2YXIgYmNDb25maWc9JyArIGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpKTtcXFxcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYmNDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG5ld1JvdXRlLCAkJCQuc3RyaW5naWZ5KGJjQ29uZmlnKSk7XFxcXG4gICAgICAgIH1jYXRjaChlKXt9XFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXG4gICAgICAgICAgICBcXFxcbiAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgaWYodGl0bGU9PVxcXFxcXFwi5YWzXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgaWYoc2ZSZWZyZXNoICE9IERpZChcXFxcXFxcImNqXFxcXFxcXCIpLnZhbHVlKXtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuPC9zY3JpcHQ+ICAgXFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcbi8vQOaWreW/tVxcXFxuXFxcXG52YXIgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcbnZhciBteVNldCA9IHt9O1xcXFxuaWYgKGZpbGVFeGlzdChwYXJzZVJvdXRlKSkge1xcXFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxcXG59XFxcXG52YXIgcGFyc2VUaXRsZSA9IFtcXFxcbiAgICBcXFxcXFxcIvCfpZpcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIlBhbkd1XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJGdVhpbmdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL29ranguY2MvP3VybD1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9zYi41Z3Nlby5uZXQvP3VybD1cXFxcXFxcIlxcXFxuXTtcXFxcblxcXFxuLy/vvI3vvI3vvI09Xl9ePVxcXFxuXFxcXG4vL+aOpeWPo+iuvue9ri5cXFxcblxcXFxudmFyIHNldFVybCA9IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdO3JlcXVpcmUoJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL2RjYmYvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCI7XFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcbnZhciBsYXp5ID0gYHJlcXVpcmUoJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL2RjYmYvbS92L1JvdXRlLmpzJyk7YXl0bVBhcnNlKGlucHV0KWA7XFxcXG5cXFxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcXFxuLy8g5YWo5rCRaHR0cHM6Ly9wY3ZpZGVvYWxpeXVuLnRpYW5zaGFuZ3JlbmppYW4ubWd0di5jb20uODh3dW1hLmNvbS8/dXJsPVxcXFxuXFxcXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXFxcbi8qXFxcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxcXG4gKiDmsZ/muZY6IGh0dHA6Ly93d3cudGlhbnNodXl1bi5uZXQvaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzQ0ODM3Ny9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXFxcbiAqIFxcXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcbiAqIFxcXFxuICovXFxcXG5cXFxcblxcXFxudmFyIHRvb2xzID0ge1xcXFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KGRhdGEpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcXFxuICAgIH0sXFxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXFxcbiAgICAgICAgaWYgKGlzRW5jcnlwdCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgfSxcXFxcbiAgICAvL2FzY2lpXFxcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMgKyBrKTtcXFxcbiAgICB9LFxcXFxuICAgIC8v5Yev5pKSXFxcXG4gICAgY2Flc2FyQ2lwaGVyOiBmdW5jdGlvbihzdHJpbmdWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmdWYWx1ZS5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XFxcXG4gICAgfSxcXFxcbiAgICBoYW5kbGVVcmw6IGZ1bmN0aW9uKHVybCwgdmlwVXJsLCBuYW1lKSB7XFxcXG4gICAgICAgIGlmKHVybCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IHVybCA9PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgIGxvZyhuYW1lICsgXFxcXFxcXCLop6PmnpDlpLHotKVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmxbMF0gPT0gJy8nKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz1odHRwJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodmlwVXJsLmluZGV4T2YoJ21ndHYuY29tJykgIT0gLTEgJiYgdXJsLmluZGV4T2YoJ1VzZXItQWdlbnQnKSA9PSAtMSkge1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHB9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxcXFxcXO+8m1xcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsKSB7XFxcXG4gICAgICAgIHNob3dMb2FkaW5nKFxcXFxcXFwi5q2j5Zyo6LCD55So572R6aG16Kej5p6QLi4uXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4gJCh1cmwpLndlYkxhenkoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIFVybHMgPSBfZ2V0VXJscygpO1xcXFxuICAgICAgICAgICAgdmFyIFJlZzEgPSAvXFxcXFxcXFwubXA0fFxcXFxcXFxcLm0zdThcXFxcXFxcXD98Lm0zdTgkfFxcXFxcXFxcLmZsdnxcXFxcXFxcXC5hdml8XFxcXFxcXFwucm12Yi87XFxcXG4gICAgICAgICAgICB2YXIgUmVnMiA9IC9wbGF5bTN1OHwuY3NzJHwuanMkfC5pY28kfGNuenpcXFxcXFxcXC4vO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBVcmxzLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGlzVXJsID0gVXJsc1tpXTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoUmVnMS50ZXN0KGlzVXJsKSAmJiAhUmVnMi50ZXN0KGlzVXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEuaGlkZUxvYWRpbmcoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSxcXFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZiwga2V5KSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24odGV4dCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAga2V5ID0ga2V5ID09IHVuZGVmaW5lZCA/ICdkdnlZUlFsblBSQ01kUVNlJyA6IGtleTtcXFxcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ190b2tlbiA9IFxcXFxcXFwiJylbMV0uc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKVswXSArICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcXFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIGtleSwgaXYpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSBqeHVybC5zcGxpdCgnP3VybD0nKVswXSArIFxcXFxcXFwiYXBpLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlaWQgPSB0b29scy5jYWVzYXJDaXBoZXIoYjY0aWQsIC0xKTtcXFxcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBqeHVybFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgcGFyc2VpZFxcXFxuICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxcXG4gICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcXFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxcXG4gICAgICAgICovXFxcXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcbiAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxcXG4gICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vcGFuZ3UvP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9IFxcXFxcXFwiaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRhKSB7XFxcXG4gICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcXFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxuICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxuICAgICAgICB2YXIganNvbiA9IHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IHBhcnNlXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgYm9keTogXFxcXFxcXCJ1cmw9XFxcXFxcXCIgKyB2aXBVcmwgKyBcXFxcXFxcIiZyZWZlcmVyPVxcXFxcXFwiICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArIFxcXFxcXFwiJnJlZj0xJnRpbWU9XFxcXFxcXCIgKyBUaW1lICsgXFxcXFxcXCImdHlwZT0mb3RoZXI9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArIFxcXFxcXFwiJmlvcz0wXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFxcXFxcIntcXFxcXFxcIiA/IEpTT04ucGFyc2UoanNvbikudXJsIDogXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICB9LFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcXFxuICAgICAgICB2YXIgcmVmID0gXFxcXFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcXFxuICAgIH0sXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcPy4qLywnJyk7XFxcXG4gICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgXFxcXFxcXCLwn6WaXFxcXFxcXCI6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICBsZXQg5L2c6ICFX+inhueVjOefpeWQjeWkp+S9rDtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBwbGF5ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHA6Ly93d3cuenJ1aXJ5LmNvbS95dW4vYXBpLnBocFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keTogXFxcXFxcXCJ1cmw9XFxcXFxcXCIgKyBpbnB1dCxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KSkudXJsO1xcXFxuICAgICAgICAgICAgaWYgKHBsYXkuc3RhcnRzV2l0aChcXFxcXFxcIi9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIHBsYXk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBmcm9tcyA9IFsnZHVvZHVvenknLCAncngnLCAncmVucmVubWknLCAnbHRuYicsICd4Znl1biddO1xcXFxuZm9yKGxldCBpIGluIGZyb21zKSB7XFxcXG4gICAgbGV0IG5hbWUgPSBmcm9tc1tpXSArIFxcXFxcXFwiKOmAmueUqOWHveaVsClcXFxcXFxcIjtcXFxcbiAgICBQYXJzZVNbbmFtZV0gPSBmdW5jdGlvbihVcmwsIHJlZmVyZXIpe1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFyc2UocmVmZXJlcik7XFxcXG4gICAgfTtcXFxcbn1cXFxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcXFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXFxcblxcXFxuXFxcXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLCBwYXJzZU5hbWUpIHtcXFxcbiAgICB0aGlzLnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXFxcbiAgICAgICAgaWYoaXNOYU4ocGFyYW0xLnRpbWVvdXQpKSB7XFxcXG4gICAgICAgICAgICBwYXJhbTEudGltZW91dCA9IDMwMDA7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRTtcXFxcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9yZXF1ZXN0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfTtcXFxcbiAgICB0aGlzLmZldGNoID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcXFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzID0gcGFyYW0xLmhlYWRlcnMgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTEuaGVhZGVycztcXFxcbiAgICAgICAgcGFyYW0xLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBO1xcXFxuICAgICAgICBpZihpc05hTihwYXJhbTEudGltZW91dCkpIHtcXFxcbiAgICAgICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMzAwMDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcXFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX2ZldGNoLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfTtcXFxcbiAgICB2YXIgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXFxcXFwuKC4qPylcXFxcXFxcXC8vKTtcXFxcbiAgICBob3N0ID0gaG9zdCA9PSBudWxsID8gbnVsbCA6IGhvc3RbMV07XFxcXG4gICAgdmFyIG5vVXJsID0gXFxcXFxcXCJ0b2FzdDovL+aOpeaUtuWIsOeahOmTvuaOpeS4ujogXFxcXFxcXCI7XFxcXG4gICAgc3dpdGNoIChteVNldC5xanUpIHtcXFxcbiAgICAgICAgY2FzZSBcXFxcXFxcIum7mOiupFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInFxLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImlxaXlpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInlvdWt1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIm1ndHYuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYmlsaWJpbGkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0Lm90aDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQucWp1O1xcXFxuICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgfVxcXFxuICAgIGlmIChwYXJzZU5hbWUpIHtcXFxcbiAgICAgICAgc3RyID0gcGFyc2VOYW1lO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgbXlDaG9pY2UgPSBzdHIuc3BsaXQoJywnKTtcXFxcbiAgICBsZXQgbGVuID0gbXlDaG9pY2UubGVuZ3RoO1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IG5hbWUgPSBteUNob2ljZVtpXTtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFBhcnNlU1tuYW1lXSh2aXBVcmwpO1xcXFxuICAgICAgICAgICAgbGV0IFJlZyA9IG5ldyBSZWdFeHAoXFxcXFxcXCJtM3U4fG1wNHxcXFxcXFxcIiArIHZpcFVybCArIFxcXFxcXFwifGh0dHBcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAoaSAhPSBsZW4gLSAxICYmICFSZWcudGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKG5hbWUgKyAn6Kej5p6Q5aSx6LSlJyk7XFxcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gdG9vbHMuaGFuZGxlVXJsKHVybCwgdmlwVXJsLCBuYW1lKTtcXFxcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdzdHJpbmcnKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShQYXJzZVNbbmFtZV0gKyB2aXBVcmwsIHRvb2xzLmhhbmRsZVVybCwgbmFtZSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgNCkgPT0gXFxcXFxcXCJodHRwXFxcXFxcXCIgfHwgaG9zdCA9PSBudWxsID8gbmFtZSArIHZpcFVybCA6IFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIiDkuI3mmK/nm7Tpk77kuZ/kuI3mmK/lhY3ll4VcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyUzogZnVuY3Rpb24oanVybCkge1xcXFxuICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoanVybCksXFxcXG4gICAgICAgICAgICBVcmwgPSAnJyxcXFxcbiAgICAgICAgICAgIGZyb20gPSAnJztcXFxcbiAgICAgICAgdmFyIGNvZGUxID0gaHRtbC5tYXRjaCgvdmFyIHBsYXllcl9bXFxcXFxcXFxzXFxcXFxcXFxTXSo/dXJsW1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKTtcXFxcbiAgICAgICAgdmFyIGRwVXJsID0gcGRmaChodG1sLCBcXFxcXFxcImlmcmFtZSYmZGF0YS1wbGF5XFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoY29kZTEgIT0gbnVsbCkge1xcXFxuICAgICAgICAgICAgZXZhbChjb2RlMVswXS5yZXBsYWNlKC9wbGF5ZXJfLio/ey8sICdwZGF0YT17JykpO1xcXFxuICAgICAgICAgICAgVXJsID0gcGRhdGEudXJsO1xcXFxuICAgICAgICAgICAgZnJvbSA9IHBkYXRhLmZyb207XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZHBVcmwgIT0gJycpIHtcXFxcbiAgICAgICAgICAgIFVybCA9IGRwVXJsLnN0YXJ0c1dpdGgoXFxcXFxcXCJodHRwXFxcXFxcXCIpID8gZGRwVXJsIDogZHBVcmwuc2xpY2UoMyk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjb2RlMiA9IGh0bWwubWF0Y2goL3ZhciBub3dbXFxcXFxcXFxzXFxcXFxcXFxTXSo/dmFyIHBuW1xcXFxcXFxcc1xcXFxcXFxcU10qPzsvKTtcXFxcbiAgICAgICAgICAgIGlmIChjb2RlMiAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChjb2RlMlswXSk7XFxcXG4gICAgICAgICAgICAgICAgVXJsID0gbm93O1xcXFxuICAgICAgICAgICAgICAgIGZyb20gPSBwbjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoVXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSB8fCBVcmwuc3RhcnRzV2l0aChcXFxcXFxcImFIUjBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIFVybCA9IGJhc2U2NERlY29kZShVcmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChVcmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcXFxuICAgICAgICAgICAgVXJsID0gdW5lc2NhcGUoVXJsKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoZnJvbXMuaW5jbHVkZXMoZnJvbSkpIHtcXFxcbiAgICAgICAgICAgIHZhciBuYW1lID0gZnJvbSArICco6YCa55So5Ye95pWwKSc7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW25hbWVdKFVybCwganVybCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKC9odG1sfGJpbGliaWxpLy50ZXN0KFVybCkpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoVXJsKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBVcmwuc3RhcnRzV2l0aCgnaHR0cCcpID8gVXJsICsgJyNpc1ZpZGVvPXRydWUjJyA6IFBhcnNlUy5kZWZhdWx0UGFyc2UoanVybCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJykpLmNqKSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gcGxheVBhcnNlLnBsYXllclMoaW5wdXQpO1xcXFxuICAgICAgICB9KSBcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXFxcbiAgICB0aGlzLmQgPSBbXTtcXFxcbiAgICByZXF1aXJlKCdodHRwczovL2docHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy9kY2JmL20vdi9Sb3V0ZS5qcycpO1xcXFxuICAgIFJvdXRlLnNldFBhcnNlKCk7XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXCJ9XVwifSIsInRpdGxlIjoi566h55CG6Kej5p6QLeaWsCDlu7og6KejIOaekCJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement