LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglMb2thbGUgSmF2YSBTY3JpcHRzIGb8ciBkZSAtIFByb2pla3QKCS0gQWx0ZXJuaWVyZW5kZSBUYWJlbGxlbnplaWxlbgoKCSRJZDogdGFibGVEZWNvcmF0ZS5qcyx2IDEuMSAyMDA0LzAxLzE4IDIzOjA1OjMzIGtzY2hlbmsgRXhwICQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCUFsdGVybmllcmVuZGUgVGFiZWxsZW56ZWlsZW4KCU9yZ2luYWxjb2RlIGh0dHA6Ly9tcmNsYXkub3JnL3dlYl9kZXNpZ24vdGFibGVfZGVjb3JhdGlvbi8KCUJlbnV0enVuZyBkZXMgT3JpZ2luYWxjb2RlcyBtaXQgR2VuZWhtaWd1bmcgdm9uIFN0ZXZlIENsYXkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovLyBhbHRlcm5hdGVseSB5b3UgY2FuIHBsYWNlIHRoZXNlIGluIGEgc2NyaXB0IGVsZW1lbnQuLgp2YXIgdGFibGVEZWNvcmF0ZV9yb3dzID0gdHJ1ZTsKdmFyIHRhYmxlRGVjb3JhdGVfY29sdW1ucyA9IGZhbHNlOwoKZnVuY3Rpb24gdGFibGVEZWNvcmF0ZShlKSB7CiAgaWYgKCF0YWJsZURlY29yYXRlX3Jvd3MgJiYgIXRhYmxlRGVjb3JhdGVfY29sdW1ucykgcmV0dXJuOwogIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKICB2YXIgY291bnRlciwKICAgICAgYywgICAgICAvLyBjb2x1bW5zCiAgICAgIHIsICAgICAgLy8gcm93cwogICAgICB0OyAgICAgIC8vIHRhYmxlcwogIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIik7CiAgZm9yICh2YXIgaT0wOyBpPHQubGVuZ3RoOyBpKyspIHsKICAgIGlmICh0W2ldLmNsYXNzTmFtZSA9PSAiZGVjb3JhdGUiKSB7CiAgICAgIHI9dFtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKICAgICAgZm9yICh2YXIgaj0wOyBqPHIubGVuZ3RoOyBqKyspIHsKICAgICAgICAvLyBhZGQgIm9kZFJvdyIgY2xhc3MgdG8gb2RkIHJvd3MKICAgICAgCSAgaWYgKHRhYmxlRGVjb3JhdGVfcm93cyAmJiAoaiAlIDIgPT0gMSkpIHsKICAgICAgICAgIHJbal0uY2xhc3NOYW1lID0gIm9kZFJvdyAiICsgcltqXS5jbGFzc05hbWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgovLyBhbHRlcm5hdGVseSB5b3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIGRpcmVjdGx5IChhZnRlciBvbmxvYWQpLi4KaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgewogIHdpbmRvdy5hdHRhY2hFdmVudCgnb25sb2FkJyx0YWJsZURlY29yYXRlKTsKfSBlbHNlIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyx0YWJsZURlY29yYXRlLGZhbHNlKTsKfQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglFbmRlIEFsdGVybmllcmVuZGUgVGFiZWxsZW56ZWlsZW4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCg==