Lyog7IOd7ISxIOuhnOyngCAvIO2UhOuhnOq3uOustCDqtIDroKggKi8KZnVuY3Rpb24gZ2VuZXJhdGUoKSB7CiAgICBzZXRTdGF0dXMoJ+usuOyEnCDsg53shLHspJEgLi4uJywgZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlU3Bpbm5lcicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlQnRuVGV4dCcpLnN0eWxlLm9wYWNpdHkgPSAwLjU7CiAgICAKICAgIGZldGNoKCcvYXBpL2dlbmVyYXRlJywgewogICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgZG9jX3R5cGU6IGN1cnJlbnREb2NUeXBlLAogICAgICAgICAgICB3cml0ZV9tb2RlOiBjdXJyZW50V3JpdGVNb2RlLAogICAgICAgICAgICBzZXNzaW9uX2lkOiB3aW5kb3cuX3Nlc3Npb25JZCwKICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbG9iYWxJbnN0cnVjdGlvbklucHV0JykudmFsdWUKICAgICAgICB9KQogICAgfSkKICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAudGhlbihkYXRhID0+IHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVTcGlubmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGVCdG5UZXh0Jykuc3R5bGUub3BhY2l0eSA9IDE7CiAgICAgICAgaWYgKGRhdGEuc3VjY2VzcykgewogICAgICAgICAgICB1cGRhdGVQcmV2aWV3KGRhdGEuaHRtbCk7CiAgICAgICAgICAgIHNldFN0YXR1cygn66y47IScIOyDneyEsSDtmITrrowhJywgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ+usuOyEnCDsg53shLHsl5Ag7Iuk7Yy47Z6I7Iq164uI64ukLlxuJyArIGRhdGEuZXJyb3IpOwogICAgICAgICAgICBzZXRTdGF0dXMoJ++6rO87Iuk7Yy47Iuk7Yy4JywgdHJ1ZSk7CiAgICAgICAgfQogICAgfSk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVByZXZpZXcoaHRtbCkgewogICAgZ2VuZXJhdGVkSFRNTCA9IGh0bWw7CiAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3RnJhbWUnKTsKICAgIGNvbnN0IGRvYyA9IGZyYW1lLmNvbnRlbnREb2N1bWVudDsKICAgIGRvYy5vcGVuKCk7CiAgICBkb2Mud3JpdGUoaHRtbCk7CiAgICBkb2MuY2xvc2UoKTsKfQo=