Skip to contentLy8gPGJsb2NrOmdlbmVyYXRlOjQ+CmZ1bmN0aW9uIGdlbmVyYXRlRGF0YSgpIHsKICBjb25zdCBkYXRhID0gW107CiAgY29uc3QgZW5kID0gVXRpbHMuc3RhcnRPZlRvZGF5KCk7CiAgbGV0IGR0ID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXREYXRlKGVuZC5nZXREYXRlKCkgLSAzNjUpKTsKICB3aGlsZSAoZHQgPD0gZW5kKSB7CiAgICBjb25zdCBpc28gPSBkdC50b0lTT1N0cmluZygpLnN1YnN0cigwLCAxMCk7CiAgICBkYXRhLnB1c2goewogICAgICB4OiBpc28sCiAgICAgIHk6IFV0aWxzLmlzb0RheU9mV2VlayhkdCksCiAgICAgIGQ6IGlzbywKICAgICAgdjogTWF0aC5yYW5kb20oKSAqIDUwCiAgICB9KTsKICAgIGR0ID0gbmV3IERhdGUoZHQuc2V0RGF0ZShkdC5nZXREYXRlKCkgKyAxKSk7CiAgfQogIHJldHVybiBkYXRhOwp9Ci8vIDwvYmxvY2s6Z2VuZXJhdGU+CgovLyA8YmxvY2s6ZGF0YToyPgpjb25zdCBkYXRhID0gewogIGRhdGFzZXRzOiBbewogICAgbGFiZWw6ICdNeSBNYXRyaXgnLAogICAgZGF0YTogZ2VuZXJhdGVEYXRhKCksCiAgICBiYWNrZ3JvdW5kQ29sb3IoYykgewogICAgICBjb25zdCB2YWx1ZSA9IGMuZGF0YXNldC5kYXRhW2MuZGF0YUluZGV4XS52OwogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHZhbHVlKSAvIDYwOwogICAgICByZXR1cm4gaGVscGVycy5jb2xvcignZ3JlZW4nKS5hbHBoYShhbHBoYSkucmdiU3RyaW5nKCk7CiAgICB9LAogICAgYm9yZGVyQ29sb3IoYykgewogICAgICBjb25zdCB2YWx1ZSA9IGMuZGF0YXNldC5kYXRhW2MuZGF0YUluZGV4XS52OwogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHZhbHVlKSAvIDYwOwogICAgICByZXR1cm4gaGVscGVycy5jb2xvcignZ3JlZW4nKS5hbHBoYShhbHBoYSkuZGFya2VuKDAuMykucmdiU3RyaW5nKCk7CiAgICB9LAogICAgYm9yZGVyV2lkdGg6IDEsCiAgICBob3ZlckJhY2tncm91bmRDb2xvcjogJ3llbGxvdycsCiAgICBob3ZlckJvcmRlckNvbG9yOiAneWVsbG93Z3JlZW4nLAogICAgd2lkdGgoYykgewogICAgICBjb25zdCBhID0gYy5jaGFydC5jaGFydEFyZWEgfHwge307CiAgICAgIHJldHVybiAoYS5yaWdodCAtIGEubGVmdCkgLyA1MyAtIDE7CiAgICB9LAogICAgaGVpZ2h0KGMpIHsKICAgICAgY29uc3QgYSA9IGMuY2hhcnQuY2hhcnRBcmVhIHx8IHt9OwogICAgICByZXR1cm4gKGEuYm90dG9tIC0gYS50b3ApIC8gNyAtIDE7CiAgICB9CiAgfV0KfTsKLy8gPC9ibG9jazpkYXRhPgoKLy8gPGJsb2NrOnNjYWxlczozPgpjb25zdCBzY2FsZXMgPSB7CiAgeTogewogICAgdHlwZTogJ3RpbWUnLAogICAgb2Zmc2V0OiB0cnVlLAogICAgdGltZTogewogICAgICB1bml0OiAnZGF5JywKICAgICAgcm91bmQ6ICdkYXknLAogICAgICBpc29XZWVrZGF5OiAxLAogICAgICBwYXJzZXI6ICdpJywKICAgICAgZGlzcGxheUZvcm1hdHM6IHsKICAgICAgICBkYXk6ICdpaWlpaWknCiAgICAgIH0KICAgIH0sCiAgICByZXZlcnNlOiB0cnVlLAogICAgcG9zaXRpb246ICdyaWdodCcsCiAgICB0aWNrczogewogICAgICBtYXhSb3RhdGlvbjogMCwKICAgICAgYXV0b1NraXA6IHRydWUsCiAgICAgIHBhZGRpbmc6IDEsCiAgICAgIGZvbnQ6IHsKICAgICAgICBzaXplOiA5CiAgICAgIH0KICAgIH0sCiAgICBncmlkOiB7CiAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICBkcmF3Qm9yZGVyOiBmYWxzZSwKICAgICAgdGlja0xlbmd0aDogMAogICAgfQogIH0sCiAgeDogewogICAgdHlwZTogJ3RpbWUnLAogICAgcG9zaXRpb246ICdib3R0b20nLAogICAgb2Zmc2V0OiB0cnVlLAogICAgdGltZTogewogICAgICB1bml0OiAnd2VlaycsCiAgICAgIHJvdW5kOiAnd2VlaycsCiAgICAgIGlzb1dlZWtkYXk6IDEsCiAgICAgIGRpc3BsYXlGb3JtYXRzOiB7CiAgICAgICAgd2VlazogJ01NTSBkZCcKICAgICAgfQogICAgfSwKICAgIHRpY2tzOiB7CiAgICAgIG1heFJvdGF0aW9uOiAwLAogICAgICBhdXRvU2tpcDogdHJ1ZSwKICAgICAgZm9udDogewogICAgICAgIHNpemU6IDkKICAgICAgfQogICAgfSwKICAgIGdyaWQ6IHsKICAgICAgZGlzcGxheTogZmFsc2UsCiAgICAgIGRyYXdCb3JkZXI6IGZhbHNlLAogICAgICB0aWNrTGVuZ3RoOiAwLAogICAgfQogIH0KfTsKLy8gPC9ibG9jazpzY2FsZXM+CgovLyA8YmxvY2s6b3B0aW9uczoxPgpjb25zdCBvcHRpb25zID0gewogIGFzcGVjdFJhdGlvOiA1LAogIHBsdWdpbnM6IHsKICAgIGxlZ2VuZDogZmFsc2UsCiAgICB0b29sdGlwOiB7CiAgICAgIGRpc3BsYXlDb2xvcnM6IGZhbHNlLAogICAgICBjYWxsYmFja3M6IHsKICAgICAgICB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9LAogICAgICAgIGxhYmVsKGNvbnRleHQpIHsKICAgICAgICAgIGNvbnN0IHYgPSBjb250ZXh0LmRhdGFzZXQuZGF0YVtjb250ZXh0LmRhdGFJbmRleF07CiAgICAgICAgICByZXR1cm4gWydkOiAnICsgdi5kLCAndjogJyArIHYudi50b0ZpeGVkKDIpXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgfSwKICBzY2FsZXM6IHNjYWxlcywKICBsYXlvdXQ6IHsKICAgIHBhZGRpbmc6IHsKICAgICAgdG9wOiAxMAogICAgfQogIH0KfTsKLy8gPC9ibG9jazpvcHRpb25zPgoKLy8gPGJsb2NrOmNvbmZpZzowPgpjb25zdCBjb25maWcgPSB7CiAgdHlwZTogJ21hdHJpeCcsCiAgZGF0YTogZGF0YSwKICBvcHRpb25zOiBvcHRpb25zCn07Ci8vIDwvYmxvY2s6Y29uZmlnPgoKY29uc3QgYWN0aW9ucyA9IFsKICB7CiAgICBuYW1lOiAnUmFuZG9taXplJywKICAgIGhhbmRsZXIoY2hhcnQpIHsKICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKGRhdGFzZXQgPT4gewogICAgICAgIGRhdGFzZXQuZGF0YS5mb3JFYWNoKHBvaW50ID0+IHsKICAgICAgICAgIHBvaW50LnYgPSBNYXRoLnJhbmRvbSgpICogNTA7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICBjaGFydC51cGRhdGUoKTsKICAgIH0KICB9LApdOwoKbW9kdWxlLmV4cG9ydHMgPSB7CiAgYWN0aW9ucywKICBjb25maWcsCn07