Contact ES Sport
This Is ES Sport.
Speak to our experts. Our team of sports experience and sponsorship specialists are here to support you, from Dubai, Abu Dhabi and the UK, Monday to Friday, 9:00am to 5:30pm.
Dubai JLT Indigo Icon, Cluster F. +971 4 435 6612
Abu Dhabi Yas Yas Creative Hub. +971 2 556 2164
United Kingdom UK Tyndall Court, Peterborough
Hours 9 to 5:30 Monday to Friday, UAE time
ES Sport· Dubai · Abu Dhabi · United Kingdom· Sports hospitality, sponsorship and team tours since 2009· Enquire Now
Speak to our experts
Tell Us What You Are Planning.
Whether it is a corporate table at the Dubai 7s, a private suite at the Abu Dhabi Grand Prix, a sponsorship of a UAE property or a team tour, the fastest route is the enquiry form. It goes straight to the specialist for that event, with the details we need to come back with real options.
For general enquiries, email info@es-sport.ae . For marketing and partnership requests, email marketing@es-sport.ae . Or call the Dubai office on +971 4 435 6612.
Event morning check-in
Dubai
ES Sport Dubai
1807, Indigo Icon Cluster F, Jumeirah Lakes Towers, Dubai, UAE
Abu Dhabi
ES Sport Abu Dhabi
Tower 3, C40-P1-0160, Yas Creative Hub, twofour54, Yas Island, Abu Dhabi, UAE
United Kingdom
ES Sport UK
36 Tyndall Court, Commerce Road, Lynchwood, Peterborough, PE2 6LR
✓ Sport experiences. Hospitality and tickets for F1 Abu Dhabi, the Dubai 7s, UFC, cricket, golf, tennis and football, for corporates and fans.✓ Sponsorship. Rights and activation across UAE properties, from national federations to community sport.✓ Team tours. Training camps and touring itineraries for clubs, schools and federations in the UAE and abroad.
Hours When can I reach you?
The offices are open Monday to Friday, 9:00am to 5:30pm UAE time. Enquiries sent outside those hours are picked up on the next working day.
Enquiry What should I include?
The event or property, the number of guests or the objective, the dates you are working to and a rough budget range. The more detail in the first message, the faster the options come back.
Bookings I have already booked. Who do I contact?
Reply to your confirmation email so it reaches the specialist handling your booking, or call the Dubai office on +971 4 435 6612 with your booking reference.
Partners I represent a rights holder or venue.
Email marketing@es-sport.ae with an overview of the property and we will arrange a call with the sponsorship team.
×
Enquire
Speak To Our Experts.
We’ll get back to you.
IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzLXBhZ2UiKTtlJiZlLmNsYXNzTGlzdC5hZGQoImpzIiksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQ9bnVsbDt0cnl7dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZXNUaGVtZSIpfWNhdGNoKFMpe30ibGlnaHQiPT09dHx8ImRhcmsiPT09dD9lLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsdCk6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJmUuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIiwibGlnaHQiKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhlbWVCdG4iKSxhPXdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzO2Z1bmN0aW9uIG8odCl7ZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLHQpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZXNUaGVtZSIsdCl9Y2F0Y2goUyl7fX1uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciB0PSJsaWdodCI9PT1lLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpPyJkYXJrIjoibGlnaHQiO2lmKG4uY2xhc3NMaXN0LmFkZCgic3BpbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmNsYXNzTGlzdC5yZW1vdmUoInNwaW4iKX0sNTIwKSwhYSYmZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbil7dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWkubGVmdCtpLndpZHRoLzIscj1pLnRvcCtpLmhlaWdodC8yLHM9TWF0aC5oeXBvdChNYXRoLm1heChjLHdpbmRvdy5pbm5lcldpZHRoLWMpLE1hdGgubWF4KHIsd2luZG93LmlubmVySGVpZ2h0LXIpKTtkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGZ1bmN0aW9uKCl7byh0KX0pLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtlLmFuaW1hdGUoe2NsaXBQYXRoOlsiY2lyY2xlKDBweCBhdCAiK2MrInB4ICIrcisicHgpIiwiY2lyY2xlKCIrcysicHggYXQgIitjKyJweCAiK3IrInB4KSJdfSx7ZHVyYXRpb246NjIwLGVhc2luZzoiY3ViaWMtYmV6aWVyKC40LDAsLjIsMSkiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLW5ldyhyb290KSJ9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7fSl9ZWxzZSFmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQoInRoZW1pbmciKSxvKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsYXNzTGlzdC5yZW1vdmUoInRoZW1pbmciKX0sNTYwKX0odCl9KTt2YXIgaT1mdW5jdGlvbigpe307IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlcm9UaXRsZSIpLHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlcm8tcGlsbGFycyIpO2lmKGUmJnQmJiFhJiZlLmFuaW1hdGUpe3ZhciBuPTI0MCxvPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10sYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIG8oZSxhKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtvLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt0LmNsYXNzTmFtZT0iYyIsdC50ZXh0Q29udGVudD1lLG8uYXBwZW5kQ2hpbGQodCksbi5wdXNoKHQpfSksYS5hcHBlbmRDaGlsZChvKSx0LnB1c2gobyl9fSl9cmV0dXJuIGUuaW5uZXJIVE1MPSIiLGEuZm9yRWFjaChmdW5jdGlvbih0KXtpZigzPT09dC5ub2RlVHlwZSlvKHQudGV4dENvbnRlbnQsZSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtuLmNsYXNzTmFtZT10LmNsYXNzTmFtZSxlLmFwcGVuZENoaWxkKG4pLG8odC50ZXh0Q29udGVudCxuKX19KSx7d29yZHM6dCxjaGFyczpufX0oZSksYz10LnF1ZXJ5U2VsZWN0b3JBbGwoImEiKTt0LmNsYXNzTGlzdC5hZGQoImxpZnQiKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIwIn0pLGk9ZnVuY3Rpb24oKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVhZHk/ZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihyKS5jYXRjaChyKTpyKCl9fWZ1bmN0aW9uIHIoKXt2YXIgYT1mdW5jdGlvbigpe3ZhciB0PWUucXVlcnlTZWxlY3RvcigiZW0iKTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10LnF1ZXJ5U2VsZWN0b3JBbGwoIi53Iik7aWYobi5sZW5ndGg8MilyZXR1cm4gbnVsbDtmb3IodmFyIGE9blswXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLG89blsxXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLGk9bnVsbCxjPW8ubGVuZ3RoLTE7Yz49MDtjLS0paWYoInQiPT09b1tjXS50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpKXtpPW9bY107YnJlYWt9cmV0dXJuIGFbMF0mJmFbMV0mJmk/W2FbMF0sYVsxXSxpXTpudWxsfSgpO2lmKCFhfHxjLmxlbmd0aDwzKXJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIifSksdm9pZCB0LmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmNoYXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGk9W107QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUsdCl7dmFyIG49YVt0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aS5wdXNoKHtlbDplLGR4Om4ubGVmdC1vLmxlZnQsZHk6bi50b3Atby50b3B9KX0pO3ZhciByPTExODAscz0wO2kuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBvPTFlMyszODAqdDtzPU1hdGgubWF4KHMsbys1MCtyKTt2YXIgaT1nZXRDb21wdXRlZFN0eWxlKGFbdF0pLmNvbG9yO2FbdF0uYW5pbWF0ZShbe3RyYW5zZm9ybToic2NhbGUoMSkiLGNvbG9yOml9LHt0cmFuc2Zvcm06InNjYWxlKDEuMykiLGNvbG9yOiIjRUJCNDQ2IixvZmZzZXQ6LjMzLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4yNSwuNDYsLjQ1LC45NCkifSx7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6aSxlYXNpbmc6ImN1YmljLWJlemllciguMzQsMS41NiwuNjQsMSkifV0se2R1cmF0aW9uOjQ1MCxkZWxheTpvLGZpbGw6Im5vbmUifSk7dmFyIGM9InRyYW5zbGF0ZSgiK2UuZHgrInB4LCIrZS5keSsicHgpIHNjYWxlKDEuNCwxLjQpIjtlLmVsLmFuaW1hdGUoW3t0cmFuc2Zvcm06YyxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06YyxvcGFjaXR5OjEsb2Zmc2V0OjEzMC9yfSx7dHJhbnNmb3JtOmMsb3BhY2l0eToxLG9mZnNldDpuL3IsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvcixlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3IsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246cixkZWxheTpvKzUwLGZpbGw6ImJvdGgifSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUpe2UuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGUuc3R5bGUub3BhY2l0eT0iIixlLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHQuY2xhc3NMaXN0LnJlbW92ZSgibGlmdCIpfSxzKzQwKX19KCk7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzTG9hZGVyIikscj1kb2N1bWVudC5ib2R5LHM9ITA7dHJ5e3M9ITB9Y2F0Y2goUyl7fWZ1bmN0aW9uIGwoKXtjLmNsYXNzTGlzdC5hZGQoImlzLW91dCIpLHIuY2xhc3NMaXN0LnJlbW92ZSgiZXNsLWxvY2siKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5oaWRkZW49ITB9LDcwMCk7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oImVzU2VlbkxvYWRlciIsIjEiKX1jYXRjaChTKXt9c2V0VGltZW91dChpLDMwMCl9cz8oYy5oaWRkZW49ITAsci5jbGFzc0xpc3QucmVtb3ZlKCJlc2wtbG9jayIpLHNldFRpbWVvdXQoaSwyNjApKTooc2V0VGltZW91dChsLDIwNTApLGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGwpKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2FyLWJ0biIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmRhdGFzZXQudGFyZ2V0KTtpZih0KXt2YXIgbj10LmZpcnN0RWxlbWVudENoaWxkLGE9bj9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKzQ6LjgqdC5jbGllbnRXaWR0aDt0LnNjcm9sbEJ5KHtsZWZ0OmEqK2UuZGF0YXNldC5kaXIsYmVoYXZpb3I6InNtb290aCJ9KX19KX0pLGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmZjaGlwIiksYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubmNhcmRbZGF0YS1zcG9ydF0iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYXRFbXB0eSIpO2lmKHQubGVuZ3RoJiZhLmxlbmd0aCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG89ZS5kYXRhc2V0LmZpbHRlcixpPTA7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSJhbGwiPT09b3x8ZS5kYXRhc2V0LnNwb3J0PT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLWhpZGRlbiIsIXQpLHQmJihpKz0xLGUuY2xhc3NMaXN0LmFkZCgidiIpKX0pLG4mJihuLmhpZGRlbj1pPjApLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yb3csLmNhdGFsb2d1ZS13cmFwIikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgYz1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZCIpO2lmKGMubGVuZ3RoKXt2YXIgdj1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZDpub3QoLmlzLWhpZGRlbikiKS5sZW5ndGg7ci5jbGFzc0xpc3QudG9nZ2xlKCJpcy1lbXB0eSIsdj09PTApfX0pLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGFzZXQuZmlsdGVyPT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLW9uIix0KSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsdD8idHJ1ZSI6ImZhbHNlIil9KX0pfSl9fSgpO3ZhciBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZmlNb2RhbCIpLHU9ZC5xdWVyeVNlbGVjdG9yKCIucmZpLWRsZyIpLGY9bnVsbCxtPW51bGwsaD0wO2Z1bmN0aW9uIHAoKXtpZighKGgrKz4wKSl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2U+MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWUrInB4IiksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn19ZnVuY3Rpb24geSgpeyhoPU1hdGgubWF4KDAsaC0xKSk+MHx8KGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9IiIsZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9IiIpfWZ1bmN0aW9uIHYoKXtkLmhpZGRlbnx8KGQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGQuY2xhc3NMaXN0LmFkZCgiaXMtY2xvc2luZyIpLGNsZWFyVGltZW91dChtKSxtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhpZGRlbj0hMCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSx5KCksZiYmZi5mb2N1cyYmZi5mb2N1cygpLGY9bnVsbH0sYT8wOjI0MCkpfWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW9wZW4tcmZpXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdlBhbmVsIik7aWYobyYmIW8uaGlkZGVuKXtvLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxvLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKTt2YXIgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2QnVyZ2VyIik7aSYmKGkuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxpLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSIpKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5oaWRkZW49ITAsby5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKX1uPWUsY2xlYXJUaW1lb3V0KG0pLGY9bnx8bnVsbCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSxkLmhpZGRlbj0hMSxwKCksZC5vZmZzZXRXaWR0aCxkLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYtZmlyc3QiKTtpZihlKXRyeXtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9Y2F0Y2goUyl7ZS5mb2N1cygpfX0sYT8wOjI2MCl9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLXJmaV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7digpfSl9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXsiRXNjYXBlIiE9PWUua2V5fHxkLmhpZGRlbnx8digpfSksZC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtpZigiVGFiIj09PWUua2V5KXtmb3IodmFyIHQ9dS5xdWVyeVNlbGVjdG9yQWxsKCJhW2hyZWZdLCBidXR0b246bm90KFtkaXNhYmxlZF0pLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKW51bGwhPT10W2FdLm9mZnNldFBhcmVudCYmbi5wdXNoKHRbYV0pO2lmKG4ubGVuZ3RoKXt2YXIgbz1uWzBdLGk9bltuLmxlbmd0aC0xXTtlLnNoaWZ0S2V5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09bz8oZS5wcmV2ZW50RGVmYXVsdCgpLGkuZm9jdXMoKSk6ZS5zaGlmdEtleXx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWl8fChlLnByZXZlbnREZWZhdWx0KCksby5mb2N1cygpKX19fSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZm9ybS5mb3JtIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWUudGFyZ2V0O2lmKHQuY2hlY2tWYWxpZGl0eSgpKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5zZW50Iil8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZW50IiksYT10LmRhdGFzZXQuZW5kcG9pbnQsbz1mdW5jdGlvbigpe3ZhciBzPW47biYmcy5jbGFzc0xpc3QuYWRkKCJvbiIpO3QucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcy5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07YT9mZXRjaChhLHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKHQpfSkudGhlbihvKS5jYXRjaChvKTpvKCl9ZWxzZSB0LnJlcG9ydFZhbGlkaXR5KCl9KX0pO3ZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZCdXJnZXIiKSxFPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZQYW5lbCIpLGI9bnVsbDtmdW5jdGlvbiBMKCl7RS5oaWRkZW58fChFLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxFLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKSxnLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUiKSxjbGVhclRpbWVvdXQoYiksYj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RS5oaWRkZW49ITAsRS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKSl9Zy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtFLmhpZGRlbj8oY2xlYXJUaW1lb3V0KGIpLEUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLEUuaGlkZGVuPSExLHAoKSxFLm9mZnNldFdpZHRoLEUuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgbWVudSIpKTpMKCl9KSxFLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLW1lbnVdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe0woKX0pfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7IkVzY2FwZSIhPT1lLmtleXx8RS5oaWRkZW58fChMKCksZy5mb2N1cygpKX0pO3ZhciB3PXdpbmRvdy5tYXRjaE1lZGlhKCIobWluLXdpZHRoOiAxMDAxcHgpIikseD1mdW5jdGlvbihlKXtlLm1hdGNoZXMmJkwoKX07dy5hZGRFdmVudExpc3RlbmVyP3cuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix4KTp3LmFkZExpc3RlbmVyJiZ3LmFkZExpc3RlbmVyKHgpO3ZhciBBPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXYiKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbigpe0EuY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX0pO3ZhciBxPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pc0ludGVyc2VjdGluZyYmKGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoInYiKSxxLnVub2JzZXJ2ZShlLnRhcmdldCkpfSl9LHt0aHJlc2hvbGQ6LjA4fSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnIsIC5zZWN0aW9uLWhlYWRlciIpLmZvckVhY2goZnVuY3Rpb24oZSl7cS5vYnNlcnZlKGUpfSl9KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMsdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXN4VGl0bGUiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc3hQaWxsYXJzIik7aWYodCYmbiYmIWUmJnQuYW5pbWF0ZSl7dmFyIGE9MjQwLG89ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIGEoZSxuKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLmNsYXNzTmFtZT0iYyIsbi50ZXh0Q29udGVudD1lLGEuYXBwZW5kQ2hpbGQobiksdC5wdXNoKG4pfSksbi5hcHBlbmRDaGlsZChhKX19KX1yZXR1cm4gZS5pbm5lckhUTUw9IiIsbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKDM9PT10Lm5vZGVUeXBlKWEodC50ZXh0Q29udGVudCxlKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO24uY2xhc3NOYW1lPXQuY2xhc3NOYW1lLGUuYXBwZW5kQ2hpbGQobiksYSh0LnRleHRDb250ZW50LG4pfX0pLHR9KHQpLGk9bi5xdWVyeVNlbGVjdG9yKCJhIik7bi5jbGFzc0xpc3QuYWRkKCJsaWZ0IiksaSYmKGkuc3R5bGUub3BhY2l0eT0iMCIpO3ZhciBlc3hUYWc9bi5xdWVyeVNlbGVjdG9yKCJsaTpudGgtY2hpbGQoMikiKTtlc3hUYWcmJmVzeFRhZy5jbGFzc0xpc3QuYWRkKCJ0YWctd2FpdCIpO3ZhciBjPSEwO3RyeXtjPSEwfWNhdGNoKHMpe31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLnJlYWR5P2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4ocikuY2F0Y2gocik6cigpfSxjPzI2MDoyMzUwKX1mdW5jdGlvbiByKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoImVtIik7aWYoIWUpcmV0dXJuIG51bGw7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yQWxsKCIudyIpO2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbz1wYXJzZUludChuLmdldEF0dHJpYnV0ZSgiZGF0YS1zcmMtaW5kZXgiKXx8IjAiLDEwKXx8MCxpPWFbMF0ucXVlcnlTZWxlY3RvckFsbCgiLmMiKTtyZXR1cm4gaVtvXXx8aVswXXx8bnVsbH0oKTtpZighZXx8IWkpcmV0dXJuIGkmJihpLnN0eWxlLm9wYWNpdHk9IiIpLGVzeFRhZyYmZXN4VGFnLmNsYXNzTGlzdC5yZW1vdmUoInRhZy13YWl0Iiksdm9pZCBuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1NYXRoLm1pbigxLjQsTWF0aC5tYXgoLjIsYy5oZWlnaHQvci5oZWlnaHQqMS4xNSkpLGw9Yy5sZWZ0LXIubGVmdCxkPWMuYm90dG9tLXIuYm90dG9tLHU9MTE4MCxmPTFlMyxtPWdldENvbXB1dGVkU3R5bGUoZSkuY29sb3I7ZS5hbmltYXRlKFt7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6bX0se3RyYW5zZm9ybToic2NhbGUoMS4zKSIsY29sb3I6IiNFQkI0NDYiLG9mZnNldDouMzMsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjI1LC40NiwuNDUsLjk0KSJ9LHt0cmFuc2Zvcm06InNjYWxlKDEpIixjb2xvcjptLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4zNCwxLjU2LC42NCwxKSJ9XSx7ZHVyYXRpb246NDUwLGRlbGF5OmYsZmlsbDoibm9uZSJ9KTt2YXIgaD0idHJhbnNsYXRlKCIrbCsicHgsIitkKyJweCkgc2NhbGUoIitzKyIsIitzKyIpIjtpLmFuaW1hdGUoW3t0cmFuc2Zvcm06aCxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06aCxvcGFjaXR5OjEsb2Zmc2V0OjEzMC91fSx7dHJhbnNmb3JtOmgsb3BhY2l0eToxLG9mZnNldDphL3UsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvdSxlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3UsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246dSxkZWxheToxMDUwLGZpbGw6ImJvdGgifSksc2V0VGltZW91dChmdW5jdGlvbigpe2kuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGkuc3R5bGUub3BhY2l0eT0iIixpLnN0eWxlLnRyYW5zZm9ybT0iIixuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKSxlc3hUYWcmJihlc3hUYWcuY2xhc3NMaXN0LnJlbW92ZSgidGFnLXdhaXQiKSxlc3hUYWcuY2xhc3NMaXN0LmFkZCgidGFnLWluIikpfSwyMjcwKX19KCksZnVuY3Rpb24oKXtpZigoIXdpbmRvdy5tYXRjaE1lZGlhfHwhd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcykmJiJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtbyIpO3ZhciBlPVsiLnN0YWNrID4gLml0ZW0iLCIuYWNjLWl0ZW0iLCIuZmFxLWl0ZW0iLCIuYm91dCIsIi52c3RvcnkiLCIudGtib3giLCIuYWItZnJhbWUiLCIuY21wIHRib2R5IHRkIiwiLmNtcCB0aGVhZCB0aCIsIi50YXBlLWNlbGwiLCIudnMtcm93IiwiLnZlbnVlLXNwZWNzID4gKiIsIi56cC10aWVyIiwiLnRrZ3JpZCB0ZCIsIi5zdGF0cyA+IC5zdGF0IiwiLnN0YXRzID4gLnN0IiwiLnZpdGFscyA+IC52aXRhbCIsIi5oZXJvLW1ldGEgPiAuaG0iLCIudGllcnMgPiAudGllciIsIi52Z3JpZCA+IC52YmxvY2siLCIua2MtY2FyZCIsIi5hYi1zcGVjIiwiLmluYy1saXN0ID4gbGkiLCIuYXJ0cyA+IC5hcnQiLCIuZm9yayA+IC5yb3V0ZSIsIi5jYXRhbG9ndWUgLm5jYXJkIiwiLm9jYXJkIiwiLnBjYXJkIiwiLmJjYXJkIiwiLnBjYXJkcCIsIi5maXZldy1ncmlkID4gKiIsIi5sb2dvcyA+IC5sb2dvIiwiLmVzbS1iYW5kIiwiLm1hcC1jaGlwIiwiLnRhcGUtZ3JpZCA+IC50YXBlLWNlbGwiLCIuZ2NhcmQiXSx0PWUuam9pbigiLCIpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW1vXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKHQpfHxlLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1tbyIpfSk7dmFyIG49W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LGE9bnVsbCxvPTA7dHJ5e3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKX1jYXRjaChpKXtyZXR1cm59dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmhhc0F0dHJpYnV0ZSgiZGF0YS1tbyIpKXt2YXIgdD1lLnBhcmVudE5vZGU7bz10PT09YT9vKzE6MCxhPXQsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbW8iLCIiKSxlLnN0eWxlLnNldFByb3BlcnR5KCItLW1vLWQiLE1hdGgubWluKDUwKm8sMzAwKSsibXMiKSxuLnB1c2goZSl9fSl9KSxuLmxlbmd0aCl7dmFyIGE9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0IiksYS51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7cm9vdE1hcmdpbjoiMHB4IDBweCAtNiUgMHB4Iix0aHJlc2hvbGQ6LjA1fSk7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Eub2JzZXJ2ZShlKX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmZS5jbGFzc0xpc3QuYWRkKCJtby1saXQiKX19KX0sNGUzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmNsYXNzTGlzdC5jb250YWlucygibW8tbGl0Iikpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC50b3A8aW5uZXJIZWlnaHQmJnQuYm90dG9tPjAmJnQuaGVpZ2h0JiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw2MCl9KX19fSgpLGZ1bmN0aW9uKCl7WyJ4cUZvcm0iLCJyZmkiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3QmJnQuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixmdW5jdGlvbihlKXt0LmNoZWNrVmFsaWRpdHkoKSYmKCh0LmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpfHwiIikudHJpbSgpfHwod2luZG93LmxvY2F0aW9uLmhyZWY9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1lLnF1ZXJ5U2VsZWN0b3IoIltuYW1lPWV2ZW50LW5hbWVdIik7cmV0dXJuIG4mJnQucHVzaCgiRW5xdWlyeTogIituLnZhbHVlKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSxzZWxlY3QsdGV4dGFyZWEiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWUucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPSInK24uaWQrJyJdJyksbz1hP2EudGV4dENvbnRlbnQudHJpbSgpOm4ubmFtZXx8bi5pZDtuLnZhbHVlJiZ0LnB1c2gobysiOiAiK24udmFsdWUpfSksIm1haWx0bzppbmZvQGVzLXNwb3J0LmFlP3N1YmplY3Q9IitlbmNvZGVVUklDb21wb25lbnQoKG4/bi52YWx1ZToiV2Vic2l0ZSBlbnF1aXJ5IikrIiAtIGVucXVpcnkiKSsiJmJvZHk9IitlbmNvZGVVUklDb21wb25lbnQodC5qb2luKCJcbiIpKX0odCkpKX0sITApfSk7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxTW9kYWwiKTtpZihlJiYhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImRhdGEteHEtbmF0aXZlIikpe3ZhciB0LG49d2luZG93Lm1hdGNoTWVkaWEmJm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyxhPW51bGw7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGkpe2kucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbihvKXtjbGVhclRpbWVvdXQodCksYT1vLGUuaGlkZGVuPSExLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5vZmZzZXRXaWR0aCxlLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKCJpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSkiKTt0JiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG4/MDoyNjApfShvKX0pfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtY2xvc2UteHFdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpKX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKHQpeyJFc2NhcGUiIT09dC5rZXl8fGUuaGlkZGVufHxpKCl9KTt2YXIgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFGb3JtIik7byYmby5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxvLmNoZWNrVmFsaWRpdHkoKSl7dmFyIHQ9by5nZXRBdHRyaWJ1dGUoImRhdGEtZW5kcG9pbnQiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cVNlbnQiKSxhPWZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QuYWRkKCJvbiIpO28ucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07dD9mZXRjaCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKG8pfSkudGhlbihhKS5jYXRjaChhKTphKCl9ZWxzZSBvLnJlcG9ydFZhbGlkaXR5KCl9KX1mdW5jdGlvbiBpKCl7ZS5oaWRkZW58fChlLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxjbGVhclRpbWVvdXQodCksdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5oaWRkZW49ITAsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iIixhJiZhLmZvY3VzJiZhLmZvY3VzKCksYT1udWxsfSxuPzA6MzYwKSl9fSgpfSgpOwo7KGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdiIpO2lmKCFuKXJldHVybjt2YXIgZj1mdW5jdGlvbigpe24uY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX07ZigpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGYpO30pKCk7Ci8qIGV2ZW50LWV4dHJhcy5qczogYmVoYXZpb3VycyBmb3IgYXJjaGV0eXBlIEMgZXZlbnQgcGFnZXMsIGFwcGVuZGVkIGFmdGVyIG1haW4tanMuZGVjb2RlZC5qcwogICAxLiAuYWNjLWl0ZW0gYWNjb3JkaW9uIChGQVEpICAgICAgICAgIDIuIC5lcy1kZCBleHBhbmRhYmxlIHBhbmVscwogICAzLiBoZXJvIHN0YXQgY291bnQtdXAgKHJlZHVjZWQtbW90aW9uIHNhZmUpICAgNC4gcGFja2FnZSBjYXJkIC0+IGVucXVpcnkgbW9kYWwgcHJlLWZpbGwKICAgUnVsZXM6IG5vIHJlZ2V4IGxpdGVyYWxzLCBubyAtLSBkZWNyZW1lbnQgKExpdGVTcGVlZCBtaW5pZmllci1ob3N0aWxlIHRva2VucykuICovCihmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjsKdmFyIHJlZHVjZT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKLyogMSArIDI6IG9uZSBhY2NvcmRpb24gbWVjaGFuaWMgKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFjYy1pdGVtIikuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt2YXIgcT1pdGVtLnF1ZXJ5U2VsZWN0b3IoIi5hY2MtcSIpO2lmKCFxKXJldHVybjtxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciBvcGVuPWl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgib3BlbiIpO3Euc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixvcGVuPyJ0cnVlIjoiZmFsc2UiKTt9KTt9KTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVzLWRkIikuZm9yRWFjaChmdW5jdGlvbihkZCl7dmFyIGhlYWQ9ZGQucXVlcnlTZWxlY3RvcigiLmVzLWRkX19oZWFkIik7aWYoIWhlYWQpcmV0dXJuO2hlYWQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG9wZW49ZGQuZ2V0QXR0cmlidXRlKCJkYXRhLW9wZW4iKT09PSJ0cnVlIjtkZC5zZXRBdHRyaWJ1dGUoImRhdGEtb3BlbiIsb3Blbj8iZmFsc2UiOiJ0cnVlIik7aGVhZC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG9wZW4/ImZhbHNlIjoidHJ1ZSIpO30pO30pOwovKiAzOiBzdGF0IGNvdW50LXVwICovCnZhciBudW1zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGF0cyAuc3RhdCAubiIpOwppZihudW1zLmxlbmd0aCl7CiAgdmFyIHJ1bj1mdW5jdGlvbihlbCl7dmFyIHNyYz1lbC50ZXh0Q29udGVudC50cmltKCk7dmFyIGk9MCxwcmU9IiIsZGlnaXRzPSIiLHN1Zj0iIjt3aGlsZShpPHNyYy5sZW5ndGgmJihzcmMuY2hhckF0KGkpPCIwInx8c3JjLmNoYXJBdChpKT4iOSIpKXtwcmUrPXNyYy5jaGFyQXQoaSk7aSs9MTt9d2hpbGUoaTxzcmMubGVuZ3RoJiYoKHNyYy5jaGFyQXQoaSk+PSIwIiYmc3JjLmNoYXJBdChpKTw9IjkiKXx8c3JjLmNoYXJBdChpKT09PSIsIikpe2lmKHNyYy5jaGFyQXQoaSkhPT0iLCIpZGlnaXRzKz1zcmMuY2hhckF0KGkpO2krPTE7fXN1Zj1zcmMuc2xpY2UoaSk7aWYoIWRpZ2l0cyl7cmV0dXJuO312YXIgdGFyZ2V0PXBhcnNlSW50KGRpZ2l0cywxMCkscGFkPWRpZ2l0cy5sZW5ndGgsdXNlQ29tbWE9c3JjLmluZGV4T2YoIiwiKT4tMTt2YXIgZm10PWZ1bmN0aW9uKG4pe3ZhciBzPVN0cmluZyhuKTt3aGlsZShzLmxlbmd0aDxwYWQmJmRpZ2l0cy5jaGFyQXQoMCk9PT0iMCIpcz0iMCIrcztpZih1c2VDb21tYSl7dmFyIG91dD0iIixjPTAsaj1zLmxlbmd0aC0xO3doaWxlKGo+PTApe291dD1zLmNoYXJBdChqKStvdXQ7Yys9MTtpZihjJTM9PT0wJiZqPjApb3V0PSIsIitvdXQ7ai09MTt9cz1vdXQ7fXJldHVybiBwcmUrcytzdWY7fTtpZihyZWR1Y2V8fHRhcmdldD45OTk5KXtlbC50ZXh0Q29udGVudD1zcmM7cmV0dXJuO312YXIgdDA9bnVsbCxkdXI9MTQwMDt2YXIgc3RlcD1mdW5jdGlvbih0cyl7aWYodDA9PT1udWxsKXQwPXRzO3ZhciBwPU1hdGgubWluKDEsKHRzLXQwKS9kdXIpO3ZhciBlPTEtTWF0aC5wb3coMS1wLDMpO2VsLnRleHRDb250ZW50PWZtdChNYXRoLnJvdW5kKHRhcmdldCplKSk7aWYocDwxKXJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtlbHNlIGVsLnRleHRDb250ZW50PXNyYzt9O3JlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTt9OwogIGlmKCJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cmJiFyZWR1Y2Upe3ZhciBpbz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcyl7ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVuKXtpZihlbi5pc0ludGVyc2VjdGluZyl7cnVuKGVuLnRhcmdldCk7aW8udW5vYnNlcnZlKGVuLnRhcmdldCk7fX0pO30se3RocmVzaG9sZDouNH0pO251bXMuZm9yRWFjaChmdW5jdGlvbihuKXtpby5vYnNlcnZlKG4pO30pO30KfQovKiA0OiBwYWNrYWdlIGNhcmRzIGFuZCBDVEFzIGNhcnJ5aW5nIGRhdGEtY2F0IHByZS1maWxsIHRoZSBlbnF1aXJ5IGZvcm0gKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi1yZmldW2RhdGEtY2F0XSIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXtidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGNhdD1idG4uZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpfHwiIjt2YXIgc2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmLWNhdCIpO2lmKHNlbCl7Zm9yKHZhciBrPTA7azxzZWwub3B0aW9ucy5sZW5ndGg7ays9MSl7aWYoc2VsLm9wdGlvbnNba10udGV4dD09PWNhdCl7c2VsLnNlbGVjdGVkSW5kZXg9azticmVhazt9fX12YXIgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmZpIGlucHV0W25hbWU9ZWViX2NhdGVnb3J5XSIpO2lmKGgpaC52YWx1ZT1jYXQ7fSx0cnVlKTt9KTsKfSkoKTsK