Advertisement
xiaomianao666

邀您一起看:设置

Apr 27th, 2024
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkFQSVwiLFwicGF0aFwiOlwiQVBJXCIsXCJydWxlXCI6XCIvLyDmuIXpmaTnmbvlvZXkv6Hmga9cXHJcXG5mdW5jdGlvbiBjbGVhcl91c2VyX2luZm8oKSB7XFxyXFxuICAgIGNsZWFySXRlbSgndXNlcm5hbWUnKVxcclxcbiAgICBjbGVhckl0ZW0oJ3Bhc3N3ZCcpXFxyXFxuICAgIGNsZWFySXRlbSgnYWNjZXNzX3Rva2VuJylcXHJcXG4gICAgY2xlYXJJdGVtKCdyZWZyZXNoX3Rva2VuJylcXHJcXG59XFxyXFxuXFxyXFxuLy8g55m75b2VXFxyXFxuZnVuY3Rpb24gbG9naW4odXNlcm5hbWUsIHBhc3N3b3JkKSB7XFxyXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKFxcclxcbiAgICAgICAgcG9zdCgnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9hdXRoL3NpZ25pbicsIHtcXHJcXG4gICAgICAgICAgICBib2R5OiB7XFxyXFxuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46ICcnLFxcclxcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQ6ICdZTnhUOXc3R01kV3ZFT0thJyxcXHJcXG4gICAgICAgICAgICAgICAgLy8gXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiZGJ3Mk90bVZFZXVVdklwdGIxQ295Z1xcXCIsXFxyXFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcXHJcXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICB9KVxcclxcbiAgICApXFxyXFxuICAgIGlmIChyZXMuYWNjZXNzX3Rva2VuKSB7XFxyXFxuICAgICAgICBzZXRJdGVtKCdhY2Nlc3NfdG9rZW4nLCByZXMuYWNjZXNzX3Rva2VuKVxcclxcbiAgICAgICAgc2V0SXRlbSgncmVmcmVzaF90b2tlbicsIHJlcy5yZWZyZXNoX3Rva2VuKVxcclxcbiAgICAgICAgcmV0dXJuIHRydWVcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIGxvZyhyZXMpXFxyXFxuICAgICAgICByZXR1cm4gZmFsc2VcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyDliLfmlrBhdXRob3JpemF0aW9uXFxyXFxuZnVuY3Rpb24gcmVmcmVzaF9hdXRob3JpemF0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xcclxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShcXHJcXG4gICAgICAgIHBvc3QoJ2h0dHBzOi8vdXNlci5teXBpa3Bhay5jb20vdjEvYXV0aC9zaWduaW4nLCB7XFxyXFxuICAgICAgICAgICAgYm9keToge1xcclxcbiAgICAgICAgICAgICAgICBjYXB0Y2hhX3Rva2VuOiAnJyxcXHJcXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiAnWU54VDl3N0dNZFd2RU9LYScsXFxyXFxuICAgICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6ICdkYncyT3RtVkVldVV2SXB0YjFDb3lnJyxcXHJcXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxcclxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXFxyXFxuICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIClcXHJcXG4gICAgaWYgKHJlcy5hY2Nlc3NfdG9rZW4pIHtcXHJcXG4gICAgICAgIHNldEl0ZW0oJ2FjY2Vzc190b2tlbicsIHJlcy5hY2Nlc3NfdG9rZW4pXFxyXFxuICAgICAgICBzZXRJdGVtKCdyZWZyZXNoX3Rva2VuJywgcmVzLnJlZnJlc2hfdG9rZW4pXFxyXFxuICAgICAgICByZXR1cm4gdHJ1ZVxcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgbG9nKHJlcylcXHJcXG4gICAgICAgIHJldHVybiBmYWxzZVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8vIOiOt+WPlueUqOaIt+WfuuacrOS/oeaBr1xcclxcbmZ1bmN0aW9uIGdldF91c2VyX2Jhc2VfaW5mbygpIHtcXHJcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXFxyXFxuICAgICAgICByZXF1ZXN0KGJ1aWxkVXJsKCdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL3VzZXIvbWUnLCB7fSksIHtcXHJcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxyXFxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpLFxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICB9KVxcclxcbiAgICApXFxyXFxufVxcclxcblxcclxcbi8vIOiOt+WPlueUqOaIt1ZJUOS/oeaBr1xcclxcbmZ1bmN0aW9uIGdldF91c2VyX3ZpcF9pbmZvKCkge1xcclxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcXHJcXG4gICAgICAgIHJlcXVlc3QoXFxyXFxuICAgICAgICAgICAgYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS92aXAvdjEvc3BhY2UvbGlzdCcsIHtcXHJcXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NwYWNlJyxcXHJcXG4gICAgICAgICAgICB9KSxcXHJcXG4gICAgICAgICAgICB7XFxyXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpLFxcclxcbiAgICAgICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIClcXHJcXG4gICAgKVxcclxcbn1cXHJcXG5cXHJcXG4vLyDojrflj5bpgoDor7fnoIFcXHJcXG5mdW5jdGlvbiBnZXRfdXNlcl9pbnZpdGVDb2RlKCkge1xcclxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcXHJcXG4gICAgICAgIHJlcXVlc3QoYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS92aXAvdjEvYWN0aXZpdHkvaW52aXRlQ29kZScsIHt9KSwge1xcclxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxyXFxuICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIClcXHJcXG59XFxyXFxuXFxyXFxuLy8g6I635Y+W5paH5Lu25aS5L+aWh+S7tuWIl+ihqFxcclxcbmZ1bmN0aW9uIGdldF9pdGVtc19saXN0KHBhcmVudF9pZCkge1xcclxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcXHJcXG4gICAgICAgIHJlcXVlc3QoXFxyXFxuICAgICAgICAgICAgYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlcycsIHtcXHJcXG4gICAgICAgICAgICAgICAgcGFyZW50X2lkOiBwYXJlbnRfaWQsXFxyXFxuICAgICAgICAgICAgICAgIHRodW1ibmFpbF9zaXplOiAnU0laRV9MQVJHRScsXFxyXFxuICAgICAgICAgICAgICAgIHdpdGhfYXVkaXQ6ICd0cnVlJyxcXHJcXG4gICAgICAgICAgICAgICAgbGltaXQ6ICcxMDAwJyxcXHJcXG4gICAgICAgICAgICAgICAgZmlsdGVyczogJ3tcXFwicGhhc2VcXFwiOntcXFwiZXFcXFwiOlxcXCJQSEFTRV9UWVBFX0NPTVBMRVRFXFxcIn0sXFxcInRyYXNoZWRcXFwiOntcXFwiZXFcXFwiOmZhbHNlfX0nLFxcclxcbiAgICAgICAgICAgIH0pLFxcclxcbiAgICAgICAgICAgIHtcXHJcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcclxcbiAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxyXFxuICAgICAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgKVxcclxcbiAgICApXFxyXFxufVxcclxcblxcclxcbi8vIOiOt+WPluaWh+S7tuebtOmTvlxcclxcbmZ1bmN0aW9uIGdldF9pdGVtX3VybChpdGVtX2lkKSB7XFxyXFxuICAgIHJldHVybiBKU09OLnBhcnNlKFxcclxcbiAgICAgICAgcmVxdWVzdChcXHJcXG4gICAgICAgICAgICBidWlsZFVybChcXHJcXG4gICAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlcy8ke2l0ZW1faWR9P19tYWdpYz0yMDIxJnRodW1ibmFpbF9zaXplPVNJWkVfTEFSR0VgLFxcclxcbiAgICAgICAgICAgICAgICB7fVxcclxcbiAgICAgICAgICAgICksXFxyXFxuICAgICAgICAgICAge1xcclxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSxcXHJcXG4gICAgICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICApXFxyXFxuICAgIClcXHJcXG59XFxyXFxuXFxyXFxuJC5leHBvcnRzID0ge1xcclxcbiAgICByZWZyZXNoX2F1dGhvcml6YXRpb24sXFxyXFxuICAgIGdldF91c2VyX2Jhc2VfaW5mbyxcXHJcXG4gICAgZ2V0X3VzZXJfdmlwX2luZm8sXFxyXFxuICAgIGNsZWFyX3VzZXJfaW5mbyxcXHJcXG4gICAgZ2V0X3VzZXJfaW52aXRlQ29kZSxcXHJcXG4gICAgZ2V0X2l0ZW1zX2xpc3QsXFxyXFxuICAgIGdldF9pdGVtX3VybCxcXHJcXG4gICAgbG9naW4sXFxyXFxufVxcclxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiU2hvd1wiLFwicGF0aFwiOlwiU2hvd1wiLFwicnVsZVwiOlwidmFyIHJlcyA9IFtdXFxyXFxuY29uc3QgeyBnZXRfdXNlcl9iYXNlX2luZm8sIGdldF91c2VyX3ZpcF9pbmZvLCBnZXRfdXNlcl9pbnZpdGVDb2RlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9BUEknKVxcclxcbmNvbnN0IHsgZ2VuZXJhdGVfcGF0aHMgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL1BhdGgnKVxcclxcbmNvbnN0IHsgc2VhcmNoX2JhciB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvU2VhcmNoJylcXHJcXG5jb25zdCB7IGdlbmVyYXRlX2xpc3QgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0xpc3QnKVxcclxcbmNvbnN0IHsgaW52aXRlX2dvIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9JbnZpdGUnKVxcclxcbmNvbnN0IHsgc3R5bGVfY29sb3IgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0RlYnVnJylcXHJcXG5cXHJcXG4vLyDnlKjmiLfkv6Hmga9cXHJcXG5sZXQgdXNlcl9iYXNlX2luZm8gPSBnZXRfdXNlcl9iYXNlX2luZm8oKVxcclxcbmxldCB1c2VyX3ZpcF9pbmZvID0gZ2V0X3VzZXJfdmlwX2luZm8oKVxcclxcbnB1dE15VmFyKCdzaG93X2VtYWlsJywgJzAnKVxcclxcblxcclxcbmlmIChnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nLCAnJykgPT0gJycpIHtcXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDmgqjov5jmnKrnmbvlvZXvvIzor7fngrnlh7vnmbvlvZXvvIHmiJbogIUg5Yi35paw5LiA5LiLYCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXHJcXG4gICAgICAgIHBpY191cmw6IGBodHRwczovL215cGlrcGFrLmNvbS9mYXZpY29uLTMyeDMyLnBuZ2AsXFxyXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvU2V0dGluZycsXFxyXFxuICAgIH0pXFxyXFxufSBlbHNlIHtcXHJcXG4gICAgLy8g6Ieq5Yqo5Yi35paw6YKA6K+35LiA5qyhXFxyXFxuICAgIGlmICh1c2VyX3ZpcF9pbmZvLmJhc2UudmlwX3N0YXR1cyA9PSBcXFwiaW52YWxpZFxcXCIpIHtcXHJcXG4gICAgICAgIGludml0ZV9nbyhnZXRfdXNlcl9pbnZpdGVDb2RlKCkuY29kZSlcXHJcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICQubG9nKCflt7Lnu4/mmK9QcmVtaXVt6auY57qn55So5oi377yM5peg6ZyA5Yi35paw6YKA6K+3JylcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICAvLyB0aXRsZTogYCR7dXNlcl9iYXNlX2luZm8ubmFtZSArICcoJyArIHVzZXJfYmFzZV9pbmZvLmVtYWlsLnJlcGxhY2UoL1xcXFx3ezAsOH0vLCAnKicpICsgJyknfWAsXFxyXFxuICAgICAgICB0aXRsZTogYCR7XFxyXFxuICAgICAgICAgICAgdXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXMgIT0gXFxcImludmFsaWRcXFwiXFxyXFxuICAgICAgICAgICAgICAgID8gc3R5bGVfY29sb3IodXNlcl9iYXNlX2luZm8ubmFtZSwgJyM1NTkzRjUnKSArICcgKCcgKyBzdHlsZV9jb2xvcignUHJlbWl1bScsICcjMjRCQjc1JywgMSkgKyAnKSdcXHJcXG4gICAgICAgICAgICAgICAgOiBzdHlsZV9jb2xvcih1c2VyX2Jhc2VfaW5mby5uYW1lLCAnIzU1OTNGNScpICsgJyAoJyArIHN0eWxlX2NvbG9yKCflj5fpmZAnLCAnI0M2MTgxNicsIDEpICsgJyknXFxyXFxuICAgICAgICB9YCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXHJcXG4gICAgICAgIC8vIHBpY191cmw6IGAke3VzZXJfYmFzZV9pbmZvLnBpY3R1cmV9YCxcXHJcXG4gICAgICAgIHBpY191cmw6IGBodHRwczovL215cGlrcGFrLmNvbS9mYXZpY29uLTMyeDMyLnBuZ2AsXFxyXFxuICAgICAgICBkZXNjOiBg4pqZ6K6+572uYCxcXHJcXG4gICAgICAgIC8vIGRlc2M6IGAke1xcclxcbiAgICAgICAgLy8gICAgIHVzZXJfdmlwX2luZm8uYmFzZS52aXBfc3RhdHVzXFxyXFxuICAgICAgICAvLyAgICAgICAgID8gdXNlcl92aXBfaW5mby5iYXNlLmFzc2V0cyArICdCJ1xcclxcbiAgICAgICAgLy8gICAgICAgICA6IHVzZXJfdmlwX2luZm8uYmFzZS5hc3NldHMgKyAnQidcXHJcXG4gICAgICAgIC8vIH1gLFxcclxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL1NldHRpbmcnLFxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICAvLyDmkJzntKLmoI9cXHJcXG4gICAgc2VhcmNoX2JhcihyZXMpXFxyXFxuXFxyXFxuICAgIC8vIOmXtOmalOagj1xcclxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xcclxcbiAgICAgICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAvLyDpnaLljIXlsZHot6/lvoQo5oyJ6ZKuKVxcclxcbiAgICAvLyBnZW5lcmF0ZV9wYXRocyhyZXMpXFxyXFxuICAgIGdlbmVyYXRlX3BhdGhzKHJlcywgJ3BhdGhzJywgJ0hvbWUnKVxcclxcblxcclxcbiAgICAvLyDliJfooajmoI9cXHJcXG4gICAgZ2VuZXJhdGVfbGlzdChyZXMsICdwYXRocycpXFxyXFxufVxcclxcbi8vIOi1t+mjnn5cXHJcXG5zZXRSZXN1bHQocmVzKVxcclxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGF0aFwiLFwicGF0aFwiOlwiUGF0aFwiLFwicnVsZVwiOlwiY29uc3Qge3N0eWxlX2NvbG9yfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0RlYnVnJylcXHJcXG4vLyDnlJ/miJDpppbpobXot6/lvoQo5oyJ6ZKu5qC35byPKVxcclxcbmZ1bmN0aW9uIGdlbmVyYXRlX3BhdGhzKHJlcywgcGF0aHNfa2luZCwgc2VhcmNoX3Jvb3RfcGF0aCkge1xcclxcbiAgICAvLyDojrflj5blvZPliY3nmoTot6/lvoRcXHJcXG4gICAgbGV0IHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIocGF0aHNfa2luZCwgW1xcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgIGlkOiAnJyxcXHJcXG4gICAgICAgICAgICBuYW1lOiAnSG9tZScsXFxyXFxuICAgICAgICB9LFxcclxcbiAgICBdKVxcclxcblxcclxcbiAgICAvLyDmnoTlu7rot6/lvoTnmoRuYW1l5bGe5oCn5pWw57uE77yM55So5LqO6K6+572u5qC56Lev5b6EXFxyXFxuICAgIGxldCBwYXRoc19uYW1lcyA9IFtdXFxyXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcXHJcXG4gICAgICAgIHBhdGhzX25hbWVzLnB1c2gocGF0aHNbaV0ubmFtZSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAvLyDot6/lvoTmjInpkq7kuLTml7bmlbDnu4RcXHJcXG4gICAgbGV0IHRfcmVzID0gW11cXHJcXG5cXHJcXG4gICAgLy8g6Lev5b6E5Lul5oyJ6ZKu5pa55byP5pi+56S6XFxyXFxuICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXHJcXG4gICAgICAgIGlmIChpID49IHBhdGhzX25hbWVzLmluZGV4T2Yoc2VhcmNoX3Jvb3RfcGF0aCkpIHtcXHJcXG4gICAgICAgICAgICAvLyDmt7vliqDliIbpmpTnrKZcXHJcXG4gICAgICAgICAgICB0X3Jlcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCIvXFxcIixcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogXFxcInRvYXN0Oi8v5L2g5piv5LiN5piv54K56ZSZ5LqG77yfXFxcIlxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuXFxyXFxuICAgICAgICAgICAgLy8g5re75Yqg6Lev5b6EXFxyXFxuICAgICAgICAgICAgdF9yZXMucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIC8vIHRpdGxlOiBpdGVtLm5hbWUsXFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCY4oCY4oCZ4oCZXFxcIiArIHN0eWxlX2NvbG9yKGl0ZW0ubmFtZSwgXFxcIiMyNEJCNzVcXFwiKSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKFxcclxcbiAgICAgICAgICAgICAgICAgICAgKHBhdGhzLCBpLCBwYXRoc19raW5kKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIocGF0aHNfa2luZCwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMsXFxyXFxuICAgICAgICAgICAgICAgICAgICBpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHNfa2luZFxcclxcbiAgICAgICAgICAgICAgICApLFxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pXFxyXFxuICAgIHRfcmVzLnNoaWZ0KCk7XFxyXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdF9yZXMubGVuZ3RoOyBpKyspIHtcXHJcXG4gICAgICAgIHJlcy5wdXNoKHRfcmVzW2ldKVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbiQuZXhwb3J0cyA9IHtcXHJcXG4gICAgZ2VuZXJhdGVfcGF0aHMsXFxyXFxuICAgIC8vIGdlbmVyYXRlX3NlYXJjaF9wYXRocyxcXHJcXG59XFxyXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJTZWFyY2hcIixcInBhdGhcIjpcIlNlYXJjaFwiLFwicnVsZVwiOlwiLy8g5q+P5pel5LiA5Y+l57yT5a2YXFxyXFxuZnVuY3Rpb24gc2F2ZV9kYXlfc2F5X2NhY2hlKCkge1xcclxcbiAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxyXFxuICAgIGxldCBkYXlfc2F5X2h0bWwgPSBmZXRjaCgnaHR0cHM6Ly92MS5oaXRva290by5jbicsIHtcXHJcXG4gICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6XFxyXFxuICAgICAgICAgICAgICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIyLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgfSlcXHJcXG4gICAgZGF5X3NheV9odG1sID0gSlNPTi5wYXJzZShkYXlfc2F5X2h0bWwpXFxyXFxuICAgIGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXSA9IGRheV9zYXlfaHRtbFsnaGl0b2tvdG8nXVxcclxcbiAgICBkYXlfc2F5X2NhY2hlWyd0aW1lJ10gPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxcclxcbiAgICBnbG9iYWxNYXAwLnB1dE15VmFyKCdkYXlzYXknLCBkYXlfc2F5X2NhY2hlKVxcclxcbiAgICByZXR1cm4gZGF5X3NheV9odG1sWydoaXRva290byddXFxyXFxufVxcclxcblxcclxcbi8vIOeUn+aIkOaQnOe0ouagj1xcclxcbmZ1bmN0aW9uIHNlYXJjaF9iYXIocmVzKSB7XFxyXFxuICAgIGxldCBkYXlfc2F5ID0gJydcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGxldCBkYXlfc2F5X2NhY2hlID0ge31cXHJcXG4gICAgICAgIGxldCBkYXlfdGltZSA9IDBcXHJcXG4gICAgICAgIGlmIChnbG9iYWxNYXAwLmhhc015VmFyKCdkYXlzYXknKSkge1xcclxcbiAgICAgICAgICAgIGRheV9zYXlfY2FjaGUgPSBnbG9iYWxNYXAwLmdldE15VmFyKCdkYXlzYXknLCB7fSlcXHJcXG4gICAgICAgICAgICBkYXlfdGltZSA9IGRheV9zYXlfY2FjaGVbJ3RpbWUnXVxcclxcbiAgICAgICAgICAgIGlmIChNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSAtIGRheV90aW1lID49IDEwKSB7XFxyXFxuICAgICAgICAgICAgICAgIGRheV9zYXkgPSBzYXZlX2RheV9zYXlfY2FjaGUoKVxcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIGRheV9zYXkgPSBkYXlfc2F5X2NhY2hlWydjb250ZW50J11cXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIGRheV9zYXkgPSBzYXZlX2RheV9zYXlfY2FjaGUoKVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9IGNhdGNoIHtcXHJcXG4gICAgICAgIGRheV9zYXkgPSAnJ1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcclxcbiAgICAgICAgZGVzYzogJ/CfpJY6ICcgKyBkYXlfc2F5LFxcclxcbiAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3M9JyArIGlucHV0ICsgJyZydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIidcXFwiLFxcclxcbiAgICAgICAgLy8gZXh0cmE6IHsgZGVmYXVsdFZhbHVlOiAnJyArIGRheV9zYXkgfSxcXHJcXG4gICAgICAgIC8vICAgICBleHRyYToge1xcclxcbiAgICAgICAgLy8gICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcclxcbiAgICAgICAgLy8gICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdob21lX2lucHV0JywgaW5wdXQpXFxcIixcXHJcXG4gICAgICAgIC8vICAgICB9LFxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+WbnuaUtuermScsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxyXFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+aDs1DlkIPlkaLvvIzov5jmsqHlrp7njrBcXFwiXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn5re75Yqg56OB6ZO+JyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXHJcXG4gICAgICAgIHVybDogJCgnJywgJ+i+k+WFpeejgeWKm+mTvuaOpScpLmlucHV0KCgpID0+IHtcXHJcXG4gICAgICAgICAgICByZXR1cm4gJ3Bpa3Bha2FwcDovL215cGlrcGFrLmNvbS94cGFuL21haW5fdGFiP3RhYj0xJmFkZF91cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dClcXHJcXG4gICAgICAgIH0pLFxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICAvLyByZXMucHVzaCh7XFxyXFxuICAgIC8vICAgICB0aXRsZTogJ+aQnOe0oicsXFxyXFxuICAgIC8vICAgICBjb2xfdHlwZTogJ3RleHRfMycsXFxyXFxuICAgIC8vICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaW5wdXQpID0+IHtcXHJcXG4gICAgLy8gICAgICAgICByZXR1cm4gJC5sb2coJ2hpa2VyOi8vc2VhcmNoP3M9JyArIGlucHV0ICsgJyZydWxlPScgKyBNWV9SVUxFLnRpdGxlICsgXFxcIidcXFwiKVxcclxcbiAgICAvLyAgICAgfSwgZ2V0TXlWYXIoJ2hvbWVfaW5wdXQnLCAnJykpXFxyXFxuICAgIC8vIH0pXFxyXFxufVxcclxcblxcclxcbi8vIOaQnOe0oue7k+aenOWIl+ihqFxcclxcbmZ1bmN0aW9uIHNlYXJjaF9saXN0KGtleV93b3JkLCByZXMpIHtcXHJcXG4gICAgY29uc3QgeyBnZXRFeHQgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0xpc3QnKVxcclxcbiAgICBjb25zdCB7IGdldF9pdGVtc19saXN0IH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9BUEknKVxcclxcbiAgICBsZXQgbGlzdCA9IGdldF9pdGVtc19saXN0KCcqJylcXHJcXG4gICAgbGV0IGtleV93b3JkX3JlZ2V4ID0gbmV3IFJlZ0V4cCgnLio/JyArIGtleV93b3JkICsgJy4qPycsICdtZ2knKVxcclxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QuZmlsZXMubGVuZ3RoOyBpKyspIHtcXHJcXG4gICAgICAgIGlmIChsaXN0LmZpbGVzW2ldLm5hbWUubWF0Y2goa2V5X3dvcmRfcmVnZXgpKSB7XFxyXFxuICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZShcXHJcXG4gICAgICAgICAgICAgICAgKGl0ZW0sIGV4dCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBnZXRfaXRlbV91cmwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gZ2V0X2l0ZW1fdXJsKGl0ZW0uaWQpXFxyXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgcmVzLm1lZGlhcykge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXAgPSBpdGVtLmxpbmtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC51cmwpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXAudXJsICsgZXh0XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXHJcXG4gICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgICAgICAgICAgbGlzdC5maWxlc1tpXSxcXHJcXG4gICAgICAgICAgICAgICAgZ2V0RXh0KGxpc3QuZmlsZXNbaV0ubmFtZSlcXHJcXG4gICAgICAgICAgICApXFxyXFxuXFxyXFxuICAgICAgICAgICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5maWxlc1tpXS5uYW1lLFxcclxcbiAgICAgICAgICAgICAgICBpbWc6IGxpc3QuZmlsZXNbaV0ua2luZCA9PSAnZHJpdmUjZm9sZGVyJyA/IGxpc3QuZmlsZXNbaV0uaWNvbl9saW5rIDogbGlzdC5maWxlc1tpXS50aHVtYm5haWxfbGluayxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6XFxyXFxuICAgICAgICAgICAgICAgICAgICBsaXN0LmZpbGVzW2ldLmtpbmQgPT0gJ2RyaXZlI2ZvbGRlcidcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdoaWtlcjovL2VtcHR5JiYmJyArIGxpc3QuZmlsZXNbaV0uaWQgKyAnJiYmJyArIGxpc3QuZmlsZXNbaV0ubmFtZVxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdXJsLFxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuJC5leHBvcnRzID0ge1xcclxcbiAgICBzZWFyY2hfYmFyLFxcclxcbiAgICBzZWFyY2hfbGlzdCxcXHJcXG59XFxyXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJMaXN0XCIsXCJwYXRoXCI6XCJMaXN0XCIsXCJydWxlXCI6XCJmdW5jdGlvbiBnZXRFeHQoZmlsZU5hbWUpIHtcXHJcXG4gICAgLy8gcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSlcXHJcXG4gICAgbGV0IHBfZXh0ID0gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKVxcclxcblxcclxcbiAgICBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhwX2V4dCkpIHtcXHJcXG4gICAgICAgIHZhciBleHQgPSAnI2lzVmlkZW89dHJ1ZSMnXFxyXFxuICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhwX2V4dCkpIHtcXHJcXG4gICAgICAgIHZhciBleHQgPSAnI2lzTXVzaWM9dHJ1ZSMnXFxyXFxuICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMocF9leHQpKSB7XFxyXFxuICAgICAgICB2YXIgZXh0ID0gJyMuanBnJ1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgdmFyIGV4dCA9ICcnXFxyXFxuICAgIH1cXHJcXG4gICAgcmV0dXJuIGV4dFxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBnZW5lcmF0ZV9saXN0KHJlcywgcGF0aHNfa2luZCkge1xcclxcbiAgICBjb25zdCB7IGdldF9pdGVtc19saXN0IH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9BUEknKVxcclxcbiAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihwYXRoc19raW5kLCBbXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgaWQ6ICcnLFxcclxcbiAgICAgICAgICAgIG5hbWU6ICdIb21lJyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgIF0pXFxyXFxuICAgIGxldCBsaXN0ID0gZ2V0X2l0ZW1zX2xpc3QocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpXFxyXFxuICAgIGxpc3QuZmlsZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcclxcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PSAnZHJpdmUjZm9sZGVyJykge1xcclxcbiAgICAgICAgICAgIHZhciB1cmxsID0gJCgpLmxhenlSdWxlKFxcclxcbiAgICAgICAgICAgICAgICAocGF0aHMsIGl0ZW0sIHBhdGhzX2tpbmQpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzZWFyY2hfMVxcXCIsIFxcXCIwXFxcIilcXHJcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihwYXRoc19raW5kLCBwYXRocylcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgICAgICAgICAgcGF0aHMsXFxyXFxuICAgICAgICAgICAgICAgIGl0ZW0sXFxyXFxuICAgICAgICAgICAgICAgIHBhdGhzX2tpbmRcXHJcXG4gICAgICAgICAgICApXFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHZhciBleHQgPSBnZXRFeHQoaXRlbS5uYW1lKVxcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZShcXHJcXG4gICAgICAgICAgICAoaXRlbSwgZXh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzZWFyY2hfMVxcXCIsIFxcXCIwXFxcIilcXHJcXG4gICAgICAgICAgICAgICAgY29uc3QgeyBnZXRfaXRlbV91cmwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxyXFxuICAgICAgICAgICAgICAgIGxldCByZXMgPSBnZXRfaXRlbV91cmwoaXRlbS5pZClcXHJcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIHJlcy5tZWRpYXMpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRtcCA9IGl0ZW0ubGlua1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAudXJsKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXAudXJsICsgZXh0XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICAgICAgaXRlbSxcXHJcXG4gICAgICAgICAgICBleHRcXHJcXG4gICAgICAgIClcXHJcXG4gICAgICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcclxcbiAgICAgICAgICAgIGltZzogaXRlbS5raW5kID09ICdkcml2ZSNmb2xkZXInID8gaXRlbS5pY29uX2xpbmsgOiBpdGVtLnRodW1ibmFpbF9saW5rLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXHJcXG4gICAgICAgICAgICAvLyBjb2xfdHlwZTogJ21vdmllXzEnLFxcclxcbiAgICAgICAgICAgIC8vIGNvbF90eXBlOiBcXFwibW92aWVfMV9sZWZ0X3BpY1xcXCIsXFxyXFxuICAgICAgICAgICAgdXJsOiBpdGVtLmtpbmQgPT0gJ2RyaXZlI2ZvbGRlcicgPyB1cmxsIDogdXJsLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxuXFxyXFxuJC5leHBvcnRzID0ge1xcclxcbiAgICBnZW5lcmF0ZV9saXN0LFxcclxcbiAgICBnZXRFeHQsXFxyXFxufVxcclxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiRXh0ZW5kXCIsXCJwYXRoXCI6XCJFeHRlbmRcIixcInJ1bGVcIjpcIiQuZXh0ZW5kKHtcXHJcXG4gICAgYXVkaW86IFtcXFwibXAzXFxcIiwgXFxcImZsYWNcXFwiLCBcXFwib2dnXFxcIiwgXFxcIm00YVxcXCIsIFxcXCJ3YXZcXFwiLCBcXFwib3B1c1xcXCJdLFxcclxcbiAgICBtb3ZpZTogW1xcXCJtcDRcXFwiLCBcXFwibWt2XFxcIiwgXFxcImF2aVxcXCIsIFxcXCJtb3ZcXFwiLCBcXFwicm12YlxcXCIsIFxcXCJ3ZWJtXFxcIiwgXFxcImZsdlxcXCIsIFxcXCJtNHZcXFwiLCBcXFwibTN1OFxcXCIsIFxcXCJ0c1xcXCJdLFxcclxcbiAgICBpbWc6IFtcXFwianBnXFxcIiwgXFxcInBuZ1xcXCIsIFxcXCJqcGVnXFxcIiwgXFxcImdpZlxcXCIsIFxcXCJzdmdcXFwiLCBcXFwicmF3XFxcIl1cXHJcXG59KVxcclxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiU2V0dGluZ1wiLFwicGF0aFwiOlwiU2V0dGluZ1wiLFwicnVsZVwiOlwianM6XFxyXFxuY29uc3QgeyBzdHlsZV9jb2xvciB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvRGVidWcnKVxcclxcbnNldFBhZ2VUaXRsZSgn6K6+572uJylcXHJcXG52YXIgcmVzID0gW11cXHJcXG5cXHJcXG5pZiAoZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJywgJycpID09ICcnKSB7XFxyXFxuICAgIGNsZWFyTXlWYXIoJ3R1c2VybmFtZScpXFxyXFxuICAgIGNsZWFyTXlWYXIoJ3RwYXNzd2QnKVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ/CfkaTnlKjmiLflkI0nLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn55So5oi35ZCNJyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcclxcbiAgICAgICAgZGVzYzogJ+ivt+i+k+WFpeeUqOaIt+WQjScsXFxyXFxuICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3R1c2VybmFtZScsIGlucHV0KVxcXCIsXFxyXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn8J+UkeWvhueggScsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxyXFxuICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICflr4bnoIEnLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxyXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5a+G56CBJyxcXHJcXG4gICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigndHBhc3N3ZCcsIGlucHV0KVxcXCIsXFxyXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIC8vIOmXtOmalOagj1xcclxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE1OyBpKyspIHtcXHJcXG4gICAgICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICfnoa7lrponLFxcclxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIGNvbnN0IHsgbG9naW4gfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxyXFxuICAgICAgICAgICAgc2V0SXRlbSgndXNlcm5hbWUnLCBnZXRNeVZhcigndHVzZXJuYW1lJywgJycpKVxcclxcbiAgICAgICAgICAgIHNldEl0ZW0oJ3Bhc3N3ZCcsIGdldE15VmFyKCd0cGFzc3dkJywgJycpKVxcclxcbiAgICAgICAgICAgIGxvZ2luKGdldEl0ZW0oJ3VzZXJuYW1lJywgJycpLCBnZXRJdGVtKCdwYXNzd2QnLCAnJykpXFxyXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcclxcbiAgICAgICAgICAgIC8vIHJldHVybiAndG9hc3Q6Ly8nICsgZ2V0TXlWYXIoJ3R1c2VybmFtZScpICsgJyYmJicgKyBnZXRNeVZhcigndHBhc3N3ZCcpXFxyXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn5Y+W5raIJyxcXHJcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXHJcXG4gICAgICAgICAgICBiYWNrKHRydWUpXFxyXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxyXFxuICAgIH0pXFxyXFxufSBlbHNlIHtcXHJcXG4gICAgY29uc3QgeyBnZXRfdXNlcl9iYXNlX2luZm8sIGdldF91c2VyX3ZpcF9pbmZvLCBnZXRfdXNlcl9pbnZpdGVDb2RlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9BUEknKVxcclxcblxcclxcbiAgICAvLyDnlKjmiLfkv6Hmga9cXHJcXG4gICAgbGV0IHVzZXJfYmFzZV9pbmZvID0gZ2V0X3VzZXJfYmFzZV9pbmZvKClcXHJcXG4gICAgbGV0IHVzZXJfdmlwX2luZm8gPSBnZXRfdXNlcl92aXBfaW5mbygpXFxyXFxuICAgIGxldCB1c2VyX2ludml0ZUNvZGUgPSBnZXRfdXNlcl9pbnZpdGVDb2RlKClcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgLy8gdGl0bGU6IGDwn5Gk55So5oi35ZCNKOmCrueusSk6ICR7dXNlcl9iYXNlX2luZm8ubmFtZSArICcgKCcgKyB1c2VyX2Jhc2VfaW5mby5lbWFpbCArICcpJ31gLFxcclxcbiAgICAgICAgdGl0bGU6IGDwn5GkJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi55So5oi35ZCNKOeCueWHu+aYvuekuumCrueusSlcXFwiLCBcXFwiIzI0QkI3NVxcXCIpfTogJHtnZXRNeVZhcihcXFwic2hvd19lbWFpbFxcXCIsIFxcXCIwXFxcIikgPT0gXFxcIjBcXFwiID8gdXNlcl9iYXNlX2luZm8ubmFtZSA6IHVzZXJfYmFzZV9pbmZvLm5hbWUgKyBcXFwiIChcXFwiICsgdXNlcl9iYXNlX2luZm8uZW1haWwgKyBcXFwiKVxcXCJ9YCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpPT57XFxyXFxuICAgICAgICAgICAgbGV0IHNob3dfZW1haWwgPSBnZXRNeVZhcihcXFwic2hvd19lbWFpbFxcXCIsIFxcXCIwXFxcIilcXHJcXG4gICAgICAgICAgICBpZiAoc2hvd19lbWFpbCA9PSBcXFwiMVxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNob3dfZW1haWxcXFwiLCBcXFwiMFxcXCIpXFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNob3dfZW1haWxcXFwiLCBcXFwiMVxcXCIpXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiBg8J+SjiR7XFxcIuKAmOKAmOKAmeKAmVxcXCIrc3R5bGVfY29sb3IoXFxcIuS8muWRmOetiee6p1xcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke3VzZXJfdmlwX2luZm8uYmFzZS52aXBfc3RhdHVzID8gJ1ZJUCcgOiAn6ZmQ5Yi2J31gLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiBg8J+Xgu+4jyR7XFxcIuKAmOKAmOKAmeKAmVxcXCIrc3R5bGVfY29sb3IoXFxcIuepuumXtOWuuemHj1xcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke1xcclxcbiAgICAgICAgICAgIHVzZXJfdmlwX2luZm8uYmFzZS52aXBfc3RhdHVzID8gdXNlcl92aXBfaW5mby5iYXNlLmFzc2V0cyArICdCJyA6IHVzZXJfdmlwX2luZm8uYmFzZS5hc3NldHMgKyAnQidcXHJcXG4gICAgICAgIH1gLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiBg8J+UoSR7XFxcIuKAmOKAmOKAmeKAmVxcXCIrc3R5bGVfY29sb3IoXFxcIumCgOivt+eggSjngrnlh7vlpI3liLYpXFxcIiwgXFxcIiMyNEJCNzVcXFwiKX06ICR7dXNlcl9pbnZpdGVDb2RlLmNvZGV9YCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG4gICAgICAgIHVybDogYGNvcHk6Ly8ke3VzZXJfaW52aXRlQ29kZS5jb2RlfWAsXFxyXFxuICAgICAgICAvLyBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDij7HvuI8ke1xcXCLigJjigJjigJnigJlcXFwiK3N0eWxlX2NvbG9yKFxcXCLpgoDor7fml7bpl7TlkozmrKHmlbAo54K55Ye75omL5Yqo6YKA6K+3KVxcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke1xcclxcbiAgICAgICAgICAgIGdldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCAnRmFpbCcpID09ICdGYWlsJyA/IFxcXCLpgoDor7flpLHotKVcXFwiOiBnZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgJ0ZhaWwnKVxcclxcbiAgICAgICAgfSAo5qyh5pWwOiR7Z2V0TXlWYXIoJ2ludml0ZV9jb3VudCcsICcwJyl9KWAsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxyXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodXNlcl9pbnZpdGVDb2RlKT0+e1xcclxcbiAgICAgICAgICAgIGNvbnN0IHtpbnZpdGVfZ299ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvSW52aXRlXFxcIilcXHJcXG4gICAgICAgICAgICBjb25zdCB7IHN0eWxlX2NvbG9yIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9EZWJ1ZycpXFxyXFxuICAgICAgICAgICAgaW52aXRlX2dvKHVzZXJfaW52aXRlQ29kZS5jb2RlKVxcclxcbiAgICAgICAgICAgIGxldCBuZXdfdGl0bGUgPSBg4o+x77iPJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi6YKA6K+35pe26Ze05ZKM5qyh5pWwKOeCueWHu+aJi+WKqOWIt+aWsClcXFwiLCBcXFwiIzI0QkI3NVxcXCIpfTogJHtcXHJcXG4gICAgICAgICAgICBnZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgJ0ZhaWwnKSA9PSAnRmFpbCcgPyBcXFwi6YKA6K+35aSx6LSlXFxcIjogZ2V0SXRlbSgnaW52aXRlX3Jlc3VsdCcsICdGYWlsJyl9ICjmrKHmlbA6JHtnZXRNeVZhcignaW52aXRlX2NvdW50JywgJzAnKX0pYFxcclxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcImF1dG9faW52aXRlX2luZm9cXFwiLHt0aXRsZTogbmV3X3RpdGxlfSlcXHJcXG4gICAgICAgICAgICAvLyByZWZyZXNoUGFnZSgpXFxyXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcclxcbiAgICAgICAgfSwgdXNlcl9pbnZpdGVDb2RlKSxcXHJcXG4gICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgaWQ6IFxcXCJhdXRvX2ludml0ZV9pbmZvXFxcIlxcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiBg8J+YiCR7XFxcIuKAmOKAmOKAmeKAmVxcXCIrc3R5bGVfY29sb3IoXFxcIuaYr+WQpuW8gOWQr+iHquWKqOmCgOivtyjngrnlh7vliIfmjaIpXFxcIiwgXFxcIiMyNEJCNzVcXFwiKX06ICR7Z2V0SXRlbSgnYXV0b19yZWZyZXNoX2ludml0ZScsICcwJykgPT0gJzAnID8gJ+WQpicgOiAn5pivJ31gLFxcclxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCk9PntcXHJcXG4gICAgICAgICAgICBpZihnZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzAnKSA9PSAnMCcpIHtcXHJcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnYXV0b19yZWZyZXNoX2ludml0ZScsICcxJylcXHJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzAnKVxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxyXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcclxcbiAgICAgICAgfSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDwn5i0JHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi5piv5ZCm5omT5Y2w6YKA6K+35pel5b+XKOeCueWHu+WIh+aNoilcXFwiLCBcXFwiIzI0QkI3NVxcXCIpfTogJHtnZXRNeVZhcihcXFwiZGVidWdfZW5hYmxlXFxcIiwgXFxcIjBcXFwiKSA9PSAnMCcgPyAn5ZCmJyA6ICfmmK8nfWAsXFxyXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKT0+e1xcclxcbiAgICAgICAgICAgIGlmKGdldE15VmFyKFxcXCJkZWJ1Z19lbmFibGVcXFwiLCBcXFwiMFxcXCIpID09ICcwJykge1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZGVidWdfZW5hYmxlXFxcIiwgXFxcIjFcXFwiKVxcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkZWJ1Z19lbmFibGVcXFwiLCBcXFwiMFxcXCIpXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcclxcbiAgICB9KVxcclxcbn1cXHJcXG5cXHJcXG5zZXRSZXN1bHQocmVzKVxcclxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiRGVidWdcIixcInBhdGhcIjpcIkRlYnVnXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBzdHlsZV9jb2xvcihzdHIsIGNvbG9yLCBzbWFsbCkge1xcclxcbiAgICBpZiAoc21hbGwgPT0gdW5kZWZpbmVkKSB7XFxyXFxuICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjonICsgY29sb3IgKyAnXFxcIj4nICsgc3RyICsgJzwvc3Bhbj4nXFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjonICsgY29sb3IgKyAnXFxcIj48c21hbGw+JyArIHN0ciArICc8L3NtYWxsPjwvc3Bhbj4nXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gZGVidWdfbG9nKG9iaikge1xcclxcbiAgICBsZXQgZGVidWdfZW5ibGUgPSBnZXRNeVZhcihcXFwiZGVidWdfZW5hYmxlXFxcIiwgXFxcIjBcXFwiKVxcclxcbiAgICBpZiAoZGVidWdfZW5ibGUgPT0gXFxcIjFcXFwiKSB7XFxyXFxuICAgIC8vIGlmICh0cnVlKSB7XFxyXFxuICAgICAgICAkLmxvZyhvYmopXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuJC5leHBvcnRzID0ge1xcclxcbiAgICBzdHlsZV9jb2xvcixcXHJcXG4gICAgZGVidWdfbG9nXFxyXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiSW52aXRlXCIsXCJwYXRoXCI6XCJJbnZpdGVcIixcInJ1bGVcIjpcIi8v5pS56Ieq5LiN55+l5ZCN5aSn5L2sXFxyXFxuXFxyXFxuLy8g6LCD6K+V5pel5b+XXFxyXFxuY29uc3QgeyBkZWJ1Z19sb2cgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0RlYnVnJylcXHJcXG5cXHJcXG4vLyAgPT09PT09PT09PT09PT09Pee9kee7nOivt+axguWPguaVsD09PT09PT09PT09PT09PT1cXHJcXG5sZXQgaW5Db2RlLCBtYWlsLCB4aWQsIGtleSwgc2lnbiwgdCAvLyDov5nph4zkv67mlLnoh6rlt7HnmoTpgoDor7fnoIFcXHJcXG5cXHJcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKCdoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qcycpXFxyXFxuXFxyXFxuY29uc3QgZGV2aWNlTmFtZSA9ICdYSUFPTUknXFxyXFxuY29uc3QgZGV2aWNlTW9kZWwgPSAnMjAxMjA1MSdcXHJcXG5jb25zdCBjbGllbnQgPSAnWU54VDl3N0dNZFd2RU9LYSdcXHJcXG5jb25zdCBwd2QgPSAncHc5OTk5OTknXFxyXFxuY29uc3QgYmFzaWNSZXF1ZXN0SGVhZGVyc18xID0ge1xcclxcbiAgICAnQWNjZXB0LUxhbmd1YWdlJzogJ3poJyxcXHJcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyxcXHJcXG4gICAgSG9zdDogJ3VzZXIubXlwaWtwYWsuY29tJyxcXHJcXG4gICAgQ29ubmVjdGlvbjogJ0tlZXAtQWxpdmUnLFxcclxcbiAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLFxcclxcbiAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcclxcbn1cXHJcXG5cXHJcXG4vLyAgPT09PT09PT09PT09PT09PT095Li75Ye95pWwPT09PT09PT09PT09PT09PT09PVxcclxcbmZ1bmN0aW9uIGludml0ZV9nbyhuZXdJbkNvZGUpIHtcXHJcXG4gICAgc2V0SXRlbSgnaW52aXRlX3Jlc3VsdCcsIFxcXCJGYWlsXFxcIilcXHJcXG4gICAgbGV0IGludml0ZV9saW1pdF9jb3VudCA9IDNcXHJcXG4gICAgbGV0IGludml0ZV9jdXJyZW50X2NvdW50ID0gTnVtYmVyKGdldE15VmFyKCdpbnZpdGVfY291bnQnLCAnMCcpKVxcclxcbiAgICBpZiAoaW52aXRlX2N1cnJlbnRfY291bnQgPj0gaW52aXRlX2xpbWl0X2NvdW50KSB7XFxyXFxuICAgICAgICAkLmxvZyhg6YKA6K+35qyh5pWw5aSn5LqOJHtpbnZpdGVfbGltaXRfY291bnR977yM5pqC5pe256aB5q2i6YKA6K+3YClcXHJcXG4gICAgICAgIHJldHVyblxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC8vIOa1i+ivleS7o+eggVxcclxcbiAgICAvLyBwdXRNeVZhcignaW52aXRlX2NvdW50JywgKGludml0ZV9jdXJyZW50X2NvdW50ICsgMSkudG9TdHJpbmcoKSlcXHJcXG4gICAgLy8gY2hlY2tfaW52aXRlX3Jlc3VsdCgpXFxyXFxuICAgIC8vIGRlYnVnX2xvZygn6YKA6K+35oiQ5Yqf5ZWmJylcXHJcXG4gICAgLy8gcmV0dXJuXFxyXFxuXFxyXFxuICAgIGluQ29kZSA9IG5ld0luQ29kZVxcclxcbiAgICB4aWQgPSB1dWlkdjQoKS5yZXBsYWNlKC8tL2csICcnKVxcclxcbiAgICB0ID0gU3RyaW5nKERhdGUubm93KCkpXFxyXFxuICAgIGtleSA9IGdldFVBS2V5KClcXHJcXG4gICAgdWEgPSBnZXRVc2VyQWdlbnQoa2V5KVxcclxcbiAgICBzaWduID0gZ2V0U2lnbigpXFxyXFxuICAgIG1haWwgPSBnZXRFbWFpbCgpXFxyXFxuICAgIGRlYnVnX2xvZyhg6I635Y+W6YKu566x5Zyw5Z2AOiR7bWFpbH1gKVxcclxcbiAgICB0cnkge1xcclxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bliJ3lp4tUT0tFTjonKVxcclxcbiAgICAgICAgY29uc3QgcmVzdWx0MSA9IGluaXQoKVxcclxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDEpXFxyXFxuICAgICAgICBjb25zdCByZXN1bHQyID0gZ2V0SW1hZ2UoKVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bmu5HlnZfpqozor4HmlbDmja46JylcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQyKVxcclxcbiAgICAgICAgZGVidWdfbG9nKGDpnIDopoHnp7vliqjmu5HlnZc6ICR7cmVzdWx0Mlsnc2VsZWN0SWQnXX0g5qyhYClcXHJcXG4gICAgICAgIGRlYnVnX2xvZygn6I635Y+W6aqM6K+B5ruR5Z2XVE9LRU46JylcXHJcXG4gICAgICAgIGNvbnN0IHJlc3VsdDMgPSBnZXROZXdUb2tlbihyZXN1bHQyLCByZXN1bHQxWydjYXB0Y2hhX3Rva2VuJ10pXFxyXFxuICAgICAgICBkZWJ1Z19sb2cocmVzdWx0MylcXHJcXG4gICAgICAgIGRlYnVnX2xvZygn5Y+R6YCB6aqM6K+B56CB6YKu5Lu2OicpXFxyXFxuICAgICAgICBjb25zdCByZXN1bHQ0ID0gdmVyaWZpY2F0aW9uKHJlc3VsdDNbJ2NhcHRjaGFfdG9rZW4nXSlcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQ0KVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bpgq7ku7bpqozor4HnoIEuLi4uLi4nKVxcclxcbiAgICAgICAgY29uc3QgcmVzdWx0NSA9IGdldENvZGUoKVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfpgq7ku7bpqozor4HnoIE6JylcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQ1KVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bpqozor4FUT0tFTjonKVxcclxcbiAgICAgICAgY29uc3QgcmVzdWx0NiA9IHZlcmlmeShyZXN1bHQ0Wyd2ZXJpZmljYXRpb25faWQnXSwgcmVzdWx0NSlcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQ2KVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bmlrDotKbmiLdJROWPilRPS0VOOicpXFxyXFxuICAgICAgICBjb25zdCByZXN1bHQ3ID0gc2lnbnVwKHJlc3VsdDZbJ3ZlcmlmaWNhdGlvbl90b2tlbiddKVxcclxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDcpXFxyXFxuICAgICAgICBkZWJ1Z19sb2coJ+iOt+WPluS6jOasoeWuieWFqOmqjOivgVRPS0VOOicpXFxyXFxuICAgICAgICBjb25zdCByZXN1bHQ4ID0gaW5pdDEocmVzdWx0N1snYWNjZXNzX3Rva2VuJ10sIHJlc3VsdDdbJ3N1YiddKVxcclxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDgpXFxyXFxuICAgICAgICBkZWJ1Z19sb2coJ+WwneivleWPkei1t+mCgOivtzonKVxcclxcbiAgICAgICAgY29uc3QgcmVzdWx0OSA9IGludml0ZShyZXN1bHQ3WydzdWInXSwgcmVzdWx0N1snYWNjZXNzX3Rva2VuJ10sIHJlc3VsdDhbJ2NhcHRjaGFfdG9rZW4nXSlcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQ5KVxcclxcbiAgICAgICAgZGVidWdfbG9nKCfmnIDlkI7nu5Pmnpw6JylcXHJcXG4gICAgICAgIGNvbnN0IHJlc3VsdDEwID0gYWN0aXZhdGlvbkNvZGUocmVzdWx0N1snYWNjZXNzX3Rva2VuJ10sIHJlc3VsdDhbJ2NhcHRjaGFfdG9rZW4nXSlcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQxMClcXHJcXG4gICAgICAgIGNoZWNrX2ludml0ZV9yZXN1bHQocmVzdWx0MTApXFxyXFxuICAgICAgICBwdXRNeVZhcignaW52aXRlX2NvdW50JywgKGludml0ZV9jdXJyZW50X2NvdW50ICsgMSkudG9TdHJpbmcoKSlcXHJcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvcilcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4kLmV4cG9ydHMgPSB7XFxyXFxuICAgIGludml0ZV9nbyxcXHJcXG59XFxyXFxuXFxyXFxuLy8g56Gu6K6k5piv5ZCm6YKA6K+35oiQ5Yqf5Ye95pWwXFxyXFxuXFxyXFxuZnVuY3Rpb24gY2hlY2tfaW52aXRlX3Jlc3VsdChyZXN1bHQxMCkge1xcclxcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXFxyXFxuICAgIC8vIOagvOW8j+WMluaXpeacn+WSjOaXtumXtOS4uiAnWVlZWS9NTS9ERCBISDpNTSdcXHJcXG4gICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGAke25vdy5nZXRGdWxsWWVhcigpfS8keyhub3cuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHtub3dcXHJcXG4gICAgICAgIC5nZXREYXRlKClcXHJcXG4gICAgICAgIC50b1N0cmluZygpXFxyXFxuICAgICAgICAucGFkU3RhcnQoMiwgJzAnKX0vJHtub3cuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bm93XFxyXFxuICAgICAgICAuZ2V0TWludXRlcygpXFxyXFxuICAgICAgICAudG9TdHJpbmcoKVxcclxcbiAgICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9YFxcclxcbiAgICAvLyBzZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgYCR7Zm9ybWF0dGVkVGltZX1gKVxcclxcbiAgICBpZiAocmVzdWx0MTAuZGF0YS5zdGF0dXMgPT0gXFxcIm9rXFxcIikge1xcclxcbiAgICAgICAgJC5sb2coXFxcIuWIt+aWsOmCgOivt+aIkOWKn+S6huWRolxcXCIpXFxyXFxuICAgICAgICBzZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgYCR7Zm9ybWF0dGVkVGltZX1gKVxcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgc2V0SXRlbSgnaW52aXRlX3Jlc3VsdCcsIFxcXCJGYWlsXFxcIilcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyA9PT09PT09PT09PT09PT3pgq7nrrFBUEnlh73mlbA9PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG5mdW5jdGlvbiBnZXRFbWFpbCgpIHtcXHJcXG4gICAgY29uc3QgZG9tYWlucyA9IFsneXptLmRlJywgJ3FhYnEuY29tJywgJ2VuZC50dycsICd1dWYubWUnXVxcclxcbiAgICBjb25zdCBkb21haW4gPSBkb21haW5zW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRvbWFpbnMubGVuZ3RoKV1cXHJcXG4gICAgY29uc3QgY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknXFxyXFxuICAgIGxldCByZXN1bHQgPSAnJ1xcclxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXHJcXG4gICAgICAgIGxldCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnMubGVuZ3RoKVxcclxcbiAgICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KHJhbmRvbUluZGV4KVxcclxcbiAgICB9XFxyXFxuICAgIHJldHVybiByZXN1bHQgKyAnQCcgKyBkb21haW5cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gZ2V0RW1haWxJZCh0ZW1wKSB7XFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICByZXR1cm4gdGVtcFswXVsnaWQnXVxcclxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcclxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gZXh0cmFjdFZlcmlmaWNhdGlvbkNvZGUodGV4dCkge1xcclxcbiAgICBjb25zdCBwYXR0ZXJuID0gLzxoMj4oXFxcXGR7Nn0pPFxcXFwvaDI+LyAvLyDljLnphY025L2N6L+e57ut5pWw5a2XXFxyXFxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaChwYXR0ZXJuKVxcclxcbiAgICBpZiAobWF0Y2gpIHtcXHJcXG4gICAgICAgIHJldHVybiBtYXRjaFsxXVxcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgcmV0dXJuIG51bGxcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBnZXRDb2RlKCkge1xcclxcbiAgICB0cnkge1xcclxcbiAgICAgICAgbGV0IHRlc3RfbnVtID0gMTBcXHJcXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZldGNoKCdodHRwczovL2FwaS5tYWlsLmN4L2FwaS92MS9hdXRoL2F1dGhvcml6ZV90b2tlbicsIHtcXHJcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXHJcXG4gICAgICAgIGxldCBjb29raWUgPSAnYXV0aF90b2tlbj0lMjInICsgcmVzcG9uc2VEYXRhICsgJyUyMiUwQSdcXHJcXG4gICAgICAgIGxldCBoZWFkZXJzID0ge1xcclxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxyXFxuICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXFxyXFxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Jlc3BvbnNlRGF0YX1gLFxcclxcbiAgICAgICAgICAgIENvb2tpZTogY29va2llLFxcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgd2hpbGUgKHRlc3RfbnVtID49IDApIHtcXHJcXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UxID0gZmV0Y2goYGh0dHBzOi8vYXBpLm1haWwuY3gvYXBpL3YxL21haWxib3gvJHttYWlsfWAsIHtcXHJcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgICAgIGxldCByZXNwb25zdDFEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZTEpXFxyXFxuICAgICAgICAgICAgbGV0IGlkID0gZ2V0RW1haWxJZChyZXNwb25zdDFEYXRhKVxcclxcbiAgICAgICAgICAgIGlmIChpZCkge1xcclxcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UyID0gZmV0Y2goYGh0dHBzOi8vYXBpLm1haWwuY3gvYXBpL3YxL21haWxib3gvJHttYWlsfS8ke2lkfWAsIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxyXFxuICAgICAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZTIpXFxyXFxuICAgICAgICAgICAgICAgIGxldCBlbWFpbFRleHQgPSBkYXRhWydib2R5J11bJ2h0bWwnXVxcclxcbiAgICAgICAgICAgICAgICBsZXQgdmVyaWZpY2F0aW9uQ29kZSA9IGV4dHJhY3RWZXJpZmljYXRpb25Db2RlKGVtYWlsVGV4dClcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHZlcmlmaWNhdGlvbkNvZGUpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2ZXJpZmljYXRpb25Db2RlXFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0ZXN0X251bS0tXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sb2coJ+acquiDveaPkOWPluWIsOmqjOivgeeggSznrYnlvoU1c+WQjumHjeivlScpXFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICB0ZXN0X251bS0tXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoNTAwMClcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSBjYXRjaCAoZSkge1xcclxcbiAgICAgICAgZGVidWdfbG9nKGUudG9TdHJpbmcoKSlcXHJcXG4gICAgICAgIHRocm93IGVcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vLyAgPT09PT09PT09PT09PT095Yqg5a+G5Y+K5Y+C5pWw5Ye95pWwPT09PT09PT09PT09PT09PVxcclxcblxcclxcbmZ1bmN0aW9uIHV1aWR2NCgpIHtcXHJcXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcXHJcXG4gICAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDAsXFxyXFxuICAgICAgICAgICAgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDhcXHJcXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KVxcclxcbiAgICB9KVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBnZXRVQUtleSgpIHtcXHJcXG4gICAgY29uc3QgZyA9IHhpZCArICdjb20ucGlrY2xvdWQucGlrcGFrMWFwcGtleSdcXHJcXG4gICAgY29uc3QgZiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoZykudG9EaWdlc3QoKS5zaGExKClcXHJcXG4gICAgY29uc3QgaCA9IG1kNShmKVxcclxcbiAgICByZXR1cm4geGlkICsgaFxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBnZXRVc2VyQWdlbnQoa2V5KSB7XFxyXFxuICAgIHJldHVybiBgQU5EUk9JRC1jb20ucGlrY2xvdWQucGlrcGFrLzEuMzguMCBwcm90b2NvbHZlcnNpb24vMjAwIGFjY2Vzc3R5cGUvIGNsaWVudGlkLyR7Y2xpZW50fSBjbGllbnR2ZXJzaW9uLzEuMzguMCBhY3Rpb25fdHlwZS8gbmV0d29ya3R5cGUvV0lGSSBzZXNzaW9uaWQvIGRldmljZWlkLyR7eGlkfSBwcm92aWRlcm5hbWUvTk9ORSBkZXZpY2VzaWduL2RpdjEwMS4ke2tleX0gcmVmcmVzaF90b2tlbi8gc2RrdmVyc2lvbi8xLjEuMC4xMTAwMDAgZGF0ZXRpbWUvJHt0fSB1c3Juby8gYXBwbmFtZS9hbmRyb2lkLWNvbS5waWtjbG91ZC5waWtwYWsgc2Vzc2lvbl9vcmlnaW4vIGdyYW50X3R5cGUvIGFwcGlkLyBjbGllbnRpcC8gZGV2aWNlbmFtZS8ke2RldmljZU5hbWV9XyR7ZGV2aWNlTW9kZWx9IG9zdmVyc2lvbi8xMyBwbGF0Zm9ybXZlcnNpb24vMTAgYWNjZXNzbW9kZS8gZGV2aWNlbW9kZWwvJHtkZXZpY2VNb2RlbH1gXFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGdldFNpZ24oKSB7XFxyXFxuICAgIGNvbnN0IGUgPSBbXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAnWjFHVUg5RlBkZDJ1UjQ4JyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAnVzRBdDhDTjAwWWVJQ2ZyaEt5ZScsXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxyXFxuICAgICAgICAgICAgc2FsdDogJ1dic0pzZXhNVElqK3FqdVZOa1RaVUp4cVVrZGYnLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHtcXHJcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcclxcbiAgICAgICAgICAgIHNhbHQ6ICdPNTZiY1dNb0hhVFhleTVRbnpLWERVRVRlYVZTRCcsXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxyXFxuICAgICAgICAgICAgc2FsdDogJ25BTjNqQnJpeTgvUFhHQWRzbjN5UE1VJyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAnK09RRWlvTkVDTmY5VWRSZScsXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxyXFxuICAgICAgICAgICAgc2FsdDogJzJCVEJ4WjNJYlBua3JyZmQvJyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAnZ0JpcDVBWXRtNTMnLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHtcXHJcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcclxcbiAgICAgICAgICAgIHNhbHQ6ICc5Rk15cnZqWkZaSlQ1WStiMU5lU1lmczUnLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHtcXHJcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcclxcbiAgICAgICAgICAgIHNhbHQ6ICcwY0lCdEVWV1lDS2RJT2xPWG5USlBoTEdVL3k1JyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAnOTJqNEkrWmlNeXhGeDZRJyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXHJcXG4gICAgICAgICAgICBzYWx0OiAneE5GTjlSblVsdTIxOHMnLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHtcXHJcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcclxcbiAgICAgICAgICAgIHNhbHQ6ICdVWmNublEybmthWTBTJyxcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgIF1cXHJcXG4gICAgbGV0IG1kNV9oYXNoID0gYFlOeFQ5dzdHTWRXdkVPS2ExLjM4LjBjb20ucGlrY2xvdWQucGlrcGFrJHt4aWR9JHt0fWBcXHJcXG4gICAgZS5mb3JFYWNoKChpdGVtKSA9PiB7XFxyXFxuICAgICAgICBtZDVfaGFzaCArPSBpdGVtLnNhbHRcXHJcXG4gICAgICAgIG1kNV9oYXNoID0gbWQ1KG1kNV9oYXNoKVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICByZXR1cm4gbWQ1X2hhc2hcXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gaXRlbV9jb21wYXJlKGltZ19saXN0LCBtb2RlX2xpc3QpIHtcXHJcXG4gICAgbGV0IHNjb3JlID0gMFxcclxcbiAgICBsZXQgcmFuayA9IDBcXHJcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcXHJcXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMzsgaisrKSB7XFxyXFxuICAgICAgICAgICAgaWYgKGltZ19saXN0W2ldW2pdICE9PSBtb2RlX2xpc3RbaV1bal0pIHtcXHJcXG4gICAgICAgICAgICAgICAgc2NvcmUgKz0gMVxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICBpZiAoc2NvcmUgPT09IDIpIHtcXHJcXG4gICAgICAgIHJhbmsgKz0gMVxcclxcbiAgICB9XFxyXFxuICAgIHJldHVybiByYW5rXFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGxpc3RfY29tcGFyZShmcmFtZXMpIHtcXHJcXG4gICAgbGV0IHNjb3JlX2xpc3QgPSBbXVxcclxcbiAgICBsZXQgZmxhZyA9IDBcXHJcXG4gICAgZm9yIChsZXQgZnJhbWUgb2YgZnJhbWVzKSB7XFxyXFxuICAgICAgICBsZXQgaW1nX2xpc3QgPSBmcmFtZS5tYXRyaXhcXHJcXG4gICAgICAgIGxldCBzY29yZXMgPSAwXFxyXFxuICAgICAgICBmb3IgKGxldCBtb2RlX2ZyYW1lIG9mIGZyYW1lcykge1xcclxcbiAgICAgICAgICAgIGxldCBtb2RlX2xpc3QgPSBtb2RlX2ZyYW1lLm1hdHJpeFxcclxcbiAgICAgICAgICAgIGxldCBvbmVfc2NvcmUgPSBpdGVtX2NvbXBhcmUoaW1nX2xpc3QsIG1vZGVfbGlzdClcXHJcXG4gICAgICAgICAgICBzY29yZXMgKz0gb25lX3Njb3JlXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBzY29yZV9saXN0LnB1c2goc2NvcmVzKVxcclxcbiAgICAgICAgZmxhZyArPSAxXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XFxyXFxuICAgICAgICBpZiAoc2NvcmVfbGlzdFtpXSA9PT0gMTEpIHtcXHJcXG4gICAgICAgICAgICAvLyBkZWJ1Z19sb2coaSlcXHJcXG4gICAgICAgICAgICByZXR1cm4gaVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIHIoZSwgdCkge1xcclxcbiAgICBsZXQgbiA9IHQgLSAxXFxyXFxuICAgIGlmIChuIDwgMCkge1xcclxcbiAgICAgICAgbiA9IDBcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgciA9IGVbbl1cXHJcXG5cXHJcXG4gICAgbGV0IHUgPSBNYXRoLmZsb29yKHJbJ3JvdyddIC8gMikgKyAxXFxyXFxuICAgIGxldCBjID0gTWF0aC5mbG9vcihyWydjb2x1bW4nXSAvIDIpICsgMVxcclxcblxcclxcbiAgICBsZXQgZiA9IHJbJ21hdHJpeCddW3VdW2NdXFxyXFxuICAgIGxldCBsID0gdCArIDFcXHJcXG4gICAgaWYgKGwgPj0gZS5sZW5ndGgpIHtcXHJcXG4gICAgICAgIGwgPSB0XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IGQgPSBlW2xdXFxyXFxuICAgIGxldCBwID0gbCAlIGRbJ3JvdyddXFxyXFxuICAgIGxldCBoID0gbCAlIGRbJ2NvbHVtbiddXFxyXFxuXFxyXFxuICAgIGxldCBnID0gZFsnbWF0cml4J11bcF1baF1cXHJcXG5cXHJcXG4gICAgbGV0IHkgPSBlW3RdXFxyXFxuICAgIGxldCBtID0gMyAlIHlbJ3JvdyddXFxyXFxuICAgIGxldCB2ID0gNyAlIHlbJ2NvbHVtbiddXFxyXFxuICAgIGxldCB3ID0geVsnbWF0cml4J11bbV1bdl1cXHJcXG4gICAgbGV0IGIgPSBwYXJzZUludChpKGYpKSArIG8odylcXHJcXG4gICAgbGV0IHggPSBwYXJzZUludChpKHcpKSAtIG8oZilcXHJcXG5cXHJcXG4gICAgcmV0dXJuIFtzKGEoaShmKSwgbyhmKSkpLCBzKGEoaShnKSwgbyhnKSkpLCBzKGEoaSh3KSwgbyh3KSkpLCBzKGEoYiwgeCkpXVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBpKGUpIHtcXHJcXG4gICAgcmV0dXJuIHBhcnNlSW50KGUuc3BsaXQoJywnKVswXSlcXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gbyhlKSB7XFxyXFxuICAgIHJldHVybiBwYXJzZUludChlLnNwbGl0KCcsJylbMV0pXFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGEoZSwgdCkge1xcclxcbiAgICByZXR1cm4gZSArICde4oGjXicgKyB0XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIHMoZSkge1xcclxcbiAgICBsZXQgdCA9IDBcXHJcXG4gICAgbGV0IG4gPSBlLmxlbmd0aFxcclxcbiAgICBmb3IgKGxldCByID0gMDsgciA8IG47IHIrKykge1xcclxcbiAgICAgICAgdCA9IHUoMzEgKiB0ICsgZS5jaGFyQ29kZUF0KHIpKVxcclxcbiAgICB9XFxyXFxuICAgIHJldHVybiB0XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIHUoZSkge1xcclxcbiAgICBsZXQgdCA9IC0yMTQ3NDgzNjQ4XFxyXFxuICAgIGxldCBuID0gMjE0NzQ4MzY0N1xcclxcbiAgICBpZiAoZSA+IG4pIHtcXHJcXG4gICAgICAgIHJldHVybiB0ICsgKChlIC0gbikgJSAobiAtIHQgKyAxKSkgLSAxXFxyXFxuICAgIH1cXHJcXG4gICAgaWYgKGUgPCB0KSB7XFxyXFxuICAgICAgICByZXR1cm4gbiAtICgodCAtIGUpICUgKG4gLSB0ICsgMSkpICsgMVxcclxcbiAgICB9XFxyXFxuICAgIHJldHVybiBlXFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGMoZSwgdCkge1xcclxcbiAgICByZXR1cm4gcyhlICsgJ+KBoycgKyB0KVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBpbWdfamooZSwgdCwgbikge1xcclxcbiAgICByZXR1cm4ge1xcclxcbiAgICAgICAgY2E6IHIoZSwgdCksXFxyXFxuICAgICAgICBmOiBjKG4sIHQpLFxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8vICA9PT09PT09PT09PT09PT09572R57uc6K+35rGC5Ye95pWwPT09PT09PT09PT09PT09PVxcclxcblxcclxcbmZ1bmN0aW9uIGluaXQoKSB7XFxyXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL3NoaWVsZC9jYXB0Y2hhL2luaXQnXFxyXFxuICAgIGNvbnN0IHJlcXVlc3R1cmwgPSBidWlsZFVybCh1cmwsIHtcXHJcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICB9KVxcclxcbiAgICBjb25zdCBqc29uX2RhdGEgPSB7XFxyXFxuICAgICAgICBhY3Rpb246ICdQT1NUOi92MS9hdXRoL3ZlcmlmaWNhdGlvbicsXFxyXFxuICAgICAgICBjYXB0Y2hhX3Rva2VuOiAnJyxcXHJcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICAgICAgZGV2aWNlX2lkOiB4aWQsXFxyXFxuICAgICAgICBtZXRhOiB7XFxyXFxuICAgICAgICAgICAgY2FwdGNoYV9zaWduOiAnMS4nICsgc2lnbixcXHJcXG4gICAgICAgICAgICB1c2VyX2lkOiAnJyxcXHJcXG4gICAgICAgICAgICBwYWNrYWdlX25hbWU6ICdjb20ucGlrY2xvdWQucGlrcGFrJyxcXHJcXG4gICAgICAgICAgICBjbGllbnRfdmVyc2lvbjogJzEuMzguMCcsXFxyXFxuICAgICAgICAgICAgZW1haWw6IG1haWwsXFxyXFxuICAgICAgICAgICAgdGltZXN0YW1wOiB0LFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHJlZGlyZWN0X3VyaTogJ3hsYWNjc2RrMDE6Ly94YmFzZS5jbG91ZC9jYWxsYmFjaz9zdGF0ZT1oYXJib3InLFxcclxcbiAgICB9XFxyXFxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XFxyXFxuICAgICAgICAnWC1EZXZpY2UtSWQnOiB4aWQsXFxyXFxuICAgICAgICAnVXNlci1BZ2VudCc6IHVhLFxcclxcbiAgICB9XFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoKHJlcXVlc3R1cmwsIHtcXHJcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXHJcXG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKFxcclxcbiAgICAgICAgICAgICAgICB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcclxcbiAgICAgICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXFxyXFxuICAgICAgICAgICAgKSxcXHJcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uX2RhdGEpLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxyXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhXFxyXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxyXFxuICAgICAgICBkZWJ1Z19sb2coZXJyb3IudG9TdHJpbmcoKSlcXHJcXG4gICAgICAgIHRocm93IGVycm9yXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gZ2V0SW1hZ2UoKSB7XFxyXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3B6emwvZ2VuJ1xcclxcbiAgICBjb25zdCByZXF1ZXN0dXJsID0gYnVpbGRVcmwodXJsLCB7XFxyXFxuICAgICAgICBkZXZpY2VpZDogeGlkLFxcclxcbiAgICAgICAgdHJhY2VpZDogJycsXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoKHJlcXVlc3R1cmwpXFxyXFxuICAgICAgICBjb25zdCBpbWdzSnNvbiA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxyXFxuICAgICAgICBjb25zdCBmcmFtZXMgPSBpbWdzSnNvblsnZnJhbWVzJ11cXHJcXG4gICAgICAgIGNvbnN0IHBpZCA9IGltZ3NKc29uWydwaWQnXVxcclxcbiAgICAgICAgY29uc3QgdHJhY2VpZCA9IGltZ3NKc29uWyd0cmFjZWlkJ11cXHJcXG4gICAgICAgIGNvbnN0IHNlbGVjdElkID0gbGlzdF9jb21wYXJlKGZyYW1lcylcXHJcXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcXHJcXG4gICAgICAgICAgICBmcmFtZXMsXFxyXFxuICAgICAgICAgICAgcGlkLFxcclxcbiAgICAgICAgICAgIHRyYWNlaWQsXFxyXFxuICAgICAgICAgICAgc2VsZWN0SWQsXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4gcmVzdWx0XFxyXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxyXFxuICAgICAgICB0aHJvdyBlcnJvclxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGdldE5ld1Rva2VuKHJlc3VsdCwgY2FwdGNoYSkge1xcclxcbiAgICB0cnkge1xcclxcbiAgICAgICAgY29uc3QgZnJhbWVzID0gcmVzdWx0LmZyYW1lc1xcclxcbiAgICAgICAgY29uc3Qgc2VsZWN0SWQgPSByZXN1bHQuc2VsZWN0SWRcXHJcXG4gICAgICAgIGNvbnN0IHRyYWNlaWQgPSByZXN1bHQudHJhY2VpZFxcclxcbiAgICAgICAgY29uc3QgcGlkID0gcmVzdWx0LnBpZFxcclxcblxcclxcbiAgICAgICAgY29uc3QganNvbiA9IGltZ19qaihmcmFtZXMsIHBhcnNlSW50KHNlbGVjdElkKSwgcGlkKVxcclxcblxcclxcbiAgICAgICAgY29uc3QgZiA9IGpzb24uZlxcclxcblxcclxcbiAgICAgICAgY29uc3QgbnBhYyA9IGpzb24uY2FcXHJcXG4gICAgICAgIGNvbnN0IHJlcXVlc3R1cmwxID0gYnVpbGRVcmwoJ2h0dHBzOi8vdXNlci5teXBpa3Bhay5jb20vcHp6bC92ZXJpZnknLCB7XFxyXFxuICAgICAgICAgICAgcGlkOiBTdHJpbmcocGlkKSxcXHJcXG4gICAgICAgICAgICBkZXZpY2VpZDogU3RyaW5nKHhpZCksXFxyXFxuICAgICAgICAgICAgdHJhY2VpZDogU3RyaW5nKHRyYWNlaWQpLFxcclxcbiAgICAgICAgICAgIGY6IFN0cmluZyhmKSxcXHJcXG4gICAgICAgICAgICBuOiBTdHJpbmcobnBhY1swXSksXFxyXFxuICAgICAgICAgICAgcDogU3RyaW5nKG5wYWNbMV0pLFxcclxcbiAgICAgICAgICAgIGE6IFN0cmluZyhucGFjWzJdKSxcXHJcXG4gICAgICAgICAgICBjOiBTdHJpbmcobnBhY1szXSksXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UxID0gZmV0Y2gocmVxdWVzdHVybDEpXFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZTIgPSBmZXRjaChcXHJcXG4gICAgICAgICAgICBgaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS9jcmVkaXQvdjEvcmVwb3J0P2RldmljZWlkPSR7eGlkfSZjYXB0Y2hhX3Rva2VuPSR7Y2FwdGNoYX0mdHlwZT1wenpsU2xpZGVyJnJlc3VsdD0wJmRhdGE9JHtwaWR9JnRyYWNlaWQ9JHt0cmFjZWlkfWBcXHJcXG4gICAgICAgIClcXHJcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0ZSA9IEpTT04ucGFyc2UocmVzcG9uc2UyKVxcclxcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0ZVxcclxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcclxcbiAgICAgICAgZGVidWdfbG9nKGVycm9yLnRvU3RyaW5nKCkpXFxyXFxuICAgICAgICB0aHJvdyBlcnJvclxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIHZlcmlmaWNhdGlvbihuZXd0b2tlbikge1xcclxcbiAgICB0cnkge1xcclxcbiAgICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vdXNlci5teXBpa3Bhay5jb20vdjEvYXV0aC92ZXJpZmljYXRpb24nXFxyXFxuICAgICAgICBjb25zdCByZXF1ZXN0dXJsID0gYnVpbGRVcmwodXJsLCB7XFxyXFxuICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnQsXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgY29uc3QganNvbkRhdGEgPSB7XFxyXFxuICAgICAgICAgICAgY2FwdGNoYV90b2tlbjogbmV3dG9rZW4sXFxyXFxuICAgICAgICAgICAgZW1haWw6IG1haWwsXFxyXFxuICAgICAgICAgICAgbG9jYWxlOiAnemgtQ04nLFxcclxcbiAgICAgICAgICAgIHRhcmdldDogJ0FOWScsXFxyXFxuICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnQsXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihcXHJcXG4gICAgICAgICAgICB7XFxyXFxuICAgICAgICAgICAgICAgICdYLURldmljZS1JZCc6IHhpZCxcXHJcXG4gICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiB1YSxcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIGJhc2ljUmVxdWVzdEhlYWRlcnNfMSxcXHJcXG4gICAgICAgICAgICB7XFxyXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgKVxcclxcblxcclxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBwb3N0KHJlcXVlc3R1cmwsIHtcXHJcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcclxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGpzb25EYXRhKSxcXHJcXG4gICAgICAgIH0pXFxyXFxuXFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKVxcclxcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YVxcclxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcclxcbiAgICAgICAgZGVidWdfbG9nKGVycm9yLnRvU3RyaW5nKCkpXFxyXFxuICAgICAgICB0aHJvdyBlcnJvclxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIHZlcmlmeSh2ZXJpZmljYXRpb25JZCwgY29kZSkge1xcclxcbiAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9hdXRoL3ZlcmlmaWNhdGlvbi92ZXJpZnknXFxyXFxuICAgIGNvbnN0IHJlcXVlc3R1cmwgPSBidWlsZFVybCh1cmwsIHtcXHJcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICB9KVxcclxcbiAgICBjb25zdCBqc29uRGF0YSA9IHtcXHJcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JZCxcXHJcXG4gICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBjb2RlLFxcclxcbiAgICB9XFxyXFxuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKFxcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgICdYLURldmljZS1JZCc6IHhpZCxcXHJcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IHVhLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIGJhc2ljUmVxdWVzdEhlYWRlcnNfMSxcXHJcXG4gICAgICAgIHtcXHJcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcclxcbiAgICAgICAgfVxcclxcbiAgICApXFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QocmVxdWVzdHVybCwge1xcclxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxyXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxyXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhXFxyXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxyXFxuICAgICAgICBkZWJ1Z19sb2coZXJyb3IudG9TdHJpbmcoKSlcXHJcXG4gICAgICAgIHRocm93IGVycm9yXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gc2lnbnVwKHZlcmlmaWNhdGlvblRva2VuKSB7XFxyXFxuICAgIGNvbnN0IG5hbWUgPSAnVV8nICsgbWFpbC5zcGxpdCgnQCcpWzBdXFxyXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbnVwJ1xcclxcbiAgICBjb25zdCByZXF1ZXN0dXJsID0gYnVpbGRVcmwodXJsLCB7XFxyXFxuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXHJcXG4gICAgfSlcXHJcXG4gICAgY29uc3QganNvbkRhdGEgPSB7XFxyXFxuICAgICAgICBjYXB0Y2hhX3Rva2VuOiAnJyxcXHJcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICAgICAgY2xpZW50X3NlY3JldDogJ2RidzJPdG1WRWV1VXZJcHRiMUNveWcnLFxcclxcbiAgICAgICAgZW1haWw6IG1haWwsXFxyXFxuICAgICAgICBuYW1lOiBuYW1lLFxcclxcbiAgICAgICAgcGFzc3dvcmQ6IHB3ZCxcXHJcXG4gICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXFxyXFxuICAgIH1cXHJcXG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXFxyXFxuICAgICAgICB7XFxyXFxuICAgICAgICAgICAgJ1gtRGV2aWNlLUlkJzogeGlkLFxcclxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdWEsXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAgYmFzaWNSZXF1ZXN0SGVhZGVyc18xLFxcclxcbiAgICAgICAge1xcclxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxyXFxuICAgICAgICB9XFxyXFxuICAgIClcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcG9zdChyZXF1ZXN0dXJsLCB7XFxyXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXHJcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uRGF0YSksXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXHJcXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGFcXHJcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcclxcbiAgICAgICAgdGhyb3cgZXJyb3JcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBpbml0MShhY2Nlc3NUb2tlbiwgc3ViKSB7XFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9zaGllbGQvY2FwdGNoYS9pbml0J1xcclxcbiAgICAgICAgY29uc3QgcmVxdWVzdHVybCA9IGJ1aWxkVXJsKHVybCwge1xcclxcbiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0ge1xcclxcbiAgICAgICAgICAgIGFjdGlvbjogJ1BPU1Q6L3ZpcC92MS9hY3Rpdml0eS9pbnZpdGUnLFxcclxcbiAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGFjY2Vzc1Rva2VuLFxcclxcbiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcclxcbiAgICAgICAgICAgIGRldmljZV9pZDogeGlkLFxcclxcbiAgICAgICAgICAgIG1ldGE6IHtcXHJcXG4gICAgICAgICAgICAgICAgY2FwdGNoYV9zaWduOiBgMS4ke3NpZ259YCxcXHJcXG4gICAgICAgICAgICAgICAgdXNlcl9pZDogc3ViLFxcclxcbiAgICAgICAgICAgICAgICBwYWNrYWdlX25hbWU6ICdjb20ucGlrY2xvdWQucGlrcGFrJyxcXHJcXG4gICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb246ICcxLjM4LjAnLFxcclxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHQsXFxyXFxuICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6ICd4bGFjY3NkazAxOi8veGJhc2UuY2xvdWQvY2FsbGJhY2s/c3RhdGU9aGFyYm9yJyxcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKFxcclxcbiAgICAgICAgICAgIHtcXHJcXG4gICAgICAgICAgICAgICAgJ1gtRGV2aWNlLUlkJzogeGlkLFxcclxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IHVhLFxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICAgICAgYmFzaWNSZXF1ZXN0SGVhZGVyc18xLFxcclxcbiAgICAgICAgICAgIHtcXHJcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICApXFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QocmVxdWVzdHVybCwge1xcclxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxyXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxyXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhXFxyXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxyXFxuICAgICAgICBkZWJ1Z19sb2coZXJyb3IudG9TdHJpbmcoKSlcXHJcXG4gICAgICAgIHRocm93IGVycm9yXFxyXFxuICAgIH1cXHJcXG59XFxyXFxuXFxyXFxuZnVuY3Rpb24gaW52aXRlKHN1YiwgYWNjZXNzVG9rZW4sIGNhcHRjaGEpIHtcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2FwaS1kcml2ZS5teXBpa3Bhay5jb20vdmlwL3YxL2FjdGl2aXR5L2ludml0ZSdcXHJcXG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0ge1xcclxcbiAgICAgICAgICAgIGRhdGE6IHtcXHJcXG4gICAgICAgICAgICAgICAgc2RrX2ludDogJzMzJyxcXHJcXG4gICAgICAgICAgICAgICAgdXVpZDogeGlkLFxcclxcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogJzEnLFxcclxcbiAgICAgICAgICAgICAgICB1c2VyaWQ6IHN1YixcXHJcXG4gICAgICAgICAgICAgICAgdXNlclN1YjogJycsXFxyXFxuICAgICAgICAgICAgICAgIHByb2R1Y3RfZmxhdm9yX25hbWU6ICdjaGEnLFxcclxcbiAgICAgICAgICAgICAgICBsYW5ndWFnZV9zeXN0ZW06ICd6aC1DTicsXFxyXFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlX2FwcDogJ3poLUNOJyxcXHJcXG4gICAgICAgICAgICAgICAgYnVpbGRfdmVyc2lvbl9yZWxlYXNlOiAnMTMnLFxcclxcbiAgICAgICAgICAgICAgICBwaG9uZU1vZGVsOiBkZXZpY2VNb2RlbCxcXHJcXG4gICAgICAgICAgICAgICAgYnVpbGRfbWFudWZhY3R1cmVyOiBkZXZpY2VOYW1lLFxcclxcbiAgICAgICAgICAgICAgICBidWlsZF9zZGtfaW50OiAnMzMnLFxcclxcbiAgICAgICAgICAgICAgICBjaGFubmVsOiAnb2ZmaWNpYWwnLFxcclxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uQ29kZTogJzEwMTUwJyxcXHJcXG4gICAgICAgICAgICAgICAgdmVyc2lvbk5hbWU6ICcxLjM4LjAnLFxcclxcbiAgICAgICAgICAgICAgICBpbnN0YWxsRnJvbTogJ290aGVyJyxcXHJcXG4gICAgICAgICAgICAgICAgY291bnRyeTogJ1BMJyxcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIGFwa19leHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBjaGFubmVsOiAnb2ZmaWNpYWwnLFxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xcclxcbiAgICAgICAgICAgIEhvc3Q6ICdhcGktZHJpdmUubXlwaWtwYWsuY29tJyxcXHJcXG4gICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcXHJcXG4gICAgICAgICAgICBwcm9kdWN0X2ZsYXZvcl9uYW1lOiAnY2hhJyxcXHJcXG4gICAgICAgICAgICAneC1jYXB0Y2hhLXRva2VuJzogY2FwdGNoYSxcXHJcXG4gICAgICAgICAgICAneC1jbGllbnQtdmVyc2lvbi1jb2RlJzogJzEwMTUwJyxcXHJcXG4gICAgICAgICAgICAneC1kZXZpY2UtaWQnOiB4aWQsXFxyXFxuICAgICAgICAgICAgJ3VzZXItYWdlbnQnOiB1YSxcXHJcXG4gICAgICAgICAgICBjb3VudHJ5OiAnUEwnLFxcclxcbiAgICAgICAgICAgICdhY2NlcHQtbGFuZ3VhZ2UnOiAnemgtQ04nLFxcclxcbiAgICAgICAgICAgICd4LXBlZXItaWQnOiB4aWQsXFxyXFxuICAgICAgICAgICAgJ3gtdXNlci1yZWdpb24nOiAnMicsXFxyXFxuICAgICAgICAgICAgJ3gtc3lzdGVtLWxhbmd1YWdlJzogJ3poLUNOJyxcXHJcXG4gICAgICAgICAgICAneC1hbHQtY2FwYWJpbGl0eSc6ICczJyxcXHJcXG4gICAgICAgICAgICAnYWNjZXB0LWVuY29kaW5nJzogJ2d6aXAnLFxcclxcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QodXJsLCB7XFxyXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXHJcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uRGF0YSksXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXHJcXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGFcXHJcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXHJcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcclxcbiAgICAgICAgdGhyb3cgZXJyb3JcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBhY3RpdmF0aW9uQ29kZShhY2Nlc3NUb2tlbiwgY2FwdGNoYSkge1xcclxcbiAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL3ZpcC92MS9vcmRlci9hY3RpdmF0aW9uLWNvZGUnXFxyXFxuICAgIGNvbnN0IGRhdGEgPSB7XFxyXFxuICAgICAgICBhY3RpdmF0aW9uX2NvZGU6IGluQ29kZSxcXHJcXG4gICAgfVxcclxcbiAgICBjb25zdCBsaCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpLmxlbmd0aC50b1N0cmluZygpXFxyXFxuICAgIGNvbnN0IGhlYWRlcnMgPSB7XFxyXFxuICAgICAgICBIb3N0OiAnYXBpLWRyaXZlLm15cGlrcGFrLmNvbScsXFxyXFxuICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcXHJcXG4gICAgICAgIHByb2R1Y3RfZmxhdm9yX25hbWU6ICdjaGEnLFxcclxcbiAgICAgICAgJ3gtY2FwdGNoYS10b2tlbic6IGNhcHRjaGEsXFxyXFxuICAgICAgICAneC1jbGllbnQtdmVyc2lvbi1jb2RlJzogJzEwMTUwJyxcXHJcXG4gICAgICAgICd4LWRldmljZS1pZCc6IHhpZCxcXHJcXG4gICAgICAgICd1c2VyLWFnZW50JzogdWEsXFxyXFxuICAgICAgICBjb3VudHJ5OiAnREsnLFxcclxcbiAgICAgICAgJ2FjY2VwdC1sYW5ndWFnZSc6ICd6aC1DTicsXFxyXFxuICAgICAgICAneC1wZWVyLWlkJzogeGlkLFxcclxcbiAgICAgICAgJ3gtdXNlci1yZWdpb24nOiAnMicsXFxyXFxuICAgICAgICAneC1zeXN0ZW0tbGFuZ3VhZ2UnOiAnemgtQ04nLFxcclxcbiAgICAgICAgJ3gtYWx0LWNhcGFiaWxpdHknOiAnMycsXFxyXFxuICAgICAgICAnY29udGVudC1sZW5ndGgnOiBsaCxcXHJcXG4gICAgICAgICdhY2NlcHQtZW5jb2RpbmcnOiAnZ3ppcCcsXFxyXFxuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcclxcbiAgICB9XFxyXFxuICAgIHRyeSB7XFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QodXJsLCB7XFxyXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXHJcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSxcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlKVxcclxcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0ZVxcclxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcclxcbiAgICAgICAgZGVidWdfbG9nKGVycm9yLnRvU3RyaW5nKCkpXFxyXFxuICAgICAgICB0aHJvdyBlcnJvclxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8vICA9PT09PT09PT09PT09PT09PT0957uT5p2fPT09PT09PT09PT09PT09PT09PVxcclxcblwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIlBpa1Bha1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9TZXR0aW5nXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXHJcXG5jb25zdCB7IHN0eWxlX2NvbG9yIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9EZWJ1ZycpXFxyXFxuc2V0UGFnZVRpdGxlKCforr7nva4nKVxcclxcbnZhciByZXMgPSBbXVxcclxcblxcclxcbmlmIChnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nLCAnJykgPT0gJycpIHtcXHJcXG4gICAgY2xlYXJNeVZhcigndHVzZXJuYW1lJylcXHJcXG4gICAgY2xlYXJNeVZhcigndHBhc3N3ZCcpXFxyXFxuXFxyXFxuICAgIHJlcy5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn8J+RpOeUqOaIt+WQjScsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxyXFxuICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICfnlKjmiLflkI0nLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxyXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl55So5oi35ZCNJyxcXHJcXG4gICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigndHVzZXJuYW1lJywgaW5wdXQpXFxcIixcXHJcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICfwn5SR5a+G56CBJyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG4gICAgICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+WvhueggScsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXHJcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlr4bnoIEnLFxcclxcbiAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCd0cGFzc3dkJywgaW5wdXQpXFxcIixcXHJcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgLy8g6Ze06ZqU5qCPXFxyXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTU7IGkrKykge1xcclxcbiAgICAgICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+ehruWumicsXFxyXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxyXFxuICAgICAgICAgICAgY29uc3QgeyBsb2dpbiB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQVBJJylcXHJcXG4gICAgICAgICAgICBzZXRJdGVtKCd1c2VybmFtZScsIGdldE15VmFyKCd0dXNlcm5hbWUnLCAnJykpXFxyXFxuICAgICAgICAgICAgc2V0SXRlbSgncGFzc3dkJywgZ2V0TXlWYXIoJ3RwYXNzd2QnLCAnJykpXFxyXFxuICAgICAgICAgICAgbG9naW4oZ2V0SXRlbSgndXNlcm5hbWUnLCAnJyksIGdldEl0ZW0oJ3Bhc3N3ZCcsICcnKSlcXHJcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxyXFxuICAgICAgICAgICAgLy8gcmV0dXJuICd0b2FzdDovLycgKyBnZXRNeVZhcigndHVzZXJuYW1lJykgKyAnJiYmJyArIGdldE15VmFyKCd0cGFzc3dkJylcXHJcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICflj5bmtognLFxcclxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSlcXHJcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXHJcXG4gICAgfSlcXHJcXG59IGVsc2Uge1xcclxcbiAgICBjb25zdCB7IGdldF91c2VyX2Jhc2VfaW5mbywgZ2V0X3VzZXJfdmlwX2luZm8sIGdldF91c2VyX2ludml0ZUNvZGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxyXFxuXFxyXFxuICAgIC8vIOeUqOaIt+S/oeaBr1xcclxcbiAgICBsZXQgdXNlcl9iYXNlX2luZm8gPSBnZXRfdXNlcl9iYXNlX2luZm8oKVxcclxcbiAgICBsZXQgdXNlcl92aXBfaW5mbyA9IGdldF91c2VyX3ZpcF9pbmZvKClcXHJcXG4gICAgbGV0IHVzZXJfaW52aXRlQ29kZSA9IGdldF91c2VyX2ludml0ZUNvZGUoKVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICAvLyB0aXRsZTogYPCfkaTnlKjmiLflkI0o6YKu566xKTogJHt1c2VyX2Jhc2VfaW5mby5uYW1lICsgJyAoJyArIHVzZXJfYmFzZV9pbmZvLmVtYWlsICsgJyknfWAsXFxyXFxuICAgICAgICB0aXRsZTogYPCfkaQke1xcXCLigJjigJjigJnigJlcXFwiK3N0eWxlX2NvbG9yKFxcXCLnlKjmiLflkI0o54K55Ye75pi+56S66YKu566xKVxcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke2dldE15VmFyKFxcXCJzaG93X2VtYWlsXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyB1c2VyX2Jhc2VfaW5mby5uYW1lIDogdXNlcl9iYXNlX2luZm8ubmFtZSArIFxcXCIgKFxcXCIgKyB1c2VyX2Jhc2VfaW5mby5lbWFpbCArIFxcXCIpXFxcIn1gLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCk9PntcXHJcXG4gICAgICAgICAgICBsZXQgc2hvd19lbWFpbCA9IGdldE15VmFyKFxcXCJzaG93X2VtYWlsXFxcIiwgXFxcIjBcXFwiKVxcclxcbiAgICAgICAgICAgIGlmIChzaG93X2VtYWlsID09IFxcXCIxXFxcIikge1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic2hvd19lbWFpbFxcXCIsIFxcXCIwXFxcIilcXHJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic2hvd19lbWFpbFxcXCIsIFxcXCIxXFxcIilcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcclxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICAvLyBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDwn5KOJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi5Lya5ZGY562J57qnXFxcIiwgXFxcIiMyNEJCNzVcXFwiKX06ICR7dXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXMgPyAnVklQJyA6ICfpmZDliLYnfWAsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxyXFxuICAgICAgICAvLyBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDwn5eC77iPJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi56m66Ze05a656YePXFxcIiwgXFxcIiMyNEJCNzVcXFwiKX06ICR7XFxyXFxuICAgICAgICAgICAgdXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXMgPyB1c2VyX3ZpcF9pbmZvLmJhc2UuYXNzZXRzICsgJ0InIDogdXNlcl92aXBfaW5mby5iYXNlLmFzc2V0cyArICdCJ1xcclxcbiAgICAgICAgfWAsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxyXFxuICAgICAgICAvLyBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDwn5ShJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi6YKA6K+356CBKOeCueWHu+WkjeWItilcXFwiLCBcXFwiIzI0QkI3NVxcXCIpfTogJHt1c2VyX2ludml0ZUNvZGUuY29kZX1gLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgdXJsOiBgY29weTovLyR7dXNlcl9pbnZpdGVDb2RlLmNvZGV9YCxcXHJcXG4gICAgICAgIC8vIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogYOKPse+4jyR7XFxcIuKAmOKAmOKAmeKAmVxcXCIrc3R5bGVfY29sb3IoXFxcIumCgOivt+aXtumXtOWSjOasoeaVsCjngrnlh7vmiYvliqjpgoDor7cpXFxcIiwgXFxcIiMyNEJCNzVcXFwiKX06ICR7XFxyXFxuICAgICAgICAgICAgZ2V0SXRlbSgnaW52aXRlX3Jlc3VsdCcsICdGYWlsJykgPT0gJ0ZhaWwnID8gXFxcIumCgOivt+Wksei0pVxcXCI6IGdldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCAnRmFpbCcpXFxyXFxuICAgICAgICB9ICjmrKHmlbA6JHtnZXRNeVZhcignaW52aXRlX2NvdW50JywgJzAnKX0pYCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1c2VyX2ludml0ZUNvZGUpPT57XFxyXFxuICAgICAgICAgICAgY29uc3Qge2ludml0ZV9nb30gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9JbnZpdGVcXFwiKVxcclxcbiAgICAgICAgICAgIGNvbnN0IHsgc3R5bGVfY29sb3IgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0RlYnVnJylcXHJcXG4gICAgICAgICAgICBpbnZpdGVfZ28odXNlcl9pbnZpdGVDb2RlLmNvZGUpXFxyXFxuICAgICAgICAgICAgbGV0IG5ld190aXRsZSA9IGDij7HvuI8ke1xcXCLigJjigJjigJnigJlcXFwiK3N0eWxlX2NvbG9yKFxcXCLpgoDor7fml7bpl7TlkozmrKHmlbAo54K55Ye75omL5Yqo5Yi35pawKVxcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke1xcclxcbiAgICAgICAgICAgIGdldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCAnRmFpbCcpID09ICdGYWlsJyA/IFxcXCLpgoDor7flpLHotKVcXFwiOiBnZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgJ0ZhaWwnKX0gKOasoeaVsDoke2dldE15VmFyKCdpbnZpdGVfY291bnQnLCAnMCcpfSlgXFxyXFxuICAgICAgICAgICAgdXBkYXRlSXRlbShcXFwiYXV0b19pbnZpdGVfaW5mb1xcXCIse3RpdGxlOiBuZXdfdGl0bGV9KVxcclxcbiAgICAgICAgICAgIC8vIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxyXFxuICAgICAgICB9LCB1c2VyX2ludml0ZUNvZGUpLFxcclxcbiAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICBpZDogXFxcImF1dG9faW52aXRlX2luZm9cXFwiXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICAvLyBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgcmVzLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IGDwn5iIJHtcXFwi4oCY4oCY4oCZ4oCZXFxcIitzdHlsZV9jb2xvcihcXFwi5piv5ZCm5byA5ZCv6Ieq5Yqo6YKA6K+3KOeCueWHu+WIh+aNoilcXFwiLCBcXFwiIzI0QkI3NVxcXCIpfTogJHtnZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzAnKSA9PSAnMCcgPyAn5ZCmJyA6ICfmmK8nfWAsXFxyXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKT0+e1xcclxcbiAgICAgICAgICAgIGlmKGdldEl0ZW0oJ2F1dG9fcmVmcmVzaF9pbnZpdGUnLCAnMCcpID09ICcwJykge1xcclxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzEnKVxcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2F1dG9fcmVmcmVzaF9pbnZpdGUnLCAnMCcpXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXHJcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxyXFxuICAgICAgICB9KSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICByZXMucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogYPCfmLQke1xcXCLigJjigJjigJnigJlcXFwiK3N0eWxlX2NvbG9yKFxcXCLmmK/lkKbmiZPljbDpgoDor7fml6Xlv5co54K55Ye75YiH5o2iKVxcXCIsIFxcXCIjMjRCQjc1XFxcIil9OiAke2dldE15VmFyKFxcXCJkZWJ1Z19lbmFibGVcXFwiLCBcXFwiMFxcXCIpID09ICcwJyA/ICflkKYnIDogJ+aYryd9YCxcXHJcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpPT57XFxyXFxuICAgICAgICAgICAgaWYoZ2V0TXlWYXIoXFxcImRlYnVnX2VuYWJsZVxcXCIsIFxcXCIwXFxcIikgPT0gJzAnKSB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkZWJ1Z19lbmFibGVcXFwiLCBcXFwiMVxcXCIpXFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImRlYnVnX2VuYWJsZVxcXCIsIFxcXCIwXFxcIilcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcclxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXHJcXG4gICAgICAgIH0pLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxyXFxuICAgIH0pXFxyXFxufVxcclxcblxcclxcbnNldFJlc3VsdChyZXMpXFxyXFxuXCIsXCJncm91cFwiOlwi6KeG6aKRXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCIvLyDmianlsZUk5a+56LGh55qE5bGe5oCnXFxuJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvRXh0ZW5kJylcXG5cXG5cXG5cXG4vLyDpnIDopoHkuIDnm7TliLfmlrDojrflj5bmnIDmlrBBdXRob3JpemF0aW9u77yM5omA5Lul5pS+6aKE5Yqg6L29XFxuY29uc3QgeyByZWZyZXNoX2F1dGhvcml6YXRpb24sIGNsZWFyX3VzZXJfaW5mbyB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQVBJJylcXG4vLyBjbGVhcl91c2VyX2luZm8oKVxcbnJlZnJlc2hfYXV0aG9yaXphdGlvbihnZXRJdGVtKCd1c2VybmFtZScsICcnKSwgZ2V0SXRlbSgncGFzc3dkJywgJycpKVxcblwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJBUElcXFwiLFxcXCJwYXRoXFxcIjpcXFwiQVBJXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vIOa4hemZpOeZu+W9leS/oeaBr1xcXFxyXFxcXG5mdW5jdGlvbiBjbGVhcl91c2VyX2luZm8oKSB7XFxcXHJcXFxcbiAgICBjbGVhckl0ZW0oJ3VzZXJuYW1lJylcXFxcclxcXFxuICAgIGNsZWFySXRlbSgncGFzc3dkJylcXFxcclxcXFxuICAgIGNsZWFySXRlbSgnYWNjZXNzX3Rva2VuJylcXFxcclxcXFxuICAgIGNsZWFySXRlbSgncmVmcmVzaF90b2tlbicpXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vIOeZu+W9lVxcXFxyXFxcXG5mdW5jdGlvbiBsb2dpbih1c2VybmFtZSwgcGFzc3dvcmQpIHtcXFxcclxcXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKFxcXFxyXFxcXG4gICAgICAgIHBvc3QoJ2h0dHBzOi8vdXNlci5teXBpa3Bhay5jb20vdjEvYXV0aC9zaWduaW4nLCB7XFxcXHJcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46ICcnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiAnWU54VDl3N0dNZFd2RU9LYScsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAvLyBcXFxcXFxcImNsaWVudF9zZWNyZXRcXFxcXFxcIjogXFxcXFxcXCJkYncyT3RtVkVldVV2SXB0YjFDb3lnXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXFxcXHJcXFxcbiAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgfSlcXFxcclxcXFxuICAgIClcXFxcclxcXFxuICAgIGlmIChyZXMuYWNjZXNzX3Rva2VuKSB7XFxcXHJcXFxcbiAgICAgICAgc2V0SXRlbSgnYWNjZXNzX3Rva2VuJywgcmVzLmFjY2Vzc190b2tlbilcXFxcclxcXFxuICAgICAgICBzZXRJdGVtKCdyZWZyZXNoX3Rva2VuJywgcmVzLnJlZnJlc2hfdG9rZW4pXFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIHRydWVcXFxcclxcXFxuICAgIH0gZWxzZSB7XFxcXHJcXFxcbiAgICAgICAgbG9nKHJlcylcXFxcclxcXFxuICAgICAgICByZXR1cm4gZmFsc2VcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8g5Yi35pawYXV0aG9yaXphdGlvblxcXFxyXFxcXG5mdW5jdGlvbiByZWZyZXNoX2F1dGhvcml6YXRpb24odXNlcm5hbWUsIHBhc3N3b3JkKSB7XFxcXHJcXFxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShcXFxcclxcXFxuICAgICAgICBwb3N0KCdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbmluJywge1xcXFxyXFxcXG4gICAgICAgICAgICBib2R5OiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjYXB0Y2hhX3Rva2VuOiAnJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNsaWVudF9pZDogJ1lOeFQ5dzdHTWRXdkVPS2EnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogJ2RidzJPdG1WRWV1VXZJcHRiMUNveWcnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxcXFxyXFxcXG4gICAgICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICApXFxcXHJcXFxcbiAgICBpZiAocmVzLmFjY2Vzc190b2tlbikge1xcXFxyXFxcXG4gICAgICAgIHNldEl0ZW0oJ2FjY2Vzc190b2tlbicsIHJlcy5hY2Nlc3NfdG9rZW4pXFxcXHJcXFxcbiAgICAgICAgc2V0SXRlbSgncmVmcmVzaF90b2tlbicsIHJlcy5yZWZyZXNoX3Rva2VuKVxcXFxyXFxcXG4gICAgICAgIHJldHVybiB0cnVlXFxcXHJcXFxcbiAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgIGxvZyhyZXMpXFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vIOiOt+WPlueUqOaIt+WfuuacrOS/oeaBr1xcXFxyXFxcXG5mdW5jdGlvbiBnZXRfdXNlcl9iYXNlX2luZm8oKSB7XFxcXHJcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcXFxcclxcXFxuICAgICAgICByZXF1ZXN0KGJ1aWxkVXJsKCdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL3VzZXIvbWUnLCB7fSksIHtcXFxcclxcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxcXHJcXFxcbiAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgfSlcXFxcclxcXFxuICAgIClcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8g6I635Y+W55So5oi3VklQ5L+h5oGvXFxcXHJcXFxcbmZ1bmN0aW9uIGdldF91c2VyX3ZpcF9pbmZvKCkge1xcXFxyXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXFxcXHJcXFxcbiAgICAgICAgcmVxdWVzdChcXFxcclxcXFxuICAgICAgICAgICAgYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS92aXAvdjEvc3BhY2UvbGlzdCcsIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzcGFjZScsXFxcXHJcXFxcbiAgICAgICAgICAgIH0pLFxcXFxyXFxcXG4gICAgICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJyksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgKVxcXFxyXFxcXG4gICAgKVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4vLyDojrflj5bpgoDor7fnoIFcXFxcclxcXFxuZnVuY3Rpb24gZ2V0X3VzZXJfaW52aXRlQ29kZSgpIHtcXFxcclxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKFxcXFxyXFxcXG4gICAgICAgIHJlcXVlc3QoYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS92aXAvdjEvYWN0aXZpdHkvaW52aXRlQ29kZScsIHt9KSwge1xcXFxyXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSxcXFxcclxcXFxuICAgICAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB9KVxcXFxyXFxcXG4gICAgKVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4vLyDojrflj5bmlofku7blpLkv5paH5Lu25YiX6KGoXFxcXHJcXFxcbmZ1bmN0aW9uIGdldF9pdGVtc19saXN0KHBhcmVudF9pZCkge1xcXFxyXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXFxcXHJcXFxcbiAgICAgICAgcmVxdWVzdChcXFxcclxcXFxuICAgICAgICAgICAgYnVpbGRVcmwoJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlcycsIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHBhcmVudF9pZDogcGFyZW50X2lkLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGh1bWJuYWlsX3NpemU6ICdTSVpFX0xBUkdFJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHdpdGhfYXVkaXQ6ICd0cnVlJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGxpbWl0OiAnMTAwMCcsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiAne1xcXFxcXFwicGhhc2VcXFxcXFxcIjp7XFxcXFxcXCJlcVxcXFxcXFwiOlxcXFxcXFwiUEhBU0VfVFlQRV9DT01QTEVURVxcXFxcXFwifSxcXFxcXFxcInRyYXNoZWRcXFxcXFxcIjp7XFxcXFxcXCJlcVxcXFxcXFwiOmZhbHNlfX0nLFxcXFxyXFxcXG4gICAgICAgICAgICB9KSxcXFxcclxcXFxuICAgICAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGdldEl0ZW0oJ2FjY2Vzc190b2tlbicpLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIClcXFxcclxcXFxuICAgIClcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8g6I635Y+W5paH5Lu255u06ZO+XFxcXHJcXFxcbmZ1bmN0aW9uIGdldF9pdGVtX3VybChpdGVtX2lkKSB7XFxcXHJcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcXFxcclxcXFxuICAgICAgICByZXF1ZXN0KFxcXFxyXFxcXG4gICAgICAgICAgICBidWlsZFVybChcXFxcclxcXFxuICAgICAgICAgICAgICAgIGBodHRwczovL2FwaS1kcml2ZS5teXBpa3Bhay5jb20vZHJpdmUvdjEvZmlsZXMvJHtpdGVtX2lkfT9fbWFnaWM9MjAyMSZ0aHVtYm5haWxfc2l6ZT1TSVpFX0xBUkdFYCxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHt9XFxcXHJcXFxcbiAgICAgICAgICAgICksXFxcXHJcXFxcbiAgICAgICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBnZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICApXFxcXHJcXFxcbiAgICApXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbiQuZXhwb3J0cyA9IHtcXFxcclxcXFxuICAgIHJlZnJlc2hfYXV0aG9yaXphdGlvbixcXFxcclxcXFxuICAgIGdldF91c2VyX2Jhc2VfaW5mbyxcXFxcclxcXFxuICAgIGdldF91c2VyX3ZpcF9pbmZvLFxcXFxyXFxcXG4gICAgY2xlYXJfdXNlcl9pbmZvLFxcXFxyXFxcXG4gICAgZ2V0X3VzZXJfaW52aXRlQ29kZSxcXFxcclxcXFxuICAgIGdldF9pdGVtc19saXN0LFxcXFxyXFxcXG4gICAgZ2V0X2l0ZW1fdXJsLFxcXFxyXFxcXG4gICAgbG9naW4sXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiU2hvd1xcXCIsXFxcInBhdGhcXFwiOlxcXCJTaG93XFxcIixcXFwicnVsZVxcXCI6XFxcInZhciByZXMgPSBbXVxcXFxyXFxcXG5jb25zdCB7IGdldF91c2VyX2Jhc2VfaW5mbywgZ2V0X3VzZXJfdmlwX2luZm8sIGdldF91c2VyX2ludml0ZUNvZGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxcXHJcXFxcbmNvbnN0IHsgZ2VuZXJhdGVfcGF0aHMgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL1BhdGgnKVxcXFxyXFxcXG5jb25zdCB7IHNlYXJjaF9iYXIgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL1NlYXJjaCcpXFxcXHJcXFxcbmNvbnN0IHsgZ2VuZXJhdGVfbGlzdCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvTGlzdCcpXFxcXHJcXFxcbmNvbnN0IHsgaW52aXRlX2dvIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9JbnZpdGUnKVxcXFxyXFxcXG5jb25zdCB7IHN0eWxlX2NvbG9yIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9EZWJ1ZycpXFxcXHJcXFxcblxcXFxyXFxcXG4vLyDnlKjmiLfkv6Hmga9cXFxcclxcXFxubGV0IHVzZXJfYmFzZV9pbmZvID0gZ2V0X3VzZXJfYmFzZV9pbmZvKClcXFxcclxcXFxubGV0IHVzZXJfdmlwX2luZm8gPSBnZXRfdXNlcl92aXBfaW5mbygpXFxcXHJcXFxcbnB1dE15VmFyKCdzaG93X2VtYWlsJywgJzAnKVxcXFxyXFxcXG5cXFxcclxcXFxuaWYgKGdldEl0ZW0oJ2FjY2Vzc190b2tlbicsICcnKSA9PSAnJykge1xcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiBg5oKo6L+Y5pyq55m75b2V77yM6K+354K55Ye755m75b2V77yB5oiW6ICFIOWIt+aWsOS4gOS4i2AsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxyXFxcXG4gICAgICAgIHBpY191cmw6IGBodHRwczovL215cGlrcGFrLmNvbS9mYXZpY29uLTMyeDMyLnBuZ2AsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL1NldHRpbmcnLFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxufSBlbHNlIHtcXFxcclxcXFxuICAgIC8vIOiHquWKqOWIt+aWsOmCgOivt+S4gOasoVxcXFxyXFxcXG4gICAgaWYgKHVzZXJfdmlwX2luZm8uYmFzZS52aXBfc3RhdHVzID09IFxcXFxcXFwiaW52YWxpZFxcXFxcXFwiKSB7XFxcXHJcXFxcbiAgICAgICAgaW52aXRlX2dvKGdldF91c2VyX2ludml0ZUNvZGUoKS5jb2RlKVxcXFxyXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcclxcXFxuICAgIH0gZWxzZSB7XFxcXHJcXFxcbiAgICAgICAgJC5sb2coJ+W3sue7j+aYr1ByZW1pdW3pq5jnuqfnlKjmiLfvvIzml6DpnIDliLfmlrDpgoDor7cnKVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICAvLyB0aXRsZTogYCR7dXNlcl9iYXNlX2luZm8ubmFtZSArICcoJyArIHVzZXJfYmFzZV9pbmZvLmVtYWlsLnJlcGxhY2UoL1xcXFxcXFxcd3swLDh9LywgJyonKSArICcpJ31gLFxcXFxyXFxcXG4gICAgICAgIHRpdGxlOiBgJHtcXFxcclxcXFxuICAgICAgICAgICAgdXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXMgIT0gXFxcXFxcXCJpbnZhbGlkXFxcXFxcXCJcXFxcclxcXFxuICAgICAgICAgICAgICAgID8gc3R5bGVfY29sb3IodXNlcl9iYXNlX2luZm8ubmFtZSwgJyM1NTkzRjUnKSArICcgKCcgKyBzdHlsZV9jb2xvcignUHJlbWl1bScsICcjMjRCQjc1JywgMSkgKyAnKSdcXFxcclxcXFxuICAgICAgICAgICAgICAgIDogc3R5bGVfY29sb3IodXNlcl9iYXNlX2luZm8ubmFtZSwgJyM1NTkzRjUnKSArICcgKCcgKyBzdHlsZV9jb2xvcign5Y+X6ZmQJywgJyNDNjE4MTYnLCAxKSArICcpJ1xcXFxyXFxcXG4gICAgICAgIH1gLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcclxcXFxuICAgICAgICAvLyBwaWNfdXJsOiBgJHt1c2VyX2Jhc2VfaW5mby5waWN0dXJlfWAsXFxcXHJcXFxcbiAgICAgICAgcGljX3VybDogYGh0dHBzOi8vbXlwaWtwYWsuY29tL2Zhdmljb24tMzJ4MzIucG5nYCxcXFxcclxcXFxuICAgICAgICBkZXNjOiBg4pqZ6K6+572uYCxcXFxcclxcXFxuICAgICAgICAvLyBkZXNjOiBgJHtcXFxcclxcXFxuICAgICAgICAvLyAgICAgdXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXNcXFxcclxcXFxuICAgICAgICAvLyAgICAgICAgID8gdXNlcl92aXBfaW5mby5iYXNlLmFzc2V0cyArICdCJ1xcXFxyXFxcXG4gICAgICAgIC8vICAgICAgICAgOiB1c2VyX3ZpcF9pbmZvLmJhc2UuYXNzZXRzICsgJ0InXFxcXHJcXFxcbiAgICAgICAgLy8gfWAsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL1NldHRpbmcnLFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICAvLyDmkJzntKLmoI9cXFxcclxcXFxuICAgIHNlYXJjaF9iYXIocmVzKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIC8vIOmXtOmalOagj1xcXFxyXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcXFxcclxcXFxuICAgICAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcblxcXFxyXFxcXG4gICAgLy8g6Z2i5YyF5bGR6Lev5b6EKOaMiemSrilcXFxcclxcXFxuICAgIC8vIGdlbmVyYXRlX3BhdGhzKHJlcylcXFxcclxcXFxuICAgIGdlbmVyYXRlX3BhdGhzKHJlcywgJ3BhdGhzJywgJ0hvbWUnKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIC8vIOWIl+ihqOagj1xcXFxyXFxcXG4gICAgZ2VuZXJhdGVfbGlzdChyZXMsICdwYXRocycpXFxcXHJcXFxcbn1cXFxcclxcXFxuLy8g6LW36aOeflxcXFxyXFxcXG5zZXRSZXN1bHQocmVzKVxcXFxyXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJQYXRoXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhdGhcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3Qge3N0eWxlX2NvbG9yfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0RlYnVnJylcXFxcclxcXFxuLy8g55Sf5oiQ6aaW6aG16Lev5b6EKOaMiemSruagt+W8jylcXFxcclxcXFxuZnVuY3Rpb24gZ2VuZXJhdGVfcGF0aHMocmVzLCBwYXRoc19raW5kLCBzZWFyY2hfcm9vdF9wYXRoKSB7XFxcXHJcXFxcbiAgICAvLyDojrflj5blvZPliY3nmoTot6/lvoRcXFxcclxcXFxuICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKHBhdGhzX2tpbmQsIFtcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGlkOiAnJyxcXFxcclxcXFxuICAgICAgICAgICAgbmFtZTogJ0hvbWUnLFxcXFxyXFxcXG4gICAgICAgIH0sXFxcXHJcXFxcbiAgICBdKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIC8vIOaehOW7uui3r+W+hOeahG5hbWXlsZ7mgKfmlbDnu4TvvIznlKjkuo7orr7nva7moLnot6/lvoRcXFxcclxcXFxuICAgIGxldCBwYXRoc19uYW1lcyA9IFtdXFxcXHJcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XFxcXHJcXFxcbiAgICAgICAgcGF0aHNfbmFtZXMucHVzaChwYXRoc1tpXS5uYW1lKVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIC8vIOi3r+W+hOaMiemSruS4tOaXtuaVsOe7hFxcXFxyXFxcXG4gICAgbGV0IHRfcmVzID0gW11cXFxcclxcXFxuXFxcXHJcXFxcbiAgICAvLyDot6/lvoTku6XmjInpkq7mlrnlvI/mmL7npLpcXFxcclxcXFxuICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcclxcXFxuICAgICAgICBpZiAoaSA+PSBwYXRoc19uYW1lcy5pbmRleE9mKHNlYXJjaF9yb290X3BhdGgpKSB7XFxcXHJcXFxcbiAgICAgICAgICAgIC8vIOa3u+WKoOWIhumalOesplxcXFxyXFxcXG4gICAgICAgICAgICB0X3Jlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIi9cXFxcXFxcIixcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwidG9hc3Q6Ly/kvaDmmK/kuI3mmK/ngrnplJnkuobvvJ9cXFxcXFxcIlxcXFxyXFxcXG4gICAgICAgICAgICB9KVxcXFxyXFxcXG5cXFxcclxcXFxuICAgICAgICAgICAgLy8g5re75Yqg6Lev5b6EXFxcXHJcXFxcbiAgICAgICAgICAgIHRfcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgLy8gdGl0bGU6IGl0ZW0ubmFtZSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuKAmOKAmOKAmeKAmVxcXFxcXFwiICsgc3R5bGVfY29sb3IoaXRlbS5uYW1lLCBcXFxcXFxcIiMyNEJCNzVcXFxcXFxcIiksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIChwYXRocywgaSwgcGF0aHNfa2luZCkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihwYXRoc19raW5kLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgaSxcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBwYXRoc19raW5kXFxcXHJcXFxcbiAgICAgICAgICAgICAgICApLFxcXFxyXFxcXG4gICAgICAgICAgICB9KVxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcbiAgICB0X3Jlcy5zaGlmdCgpO1xcXFxyXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0X3Jlcy5sZW5ndGg7IGkrKykge1xcXFxyXFxcXG4gICAgICAgIHJlcy5wdXNoKHRfcmVzW2ldKVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4kLmV4cG9ydHMgPSB7XFxcXHJcXFxcbiAgICBnZW5lcmF0ZV9wYXRocyxcXFxcclxcXFxuICAgIC8vIGdlbmVyYXRlX3NlYXJjaF9wYXRocyxcXFxcclxcXFxufVxcXFxyXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJTZWFyY2hcXFwiLFxcXCJwYXRoXFxcIjpcXFwiU2VhcmNoXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vIOavj+aXpeS4gOWPpee8k+WtmFxcXFxyXFxcXG5mdW5jdGlvbiBzYXZlX2RheV9zYXlfY2FjaGUoKSB7XFxcXHJcXFxcbiAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxcXHJcXFxcbiAgICBsZXQgZGF5X3NheV9odG1sID0gZmV0Y2goJ2h0dHBzOi8vdjEuaGl0b2tvdG8uY24nLCB7XFxcXHJcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxyXFxcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMi4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuICAgIGRheV9zYXlfaHRtbCA9IEpTT04ucGFyc2UoZGF5X3NheV9odG1sKVxcXFxyXFxcXG4gICAgZGF5X3NheV9jYWNoZVsnY29udGVudCddID0gZGF5X3NheV9odG1sWydoaXRva290byddXFxcXHJcXFxcbiAgICBkYXlfc2F5X2NhY2hlWyd0aW1lJ10gPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxcXFxyXFxcXG4gICAgZ2xvYmFsTWFwMC5wdXRNeVZhcignZGF5c2F5JywgZGF5X3NheV9jYWNoZSlcXFxcclxcXFxuICAgIHJldHVybiBkYXlfc2F5X2h0bWxbJ2hpdG9rb3RvJ11cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8g55Sf5oiQ5pCc57Si5qCPXFxcXHJcXFxcbmZ1bmN0aW9uIHNlYXJjaF9iYXIocmVzKSB7XFxcXHJcXFxcbiAgICBsZXQgZGF5X3NheSA9ICcnXFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGxldCBkYXlfc2F5X2NhY2hlID0ge31cXFxcclxcXFxuICAgICAgICBsZXQgZGF5X3RpbWUgPSAwXFxcXHJcXFxcbiAgICAgICAgaWYgKGdsb2JhbE1hcDAuaGFzTXlWYXIoJ2RheXNheScpKSB7XFxcXHJcXFxcbiAgICAgICAgICAgIGRheV9zYXlfY2FjaGUgPSBnbG9iYWxNYXAwLmdldE15VmFyKCdkYXlzYXknLCB7fSlcXFxcclxcXFxuICAgICAgICAgICAgZGF5X3RpbWUgPSBkYXlfc2F5X2NhY2hlWyd0aW1lJ11cXFxcclxcXFxuICAgICAgICAgICAgaWYgKE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIC0gZGF5X3RpbWUgPj0gMTApIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIGRheV9zYXkgPSBzYXZlX2RheV9zYXlfY2FjaGUoKVxcXFxyXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXVxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcclxcXFxuICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgfSBjYXRjaCB7XFxcXHJcXFxcbiAgICAgICAgZGF5X3NheSA9ICcnXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcclxcXFxuICAgICAgICBkZXNjOiAn8J+kljogJyArIGRheV9zYXksXFxcXHJcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcIidoaWtlcjovL3NlYXJjaD9zPScgKyBpbnB1dCArICcmcnVsZT1cXFxcXFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIidcXFxcXFxcIixcXFxcclxcXFxuICAgICAgICAvLyBleHRyYTogeyBkZWZhdWx0VmFsdWU6ICcnICsgZGF5X3NheSB9LFxcXFxyXFxcXG4gICAgICAgIC8vICAgICBleHRyYToge1xcXFxyXFxcXG4gICAgICAgIC8vICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcclxcXFxuICAgICAgICAvLyAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dE15VmFyKCdob21lX2lucHV0JywgaW5wdXQpXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgLy8gICAgIH0sXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogJ+WbnuaUtuermScsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcXFxyXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJ0b2FzdDovL+aDs1DlkIPlkaLvvIzov5jmsqHlrp7njrBcXFxcXFxcIlxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6ICfmt7vliqDno4Hpk74nLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXFxcclxcXFxuICAgICAgICB1cmw6ICQoJycsICfovpPlhaXno4Hlipvpk77mjqUnKS5pbnB1dCgoKSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiAncGlrcGFrYXBwOi8vbXlwaWtwYWsuY29tL3hwYW4vbWFpbl90YWI/dGFiPTEmYWRkX3VybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KVxcXFxyXFxcXG4gICAgICAgIH0pLFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICAvLyByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAvLyAgICAgdGl0bGU6ICfmkJzntKInLFxcXFxyXFxcXG4gICAgLy8gICAgIGNvbF90eXBlOiAndGV4dF8zJyxcXFxcclxcXFxuICAgIC8vICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaW5wdXQpID0+IHtcXFxcclxcXFxuICAgIC8vICAgICAgICAgcmV0dXJuICQubG9nKCdoaWtlcjovL3NlYXJjaD9zPScgKyBpbnB1dCArICcmcnVsZT0nICsgTVlfUlVMRS50aXRsZSArIFxcXFxcXFwiJ1xcXFxcXFwiKVxcXFxyXFxcXG4gICAgLy8gICAgIH0sIGdldE15VmFyKCdob21lX2lucHV0JywgJycpKVxcXFxyXFxcXG4gICAgLy8gfSlcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8g5pCc57Si57uT5p6c5YiX6KGoXFxcXHJcXFxcbmZ1bmN0aW9uIHNlYXJjaF9saXN0KGtleV93b3JkLCByZXMpIHtcXFxcclxcXFxuICAgIGNvbnN0IHsgZ2V0RXh0IH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9MaXN0JylcXFxcclxcXFxuICAgIGNvbnN0IHsgZ2V0X2l0ZW1zX2xpc3QgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxcXHJcXFxcbiAgICBsZXQgbGlzdCA9IGdldF9pdGVtc19saXN0KCcqJylcXFxcclxcXFxuICAgIGxldCBrZXlfd29yZF9yZWdleCA9IG5ldyBSZWdFeHAoJy4qPycgKyBrZXlfd29yZCArICcuKj8nLCAnbWdpJylcXFxcclxcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5maWxlcy5sZW5ndGg7IGkrKykge1xcXFxyXFxcXG4gICAgICAgIGlmIChsaXN0LmZpbGVzW2ldLm5hbWUubWF0Y2goa2V5X3dvcmRfcmVnZXgpKSB7XFxcXHJcXFxcbiAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAoaXRlbSwgZXh0KSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBnZXRfaXRlbV91cmwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IGdldF9pdGVtX3VybChpdGVtLmlkKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiByZXMubWVkaWFzKSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gaXRlbS5saW5rXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLnVybCkge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXAudXJsICsgZXh0XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgbGlzdC5maWxlc1tpXSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGdldEV4dChsaXN0LmZpbGVzW2ldLm5hbWUpXFxcXHJcXFxcbiAgICAgICAgICAgIClcXFxcclxcXFxuXFxcXHJcXFxcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmZpbGVzW2ldLm5hbWUsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGxpc3QuZmlsZXNbaV0ua2luZCA9PSAnZHJpdmUjZm9sZGVyJyA/IGxpc3QuZmlsZXNbaV0uaWNvbl9saW5rIDogbGlzdC5maWxlc1tpXS50aHVtYm5haWxfbGluayxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHVybDpcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBsaXN0LmZpbGVzW2ldLmtpbmQgPT0gJ2RyaXZlI2ZvbGRlcidcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaGlrZXI6Ly9lbXB0eSYmJicgKyBsaXN0LmZpbGVzW2ldLmlkICsgJyYmJicgKyBsaXN0LmZpbGVzW2ldLm5hbWVcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1cmwsXFxcXHJcXFxcbiAgICAgICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4kLmV4cG9ydHMgPSB7XFxcXHJcXFxcbiAgICBzZWFyY2hfYmFyLFxcXFxyXFxcXG4gICAgc2VhcmNoX2xpc3QsXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiTGlzdFxcXCIsXFxcInBhdGhcXFwiOlxcXCJMaXN0XFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIGdldEV4dChmaWxlTmFtZSkge1xcXFxyXFxcXG4gICAgLy8gcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSlcXFxcclxcXFxuICAgIGxldCBwX2V4dCA9IGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhwX2V4dCkpIHtcXFxcclxcXFxuICAgICAgICB2YXIgZXh0ID0gJyNpc1ZpZGVvPXRydWUjJ1xcXFxyXFxcXG4gICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKHBfZXh0KSkge1xcXFxyXFxcXG4gICAgICAgIHZhciBleHQgPSAnI2lzTXVzaWM9dHJ1ZSMnXFxcXHJcXFxcbiAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKHBfZXh0KSkge1xcXFxyXFxcXG4gICAgICAgIHZhciBleHQgPSAnIy5qcGcnXFxcXHJcXFxcbiAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgIHZhciBleHQgPSAnJ1xcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgcmV0dXJuIGV4dFxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBnZW5lcmF0ZV9saXN0KHJlcywgcGF0aHNfa2luZCkge1xcXFxyXFxcXG4gICAgY29uc3QgeyBnZXRfaXRlbXNfbGlzdCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQVBJJylcXFxcclxcXFxuICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKHBhdGhzX2tpbmQsIFtcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGlkOiAnJyxcXFxcclxcXFxuICAgICAgICAgICAgbmFtZTogJ0hvbWUnLFxcXFxyXFxcXG4gICAgICAgIH0sXFxcXHJcXFxcbiAgICBdKVxcXFxyXFxcXG4gICAgbGV0IGxpc3QgPSBnZXRfaXRlbXNfbGlzdChwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZClcXFxcclxcXFxuICAgIGxpc3QuZmlsZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcXFxyXFxcXG4gICAgICAgIGlmIChpdGVtLmtpbmQgPT0gJ2RyaXZlI2ZvbGRlcicpIHtcXFxcclxcXFxuICAgICAgICAgICAgdmFyIHVybGwgPSAkKCkubGF6eVJ1bGUoXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAocGF0aHMsIGl0ZW0sIHBhdGhzX2tpbmQpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInNlYXJjaF8xXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIocGF0aHNfa2luZCwgcGF0aHMpXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcclxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwYXRocyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGl0ZW0sXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwYXRoc19raW5kXFxcXHJcXFxcbiAgICAgICAgICAgIClcXFxcclxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgICAgICB2YXIgZXh0ID0gZ2V0RXh0KGl0ZW0ubmFtZSlcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZShcXFxcclxcXFxuICAgICAgICAgICAgKGl0ZW0sIGV4dCkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzZWFyY2hfMVxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIilcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZ2V0X2l0ZW1fdXJsIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9BUEknKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IGdldF9pdGVtX3VybChpdGVtLmlkKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIHJlcy5tZWRpYXMpIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gaXRlbS5saW5rXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAudXJsKSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG1wLnVybCArIGV4dFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgIGl0ZW0sXFxcXHJcXFxcbiAgICAgICAgICAgIGV4dFxcXFxyXFxcXG4gICAgICAgIClcXFxcclxcXFxuICAgICAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXHJcXFxcbiAgICAgICAgICAgIGltZzogaXRlbS5raW5kID09ICdkcml2ZSNmb2xkZXInID8gaXRlbS5pY29uX2xpbmsgOiBpdGVtLnRodW1ibmFpbF9saW5rLFxcXFxyXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXHJcXFxcbiAgICAgICAgICAgIC8vIGNvbF90eXBlOiAnbW92aWVfMScsXFxcXHJcXFxcbiAgICAgICAgICAgIC8vIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfbGVmdF9waWNcXFxcXFxcIixcXFxcclxcXFxuICAgICAgICAgICAgdXJsOiBpdGVtLmtpbmQgPT0gJ2RyaXZlI2ZvbGRlcicgPyB1cmxsIDogdXJsLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4kLmV4cG9ydHMgPSB7XFxcXHJcXFxcbiAgICBnZW5lcmF0ZV9saXN0LFxcXFxyXFxcXG4gICAgZ2V0RXh0LFxcXFxyXFxcXG59XFxcXHJcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkV4dGVuZFxcXCIsXFxcInBhdGhcXFwiOlxcXCJFeHRlbmRcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHRlbmQoe1xcXFxyXFxcXG4gICAgYXVkaW86IFtcXFxcXFxcIm1wM1xcXFxcXFwiLCBcXFxcXFxcImZsYWNcXFxcXFxcIiwgXFxcXFxcXCJvZ2dcXFxcXFxcIiwgXFxcXFxcXCJtNGFcXFxcXFxcIiwgXFxcXFxcXCJ3YXZcXFxcXFxcIiwgXFxcXFxcXCJvcHVzXFxcXFxcXCJdLFxcXFxyXFxcXG4gICAgbW92aWU6IFtcXFxcXFxcIm1wNFxcXFxcXFwiLCBcXFxcXFxcIm1rdlxcXFxcXFwiLCBcXFxcXFxcImF2aVxcXFxcXFwiLCBcXFxcXFxcIm1vdlxcXFxcXFwiLCBcXFxcXFxcInJtdmJcXFxcXFxcIiwgXFxcXFxcXCJ3ZWJtXFxcXFxcXCIsIFxcXFxcXFwiZmx2XFxcXFxcXCIsIFxcXFxcXFwibTR2XFxcXFxcXCIsIFxcXFxcXFwibTN1OFxcXFxcXFwiLCBcXFxcXFxcInRzXFxcXFxcXCJdLFxcXFxyXFxcXG4gICAgaW1nOiBbXFxcXFxcXCJqcGdcXFxcXFxcIiwgXFxcXFxcXCJwbmdcXFxcXFxcIiwgXFxcXFxcXCJqcGVnXFxcXFxcXCIsIFxcXFxcXFwiZ2lmXFxcXFxcXCIsIFxcXFxcXFwic3ZnXFxcXFxcXCIsIFxcXFxcXFwicmF3XFxcXFxcXCJdXFxcXHJcXFxcbn0pXFxcXHJcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlNldHRpbmdcXFwiLFxcXCJwYXRoXFxcIjpcXFwiU2V0dGluZ1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcclxcXFxuY29uc3QgeyBzdHlsZV9jb2xvciB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvRGVidWcnKVxcXFxyXFxcXG5zZXRQYWdlVGl0bGUoJ+iuvue9ricpXFxcXHJcXFxcbnZhciByZXMgPSBbXVxcXFxyXFxcXG5cXFxcclxcXFxuaWYgKGdldEl0ZW0oJ2FjY2Vzc190b2tlbicsICcnKSA9PSAnJykge1xcXFxyXFxcXG4gICAgY2xlYXJNeVZhcigndHVzZXJuYW1lJylcXFxcclxcXFxuICAgIGNsZWFyTXlWYXIoJ3RwYXNzd2QnKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogJ/CfkaTnlKjmiLflkI0nLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXFxcclxcXFxuICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfSxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn55So5oi35ZCNJyxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcclxcXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl55So5oi35ZCNJyxcXFxcclxcXFxuICAgICAgICBleHRyYToge1xcXFxyXFxcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcigndHVzZXJuYW1lJywgaW5wdXQpXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn8J+UkeWvhueggScsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxyXFxcXG4gICAgICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6ICflr4bnoIEnLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxyXFxcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlr4bnoIEnLFxcXFxyXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dE15VmFyKCd0cGFzc3dkJywgaW5wdXQpXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgLy8g6Ze06ZqU5qCPXFxcXHJcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE1OyBpKyspIHtcXFxcclxcXFxuICAgICAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn56Gu5a6aJyxcXFxcclxcXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGNvbnN0IHsgbG9naW4gfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxcXHJcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oJ3VzZXJuYW1lJywgZ2V0TXlWYXIoJ3R1c2VybmFtZScsICcnKSlcXFxcclxcXFxuICAgICAgICAgICAgc2V0SXRlbSgncGFzc3dkJywgZ2V0TXlWYXIoJ3RwYXNzd2QnLCAnJykpXFxcXHJcXFxcbiAgICAgICAgICAgIGxvZ2luKGdldEl0ZW0oJ3VzZXJuYW1lJywgJycpLCBnZXRJdGVtKCdwYXNzd2QnLCAnJykpXFxcXHJcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcclxcXFxuICAgICAgICAgICAgLy8gcmV0dXJuICd0b2FzdDovLycgKyBnZXRNeVZhcigndHVzZXJuYW1lJykgKyAnJiYmJyArIGdldE15VmFyKCd0cGFzc3dkJylcXFxcclxcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxyXFxcXG4gICAgICAgIH0pLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn5Y+W5raIJyxcXFxcclxcXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSlcXFxcclxcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxyXFxcXG4gICAgICAgIH0pLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcbn0gZWxzZSB7XFxcXHJcXFxcbiAgICBjb25zdCB7IGdldF91c2VyX2Jhc2VfaW5mbywgZ2V0X3VzZXJfdmlwX2luZm8sIGdldF91c2VyX2ludml0ZUNvZGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0FQSScpXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgLy8g55So5oi35L+h5oGvXFxcXHJcXFxcbiAgICBsZXQgdXNlcl9iYXNlX2luZm8gPSBnZXRfdXNlcl9iYXNlX2luZm8oKVxcXFxyXFxcXG4gICAgbGV0IHVzZXJfdmlwX2luZm8gPSBnZXRfdXNlcl92aXBfaW5mbygpXFxcXHJcXFxcbiAgICBsZXQgdXNlcl9pbnZpdGVDb2RlID0gZ2V0X3VzZXJfaW52aXRlQ29kZSgpXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgcmVzLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIC8vIHRpdGxlOiBg8J+RpOeUqOaIt+WQjSjpgq7nrrEpOiAke3VzZXJfYmFzZV9pbmZvLm5hbWUgKyAnICgnICsgdXNlcl9iYXNlX2luZm8uZW1haWwgKyAnKSd9YCxcXFxcclxcXFxuICAgICAgICB0aXRsZTogYPCfkaQke1xcXFxcXFwi4oCY4oCY4oCZ4oCZXFxcXFxcXCIrc3R5bGVfY29sb3IoXFxcXFxcXCLnlKjmiLflkI0o54K55Ye75pi+56S66YKu566xKVxcXFxcXFwiLCBcXFxcXFxcIiMyNEJCNzVcXFxcXFxcIil9OiAke2dldE15VmFyKFxcXFxcXFwic2hvd19lbWFpbFxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyB1c2VyX2Jhc2VfaW5mby5uYW1lIDogdXNlcl9iYXNlX2luZm8ubmFtZSArIFxcXFxcXFwiIChcXFxcXFxcIiArIHVzZXJfYmFzZV9pbmZvLmVtYWlsICsgXFxcXFxcXCIpXFxcXFxcXCJ9YCxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCk9PntcXFxcclxcXFxuICAgICAgICAgICAgbGV0IHNob3dfZW1haWwgPSBnZXRNeVZhcihcXFxcXFxcInNob3dfZW1haWxcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpXFxcXHJcXFxcbiAgICAgICAgICAgIGlmIChzaG93X2VtYWlsID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInNob3dfZW1haWxcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpXFxcXHJcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInNob3dfZW1haWxcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpXFxcXHJcXFxcbiAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxyXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcclxcXFxuICAgICAgICB9KVxcXFxyXFxcXG4gICAgICAgIC8vIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6IGDwn5KOJHtcXFxcXFxcIuKAmOKAmOKAmeKAmVxcXFxcXFwiK3N0eWxlX2NvbG9yKFxcXFxcXFwi5Lya5ZGY562J57qnXFxcXFxcXCIsIFxcXFxcXFwiIzI0QkI3NVxcXFxcXFwiKX06ICR7dXNlcl92aXBfaW5mby5iYXNlLnZpcF9zdGF0dXMgPyAnVklQJyA6ICfpmZDliLYnfWAsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxyXFxcXG4gICAgICAgIC8vIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6IGDwn5eC77iPJHtcXFxcXFxcIuKAmOKAmOKAmeKAmVxcXFxcXFwiK3N0eWxlX2NvbG9yKFxcXFxcXFwi56m66Ze05a656YePXFxcXFxcXCIsIFxcXFxcXFwiIzI0QkI3NVxcXFxcXFwiKX06ICR7XFxcXHJcXFxcbiAgICAgICAgICAgIHVzZXJfdmlwX2luZm8uYmFzZS52aXBfc3RhdHVzID8gdXNlcl92aXBfaW5mby5iYXNlLmFzc2V0cyArICdCJyA6IHVzZXJfdmlwX2luZm8uYmFzZS5hc3NldHMgKyAnQidcXFxcclxcXFxuICAgICAgICB9YCxcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXHJcXFxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogYPCflKEke1xcXFxcXFwi4oCY4oCY4oCZ4oCZXFxcXFxcXCIrc3R5bGVfY29sb3IoXFxcXFxcXCLpgoDor7fnoIEo54K55Ye75aSN5Yi2KVxcXFxcXFwiLCBcXFxcXFxcIiMyNEJCNzVcXFxcXFxcIil9OiAke3VzZXJfaW52aXRlQ29kZS5jb2RlfWAsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxyXFxcXG4gICAgICAgIHVybDogYGNvcHk6Ly8ke3VzZXJfaW52aXRlQ29kZS5jb2RlfWAsXFxcXHJcXFxcbiAgICAgICAgLy8gZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH0sXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogYOKPse+4jyR7XFxcXFxcXCLigJjigJjigJnigJlcXFxcXFxcIitzdHlsZV9jb2xvcihcXFxcXFxcIumCgOivt+aXtumXtOWSjOasoeaVsCjngrnlh7vmiYvliqjpgoDor7cpXFxcXFxcXCIsIFxcXFxcXFwiIzI0QkI3NVxcXFxcXFwiKX06ICR7XFxcXHJcXFxcbiAgICAgICAgICAgIGdldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCAnRmFpbCcpID09ICdGYWlsJyA/IFxcXFxcXFwi6YKA6K+35aSx6LSlXFxcXFxcXCI6IGdldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCAnRmFpbCcpXFxcXHJcXFxcbiAgICAgICAgfSAo5qyh5pWwOiR7Z2V0TXlWYXIoJ2ludml0ZV9jb3VudCcsICcwJyl9KWAsXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxyXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1c2VyX2ludml0ZUNvZGUpPT57XFxcXHJcXFxcbiAgICAgICAgICAgIGNvbnN0IHtpbnZpdGVfZ299ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL0ludml0ZVxcXFxcXFwiKVxcXFxyXFxcXG4gICAgICAgICAgICBjb25zdCB7IHN0eWxlX2NvbG9yIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9EZWJ1ZycpXFxcXHJcXFxcbiAgICAgICAgICAgIGludml0ZV9nbyh1c2VyX2ludml0ZUNvZGUuY29kZSlcXFxcclxcXFxuICAgICAgICAgICAgbGV0IG5ld190aXRsZSA9IGDij7HvuI8ke1xcXFxcXFwi4oCY4oCY4oCZ4oCZXFxcXFxcXCIrc3R5bGVfY29sb3IoXFxcXFxcXCLpgoDor7fml7bpl7TlkozmrKHmlbAo54K55Ye75omL5Yqo5Yi35pawKVxcXFxcXFwiLCBcXFxcXFxcIiMyNEJCNzVcXFxcXFxcIil9OiAke1xcXFxyXFxcXG4gICAgICAgICAgICBnZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgJ0ZhaWwnKSA9PSAnRmFpbCcgPyBcXFxcXFxcIumCgOivt+Wksei0pVxcXFxcXFwiOiBnZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgJ0ZhaWwnKX0gKOasoeaVsDoke2dldE15VmFyKCdpbnZpdGVfY291bnQnLCAnMCcpfSlgXFxcXHJcXFxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcXFxcXCJhdXRvX2ludml0ZV9pbmZvXFxcXFxcXCIse3RpdGxlOiBuZXdfdGl0bGV9KVxcXFxyXFxcXG4gICAgICAgICAgICAvLyByZWZyZXNoUGFnZSgpXFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxyXFxcXG4gICAgICAgIH0sIHVzZXJfaW52aXRlQ29kZSksXFxcXHJcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcclxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwiYXV0b19pbnZpdGVfaW5mb1xcXFxcXFwiXFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIC8vIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXMucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6IGDwn5iIJHtcXFxcXFxcIuKAmOKAmOKAmeKAmVxcXFxcXFwiK3N0eWxlX2NvbG9yKFxcXFxcXFwi5piv5ZCm5byA5ZCv6Ieq5Yqo6YKA6K+3KOeCueWHu+WIh+aNoilcXFxcXFxcIiwgXFxcXFxcXCIjMjRCQjc1XFxcXFxcXCIpfTogJHtnZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzAnKSA9PSAnMCcgPyAn5ZCmJyA6ICfmmK8nfWAsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCk9PntcXFxcclxcXFxuICAgICAgICAgICAgaWYoZ2V0SXRlbSgnYXV0b19yZWZyZXNoX2ludml0ZScsICcwJykgPT0gJzAnKSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhdXRvX3JlZnJlc2hfaW52aXRlJywgJzEnKVxcXFxyXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnYXV0b19yZWZyZXNoX2ludml0ZScsICcwJylcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxyXFxcXG4gICAgICAgIH0pLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJlcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICB0aXRsZTogYPCfmLQke1xcXFxcXFwi4oCY4oCY4oCZ4oCZXFxcXFxcXCIrc3R5bGVfY29sb3IoXFxcXFxcXCLmmK/lkKbmiZPljbDpgoDor7fml6Xlv5co54K55Ye75YiH5o2iKVxcXFxcXFwiLCBcXFxcXFxcIiMyNEJCNzVcXFxcXFxcIil9OiAke2dldE15VmFyKFxcXFxcXFwiZGVidWdfZW5hYmxlXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSA9PSAnMCcgPyAn5ZCmJyA6ICfmmK8nfWAsXFxcXHJcXFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCk9PntcXFxcclxcXFxuICAgICAgICAgICAgaWYoZ2V0TXlWYXIoXFxcXFxcXCJkZWJ1Z19lbmFibGVcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09ICcwJykge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJkZWJ1Z19lbmFibGVcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpXFxcXHJcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImRlYnVnX2VuYWJsZVxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIilcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXHJcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxyXFxcXG4gICAgICAgIH0pLFxcXFxyXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5zZXRSZXN1bHQocmVzKVxcXFxyXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJEZWJ1Z1xcXCIsXFxcInBhdGhcXFwiOlxcXCJEZWJ1Z1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBzdHlsZV9jb2xvcihzdHIsIGNvbG9yLCBzbWFsbCkge1xcXFxyXFxcXG4gICAgaWYgKHNtYWxsID09IHVuZGVmaW5lZCkge1xcXFxyXFxcXG4gICAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjonICsgY29sb3IgKyAnXFxcXFxcXCI+JyArIHN0ciArICc8L3NwYW4+J1xcXFxyXFxcXG4gICAgfSBlbHNlIHtcXFxcclxcXFxuICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6JyArIGNvbG9yICsgJ1xcXFxcXFwiPjxzbWFsbD4nICsgc3RyICsgJzwvc21hbGw+PC9zcGFuPidcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZGVidWdfbG9nKG9iaikge1xcXFxyXFxcXG4gICAgbGV0IGRlYnVnX2VuYmxlID0gZ2V0TXlWYXIoXFxcXFxcXCJkZWJ1Z19lbmFibGVcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpXFxcXHJcXFxcbiAgICBpZiAoZGVidWdfZW5ibGUgPT0gXFxcXFxcXCIxXFxcXFxcXCIpIHtcXFxcclxcXFxuICAgIC8vIGlmICh0cnVlKSB7XFxcXHJcXFxcbiAgICAgICAgJC5sb2cob2JqKVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5cXFxcclxcXFxuJC5leHBvcnRzID0ge1xcXFxyXFxcXG4gICAgc3R5bGVfY29sb3IsXFxcXHJcXFxcbiAgICBkZWJ1Z19sb2dcXFxcclxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkludml0ZVxcXCIsXFxcInBhdGhcXFwiOlxcXCJJbnZpdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy/mlLnoh6rkuI3nn6XlkI3lpKfkvaxcXFxcclxcXFxuXFxcXHJcXFxcbi8vIOiwg+ivleaXpeW/l1xcXFxyXFxcXG5jb25zdCB7IGRlYnVnX2xvZyB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvRGVidWcnKVxcXFxyXFxcXG5cXFxcclxcXFxuLy8gID09PT09PT09PT09PT09PT3nvZHnu5zor7fmsYLlj4LmlbA9PT09PT09PT09PT09PT09XFxcXHJcXFxcbmxldCBpbkNvZGUsIG1haWwsIHhpZCwga2V5LCBzaWduLCB0IC8vIOi/memHjOS/ruaUueiHquW3seeahOmCgOivt+eggVxcXFxyXFxcXG5cXFxcclxcXFxuY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZSgnaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanMnKVxcXFxyXFxcXG5cXFxcclxcXFxuY29uc3QgZGV2aWNlTmFtZSA9ICdYSUFPTUknXFxcXHJcXFxcbmNvbnN0IGRldmljZU1vZGVsID0gJzIwMTIwNTEnXFxcXHJcXFxcbmNvbnN0IGNsaWVudCA9ICdZTnhUOXc3R01kV3ZFT0thJ1xcXFxyXFxcXG5jb25zdCBwd2QgPSAncHc5OTk5OTknXFxcXHJcXFxcbmNvbnN0IGJhc2ljUmVxdWVzdEhlYWRlcnNfMSA9IHtcXFxcclxcXFxuICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgnLFxcXFxyXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyxcXFxcclxcXFxuICAgIEhvc3Q6ICd1c2VyLm15cGlrcGFrLmNvbScsXFxcXHJcXFxcbiAgICBDb25uZWN0aW9uOiAnS2VlcC1BbGl2ZScsXFxcXHJcXFxcbiAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLFxcXFxyXFxcXG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuLy8gID09PT09PT09PT09PT09PT09PeS4u+WHveaVsD09PT09PT09PT09PT09PT09PT1cXFxcclxcXFxuZnVuY3Rpb24gaW52aXRlX2dvKG5ld0luQ29kZSkge1xcXFxyXFxcXG4gICAgc2V0SXRlbSgnaW52aXRlX3Jlc3VsdCcsIFxcXFxcXFwiRmFpbFxcXFxcXFwiKVxcXFxyXFxcXG4gICAgbGV0IGludml0ZV9saW1pdF9jb3VudCA9IDNcXFxcclxcXFxuICAgIGxldCBpbnZpdGVfY3VycmVudF9jb3VudCA9IE51bWJlcihnZXRNeVZhcignaW52aXRlX2NvdW50JywgJzAnKSlcXFxcclxcXFxuICAgIGlmIChpbnZpdGVfY3VycmVudF9jb3VudCA+PSBpbnZpdGVfbGltaXRfY291bnQpIHtcXFxcclxcXFxuICAgICAgICAkLmxvZyhg6YKA6K+35qyh5pWw5aSn5LqOJHtpbnZpdGVfbGltaXRfY291bnR977yM5pqC5pe256aB5q2i6YKA6K+3YClcXFxcclxcXFxuICAgICAgICByZXR1cm5cXFxcclxcXFxuICAgIH1cXFxcclxcXFxuXFxcXHJcXFxcbiAgICAvLyDmtYvor5Xku6PnoIFcXFxcclxcXFxuICAgIC8vIHB1dE15VmFyKCdpbnZpdGVfY291bnQnLCAoaW52aXRlX2N1cnJlbnRfY291bnQgKyAxKS50b1N0cmluZygpKVxcXFxyXFxcXG4gICAgLy8gY2hlY2tfaW52aXRlX3Jlc3VsdCgpXFxcXHJcXFxcbiAgICAvLyBkZWJ1Z19sb2coJ+mCgOivt+aIkOWKn+WVpicpXFxcXHJcXFxcbiAgICAvLyByZXR1cm5cXFxcclxcXFxuXFxcXHJcXFxcbiAgICBpbkNvZGUgPSBuZXdJbkNvZGVcXFxcclxcXFxuICAgIHhpZCA9IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpXFxcXHJcXFxcbiAgICB0ID0gU3RyaW5nKERhdGUubm93KCkpXFxcXHJcXFxcbiAgICBrZXkgPSBnZXRVQUtleSgpXFxcXHJcXFxcbiAgICB1YSA9IGdldFVzZXJBZ2VudChrZXkpXFxcXHJcXFxcbiAgICBzaWduID0gZ2V0U2lnbigpXFxcXHJcXFxcbiAgICBtYWlsID0gZ2V0RW1haWwoKVxcXFxyXFxcXG4gICAgZGVidWdfbG9nKGDojrflj5bpgq7nrrHlnLDlnYA6JHttYWlsfWApXFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZygn6I635Y+W5Yid5aeLVE9LRU46JylcXFxcclxcXFxuICAgICAgICBjb25zdCByZXN1bHQxID0gaW5pdCgpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDEpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzdWx0MiA9IGdldEltYWdlKClcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coJ+iOt+WPlua7keWdl+mqjOivgeaVsOaNrjonKVxcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhyZXN1bHQyKVxcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhg6ZyA6KaB56e75Yqo5ruR5Z2XOiAke3Jlc3VsdDJbJ3NlbGVjdElkJ119IOasoWApXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bpqozor4Hmu5HlnZdUT0tFTjonKVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3VsdDMgPSBnZXROZXdUb2tlbihyZXN1bHQyLCByZXN1bHQxWydjYXB0Y2hhX3Rva2VuJ10pXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDMpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKCflj5HpgIHpqozor4HnoIHpgq7ku7Y6JylcXFxcclxcXFxuICAgICAgICBjb25zdCByZXN1bHQ0ID0gdmVyaWZpY2F0aW9uKHJlc3VsdDNbJ2NhcHRjaGFfdG9rZW4nXSlcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2cocmVzdWx0NClcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coJ+iOt+WPlumCruS7tumqjOivgeeggS4uLi4uLicpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzdWx0NSA9IGdldENvZGUoKVxcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZygn6YKu5Lu26aqM6K+B56CBOicpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDUpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bpqozor4FUT0tFTjonKVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3VsdDYgPSB2ZXJpZnkocmVzdWx0NFsndmVyaWZpY2F0aW9uX2lkJ10sIHJlc3VsdDUpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDYpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKCfojrflj5bmlrDotKbmiLdJROWPilRPS0VOOicpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzdWx0NyA9IHNpZ251cChyZXN1bHQ2Wyd2ZXJpZmljYXRpb25fdG9rZW4nXSlcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2cocmVzdWx0NylcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coJ+iOt+WPluS6jOasoeWuieWFqOmqjOivgVRPS0VOOicpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzdWx0OCA9IGluaXQxKHJlc3VsdDdbJ2FjY2Vzc190b2tlbiddLCByZXN1bHQ3WydzdWInXSlcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2cocmVzdWx0OClcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coJ+WwneivleWPkei1t+mCgOivtzonKVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3VsdDkgPSBpbnZpdGUocmVzdWx0N1snc3ViJ10sIHJlc3VsdDdbJ2FjY2Vzc190b2tlbiddLCByZXN1bHQ4WydjYXB0Y2hhX3Rva2VuJ10pXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDkpXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKCfmnIDlkI7nu5Pmnpw6JylcXFxcclxcXFxuICAgICAgICBjb25zdCByZXN1bHQxMCA9IGFjdGl2YXRpb25Db2RlKHJlc3VsdDdbJ2FjY2Vzc190b2tlbiddLCByZXN1bHQ4WydjYXB0Y2hhX3Rva2VuJ10pXFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKHJlc3VsdDEwKVxcXFxyXFxcXG4gICAgICAgIGNoZWNrX2ludml0ZV9yZXN1bHQocmVzdWx0MTApXFxcXHJcXFxcbiAgICAgICAgcHV0TXlWYXIoJ2ludml0ZV9jb3VudCcsIChpbnZpdGVfY3VycmVudF9jb3VudCArIDEpLnRvU3RyaW5nKCkpXFxcXHJcXFxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvcilcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuJC5leHBvcnRzID0ge1xcXFxyXFxcXG4gICAgaW52aXRlX2dvLFxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG4vLyDnoa7orqTmmK/lkKbpgoDor7fmiJDlip/lh73mlbBcXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIGNoZWNrX2ludml0ZV9yZXN1bHQocmVzdWx0MTApIHtcXFxcclxcXFxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcXFxcclxcXFxuICAgIC8vIOagvOW8j+WMluaXpeacn+WSjOaXtumXtOS4uiAnWVlZWS9NTS9ERCBISDpNTSdcXFxcclxcXFxuICAgIGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBgJHtub3cuZ2V0RnVsbFllYXIoKX0vJHsobm93LmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LyR7bm93XFxcXHJcXFxcbiAgICAgICAgLmdldERhdGUoKVxcXFxyXFxcXG4gICAgICAgIC50b1N0cmluZygpXFxcXHJcXFxcbiAgICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9LyR7bm93LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke25vd1xcXFxyXFxcXG4gICAgICAgIC5nZXRNaW51dGVzKClcXFxcclxcXFxuICAgICAgICAudG9TdHJpbmcoKVxcXFxyXFxcXG4gICAgICAgIC5wYWRTdGFydCgyLCAnMCcpfWBcXFxcclxcXFxuICAgIC8vIHNldEl0ZW0oJ2ludml0ZV9yZXN1bHQnLCBgJHtmb3JtYXR0ZWRUaW1lfWApXFxcXHJcXFxcbiAgICBpZiAocmVzdWx0MTAuZGF0YS5zdGF0dXMgPT0gXFxcXFxcXCJva1xcXFxcXFwiKSB7XFxcXHJcXFxcbiAgICAgICAgJC5sb2coXFxcXFxcXCLliLfmlrDpgoDor7fmiJDlip/kuoblkaJcXFxcXFxcIilcXFxcclxcXFxuICAgICAgICBzZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgYCR7Zm9ybWF0dGVkVGltZX1gKVxcXFxyXFxcXG4gICAgfSBlbHNlIHtcXFxcclxcXFxuICAgICAgICBzZXRJdGVtKCdpbnZpdGVfcmVzdWx0JywgXFxcXFxcXCJGYWlsXFxcXFxcXCIpXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vID09PT09PT09PT09PT09PemCrueusUFQSeWHveaVsD09PT09PT09PT09PT09PT09PVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZ2V0RW1haWwoKSB7XFxcXHJcXFxcbiAgICBjb25zdCBkb21haW5zID0gWyd5em0uZGUnLCAncWFicS5jb20nLCAnZW5kLnR3JywgJ3V1Zi5tZSddXFxcXHJcXFxcbiAgICBjb25zdCBkb21haW4gPSBkb21haW5zW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRvbWFpbnMubGVuZ3RoKV1cXFxcclxcXFxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xcXFxyXFxcXG4gICAgbGV0IHJlc3VsdCA9ICcnXFxcXHJcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXFxcclxcXFxuICAgICAgICBsZXQgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzLmxlbmd0aClcXFxcclxcXFxuICAgICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tSW5kZXgpXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbiAgICByZXR1cm4gcmVzdWx0ICsgJ0AnICsgZG9tYWluXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIGdldEVtYWlsSWQodGVtcCkge1xcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICByZXR1cm4gdGVtcFswXVsnaWQnXVxcXFxyXFxcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXFxcclxcXFxuICAgICAgICByZXR1cm4gZmFsc2VcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZXh0cmFjdFZlcmlmaWNhdGlvbkNvZGUodGV4dCkge1xcXFxyXFxcXG4gICAgY29uc3QgcGF0dGVybiA9IC88aDI+KFxcXFxcXFxcZHs2fSk8XFxcXFxcXFwvaDI+LyAvLyDljLnphY025L2N6L+e57ut5pWw5a2XXFxcXHJcXFxcbiAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2gocGF0dGVybilcXFxcclxcXFxuICAgIGlmIChtYXRjaCkge1xcXFxyXFxcXG4gICAgICAgIHJldHVybiBtYXRjaFsxXVxcXFxyXFxcXG4gICAgfSBlbHNlIHtcXFxcclxcXFxuICAgICAgICByZXR1cm4gbnVsbFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBnZXRDb2RlKCkge1xcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICBsZXQgdGVzdF9udW0gPSAxMFxcXFxyXFxcXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZldGNoKCdodHRwczovL2FwaS5tYWlsLmN4L2FwaS92MS9hdXRoL2F1dGhvcml6ZV90b2tlbicsIHtcXFxcclxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXHJcXFxcbiAgICAgICAgfSlcXFxcclxcXFxuICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXFxcclxcXFxuICAgICAgICBsZXQgY29va2llID0gJ2F1dGhfdG9rZW49JTIyJyArIHJlc3BvbnNlRGF0YSArICclMjIlMEEnXFxcXHJcXFxcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7XFxcXHJcXFxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXHJcXFxcbiAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxyXFxcXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cmVzcG9uc2VEYXRhfWAsXFxcXHJcXFxcbiAgICAgICAgICAgIENvb2tpZTogY29va2llLFxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgICAgICB3aGlsZSAodGVzdF9udW0gPj0gMCkge1xcXFxyXFxcXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UxID0gZmV0Y2goYGh0dHBzOi8vYXBpLm1haWwuY3gvYXBpL3YxL21haWxib3gvJHttYWlsfWAsIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxcXHJcXFxcbiAgICAgICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgICAgIGxldCByZXNwb25zdDFEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZTEpXFxcXHJcXFxcbiAgICAgICAgICAgIGxldCBpZCA9IGdldEVtYWlsSWQocmVzcG9uc3QxRGF0YSlcXFxcclxcXFxuICAgICAgICAgICAgaWYgKGlkKSB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UyID0gZmV0Y2goYGh0dHBzOi8vYXBpLm1haWwuY3gvYXBpL3YxL21haWxib3gvJHttYWlsfS8ke2lkfWAsIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcclxcXFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZTIpXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBsZXQgZW1haWxUZXh0ID0gZGF0YVsnYm9keSddWydodG1sJ11cXFxcclxcXFxuICAgICAgICAgICAgICAgIGxldCB2ZXJpZmljYXRpb25Db2RlID0gZXh0cmFjdFZlcmlmaWNhdGlvbkNvZGUoZW1haWxUZXh0KVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgaWYgKHZlcmlmaWNhdGlvbkNvZGUpIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyaWZpY2F0aW9uQ29kZVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICB0ZXN0X251bS0tXFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVidWdfbG9nKCfmnKrog73mj5Dlj5bliLDpqozor4HnoIEs562J5b6FNXPlkI7ph43or5UnKVxcXFxyXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGVzdF9udW0tLVxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoNTAwMClcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKGUudG9TdHJpbmcoKSlcXFxcclxcXFxuICAgICAgICB0aHJvdyBlXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vICA9PT09PT09PT09PT09PT3liqDlr4blj4rlj4LmlbDlh73mlbA9PT09PT09PT09PT09PT09XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiB1dWlkdjQoKSB7XFxcXHJcXFxcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDAsXFxcXHJcXFxcbiAgICAgICAgICAgIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4XFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBnZXRVQUtleSgpIHtcXFxcclxcXFxuICAgIGNvbnN0IGcgPSB4aWQgKyAnY29tLnBpa2Nsb3VkLnBpa3BhazFhcHBrZXknXFxcXHJcXFxcbiAgICBjb25zdCBmID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChnKS50b0RpZ2VzdCgpLnNoYTEoKVxcXFxyXFxcXG4gICAgY29uc3QgaCA9IG1kNShmKVxcXFxyXFxcXG4gICAgcmV0dXJuIHhpZCArIGhcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZ2V0VXNlckFnZW50KGtleSkge1xcXFxyXFxcXG4gICAgcmV0dXJuIGBBTkRST0lELWNvbS5waWtjbG91ZC5waWtwYWsvMS4zOC4wIHByb3RvY29sdmVyc2lvbi8yMDAgYWNjZXNzdHlwZS8gY2xpZW50aWQvJHtjbGllbnR9IGNsaWVudHZlcnNpb24vMS4zOC4wIGFjdGlvbl90eXBlLyBuZXR3b3JrdHlwZS9XSUZJIHNlc3Npb25pZC8gZGV2aWNlaWQvJHt4aWR9IHByb3ZpZGVybmFtZS9OT05FIGRldmljZXNpZ24vZGl2MTAxLiR7a2V5fSByZWZyZXNoX3Rva2VuLyBzZGt2ZXJzaW9uLzEuMS4wLjExMDAwMCBkYXRldGltZS8ke3R9IHVzcm5vLyBhcHBuYW1lL2FuZHJvaWQtY29tLnBpa2Nsb3VkLnBpa3BhayBzZXNzaW9uX29yaWdpbi8gZ3JhbnRfdHlwZS8gYXBwaWQvIGNsaWVudGlwLyBkZXZpY2VuYW1lLyR7ZGV2aWNlTmFtZX1fJHtkZXZpY2VNb2RlbH0gb3N2ZXJzaW9uLzEzIHBsYXRmb3JtdmVyc2lvbi8xMCBhY2Nlc3Ntb2RlLyBkZXZpY2Vtb2RlbC8ke2RldmljZU1vZGVsfWBcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZ2V0U2lnbigpIHtcXFxcclxcXFxuICAgIGNvbnN0IGUgPSBbXFxcXHJcXFxcbiAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcXFxyXFxcXG4gICAgICAgICAgICBzYWx0OiAnWjFHVUg5RlBkZDJ1UjQ4JyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXFxcclxcXFxuICAgICAgICAgICAgc2FsdDogJ1c0QXQ4Q04wMFllSUNmcmhLeWUnLFxcXFxyXFxcXG4gICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICBhbGc6ICdtZDUnLFxcXFxyXFxcXG4gICAgICAgICAgICBzYWx0OiAnV2JzSnNleE1USWorcWp1Vk5rVFpVSnhxVWtkZicsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICdPNTZiY1dNb0hhVFhleTVRbnpLWERVRVRlYVZTRCcsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICduQU4zakJyaXk4L1BYR0Fkc24zeVBNVScsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICcrT1FFaW9ORUNOZjlVZFJlJyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXFxcclxcXFxuICAgICAgICAgICAgc2FsdDogJzJCVEJ4WjNJYlBua3JyZmQvJyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXFxcclxcXFxuICAgICAgICAgICAgc2FsdDogJ2dCaXA1QVl0bTUzJyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXFxcclxcXFxuICAgICAgICAgICAgc2FsdDogJzlGTXlydmpaRlpKVDVZK2IxTmVTWWZzNScsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICcwY0lCdEVWV1lDS2RJT2xPWG5USlBoTEdVL3k1JyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgYWxnOiAnbWQ1JyxcXFxcclxcXFxuICAgICAgICAgICAgc2FsdDogJzkyajRJK1ppTXl4Rng2UScsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICd4TkZOOVJuVWx1MjE4cycsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgIGFsZzogJ21kNScsXFxcXHJcXFxcbiAgICAgICAgICAgIHNhbHQ6ICdVWmNublEybmthWTBTJyxcXFxcclxcXFxuICAgICAgICB9LFxcXFxyXFxcXG4gICAgXVxcXFxyXFxcXG4gICAgbGV0IG1kNV9oYXNoID0gYFlOeFQ5dzdHTWRXdkVPS2ExLjM4LjBjb20ucGlrY2xvdWQucGlrcGFrJHt4aWR9JHt0fWBcXFxcclxcXFxuICAgIGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xcXFxyXFxcXG4gICAgICAgIG1kNV9oYXNoICs9IGl0ZW0uc2FsdFxcXFxyXFxcXG4gICAgICAgIG1kNV9oYXNoID0gbWQ1KG1kNV9oYXNoKVxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICByZXR1cm4gbWQ1X2hhc2hcXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gaXRlbV9jb21wYXJlKGltZ19saXN0LCBtb2RlX2xpc3QpIHtcXFxcclxcXFxuICAgIGxldCBzY29yZSA9IDBcXFxcclxcXFxuICAgIGxldCByYW5rID0gMFxcXFxyXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcXFxcclxcXFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDM7IGorKykge1xcXFxyXFxcXG4gICAgICAgICAgICBpZiAoaW1nX2xpc3RbaV1bal0gIT09IG1vZGVfbGlzdFtpXVtqXSkge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgc2NvcmUgKz0gMVxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgaWYgKHNjb3JlID09PSAyKSB7XFxcXHJcXFxcbiAgICAgICAgcmFuayArPSAxXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbiAgICByZXR1cm4gcmFua1xcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBsaXN0X2NvbXBhcmUoZnJhbWVzKSB7XFxcXHJcXFxcbiAgICBsZXQgc2NvcmVfbGlzdCA9IFtdXFxcXHJcXFxcbiAgICBsZXQgZmxhZyA9IDBcXFxcclxcXFxuICAgIGZvciAobGV0IGZyYW1lIG9mIGZyYW1lcykge1xcXFxyXFxcXG4gICAgICAgIGxldCBpbWdfbGlzdCA9IGZyYW1lLm1hdHJpeFxcXFxyXFxcXG4gICAgICAgIGxldCBzY29yZXMgPSAwXFxcXHJcXFxcbiAgICAgICAgZm9yIChsZXQgbW9kZV9mcmFtZSBvZiBmcmFtZXMpIHtcXFxcclxcXFxuICAgICAgICAgICAgbGV0IG1vZGVfbGlzdCA9IG1vZGVfZnJhbWUubWF0cml4XFxcXHJcXFxcbiAgICAgICAgICAgIGxldCBvbmVfc2NvcmUgPSBpdGVtX2NvbXBhcmUoaW1nX2xpc3QsIG1vZGVfbGlzdClcXFxcclxcXFxuICAgICAgICAgICAgc2NvcmVzICs9IG9uZV9zY29yZVxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgICAgICBzY29yZV9saXN0LnB1c2goc2NvcmVzKVxcXFxyXFxcXG4gICAgICAgIGZsYWcgKz0gMVxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XFxcXHJcXFxcbiAgICAgICAgaWYgKHNjb3JlX2xpc3RbaV0gPT09IDExKSB7XFxcXHJcXFxcbiAgICAgICAgICAgIC8vIGRlYnVnX2xvZyhpKVxcXFxyXFxcXG4gICAgICAgICAgICByZXR1cm4gaVxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gcihlLCB0KSB7XFxcXHJcXFxcbiAgICBsZXQgbiA9IHQgLSAxXFxcXHJcXFxcbiAgICBpZiAobiA8IDApIHtcXFxcclxcXFxuICAgICAgICBuID0gMFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgbGV0IHIgPSBlW25dXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgbGV0IHUgPSBNYXRoLmZsb29yKHJbJ3JvdyddIC8gMikgKyAxXFxcXHJcXFxcbiAgICBsZXQgYyA9IE1hdGguZmxvb3IoclsnY29sdW1uJ10gLyAyKSArIDFcXFxcclxcXFxuXFxcXHJcXFxcbiAgICBsZXQgZiA9IHJbJ21hdHJpeCddW3VdW2NdXFxcXHJcXFxcbiAgICBsZXQgbCA9IHQgKyAxXFxcXHJcXFxcbiAgICBpZiAobCA+PSBlLmxlbmd0aCkge1xcXFxyXFxcXG4gICAgICAgIGwgPSB0XFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcblxcXFxyXFxcXG4gICAgbGV0IGQgPSBlW2xdXFxcXHJcXFxcbiAgICBsZXQgcCA9IGwgJSBkWydyb3cnXVxcXFxyXFxcXG4gICAgbGV0IGggPSBsICUgZFsnY29sdW1uJ11cXFxcclxcXFxuXFxcXHJcXFxcbiAgICBsZXQgZyA9IGRbJ21hdHJpeCddW3BdW2hdXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgbGV0IHkgPSBlW3RdXFxcXHJcXFxcbiAgICBsZXQgbSA9IDMgJSB5Wydyb3cnXVxcXFxyXFxcXG4gICAgbGV0IHYgPSA3ICUgeVsnY29sdW1uJ11cXFxcclxcXFxuICAgIGxldCB3ID0geVsnbWF0cml4J11bbV1bdl1cXFxcclxcXFxuICAgIGxldCBiID0gcGFyc2VJbnQoaShmKSkgKyBvKHcpXFxcXHJcXFxcbiAgICBsZXQgeCA9IHBhcnNlSW50KGkodykpIC0gbyhmKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgIHJldHVybiBbcyhhKGkoZiksIG8oZikpKSwgcyhhKGkoZyksIG8oZykpKSwgcyhhKGkodyksIG8odykpKSwgcyhhKGIsIHgpKV1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gaShlKSB7XFxcXHJcXFxcbiAgICByZXR1cm4gcGFyc2VJbnQoZS5zcGxpdCgnLCcpWzBdKVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBvKGUpIHtcXFxcclxcXFxuICAgIHJldHVybiBwYXJzZUludChlLnNwbGl0KCcsJylbMV0pXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIGEoZSwgdCkge1xcXFxyXFxcXG4gICAgcmV0dXJuIGUgKyAnXuKBo14nICsgdFxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBzKGUpIHtcXFxcclxcXFxuICAgIGxldCB0ID0gMFxcXFxyXFxcXG4gICAgbGV0IG4gPSBlLmxlbmd0aFxcXFxyXFxcXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCBuOyByKyspIHtcXFxcclxcXFxuICAgICAgICB0ID0gdSgzMSAqIHQgKyBlLmNoYXJDb2RlQXQocikpXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbiAgICByZXR1cm4gdFxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiB1KGUpIHtcXFxcclxcXFxuICAgIGxldCB0ID0gLTIxNDc0ODM2NDhcXFxcclxcXFxuICAgIGxldCBuID0gMjE0NzQ4MzY0N1xcXFxyXFxcXG4gICAgaWYgKGUgPiBuKSB7XFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIHQgKyAoKGUgLSBuKSAlIChuIC0gdCArIDEpKSAtIDFcXFxcclxcXFxuICAgIH1cXFxcclxcXFxuICAgIGlmIChlIDwgdCkge1xcXFxyXFxcXG4gICAgICAgIHJldHVybiBuIC0gKCh0IC0gZSkgJSAobiAtIHQgKyAxKSkgKyAxXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbiAgICByZXR1cm4gZVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBjKGUsIHQpIHtcXFxcclxcXFxuICAgIHJldHVybiBzKGUgKyAn4oGjJyArIHQpXFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIGltZ19qaihlLCB0LCBuKSB7XFxcXHJcXFxcbiAgICByZXR1cm4ge1xcXFxyXFxcXG4gICAgICAgIGNhOiByKGUsIHQpLFxcXFxyXFxcXG4gICAgICAgIGY6IGMobiwgdCksXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vICA9PT09PT09PT09PT09PT09572R57uc6K+35rGC5Ye95pWwPT09PT09PT09PT09PT09PVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gaW5pdCgpIHtcXFxcclxcXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL3NoaWVsZC9jYXB0Y2hhL2luaXQnXFxcXHJcXFxcbiAgICBjb25zdCByZXF1ZXN0dXJsID0gYnVpbGRVcmwodXJsLCB7XFxcXHJcXFxcbiAgICAgICAgY2xpZW50X2lkOiBjbGllbnQsXFxcXHJcXFxcbiAgICB9KVxcXFxyXFxcXG4gICAgY29uc3QganNvbl9kYXRhID0ge1xcXFxyXFxcXG4gICAgICAgIGFjdGlvbjogJ1BPU1Q6L3YxL2F1dGgvdmVyaWZpY2F0aW9uJyxcXFxcclxcXFxuICAgICAgICBjYXB0Y2hhX3Rva2VuOiAnJyxcXFxcclxcXFxuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXFxcclxcXFxuICAgICAgICBkZXZpY2VfaWQ6IHhpZCxcXFxcclxcXFxuICAgICAgICBtZXRhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGNhcHRjaGFfc2lnbjogJzEuJyArIHNpZ24sXFxcXHJcXFxcbiAgICAgICAgICAgIHVzZXJfaWQ6ICcnLFxcXFxyXFxcXG4gICAgICAgICAgICBwYWNrYWdlX25hbWU6ICdjb20ucGlrY2xvdWQucGlrcGFrJyxcXFxcclxcXFxuICAgICAgICAgICAgY2xpZW50X3ZlcnNpb246ICcxLjM4LjAnLFxcXFxyXFxcXG4gICAgICAgICAgICBlbWFpbDogbWFpbCxcXFxcclxcXFxuICAgICAgICAgICAgdGltZXN0YW1wOiB0LFxcXFxyXFxcXG4gICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiAneGxhY2NzZGswMTovL3hiYXNlLmNsb3VkL2NhbGxiYWNrP3N0YXRlPWhhcmJvcicsXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbiAgICBjb25zdCBoZWFkZXJzID0ge1xcXFxyXFxcXG4gICAgICAgICdYLURldmljZS1JZCc6IHhpZCxcXFxcclxcXFxuICAgICAgICAnVXNlci1BZ2VudCc6IHVhLFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoKHJlcXVlc3R1cmwsIHtcXFxcclxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXHJcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXFxcXHJcXFxcbiAgICAgICAgICAgICksXFxcXHJcXFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGpzb25fZGF0YSksXFxcXHJcXFxcbiAgICAgICAgfSlcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKVxcXFxyXFxcXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGFcXFxcclxcXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKGVycm9yLnRvU3RyaW5nKCkpXFxcXHJcXFxcbiAgICAgICAgdGhyb3cgZXJyb3JcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZ2V0SW1hZ2UoKSB7XFxcXHJcXFxcbiAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS9wenpsL2dlbidcXFxcclxcXFxuICAgIGNvbnN0IHJlcXVlc3R1cmwgPSBidWlsZFVybCh1cmwsIHtcXFxcclxcXFxuICAgICAgICBkZXZpY2VpZDogeGlkLFxcXFxyXFxcXG4gICAgICAgIHRyYWNlaWQ6ICcnLFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuXFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZmV0Y2gocmVxdWVzdHVybClcXFxcclxcXFxuICAgICAgICBjb25zdCBpbWdzSnNvbiA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgZnJhbWVzID0gaW1nc0pzb25bJ2ZyYW1lcyddXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcGlkID0gaW1nc0pzb25bJ3BpZCddXFxcXHJcXFxcbiAgICAgICAgY29uc3QgdHJhY2VpZCA9IGltZ3NKc29uWyd0cmFjZWlkJ11cXFxcclxcXFxuICAgICAgICBjb25zdCBzZWxlY3RJZCA9IGxpc3RfY29tcGFyZShmcmFtZXMpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xcXFxyXFxcXG4gICAgICAgICAgICBmcmFtZXMsXFxcXHJcXFxcbiAgICAgICAgICAgIHBpZCxcXFxcclxcXFxuICAgICAgICAgICAgdHJhY2VpZCxcXFxcclxcXFxuICAgICAgICAgICAgc2VsZWN0SWQsXFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIHJldHVybiByZXN1bHRcXFxcclxcXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxcXHJcXFxcbiAgICAgICAgdGhyb3cgZXJyb3JcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gZ2V0TmV3VG9rZW4ocmVzdWx0LCBjYXB0Y2hhKSB7XFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IGZyYW1lcyA9IHJlc3VsdC5mcmFtZXNcXFxcclxcXFxuICAgICAgICBjb25zdCBzZWxlY3RJZCA9IHJlc3VsdC5zZWxlY3RJZFxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHRyYWNlaWQgPSByZXN1bHQudHJhY2VpZFxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHBpZCA9IHJlc3VsdC5waWRcXFxcclxcXFxuXFxcXHJcXFxcbiAgICAgICAgY29uc3QganNvbiA9IGltZ19qaihmcmFtZXMsIHBhcnNlSW50KHNlbGVjdElkKSwgcGlkKVxcXFxyXFxcXG5cXFxcclxcXFxuICAgICAgICBjb25zdCBmID0ganNvbi5mXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgICAgIGNvbnN0IG5wYWMgPSBqc29uLmNhXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVxdWVzdHVybDEgPSBidWlsZFVybCgnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS9wenpsL3ZlcmlmeScsIHtcXFxcclxcXFxuICAgICAgICAgICAgcGlkOiBTdHJpbmcocGlkKSxcXFxcclxcXFxuICAgICAgICAgICAgZGV2aWNlaWQ6IFN0cmluZyh4aWQpLFxcXFxyXFxcXG4gICAgICAgICAgICB0cmFjZWlkOiBTdHJpbmcodHJhY2VpZCksXFxcXHJcXFxcbiAgICAgICAgICAgIGY6IFN0cmluZyhmKSxcXFxcclxcXFxuICAgICAgICAgICAgbjogU3RyaW5nKG5wYWNbMF0pLFxcXFxyXFxcXG4gICAgICAgICAgICBwOiBTdHJpbmcobnBhY1sxXSksXFxcXHJcXFxcbiAgICAgICAgICAgIGE6IFN0cmluZyhucGFjWzJdKSxcXFxcclxcXFxuICAgICAgICAgICAgYzogU3RyaW5nKG5wYWNbM10pLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UxID0gZmV0Y2gocmVxdWVzdHVybDEpXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UyID0gZmV0Y2goXFxcXHJcXFxcbiAgICAgICAgICAgIGBodHRwczovL3VzZXIubXlwaWtwYWsuY29tL2NyZWRpdC92MS9yZXBvcnQ/ZGV2aWNlaWQ9JHt4aWR9JmNhcHRjaGFfdG9rZW49JHtjYXB0Y2hhfSZ0eXBlPXB6emxTbGlkZXImcmVzdWx0PTAmZGF0YT0ke3BpZH0mdHJhY2VpZD0ke3RyYWNlaWR9YFxcXFxyXFxcXG4gICAgICAgIClcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlMilcXFxcclxcXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRlXFxcXHJcXFxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcXFxyXFxcXG4gICAgICAgIHRocm93IGVycm9yXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIHZlcmlmaWNhdGlvbihuZXd0b2tlbikge1xcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9hdXRoL3ZlcmlmaWNhdGlvbidcXFxcclxcXFxuICAgICAgICBjb25zdCByZXF1ZXN0dXJsID0gYnVpbGRVcmwodXJsLCB7XFxcXHJcXFxcbiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgY29uc3QganNvbkRhdGEgPSB7XFxcXHJcXFxcbiAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IG5ld3Rva2VuLFxcXFxyXFxcXG4gICAgICAgICAgICBlbWFpbDogbWFpbCxcXFxcclxcXFxuICAgICAgICAgICAgbG9jYWxlOiAnemgtQ04nLFxcXFxyXFxcXG4gICAgICAgICAgICB0YXJnZXQ6ICdBTlknLFxcXFxyXFxcXG4gICAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXFxcXHJcXFxcbiAgICAgICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICdYLURldmljZS1JZCc6IHhpZCxcXFxcclxcXFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogdWEsXFxcXHJcXFxcbiAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgIGJhc2ljUmVxdWVzdEhlYWRlcnNfMSxcXFxcclxcXFxuICAgICAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIClcXFxcclxcXFxuXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBwb3N0KHJlcXVlc3R1cmwsIHtcXFxcclxcXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcclxcXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcblxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YVxcXFxyXFxcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coZXJyb3IudG9TdHJpbmcoKSlcXFxcclxcXFxuICAgICAgICB0aHJvdyBlcnJvclxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiB2ZXJpZnkodmVyaWZpY2F0aW9uSWQsIGNvZGUpIHtcXFxcclxcXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvdmVyaWZpY2F0aW9uL3ZlcmlmeSdcXFxcclxcXFxuICAgIGNvbnN0IHJlcXVlc3R1cmwgPSBidWlsZFVybCh1cmwsIHtcXFxcclxcXFxuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXFxcclxcXFxuICAgIH0pXFxcXHJcXFxcbiAgICBjb25zdCBqc29uRGF0YSA9IHtcXFxcclxcXFxuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXFxcclxcXFxuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbklkLFxcXFxyXFxcXG4gICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBjb2RlLFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXFxcXHJcXFxcbiAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICAnWC1EZXZpY2UtSWQnOiB4aWQsXFxcXHJcXFxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdWEsXFxcXHJcXFxcbiAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICBiYXNpY1JlcXVlc3RIZWFkZXJzXzEsXFxcXHJcXFxcbiAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgIClcXFxcclxcXFxuICAgIHRyeSB7XFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBwb3N0KHJlcXVlc3R1cmwsIHtcXFxcclxcXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcclxcXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXFxcclxcXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhXFxcXHJcXFxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcXFxyXFxcXG4gICAgICAgIHRocm93IGVycm9yXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIHNpZ251cCh2ZXJpZmljYXRpb25Ub2tlbikge1xcXFxyXFxcXG4gICAgY29uc3QgbmFtZSA9ICdVXycgKyBtYWlsLnNwbGl0KCdAJylbMF1cXFxcclxcXFxuICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbnVwJ1xcXFxyXFxcXG4gICAgY29uc3QgcmVxdWVzdHVybCA9IGJ1aWxkVXJsKHVybCwge1xcXFxyXFxcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcXFxyXFxcXG4gICAgfSlcXFxcclxcXFxuICAgIGNvbnN0IGpzb25EYXRhID0ge1xcXFxyXFxcXG4gICAgICAgIGNhcHRjaGFfdG9rZW46ICcnLFxcXFxyXFxcXG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcXFxyXFxcXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6ICdkYncyT3RtVkVldVV2SXB0YjFDb3lnJyxcXFxcclxcXFxuICAgICAgICBlbWFpbDogbWFpbCxcXFxcclxcXFxuICAgICAgICBuYW1lOiBuYW1lLFxcXFxyXFxcXG4gICAgICAgIHBhc3N3b3JkOiBwd2QsXFxcXHJcXFxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlbixcXFxcclxcXFxuICAgIH1cXFxcclxcXFxuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgJ1gtRGV2aWNlLUlkJzogeGlkLFxcXFxyXFxcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IHVhLFxcXFxyXFxcXG4gICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgYmFzaWNSZXF1ZXN0SGVhZGVyc18xLFxcXFxyXFxcXG4gICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICApXFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcG9zdChyZXF1ZXN0dXJsLCB7XFxcXHJcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxcXHJcXFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGpzb25EYXRhKSxcXFxcclxcXFxuICAgICAgICB9KVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpXFxcXHJcXFxcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YVxcXFxyXFxcXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcXFxcclxcXFxuICAgICAgICBkZWJ1Z19sb2coZXJyb3IudG9TdHJpbmcoKSlcXFxcclxcXFxuICAgICAgICB0aHJvdyBlcnJvclxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG59XFxcXHJcXFxcblxcXFxyXFxcXG5mdW5jdGlvbiBpbml0MShhY2Nlc3NUb2tlbiwgc3ViKSB7XFxcXHJcXFxcbiAgICB0cnkge1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL3NoaWVsZC9jYXB0Y2hhL2luaXQnXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVxdWVzdHVybCA9IGJ1aWxkVXJsKHVybCwge1xcXFxyXFxcXG4gICAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudCxcXFxcclxcXFxuICAgICAgICB9KVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0ge1xcXFxyXFxcXG4gICAgICAgICAgICBhY3Rpb246ICdQT1NUOi92aXAvdjEvYWN0aXZpdHkvaW52aXRlJyxcXFxcclxcXFxuICAgICAgICAgICAgY2FwdGNoYV90b2tlbjogYWNjZXNzVG9rZW4sXFxcXHJcXFxcbiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50LFxcXFxyXFxcXG4gICAgICAgICAgICBkZXZpY2VfaWQ6IHhpZCxcXFxcclxcXFxuICAgICAgICAgICAgbWV0YToge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgY2FwdGNoYV9zaWduOiBgMS4ke3NpZ259YCxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHVzZXJfaWQ6IHN1YixcXFxcclxcXFxuICAgICAgICAgICAgICAgIHBhY2thZ2VfbmFtZTogJ2NvbS5waWtjbG91ZC5waWtwYWsnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb246ICcxLjM4LjAnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiB0LFxcXFxyXFxcXG4gICAgICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6ICd4bGFjY3NkazAxOi8veGJhc2UuY2xvdWQvY2FsbGJhY2s/c3RhdGU9aGFyYm9yJyxcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXFxcXHJcXFxcbiAgICAgICAgICAgIHtcXFxcclxcXFxuICAgICAgICAgICAgICAgICdYLURldmljZS1JZCc6IHhpZCxcXFxcclxcXFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogdWEsXFxcXHJcXFxcbiAgICAgICAgICAgIH0sXFxcXHJcXFxcbiAgICAgICAgICAgIGJhc2ljUmVxdWVzdEhlYWRlcnNfMSxcXFxcclxcXFxuICAgICAgICAgICAge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIClcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QocmVxdWVzdHVybCwge1xcXFxyXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxyXFxcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uRGF0YSksXFxcXHJcXFxcbiAgICAgICAgfSlcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKVxcXFxyXFxcXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGFcXFxcclxcXFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxcXHJcXFxcbiAgICAgICAgZGVidWdfbG9nKGVycm9yLnRvU3RyaW5nKCkpXFxcXHJcXFxcbiAgICAgICAgdGhyb3cgZXJyb3JcXFxcclxcXFxuICAgIH1cXFxcclxcXFxufVxcXFxyXFxcXG5cXFxcclxcXFxuZnVuY3Rpb24gaW52aXRlKHN1YiwgYWNjZXNzVG9rZW4sIGNhcHRjaGEpIHtcXFxcclxcXFxuICAgIHRyeSB7XFxcXHJcXFxcbiAgICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS92aXAvdjEvYWN0aXZpdHkvaW52aXRlJ1xcXFxyXFxcXG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0ge1xcXFxyXFxcXG4gICAgICAgICAgICBkYXRhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBzZGtfaW50OiAnMzMnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXVpZDogeGlkLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6ICcxJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHVzZXJpZDogc3ViLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXNlclN1YjogJycsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBwcm9kdWN0X2ZsYXZvcl9uYW1lOiAnY2hhJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlX3N5c3RlbTogJ3poLUNOJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlX2FwcDogJ3poLUNOJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGJ1aWxkX3ZlcnNpb25fcmVsZWFzZTogJzEzJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHBob25lTW9kZWw6IGRldmljZU1vZGVsLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgYnVpbGRfbWFudWZhY3R1cmVyOiBkZXZpY2VOYW1lLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgYnVpbGRfc2RrX2ludDogJzMzJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNoYW5uZWw6ICdvZmZpY2lhbCcsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uQ29kZTogJzEwMTUwJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHZlcnNpb25OYW1lOiAnMS4zOC4wJyxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGluc3RhbGxGcm9tOiAnb3RoZXInLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY291bnRyeTogJ1BMJyxcXFxcclxcXFxuICAgICAgICAgICAgfSxcXFxcclxcXFxuICAgICAgICAgICAgYXBrX2V4dHJhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjaGFubmVsOiAnb2ZmaWNpYWwnLFxcXFxyXFxcXG4gICAgICAgICAgICB9LFxcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xcXFxyXFxcXG4gICAgICAgICAgICBIb3N0OiAnYXBpLWRyaXZlLm15cGlrcGFrLmNvbScsXFxcXHJcXFxcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxcXFxyXFxcXG4gICAgICAgICAgICBwcm9kdWN0X2ZsYXZvcl9uYW1lOiAnY2hhJyxcXFxcclxcXFxuICAgICAgICAgICAgJ3gtY2FwdGNoYS10b2tlbic6IGNhcHRjaGEsXFxcXHJcXFxcbiAgICAgICAgICAgICd4LWNsaWVudC12ZXJzaW9uLWNvZGUnOiAnMTAxNTAnLFxcXFxyXFxcXG4gICAgICAgICAgICAneC1kZXZpY2UtaWQnOiB4aWQsXFxcXHJcXFxcbiAgICAgICAgICAgICd1c2VyLWFnZW50JzogdWEsXFxcXHJcXFxcbiAgICAgICAgICAgIGNvdW50cnk6ICdQTCcsXFxcXHJcXFxcbiAgICAgICAgICAgICdhY2NlcHQtbGFuZ3VhZ2UnOiAnemgtQ04nLFxcXFxyXFxcXG4gICAgICAgICAgICAneC1wZWVyLWlkJzogeGlkLFxcXFxyXFxcXG4gICAgICAgICAgICAneC11c2VyLXJlZ2lvbic6ICcyJyxcXFxcclxcXFxuICAgICAgICAgICAgJ3gtc3lzdGVtLWxhbmd1YWdlJzogJ3poLUNOJyxcXFxcclxcXFxuICAgICAgICAgICAgJ3gtYWx0LWNhcGFiaWxpdHknOiAnMycsXFxcXHJcXFxcbiAgICAgICAgICAgICdhY2NlcHQtZW5jb2RpbmcnOiAnZ3ppcCcsXFxcXHJcXFxcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXHJcXFxcbiAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcG9zdCh1cmwsIHtcXFxcclxcXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcclxcXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXFxcclxcXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhXFxcXHJcXFxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcXFxyXFxcXG4gICAgICAgIHRocm93IGVycm9yXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbmZ1bmN0aW9uIGFjdGl2YXRpb25Db2RlKGFjY2Vzc1Rva2VuLCBjYXB0Y2hhKSB7XFxcXHJcXFxcbiAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL3ZpcC92MS9vcmRlci9hY3RpdmF0aW9uLWNvZGUnXFxcXHJcXFxcbiAgICBjb25zdCBkYXRhID0ge1xcXFxyXFxcXG4gICAgICAgIGFjdGl2YXRpb25fY29kZTogaW5Db2RlLFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgY29uc3QgbGggPSBKU09OLnN0cmluZ2lmeShkYXRhKS5sZW5ndGgudG9TdHJpbmcoKVxcXFxyXFxcXG4gICAgY29uc3QgaGVhZGVycyA9IHtcXFxcclxcXFxuICAgICAgICBIb3N0OiAnYXBpLWRyaXZlLm15cGlrcGFrLmNvbScsXFxcXHJcXFxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXFxcXHJcXFxcbiAgICAgICAgcHJvZHVjdF9mbGF2b3JfbmFtZTogJ2NoYScsXFxcXHJcXFxcbiAgICAgICAgJ3gtY2FwdGNoYS10b2tlbic6IGNhcHRjaGEsXFxcXHJcXFxcbiAgICAgICAgJ3gtY2xpZW50LXZlcnNpb24tY29kZSc6ICcxMDE1MCcsXFxcXHJcXFxcbiAgICAgICAgJ3gtZGV2aWNlLWlkJzogeGlkLFxcXFxyXFxcXG4gICAgICAgICd1c2VyLWFnZW50JzogdWEsXFxcXHJcXFxcbiAgICAgICAgY291bnRyeTogJ0RLJyxcXFxcclxcXFxuICAgICAgICAnYWNjZXB0LWxhbmd1YWdlJzogJ3poLUNOJyxcXFxcclxcXFxuICAgICAgICAneC1wZWVyLWlkJzogeGlkLFxcXFxyXFxcXG4gICAgICAgICd4LXVzZXItcmVnaW9uJzogJzInLFxcXFxyXFxcXG4gICAgICAgICd4LXN5c3RlbS1sYW5ndWFnZSc6ICd6aC1DTicsXFxcXHJcXFxcbiAgICAgICAgJ3gtYWx0LWNhcGFiaWxpdHknOiAnMycsXFxcXHJcXFxcbiAgICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogbGgsXFxcXHJcXFxcbiAgICAgICAgJ2FjY2VwdC1lbmNvZGluZyc6ICdnemlwJyxcXFxcclxcXFxuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxyXFxcXG4gICAgfVxcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHBvc3QodXJsLCB7XFxcXHJcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxcXHJcXFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxcXFxyXFxcXG4gICAgICAgIH0pXFxcXHJcXFxcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRlID0gSlNPTi5wYXJzZShyZXNwb25zZSlcXFxcclxcXFxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRlXFxcXHJcXFxcbiAgICB9IGNhdGNoIChlcnJvcikge1xcXFxyXFxcXG4gICAgICAgIGRlYnVnX2xvZyhlcnJvci50b1N0cmluZygpKVxcXFxyXFxcXG4gICAgICAgIHRocm93IGVycm9yXFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn1cXFxcclxcXFxuXFxcXHJcXFxcbi8vICA9PT09PT09PT09PT09PT09PT0957uT5p2fPT09PT09PT09PT09PT09PT09PVxcXFxyXFxcXG5cXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJwaWNVcmwiOiJodHRwczovL215cGlrcGFrLmNvbS9mYXZpY29uLTMyeDMyLnBuZyIsInRpdGxlIjoi6K6+572uIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement