Skip to contentLy8gPGJsb2NrOmdlbmVyYXRlOjI+CmZ1bmN0aW9uIGdlbmVyYXRlRGF0YSgpIHsKICBjb25zdCBhZGFwdGVyID0gbmV3IGhlbHBlcnMuX2FkYXB0ZXJzLl9kYXRlKCk7CiAgY29uc3QgZGF0YSA9IFtdOwogIGxldCBkdCA9IGFkYXB0ZXIuc3RhcnRPZihuZXcgRGF0ZSgpLCAnbW9udGgnKTsKICBjb25zdCBlbmQgPSBhZGFwdGVyLmVuZE9mKGR0LCAnbW9udGgnKTsKICB3aGlsZSAoZHQgPD0gZW5kKSB7CiAgICBjb25zdCBpc28gPSBhZGFwdGVyLmZvcm1hdChkdCwgJ3l5eXktTU0tZGQnKTsKICAgIGRhdGEucHVzaCh7CiAgICAgIHg6IFV0aWxzLmlzb0RheU9mV2VlayhkdCksCiAgICAgIHk6IGlzbywKICAgICAgZDogaXNvLAogICAgICB2OiBNYXRoLnJhbmRvbSgpICogNTAKICAgIH0pOwogICAgZHQgPSBuZXcgRGF0ZShkdC5zZXREYXRlKGR0LmdldERhdGUoKSArIDEpKTsKICB9CiAgcmV0dXJuIGRhdGE7Cn0KLy8gPC9ibG9jazpnZW5lcmF0ZT4KCi8vIDxibG9jazpkYXRhOjE+CmNvbnN0IGRhdGEgPSB7CiAgZGF0YXNldHM6IFt7CiAgICBkYXRhOiBnZW5lcmF0ZURhdGEoKQogIH1dCn07Ci8vIDwvYmxvY2s6ZGF0YT4KCi8vIDxibG9jazpjb25maWc6MD4KY29uc3QgY29uZmlnID0gewogIHR5cGU6ICdtYXRyaXgnLAogIGRhdGE6IGRhdGEsCiAgb3B0aW9uczogewogICAgYmFja2dyb3VuZENvbG9yKHtyYXd9KSB7CiAgICAgIGNvbnN0IGFscGhhID0gKDEwICsgcmF3LnYpIC8gNjA7CiAgICAgIHJldHVybiBoZWxwZXJzLmNvbG9yKCdncmVlbicpLmFscGhhKGFscGhhKS5yZ2JTdHJpbmcoKTsKICAgIH0sCiAgICBib3JkZXJDb2xvcih7cmF3fSkgewogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHJhdy52KSAvIDYwOwogICAgICByZXR1cm4gaGVscGVycy5jb2xvcignZ3JlZW4nKS5hbHBoYShhbHBoYSkuZGFya2VuKDAuMykucmdiU3RyaW5nKCk7CiAgICB9LAogICAgYm9yZGVyV2lkdGg6IDEsCiAgICBob3ZlckJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsCiAgICBob3ZlckJvcmRlckNvbG9yOiAneWVsbG93Z3JlZW4nLAogICAgd2lkdGg6ICh7Y2hhcnR9KSA9PiAoY2hhcnQuY2hhcnRBcmVhIHx8IHt9KS53aWR0aCAvIGNoYXJ0LnNjYWxlcy54LnRpY2tzLmxlbmd0aCAtIDMsCiAgICBoZWlnaHQ6ICh7Y2hhcnR9KSA9PihjaGFydC5jaGFydEFyZWEgfHwge30pLmhlaWdodCAvIGNoYXJ0LnNjYWxlcy55LnRpY2tzLmxlbmd0aCAtIDMsCiAgICBwbHVnaW5zOiB7CiAgICAgIGxlZ2VuZDogZmFsc2UsCiAgICAgIHRvb2x0aXA6IHsKICAgICAgICBkaXNwbGF5Q29sb3JzOiBmYWxzZSwKICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgIHRpdGxlKCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICB9LAogICAgICAgICAgbGFiZWwoY29udGV4dCkgewogICAgICAgICAgICBjb25zdCB2ID0gY29udGV4dC5kYXRhc2V0LmRhdGFbY29udGV4dC5kYXRhSW5kZXhdOwogICAgICAgICAgICByZXR1cm4gWydkOiAnICsgdi5kLCAndjogJyArIHYudi50b0ZpeGVkKDIpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICB9LAogICAgc2NhbGVzOiB7CiAgICAgIHk6IHsKICAgICAgICB0eXBlOiAndGltZScsCiAgICAgICAgbGVmdDogJ2xlZnQnLAogICAgICAgIG9mZnNldDogdHJ1ZSwKICAgICAgICB0aW1lOiB7CiAgICAgICAgICB1bml0OiAnd2VlaycsCiAgICAgICAgICByb3VuZDogJ3dlZWsnLAogICAgICAgICAgaXNvV2Vla2RheTogMSwKICAgICAgICAgIGRpc3BsYXlGb3JtYXRzOiB7CiAgICAgICAgICAgIHdlZWs6ICdJJwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdGlja3M6IHsKICAgICAgICAgIG1heFJvdGF0aW9uOiAwLAogICAgICAgICAgYXV0b1NraXA6IHRydWUsCiAgICAgICAgICBwYWRkaW5nOiAxCiAgICAgICAgfSwKICAgICAgICBncmlkOiB7CiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgICAgIGRyYXdCb3JkZXI6IGZhbHNlLAogICAgICAgICAgdGlja0xlbmd0aDogMCwKICAgICAgICB9LAogICAgICAgIHRpdGxlOiB7CiAgICAgICAgICBkaXNwbGF5OiB0cnVlLAogICAgICAgICAgZm9udDoge3NpemU6IDE1LCB3ZWlndGg6ICdib2xkJ30sCiAgICAgICAgICB0ZXh0OiAoe2NoYXJ0fSkgPT4gY2hhcnQuc2NhbGVzLnguX2FkYXB0ZXIuZm9ybWF0KERhdGUubm93KCksICdNTU0sIHl5eXknKSwKICAgICAgICAgIHBhZGRpbmc6IDAKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHg6IHsKICAgICAgICB0eXBlOiAndGltZScsCiAgICAgICAgcG9zaXRpb246ICd0b3AnLAogICAgICAgIG9mZnNldDogdHJ1ZSwKICAgICAgICB0aW1lOiB7CiAgICAgICAgICB1bml0OiAnZGF5JywKICAgICAgICAgIHBhcnNlcjogJ2knLAogICAgICAgICAgaXNvV2Vla2RheTogMSwKICAgICAgICAgIGRpc3BsYXlGb3JtYXRzOiB7CiAgICAgICAgICAgIGRheTogJ2lpaWlpaScKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJldmVyc2U6IGZhbHNlLAogICAgICAgIHRpY2tzOiB7CiAgICAgICAgICBzb3VyY2U6ICdkYXRhJywKICAgICAgICAgIHBhZGRpbmc6IDAsCiAgICAgICAgICBtYXhSb3RhdGlvbjogMCwKICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICAgICAgZHJhd0JvcmRlcjogZmFsc2UsCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgbGF5b3V0OiB7CiAgICAgIHBhZGRpbmc6IHsKICAgICAgICB0b3A6IDEwLAogICAgICB9CiAgICB9CiAgfQp9OwovLyA8L2Jsb2NrOmNvbmZpZz4KCmNvbnN0IGFjdGlvbnMgPSBbCiAgewogICAgbmFtZTogJ1JhbmRvbWl6ZScsCiAgICBoYW5kbGVyKGNoYXJ0KSB7CiAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaChkYXRhc2V0ID0+IHsKICAgICAgICBkYXRhc2V0LmRhdGEuZm9yRWFjaChwb2ludCA9PiB7CiAgICAgICAgICBwb2ludC52ID0gTWF0aC5yYW5kb20oKSAqIDUwOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgY2hhcnQudXBkYXRlKCk7CiAgICB9CiAgfSwKXTsKCm1vZHVsZS5leHBvcnRzID0gewogIGFjdGlvbnMsCiAgY29uZmlnLAp9Ow==