LyogQUkg67aA67aEIOyImOyglSDqtIDroKggKi8NCmZ1bmN0aW9uIG9wZW5BaUVkaXRQb3B1cCh0ZXh0LCByYW5nZSkgewogICAgc2VsZWN0ZWRUZXh0ID0gdGV4dDsKICAgIHNlbGVjdGVkUmFuZ2UgPSByYW5nZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaUVkaXRTZWxlY3RlZFRleHQnKS50ZXh0Q29udGVudCA9IHRleHQubGVuZ3RoID4gNTAgPyB0ZXh0LnN1YnN0cigwLCA0NykgKyAnLi4uJyA6IHRleHQ7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlFZGl0SW5wdXQnKS52YWx1ZSA9ICcnOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpRWRpdFBvcHVwJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7Cn0KCmZ1bmN0aW9uIGNsb3NlQWlFZGl0UG9wdXAoKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlFZGl0UG9wdXAnKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKfQoKZnVuY3Rpb24gc3VibWl0QWlFZGl0KCkgewogICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlFZGl0SW5wdXUnKS52YWx1ZTsKICAgIGlmICghaW5wdXQpIHJldHVybjsKICAgIAogICAgc2V0U3RhdHVzKCdBSSDsiJjsoJUg7KeE7ZaJIOykgLi4uJywgZmFsc2UpOwogICAgY2xvc2VBaUVkaXRQb3B1cCgpOwogICAgCiAgICBmZXRjaCgnL2FwaS9haS1lZGl0JywgewogICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LAogICAgICAgICAgICBpbnN0cnVjdGlvbjogaW5wdXQsCiAgICAgICAgICAgIGRvY190eXBlOiBjdXJyZW50RG9jVHlwZSwKICAgICAgICAgICAgc2Vzc2lvbl9pZDogd2luZG93Ll9zZXNzaW9uSWQKICAgICAgICB9KQogICAgfSkKICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAudGhlbihkYXRhID0+IHsKICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICAgIGFwcGx5QWlFZGl0KGRhdGEucmVzdWx0KTsKICAgICAgICAgICAgc2V0U3RhdHVzKCdBSSDsiJjsoJUg7mITrowhJLCB0cnVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGVydCgnQUkg7IiY7KCVIOyLpO2MqDogJyArIGRhdGEuZXJyb3IpOwogICAgICAgICAgICBzZXRTdGF0dXMoJ0FJICDsiJjsoJUg7Iuk7Yy4JywgdHJ1ZSk7CiAgICAgICAgfQogICAgfSk7Cn0KCmZ1bmN0aW9uIGFwcGx5QWlFZGl0KG5ld1RleHQpIHsKICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7CiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpOwogICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3VGV4dCk7CiAgICAgICAgc2VsZWN0ZWRSYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKTsKICAgICAgICBzYXZlQ3VycmVudENvbnRlbnQoKTsKICAgIH0KfQo=