Youth Services News FW: NMLA 2022 Conference Proposal Deadline Extended to July 15
Guinnee, Eli, DCA
Eli.Guinnee at state.nm.us
Fri Jul 1 10:51:13 MDT 2022
---------- Forwarded message ---------
From: Erin Wahl <ewahl at nmsu.edu<mailto:ewahl at nmsu.edu>>
Date: Fri, Jul 1, 2022, 10:06 AM
Subject: [NMLA] NMLA 2022 Conference Proposal Deadline Extended
To: nmlamembership <nmlamembership at mailman.nmsu.edu<mailto:nmlamembership at mailman.nmsu.edu>>
Hello NMLA folks!
It's been decided to extend the conference proposal deadline until July 15th.
The full proposal call can be found here: https://nmla.wildapricot.org/Conferences
Remember that this year's conference theme is focused on sustainability. Please read the call carefully to consider how your ideas may fit into this year's theme.
There may also be opportunities still available to jump into some mentorship review of presentations, etc. later this summer for those whose proposals are accepted.
For questions about proposal submissions and mentorship opportunities please contact:
Erin Renee Wahl
(575) 646-7484
ewahl at nmsu.edu
Eli Guinnee
(505) 476-9762
eli.guinnee at state.nm.us
For questions about the conference please contact:
Kate Alderete
(575)737-2594
kalderete at taosgov.com
From the call:
In 2019, the American Library Association identified sustainability as a core value of librarianship. Sustainability has always been a part of libraries, though we do not always see our work as meeting those challenges. In a world that is living with a pandemic, threats of climate change, political unrest, and other factors that affect our lives and planet, the sustainability and resilience of libraries is increasingly important for our communities.
Now NMLA wants to hear how you and your library meet the challenge of sustainability.
This year, the NMLA 2022 LibrarySTRONG Annual Summit will focus on Sustainability. We know that libraries are:
● Sustainable
● Thriving
● Resilient
● Open
● Network Builders
● Green
What does sustainability mean to you? What are your sustainability stories? What conversations can you facilitate to help others build more resilient and just communities? In writing your proposals, consider how you incorporate concepts and perspectives of sustainability. Maybe you have a cool new recycling program, maybe you invite elders from the community to lead programs, maybe you have reinvisioned your library spaces to be more inclusive, or changed the way you do your work daily. Sustainability is much more than just a commitment to improving and maintaining our environments. It can be found in library budgets, workflows, planning, pedagogy, community engagement, and equity initiatives, among many other things.
NMLA’s 2022 annual conference will be in-person October 26-28.
Calls for proposals will be accepted through July 15, 2022, for:
● Full Day and Half Day Pre-Conference Workshops,
● Presentations
● Panel discussions,
● Posters, and
● Lightning Talks (10-15 minutes).
Proposals with a focus on the conference theme will receive priority consideration.
<img alt="" style="margin:0px; display:block; opacity:1; width:40px; height:40px; object-fit:cover; left:20px; top:20px" src="data:text/html;base64,PCFkb2N0eXBlIGh0bWw+PGh0bWwgZGlyPSJsdHIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB0cmFuc2xhdGU9Im5vIj48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPjxtZXRhIGh0dHAtZXF1aXY9InByYWdtYSIgY29udGVudD0ibm8tY2FjaGUiLz48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSx1c2VyLXNjYWxhYmxlPTAiLz48bWV0YSBuYW1lPSJnb29nbGUiIHZhbHVlPSJub3RyYW5zbGF0ZSIvPjxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyIvPjxtZXRhIG5hbWU9InNjcmlwdFZlciIgY29udGVudD0iMjAyMjA2MjQwMDMuMTMiLz48bWV0YSBuYW1lPSJwaHlzaWNhbFJpbmciIGNvbnRlbnQ9IldXIi8+PG1ldGEgbmFtZT0iZW52aXJvbm1lbnQiIGNvbnRlbnQ9IlByb2QiLz48bWV0YSBuYW1lPSJib290RmxpZ2h0cyIgY29udGVudD0ic291cmNlbGlzdGFwaSxub3ZhYXBwYmFyLHNlbmRDbGFpbXNDaGFsbGVuZ2VJblF1ZXJ5LHBlcmZvcm1hbmNlRGF0YXBvaW50SGVhbHRoLHBhdGNobm9kZSIvPjxtZXRhIG5hbWU9ImNkblVybCIgY29udGVudD0iLy9yZXMuY2RuLm9mZmljZS5uZXQvIi8+PG1ldGEgbmFtZT0iYmFja3VwQ2RuVXJsIiBjb250ZW50PSIvL3Jlcy0yLmNkbi5vZmZpY2UubmV0LyIvPjxtZXRhIG5hbWU9ImNkbkNvbnRhaW5lciIgY29udGVudD0ib3dhbWFpbC8iLz48bWV0YSBuYW1lPSJkZXZDZG5VcmwiIGNvbnRlbnQ9IiIvPjxtZXRhIG5hbWU9ImFyaWFVcmwiIGNvbnRlbnQ9IiIvPjxtZXRhIG5hbWU9ImNvbXBhY3RBcmlhVXJsIiBjb250ZW50PSIiLz48bWV0YSBuYW1lPSJ3Y3NzRnJhbWVVcmwiIGNvbnRlbnQ9Imh0dHBzOi8vd2Vic2hlbGwuc3VpdGUub2ZmaWNlLmNvbSIvPjxtZXRhIG5hbWU9InNjcmlwdFBhdGgiIGNvbnRlbnQ9InNjcmlwdHMvIi8+PG1ldGEgbmFtZT0ib3dhSXNBdXRoZW50aWNhdGVkIiBjb250ZW50PSJPd2FJc0F1dGhlbnRpY2F0ZWQiLz48bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Ii9tYWlsL2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iLz48bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9Ii8vcmVzLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL3B3YS92MS9wbmdzL2FwcGxlLXRvdWNoLWljb24ucG5nIi8+PG5vc2NyaXB0PkphdmFTY3JpcHQgbXVzdCBiZSBlbmFibGVkLjwvbm9zY3JpcHQ+PHRpdGxlPk91dGxvb2s8L3RpdGxlPjxzdHlsZT5AZm9udC1mYWNlIHsKICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUkgV2VzdEV1cm9wZWFuJzsKICAgICAgICAgICAgICAgIHNyYzogbG9jYWwoJ1NlZ29lIFVJIExpZ2h0JyksIGxvY2FsKCdTZWdvZSBXUCBMaWdodCcpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1saWdodC5lb3Q/I2llZml4JykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1saWdodC53b2ZmJykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCd3b2ZmJyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLWxpZ2h0LnR0ZicpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCgndHJ1ZXR5cGUnKTsKICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7CiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGZvbnQtZmFjZSB7CiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJIFdlc3RFdXJvcGVhbic7CiAgICAgICAgICAgICAgICBzcmM6IGxvY2FsKCdTZWdvZSBVSScpLCBsb2NhbCgnU2Vnb2UgV1AnKSwKICAgICAgICAgICAgICAgICAgICB1cmwoJy8vcmVzLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktcmVndWxhci5lb3Q/I2llZml4JykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1yZWd1bGFyLndvZmYnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ3dvZmYnKSwKICAgICAgICAgICAgICAgICAgICB1cmwoJy8vcmVzLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktcmVndWxhci50dGYnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ3RydWV0eXBlJyk7CiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBmb250LWZhY2UgewogICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSBXZXN0RXVyb3BlYW4nOwogICAgICAgICAgICAgICAgc3JjOiBsb2NhbCgnU2Vnb2UgVUkgU2VtaWJvbGQnKSwgbG9jYWwoJ1NlZ29lIFdQIFNlbWlib2xkJyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXNlbWlib2xkLmVvdD8jaWVmaXgnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXNlbWlib2xkLndvZmYnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ3dvZmYnKSwKICAgICAgICAgICAgICAgICAgICB1cmwoJy8vcmVzLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktc2VtaWJvbGQudHRmJykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCd0cnVldHlwZScpOwogICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBAZm9udC1mYWNlIHsKICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUkgV2VzdEV1cm9wZWFuJzsKICAgICAgICAgICAgICAgIHNyYzogbG9jYWwoJ1NlZ29lIFVJIFNlbWlsaWdodCcpLCBsb2NhbCgnU2Vnb2UgV1AgU2VtaWxpZ2h0JyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXNlbWlsaWdodC5lb3Q/I2llZml4JykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1zZW1pbGlnaHQud29mZicpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCgnd29mZicpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1zZW1pbGlnaHQudHRmJykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCd0cnVldHlwZScpOwogICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBAZm9udC1mYWNlIHsKICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnRmFicmljTURMMkljb25zJzsKICAgICAgICAgICAgICAgIHNyYzogdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjIwNjI0MDAzLjEzL3Jlc291cmNlcy9mb250cy9vMzY1aWNvbnMtbWRsMi53b2ZmJykKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCd3b2ZmJyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjIwNjI0MDAzLjEzL3Jlc291cmNlcy9mb250cy9vMzY1aWNvbnMtbWRsMi50dGYnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ3RydWV0eXBlJyk7CiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBmb250LWZhY2UgewogICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdvZmZpY2UzNjVpY29ucyc7CiAgICAgICAgICAgICAgICBzcmM6IHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvb3dhbWFpbC8yMDIyMDYyNDAwMy4xMy9yZXNvdXJjZXMvZm9udHMvb2ZmaWNlMzY1aWNvbnMuZW90PycpOwogICAgICAgICAgICAgICAgc3JjOiB1cmwoJy8vcmVzLmNkbi5vZmZpY2UubmV0L293YW1haWwvMjAyMjA2MjQwMDMuMTMvcmVzb3VyY2VzL2ZvbnRzL29mZmljZTM2NWljb25zLmVvdD8jaWVmaXgnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksCiAgICAgICAgICAgICAgICAgICAgdXJsKCcvL3Jlcy5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjIwNjI0MDAzLjEzL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy53b2ZmPycpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCgnd29mZicpLAogICAgICAgICAgICAgICAgICAgIHVybCgnLy9yZXMuY2RuLm9mZmljZS5uZXQvb3dhbWFpbC8yMDIyMDYyNDAwMy4xMy9yZXNvdXJjZXMvZm9udHMvb2ZmaWNlMzY1aWNvbnMudHRmPycpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCgndHJ1ZXR5cGUnKSwKICAgICAgICAgICAgICAgICAgICB1cmwoJy8vcmVzLmNkbi5vZmZpY2UubmV0L293YW1haWwvMjAyMjA2MjQwMDMuMTMvcmVzb3VyY2VzL2ZvbnRzL29mZmljZTM2NWljb25zLnN2Zz8jb2ZmaWNlMzY1aWNvbnMnKQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoJ3N2ZycpOwogICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAjcHJlbG9hZERpdiB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IC0xcHg7CiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nU2NyZWVuIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgICAgICByaWdodDogMDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2xvYWRpbmdMb2dvIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgICAgIHRvcDogY2FsYyg1MHZoIC0gOTBweCk7CiAgICAgICAgICAgICAgICBsZWZ0OiBjYWxjKDUwdncgLSA5MHB4KTsKICAgICAgICAgICAgICAgIHdpZHRoOiAxODBweDsKICAgICAgICAgICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI01TTG9nbyB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgICAgICBib3R0b206IDM2cHg7CiAgICAgICAgICAgICAgICBsZWZ0OiBjYWxjKDUwdncgLSA0NXB4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAuZGFyayAjbG9hZGluZ1NjcmVlbiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzJfdHMgewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzJfdHNfX3RzIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzIgewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzJfY19vIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzNfdG8gewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzNfdG9fX3RvIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzZfdHMgewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzZfdHNfX3RzIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzhfdHMgewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzhfdHNfX3RzIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzlfdG8gewogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzlfdG9fX3RvIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNsb2FkaW5nTG9nbzI5X3RzIHsKICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbG9hZGluZ0xvZ28yOV90c19fdHMgMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEwMDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzJfdHNfX3RzIHsKICAgICAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDguODk0NDNweCwgMTU1LjcxNTEyN3B4KSBzY2FsZSgwLjY2ODk2MywgMC42Njg5NjMpOwogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQyLCAwLCAwLjU4LCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDI2LjY2NjY2NyUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwOC44OTQ0M3B4LCAxNTUuNzE1MTI3cHgpIHNjYWxlKDEsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTA4Ljg5NDQzcHgsIDE1NS43MTUxMjdweCkgc2NhbGUoMSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzJfY19vIHsKICAgICAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMTguMzMzMzMzJSB7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDEwMCUgewogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzNfdG9fX3RvIHsKICAgICAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwMTU1cHgsIDE5NS45NzA3MDNweCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAxMy4zMzMzMzMlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwMTU1cHgsIDE5NS45NzA3MDNweCk7CiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDEsIDAuMDI1KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDMxJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDE1NXB4LCAyMDZweCk7CiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMTM1LCAwLjcxLCAwLjAzLCAwLjk4NSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDAxNTVweCwgMTk1Ljk3MDcwM3B4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDEwMCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDAxNTVweCwgMTk1Ljk3MDcwM3B4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAa2V5ZnJhbWVzIGxvYWRpbmdMb2dvNl90c19fdHMgewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA3MDhweCwgOTcuNDk5NTg4cHgpIHNjYWxlKDEsIC0wLjAwMTcyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDIzLjMzMzMzMyUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA3MDhweCwgOTcuNDk5NTg4cHgpIHNjYWxlKDEsIC0wLjAwMTcyKTsKICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4xMzUsIDAuNzEsIDAuMDMsIDAuOTg1KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDQwJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDcwOHB4LCA5Ny40OTk1ODhweCkgc2NhbGUoMSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNzA4cHgsIDk3LjQ5OTU4OHB4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAa2V5ZnJhbWVzIGxvYWRpbmdMb2dvOF90c19fdHMgewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwgMTU5LjkxNDcyM3B4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDM5LjY2NjY2NyUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwgMTU5LjkxNDcyM3B4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LCAxNTkuOTE0NzIzcHgpIHNjYWxlKDEsIDEuMDUwMzYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgNTIuMzMzMzMzJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LCAxNTkuOTE0NzIzcHgpIHNjYWxlKDEsIDAuOTU5MjMzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDU3LjY2NjY2NyUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwgMTU5LjkxNDcyM3B4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIDEwMCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwgMTU5LjkxNDcyM3B4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAa2V5ZnJhbWVzIGxvYWRpbmdMb2dvOV90b19fdG8gewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMXB4LCAyMDUuNzUzNzY1cHgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMjYuNjY2NjY3JSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxcHgsIDIwNS43NTM3NjVweCk7CiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgNTAlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDFweCwgODFweCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDFweCwgODFweCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzI5X3RzX190cyB7CiAgICAgICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LCA5Ny40OTk1NzNweCkgc2NhbGUoMSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAxMy4zMzMzMzMlIHsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsIDk3LjQ5OTU3M3B4KSBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMSwgMC4wMjUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMjMuMzMzMzMzJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LCA5Ny40OTk1NzNweCkgc2NhbGUoMSwgMC4wMDE3MjMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LCA5Ny40OTk1NzNweCkgc2NhbGUoMSwgMC4wMDE3MjMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9PC9zdHlsZT48c2NyaXB0IG5vbmNlPSJZV1RwY2dzZ0Q3cE9rb2VUZWlIcHlnPT0iPnRyeSB7CiAgICAgICAgICAgICAgICBpZiAoJ2xvY2FsU3RvcmFnZScgaW4gd2luZG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJOb3JtYWxpemVkVGhlbWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1VzZXJzTm9ybWFsaXplZFRoZW1lJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJOb3JtYWxpemVkVGhlbWUgJiYgL1wuZGFyayQvLnRlc3QodXNlck5vcm1hbGl6ZWRUaGVtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2RhcmsnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIHB3YWJhcmNvbG9yID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdQd2FUaGVtZScpOwogICAgICAgICAgICAgICAgICAgIGlmIChwd2FiYXJjb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhlbWV0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgndGhlbWUtY29sb3InKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZW1ldGFnICYmIHRoZW1ldGFnLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWV0YWdbMF0uc2V0QXR0cmlidXRlKCdjb250ZW50JywgcHdhYmFyY29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlKSB7fTwvc2NyaXB0PjxzY3JpcHQgbm9uY2U9IllXVHBjZ3NnRDdwT2tvZVRlaUhweWc9PSI+d2luZG93LkZhYnJpY0NvbmZpZyA9IHsKICAgICAgICAgICAgICAgIGZvbnRCYXNlVXJsOiBudWxsLAogICAgICAgICAgICB9OwogICAgICAgICAgICB3aW5kb3cub3dhQmFja2ZpbGxlZEVycm9ycyA9IFtdOwogICAgICAgICAgICBmdW5jdGlvbiBsb2dFcnJvcihtLCBmLCBsLCBjLCBlLCBzKSB7CiAgICAgICAgICAgICAgICBpZiAod2luZG93Lm93YUVycm9ySGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vd2FFcnJvckhhbmRsZXIobSwgZiwgbCwgYywgZSwgcyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vd2FCYWNrZmlsbGVkRXJyb3JzLnB1c2goYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB3aW5kb3cub25lcnJvciA9IGxvZ0Vycm9yOwogICAgICAgICAgICBpZiAoJ29udW5oYW5kbGVkcmVqZWN0aW9uJyBpbiB3aW5kb3cpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIHZhciByID0gKGUgJiYgZS5yZWFzb24pIHx8ICdbbm8gcmVhc29uIGdpdmVuXSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcignVW5oYW5kbGVkIFJlamVjdGlvbjogJyArIHIsICcnLCAwLCAwLCByKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHIucmVzcG9uc2VFcnJvck1lc3NhZ2UgJiYgci5jYWxsc3RhY2tBdFJlcXVlc3QgJiYgciBpbnN0YW5jZW9mIFJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKHIucmVzcG9uc2VFcnJvck1lc3NhZ2UsICcnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByLmNhbGxzdGFja0F0UmVxdWVzdCkKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmhhbmRsZWQgUmVqZWN0aW9uOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHIgPT09ICdzdHJpbmcnID8gciA6IEpTT04uc3RyaW5naWZ5KHIpKQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGYuT3dhICYmCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYXRpb24gJiYKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhdGlvbi5zZWFyY2ggJiYKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZignZ3VscCcpID09IC0xCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL293YS9hdXRoL2Zyb3dueS5hc3B4P2JyZXQ9ZmFpbCZlc3JjPUluZGV4UGFnZUluY29tcGxldGUmYXBwPU1haWwnCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgfTs8L3NjcmlwdD48c2NyaXB0IG5vbmNlPSJZV1RwY2dzZ0Q3cE9rb2VUZWlIcHlnPT0iPnRyeSB7CiAgICAgICAgICAgICAgICAhKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJ1BlcmZvcm1hbmNlTG9uZ1Rhc2tUaW1pbmcnIGluIHdpbmRvdykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9ICh3aW5kb3cuX190dGkgPSB7IGU6IFtdIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBnLm8gPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihmdW5jdGlvbiAobCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5lID0gZy5lLmNvbmNhdChsLmdldEVudHJpZXMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBnLm8ub2JzZXJ2ZSh7IGVudHJ5VHlwZXM6IFsnbG9uZ3Rhc2snXSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7fTwvc2NyaXB0PjxzY3JpcHQgbm9uY2U9IllXVHBjZ3NnRDdwT2tvZVRlaUhweWc9PSI+LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgb3dhLm1haWxpbmRleC5qcy5MSUNFTlNFLnR4dCAqLwooKCk9Pnt2YXIgZSx0LG4scixvPXs5MTYxMzc6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7WjooKT0+SH0pO3ZhciByPW4oMzQ1MzYyKSxvPW4oNjYyMzcyKSxpPW4oMzE3MTQwKSxhPW4oOTI5NTQxKSxzPW4oODAzMTQ1KSx1PW4oNDk2NTIyKSxjPW4oNjkxMjU0KSxsPW4oOTIzODA2KTtjb25zdCBIPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4ucGx1Z2luVmVyc2lvblN0cmluZ0Fycj1bXSxuLnBsdWdpblZlcnNpb25TdHJpbmc9IiIsKDAsbC5aKSh0LG4sKGZ1bmN0aW9uKGUsdCl7ZS5sb2dnZXImJmUubG9nZ2VyLnF1ZXVlfHwoZS5sb2dnZXI9bmV3IG8uQVEoe2xvZ2dpbmdMZXZlbENvbnNvbGU6MX0pKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24obixyLG8sdSl7KDAsaS5MbSkoZSwoZnVuY3Rpb24oKXtyZXR1cm4iQXBwSW5zaWdodHNDb3JlLmluaXRpYWxpemUifSksKGZ1bmN0aW9uKCl7aWYobil7bi5lbmRwb2ludFVybHx8KG4uZW5kcG9pbnRVcmw9Imh0dHBzOi8vYnJvd3Nlci5ldmVudHMuZGF0YS5taWNyb3NvZnQuY29tL09uZUNvbGxlY3Rvci8xLjAvIik7dmFyIGk9bi5wcm9wZXJ0eVN0b3JhZ2VPdmVycmlkZTtpZihpJiYoIWkuZ2V0UHJvcGVydHl8fCFpLnNldFByb3BlcnR5KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvcGVydHkgc3RvcmFnZSBvdmVycmlkZSBwYXNzZWQuIik7bi5jaGFubmVscyYmKDAsYS50Tykobi5jaGFubmVscywoZnVuY3Rpb24odCl7dCYmKDAsYS50TykodCwoZnVuY3Rpb24odCl7aWYodC5pZGVudGlmaWVyJiZ0LnZlcnNpb24pe3ZhciBuPXQuaWRlbnRpZmllcisiPSIrdC52ZXJzaW9uO2UucGx1Z2luVmVyc2lvblN0cmluZ0Fyci5wdXNoKG4pfX0pKX0pKX1lLmdldFdQYXJhbT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/MDotMX0sciYmKDAsYS50TykociwoZnVuY3Rpb24odCl7aWYodCYmdC5pZGVudGlmaWVyJiZ0LnZlcnNpb24pe3ZhciBuPXQuaWRlbnRpZmllcisiPSIrdC52ZXJzaW9uO2UucGx1Z2luVmVyc2lvblN0cmluZ0Fyci5wdXNoKG4pfX0pKSxlLnBsdWdpblZlcnNpb25TdHJpbmc9ZS5wbHVnaW5WZXJzaW9uU3RyaW5nQXJyLmpvaW4oIjsiKTt0cnl7dC5pbml0aWFsaXplKG4scixvLHUpLGUucG9sbEludGVybmFsTG9ncygiSW50ZXJuYWxMb2ciKX1jYXRjaCh0KXt2YXIgYz1lLmxvZ2dlcixsPSgwLHMuZVUpKHQpOy0xIT09bC5pbmRleE9mKCJjaGFubmVscyIpJiYobCs9IlxuIC0gQ2hhbm5lbHMgbXVzdCBiZSBwcm92aWRlZCB0aHJvdWdoIGNvbmZpZy5jaGFubmVscyBvbmx5ISIpLGMudGhyb3dJbnRlcm5hbCgxLDUxNCwiU0RLIEluaXRpYWxpemF0aW9uIEZhaWxlZCAtIG5vIHRlbGVtZXRyeSB3aWxsIGJlIHNlbnQ6ICIrbCl9fSksKGZ1bmN0aW9uKCl7cmV0dXJue2NvbmZpZzpuLGV4dGVuc2lvbnM6cixsb2dnZXI6byxub3RpZmljYXRpb25NYW5hZ2VyOnV9fSkpfSxlLnRyYWNrPWZ1bmN0aW9uKG4peygwLGkuTG0pKGUsKGZ1bmN0aW9uKCl7cmV0dXJuIkFwcEluc2lnaHRzQ29yZS50cmFjayJ9KSwoZnVuY3Rpb24oKXt2YXIgcj1uO2lmKHIpe3IudGltaW5ncz1yLnRpbWluZ3N8fHt9LHIudGltaW5ncy50cmFja1N0YXJ0PSgwLGMuaEspKCksKDAsYy5yNykoci5sYXRlbmN5KXx8KHIubGF0ZW5jeT0xKTt2YXIgbz1yLmV4dD1yLmV4dHx8e307by5zZGs9by5zZGt8fHt9LG8uc2RrLnZlcj1jLnZzO3ZhciBpPXIuYmFzZURhdGE9ci5iYXNlRGF0YXx8e307aS5wcm9wZXJ0aWVzfHwoaS5wcm9wZXJ0aWVzPXt9KTt2YXIgYT1pLnByb3BlcnRpZXM7YS52ZXJzaW9ufHwoYS52ZXJzaW9uPSIiKSwiIiE9PWUucGx1Z2luVmVyc2lvblN0cmluZyYmKGEudmVyc2lvbj1lLnBsdWdpblZlcnNpb25TdHJpbmcpfXQudHJhY2socil9KSwoZnVuY3Rpb24oKXtyZXR1cm57aXRlbTpufX0pLCFuLnN5bmMpfX0pKSxufXJldHVybigwLHIubmUpKHQsZSksdH0odS5GKX0sNjkxMjU0OihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse3ZzOigpPT5mLFNuOigpPT5wLGpNOigpPT5DLHI3OigpPT5BLHlqOigpPT5oLFZ2OigpPT52LERvOigpPT5JLGNtOigpPT5VLGw3OigpPT5SLGhLOigpPT5tLGlmOigpPT5LLG1KOigpPT53LG90OigpPT5ifSk7dmFyIHIsbz1uKDIyMTkwOCksaT1uKDgyNjQ1NCksYT1uKDgwMzE0NSkscz1uKDkyOTU0MSksdT1uKDczMTc0MCksYz1uKDY4NTU4MyksbD1uKDcwNjAzOCksSD1uKDc1NTk5MiksZj0iMURTLVdlYi1KUy0zLjIuMyIsUz0id2l0aENyZWRlbnRpYWxzIixkPSgocj17fSlbMF09MCxyWzJdPTYsclsxXT0xLHJbM109NyxyWzQwOThdPTYscls0MDk3XT0xLHJbNDA5OV09NyxyKTtCb29sZWFuKCgwLGEuTWUpKCkpLEJvb2xlYW4oKDAsYS5KaikoKSk7ZnVuY3Rpb24gcChlKXtyZXR1cm4hKCIiPT09ZXx8KDAscy5sZSkoZSkpfWZ1bmN0aW9uIEMoZSl7aWYoZSl7dmFyIHQ9ZS5pbmRleE9mKCItIik7aWYodD4tMSlyZXR1cm4gZS5zdWJzdHJpbmcoMCx0KX1yZXR1cm4iIn1mdW5jdGlvbiBBKGUpe3JldHVybiEhKGUmJigwLHMuaGopKGUpJiZlPj0xJiZlPD00KX1mdW5jdGlvbiBoKGUsdCxuKXtpZighdCYmIXAodCl8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt2YXIgcj10eXBlb2YgdDtpZigic3RyaW5nIj09PXJ8fCJudW1iZXIiPT09cnx8ImJvb2xlYW4iPT09cnx8KDAscy5rSikodCkpdD17dmFsdWU6dH07ZWxzZSBpZigib2JqZWN0IiE9PXJ8fHQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2lmKCgwLHMubGUpKHQudmFsdWUpfHwiIj09PXQudmFsdWV8fCEoMCxzLkhEKSh0LnZhbHVlKSYmISgwLHMuaGopKHQudmFsdWUpJiYhKDAscy5qbikodC52YWx1ZSkmJiEoMCxzLmtKKSh0LnZhbHVlKSlyZXR1cm4gbnVsbH1lbHNlIHQ9e3ZhbHVlOm4/SlNPTi5zdHJpbmdpZnkodCk6dH07aWYoKDAscy5rSikodC52YWx1ZSkmJiFnKHQudmFsdWUpKXJldHVybiBudWxsO2lmKCEoMCxzLmxlKSh0LmtpbmQpKXtpZigoMCxzLmtKKSh0LnZhbHVlKXx8IU4odC5raW5kKSlyZXR1cm4gbnVsbDt0LnZhbHVlPXQudmFsdWUudG9TdHJpbmcoKX1yZXR1cm4gdH1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj0tMTtpZighKDAscy5vOCkoZSkpaWYodD4wJiYoMzI9PT10P3I9ODE5Mjp0PD0xMyYmKHI9dDw8NSkpLGZ1bmN0aW9uKGUpe2lmKGU+PTAmJmU8PTkpcmV0dXJuITA7cmV0dXJuITF9KG4pKS0xPT09ciYmKHI9MCkscnw9bjtlbHNle3ZhciBvPWRbeShlKV18fC0xOy0xIT09ciYmLTEhPT1vP3J8PW86Nj09PW8mJihyPW8pfXJldHVybiByfWZ1bmN0aW9uIEkoZSx0LG4pe3ZhciByO3JldHVybiB2b2lkIDA9PT1uJiYobj0hMCksZSYmKHI9ZS5nZXQodCksbiYmciYmZGVjb2RlVVJJQ29tcG9uZW50JiYocj1kZWNvZGVVUklDb21wb25lbnQocikpKSxyfHwiIn1mdW5jdGlvbiBVKGUpe3ZvaWQgMD09PWUmJihlPSJEIik7dmFyIHQ9KDAsYy5HVykoKTtyZXR1cm4iQiI9PT1lP3Q9InsiK3QrIn0iOiJQIj09PWU/dD0iKCIrdCsiKSI6Ik4iPT09ZSYmKHQ9dC5yZXBsYWNlKC8tL2csIiIpKSx0fWZ1bmN0aW9uIFIoZSx0LG4scixpKXt2YXIgYT17fSx1PSExLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsSD1PYmplY3Rbby5oQl0sZj1hcmd1bWVudHM7Zm9yKCJbb2JqZWN0IEJvb2xlYW5dIj09PUgudG9TdHJpbmcuY2FsbChmWzBdKSYmKHU9ZlswXSxjKyspO2M8bDtjKyspe2U9ZltjXTsoMCxzLnJXKShlLChmdW5jdGlvbihlLHQpe3UmJnQmJigwLHMuS24pKHQpPygwLHMua0opKHQpPyhhW2VdPWFbZV18fFtdLCgwLHMudE8pKHQsKGZ1bmN0aW9uKHQsbil7dCYmKDAscy5LbikodCk/YVtlXVtuXT1SKCEwLGFbZV1bbl0sdCk6YVtlXVtuXT10fSkpKTphW2VdPVIoITAsYVtlXSx0KTphW2VdPXR9KSl9cmV0dXJuIGF9dmFyIG09Yy5KajtmdW5jdGlvbiBOKGUpe3JldHVybiAwPT09ZXx8ZT4wJiZlPD0xM3x8MzI9PT1lfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGUubGVuZ3RoPjB9ZnVuY3Rpb24gSyhlLHQpe3ZhciBuPWU7bi50aW1pbmdzPW4udGltaW5nc3x8e30sbi50aW1pbmdzLnByb2Nlc3NUZWxlbWV0cnlTdGFydD1uLnRpbWluZ3MucHJvY2Vzc1RlbGVtZXRyeVN0YXJ0fHx7fSxuLnRpbWluZ3MucHJvY2Vzc1RlbGVtZXRyeVN0YXJ0W3RdPW0oKX1mdW5jdGlvbiB5KGUpe3ZhciB0PTA7aWYobnVsbCE9ZSl7dmFyIG49dHlwZW9mIGU7InN0cmluZyI9PT1uP3Q9MToibnVtYmVyIj09PW4/dD0yOiJib29sZWFuIj09PW4/dD0zOm49PT1vLmZLJiYodD00LCgwLHMua0opKGUpPyh0PTQwOTYsZS5sZW5ndGg+MCYmKHR8PXkoZVswXSkpKTooMCxzLm5yKShlLCJ2YWx1ZSIpJiYodD04MTkyfHkoZS52YWx1ZSkpKX1yZXR1cm4gdH1vLmpBLG8uZkssby5qQSxzLnRPLHMuVUEscy5NcixzLlh6LHMuRlkscy5ZNixhLmIkLHMuSEQscy5oaixzLmpuLHMubWYscy5rSixzLktuLHMubmQsYS5NRixzLlk2LGEuY3AsdS5wNyx1LlVZLHMubF8sbC5jOSxsLkliLHMuSWQscy5yVyxzLlltLHMubzgscy5sZSxzLm5yLHMubWYscy5LbixzLkpfLHMua0oscy5WWixzLkhELHMuaGoscy5qbixzLlk2LHMudE8scy5VQSxzLk1yLHMuWHoscy5uZCxpLnB1LHMuRlkscy5sXyxsLkliLHMubTYsYS53MSxjLkdXLGMuSmosSC5wWixILmF6LEguX2wsSC5DTixILkY2LGMuRE87ZnVuY3Rpb24gdygpe3JldHVybiEhKDAsYS5hOCkoImNocm9tZSIpfWZ1bmN0aW9uIGIoZSx0LG4scixvLGkpe2Z1bmN0aW9uIGEoZSx0LG4pe3RyeXtlW3RdPW59Y2F0Y2goZSl7fX12b2lkIDA9PT1yJiYocj0hMSksdm9pZCAwPT09byYmKG89ITEpO3ZhciBzPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gciYmYShzLCJNaWNyb3NvZnRfQXBwbGljYXRpb25JbnNpZ2h0c19CeXBhc3NBamF4SW5zdHJ1bWVudGF0aW9uIixyKSxuJiZhKHMsUyxuKSxzLm9wZW4oZSx0LCFvKSxuJiZhKHMsUyxuKSwhbyYmaSYmYShzLCJ0aW1lb3V0IixpKSxzfX0sNDg3MzY5OihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse1o6KCk9Pm99KTt2YXIgcj1uKDkyMzgwNik7Y29uc3Qgbz1mdW5jdGlvbiBlKCl7dmFyIHQ9ITAsbj0hMCxvPSEwLGk9InVzZS1jb2xsZWN0b3ItZGVsdGEiLGE9ITE7KDAsci5aKShlLHRoaXMsKGZ1bmN0aW9uKGUpe2UuYWxsb3dSZXF1ZXN0U2VuZGluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlLmZpcnN0UmVxdWVzdFNlbnQ9ZnVuY3Rpb24oKXtvJiYobz0hMSxhfHwodD0hMSkpfSxlLnNob3VsZEFkZENsb2NrU2tld0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sZS5nZXRDbG9ja1NrZXdIZWFkZXJWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBpfSxlLnNldENsb2NrU2tldz1mdW5jdGlvbihlKXthfHwoZT8oaT1lLG49ITAsYT0hMCk6bj0hMSx0PSEwKX19KSl9fSw5NjA2NjY6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7biQ6KCk9PnIsdFA6KCk9Pm8sdUY6KCk9PmksWDQ6KCk9PmEsemY6KCk9PnMsWWI6KCk9PnUsVVg6KCk9PmMscXc6KCk9PmwsRWQ6KCk9PkgsQVc6KCk9PmYsRE86KCk9PlMsZ2I6KCk9PmQsR3Q6KCk9PnAsTko6KCk9PkMsJF86KCk9PkEsQmU6KCk9PmgseWg6KCk9PnYsUTk6KCk9PkksQ2s6KCk9PlUsdDI6KCk9PlIsUWo6KCk9Pm0sUW46KCk9Pk4sWWg6KCk9PmcsYUI6KCk9Pkt9KTt2YXIgcj0iUE9TVCIsbz0iTWljcm9zb2Z0X0FwcGxpY2F0aW9uSW5zaWdodHNfQnlwYXNzQWpheEluc3RydW1lbnRhdGlvbiIsaT0iZHJvcCIsYT0ic2VuZCIscz0icmVxdWV1ZSIsdT0icnNwRmFpbCIsYz0ib3RoIixsPSJuby1jYWNoZSwgbm8tc3RvcmUiLEg9ImFwcGxpY2F0aW9uL3gtanNvbi1zdHJlYW0iLGY9ImNhY2hlLWNvbnRyb2wiLFM9ImNvbnRlbnQtdHlwZSIsZD0ia2lsbC10b2tlbnMiLHA9ImtpbGwtZHVyYXRpb24iLEM9ImtpbGwtZHVyYXRpb24tc2Vjb25kcyIsQT0idGltZS1kZWx0YS1taWxsaXMiLGg9ImNsaWVudC12ZXJzaW9uIix2PSJjbGllbnQtaWQiLEk9InRpbWUtZGVsdGEtdG8tYXBwbHktbWlsbGlzIixVPSJ1cGxvYWQtdGltZSIsUj0iYXBpa2V5IixtPSJBdXRoTXNhRGV2aWNlVGlja2V0IixOPSJBdXRoWFRva2VuIixnPSJOb1Jlc3BvbnNlQm9keSIsSz0ibXNmcGMifSw5ODAzNzooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtvdzooKT0+cixqZTooKT0+byxlMjooKT0+aX0pO3ZhciByPSJSRUFMX1RJTUUiLG89Ik5FQVJfUkVBTF9USU1FIixpPSJCRVNUX0VGRk9SVCJ9LDU0NzQxMDooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtsOigpPT51fSk7dmFyIHI9big2OTEyNTQpLG89big5Mjk1NDEpLGk9big5NjA2NjYpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9KGUuZXh0fHx7fSkuaW50d2ViO3JldHVybiB0JiYoMCxyLlNuKSh0W2kuYUJdKT90W2kuYUJdOm51bGx9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9bnVsbCxuPTA7bnVsbD09PXQmJm48ZS5sZW5ndGg7bisrKXQ9YShlW25dKTtyZXR1cm4gdH12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj1uP1tdLmNvbmNhdChuKTpbXSxpPXRoaXMsdT1zKHIpO2kuaUtleT1mdW5jdGlvbigpe3JldHVybiB0fSxpLk1zZnBjPWZ1bmN0aW9uKCl7cmV0dXJuIHV8fCIifSxpLmNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHIubGVuZ3RofSxpLmV2ZW50cz1mdW5jdGlvbigpe3JldHVybiByfSxpLmFkZEV2ZW50PWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKHIucHVzaChlKSx1fHwodT1hKGUpKSwhMCl9LGkuc3BsaXQ9ZnVuY3Rpb24obixpKXt2YXIgYTtpZihuPHIubGVuZ3RoKXt2YXIgYz1yLmxlbmd0aC1uOygwLG8ubGUpKGkpfHwoYz1pPGM/aTpjKSxhPXIuc3BsaWNlKG4sYyksdT1zKHIpfXJldHVybiBuZXcgZSh0LGEpfX1yZXR1cm4gZS5jcmVhdGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGUodCxuKX0sZX0oKX0sNTYwNDgxOihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse3g6KCk9Pk59KTt2YXIgcixvPW4oOTI5NTQxKSxpPW4oODAzMTQ1KSxhPW4oNjkxMjU0KSxzPW4oNjYyMzcyKSx1PW4oMzE3MTQwKSxjPW4oMjIxOTA4KSxsPW4oNDYwMTQ5KSxIPW4oNDUyODQ4KSxmPW4oODYzNDMzKSxTPW4oNDg3MzY5KSxkPW4oOTIzODA2KSxwPW4oOTYwNjY2KSxDPSImIitwLlloKyI9dHJ1ZSIsQT0oKHI9e30pWzFdPXAuemYsclsxMDBdPXAuemYsclsyMDBdPSJzZW50IixyWzgwMDRdPXAudUYscls4MDAzXT1wLnVGLHIpLGg9e30sdj17fTtmdW5jdGlvbiBJKGUsdCxuKXtoW2VdPXQsITEhPT1uJiYodlt0XT1lKX1mdW5jdGlvbiBVKGUpe3RyeXtyZXR1cm4gZS5yZXNwb25zZVRleHR9Y2F0Y2goZSl7fXJldHVybiIifWZ1bmN0aW9uIFIoZSx0KXt2YXIgbj0hMTtpZihlJiZ0KXt2YXIgcj0oMCxvLkZZKShlKTtpZihyJiZyLmxlbmd0aD4wKWZvcih2YXIgaT10LnRvTG93ZXJDYXNlKCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKHMmJigwLG8ubnIpKHQscykmJnMudG9Mb3dlckNhc2UoKT09PWkpe249ITA7YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBtKGUsdCxuLHIpe3QmJm4mJm4ubGVuZ3RoPjAmJihyJiZoW3RdPyhlLmhkcnNbaFt0XV09bixlLnVzZUhkcnM9ITApOmUudXJsKz0iJiIrdCsiPSIrbil9SShwLlFqLHAuUWosITEpLEkocC5CZSxwLkJlKSxJKHAueWgsIkNsaWVudC1JZCIpLEkocC50MixwLnQyKSxJKHAuUTkscC5ROSksSShwLkNrLHAuQ2spLEkocC5RbixwLlFuKTt2YXIgTj1mdW5jdGlvbiBlKHQsbixyLGgsSSl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1bXTt2YXIgTixnLEsseSx3LGIseD0iP2NvcnM9dHJ1ZSYiK3AuRE8udG9Mb3dlckNhc2UoKSsiPSIrcC5FZCxFPW5ldyBmLlosUD0hMSxPPW5ldyBTLlosaz0hMSxNPTAsVD0hMCxEPVtdLEY9e30sTD1bXSxCPW51bGwsaj0hMSxaPSExLFY9ITE7KDAsZC5aKShlLHRoaXMsKGZ1bmN0aW9uKGUpe3ZhciBmPSEwO2Z1bmN0aW9uIFMoZSx0KXtmb3IodmFyIG49MCxyPW51bGwsbz0wO251bGw9PXImJm88ZS5sZW5ndGg7KTE9PT0obj1lW29dKT8oMCxpLmNwKSgpP3I9ZDooMCxpLlozKSgpJiYocj16KToyPT09biYmKDAsaS5KTykodCk/cj1YOmsmJjM9PT1uJiYoMCxpLk1GKSgpJiYocj1KKSxvKys7cmV0dXJuIHI/e190cmFuc3BvcnQ6bixfaXNTeW5jOnQsc2VuZFBPU1Q6cn06bnVsbH1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1uZXcgWERvbWFpblJlcXVlc3Q7ci5vcGVuKHAubiQsZS51cmxTdHJpbmcpLGUudGltZW91dCYmKHIudGltZW91dD1lLnRpbWVvdXQpLHIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9VShyKTtxKHQsMjAwLHt9LGUpLGllKGUpfSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtxKHQsNDAwLHt9KX0sci5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtxKHQsNTAwLHt9KX0sci5vbnByb2dyZXNzPWZ1bmN0aW9uKCl7fSxuP3Iuc2VuZChlLmRhdGEpOkkuc2V0KChmdW5jdGlvbigpe3Iuc2VuZChlLmRhdGEpfSksMCl9ZnVuY3Rpb24gWChlLHQsbil7dmFyIHIsaT1lLnVybFN0cmluZyxhPSExLHM9ITEsdT0oKHI9e2JvZHk6ZS5kYXRhLG1ldGhvZDpwLm4kfSlbcC50UF09ITAscik7biYmKHUua2VlcGFsaXZlPSEwLDI9PT1lLl9zZW5kUmVhc29uJiYoYT0hMCxpKz1DKSksZiYmKHUuY3JlZGVudGlhbHM9ImluY2x1ZGUiKSxlLmhlYWRlcnMmJigwLG8uRlkpKGUuaGVhZGVycykubGVuZ3RoPjAmJih1LmhlYWRlcnM9ZS5oZWFkZXJzKSxmZXRjaChpLHUpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9IiI7ZS5oZWFkZXJzJiZlLmhlYWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW3RdPWV9KSksZS5ib2R5JiZlLnRleHQoKS50aGVuKChmdW5jdGlvbihlKXtyPWV9KSksc3x8KHM9ITAscSh0LGUuc3RhdHVzLG4sciksaWUocikpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzfHwocz0hMCxxKHQsMCx7fSkpfSkpLGEmJiFzJiYocz0hMCxxKHQsMjAwLHt9KSksIXMmJmUudGltZW91dD4wJiZJLnNldCgoZnVuY3Rpb24oKXtzfHwocz0hMCxxKHQsNTAwLHt9KSl9KSxlLnRpbWVvdXQpfWZ1bmN0aW9uIHooZSx0LG4pe3ZhciByPWUudXJsU3RyaW5nO2Z1bmN0aW9uIGkoZSx0LG4pe2lmKCFlW25dJiZ0JiZ0LmdldFJlc3BvbnNlSGVhZGVyKXt2YXIgcj10LmdldFJlc3BvbnNlSGVhZGVyKG4pO3ImJihlW25dPSgwLG8ubmQpKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBzKGUpe3ZhciB0PXt9O3JldHVybiBlLmdldEFsbFJlc3BvbnNlSGVhZGVycz90PWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2lmKCgwLG8uSEQpKGUpKXt2YXIgbj0oMCxvLm5kKShlKS5zcGxpdCgvW1xyXG5dKy8pOygwLG8udE8pKG4sKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciBuPWUuaW5kZXhPZigiOiAiKTtpZigtMSE9PW4pe3ZhciByPSgwLG8ubmQpKGUuc3Vic3RyaW5nKDAsbikpLnRvTG93ZXJDYXNlKCksaT0oMCxvLm5kKShlLnN1YnN0cmluZyhuKzEpKTt0W3JdPWl9ZWxzZSB0WygwLG8ubmQpKGUpXT0xfX0pKX1yZXR1cm4gdH0oZS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6KHQ9aSh0LGUscC4kXyksdD1pKHQsZSxwLkd0KSx0PWkodCxlLHAuTkopKSx0fWZ1bmN0aW9uIHUoZSxuKXtxKHQsZS5zdGF0dXMscyhlKSxuKX1uJiZlLmRpc2FibGVYaHJTeW5jJiYobj0hMSk7dmFyIGM9KDAsYS5vdCkocC5uJCxyLGYsITAsbixlLnRpbWVvdXQpOygwLG8uclcpKGUuaGVhZGVycywoZnVuY3Rpb24oZSx0KXtjLnNldFJlcXVlc3RIZWFkZXIoZSx0KX0pKSxjLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPVUoYyk7dShjLGUpLGllKGUpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXt1KGMpfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3UoYyl9LGMuc2VuZChlLmRhdGEpfWZ1bmN0aW9uIHEoZSx0LG4scil7dHJ5e2UodCxuLHIpfWNhdGNoKGUpeygwLHMua1ApKE4uZGlhZ0xvZygpLDIsNTE4LCgwLGkuZVUpKGUpKX19ZnVuY3Rpb24gSihlLHQsbil7dmFyIHI9MjAwLGE9ZS5fdGhlUGF5bG9hZCxzPWUudXJsU3RyaW5nK0M7dHJ5e3ZhciB1PSgwLGkualcpKCk7aWYoIXUuc2VuZEJlYWNvbihzLGUuZGF0YSkpaWYoYSl7dmFyIGM9W107KDAsby50TykoYS5iYXRjaGVzLChmdW5jdGlvbihlKXtpZihjJiZlJiZlLmNvdW50KCk+MCl7Zm9yKHZhciB0PWUuZXZlbnRzKCksbj0wO248dC5sZW5ndGg7bisrKWlmKCF1LnNlbmRCZWFjb24ocyxCLmdldEV2ZW50QmxvYih0W25dKSkpe2MucHVzaChlLnNwbGl0KG4pKTticmVha319ZWxzZSBjLnB1c2goZS5zcGxpdCgwKSl9KSksYWUoYyw4MDAzLGEuc2VuZFR5cGUsITApfWVsc2Ugcj0wfWNhdGNoKGUpe04uZGlhZ0xvZygpLndhcm5Ub0NvbnNvbGUoIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeSB1c2luZyBzZW5kQmVhY29uIEFQSS4gRXg6IisoMCxpLmVVKShlKSkscj0wfWZpbmFsbHl7cSh0LHIse30sIiIpfX1mdW5jdGlvbiBXKGUpe3JldHVybiAyPT09ZXx8Mz09PWV9ZnVuY3Rpb24gWShlKXtyZXR1cm4gWiYmVyhlKSYmKGU9MiksZX1mdW5jdGlvbiBRKCl7cmV0dXJuIVAmJk08bn1mdW5jdGlvbiBHKCl7dmFyIGU9TDtyZXR1cm4gTD1bXSxlfWZ1bmN0aW9uIF8oZSx0LG4pe3ZhciByPSExO3JldHVybiBlJiZlLmxlbmd0aD4wJiYhUCYmZ1t0XSYmQiYmKHI9MCE9PXR8fFEoKSYmKG4+MHx8Ty5hbGxvd1JlcXVlc3RTZW5kaW5nKCkpKSxyfWZ1bmN0aW9uICQoZSl7dmFyIHQ9e307cmV0dXJuIGUmJigwLG8udE8pKGUsKGZ1bmN0aW9uKGUsbil7dFtuXT17aUtleTplLmlLZXkoKSxldnRzOmUuZXZlbnRzKCl9fSkpLHR9ZnVuY3Rpb24gZWUoZSxuLHIsbyxjKXtpZihlJiYwIT09ZS5sZW5ndGgpaWYoUClhZShlLDEsbyk7ZWxzZXtvPVkobyk7dHJ5e3ZhciBsPWUsSD0wIT09bzsoMCx1LkxtKShLLChmdW5jdGlvbigpe3JldHVybiJIdHRwTWFuYWdlcjpfc2VuZEJhdGNoZXMifSksKGZ1bmN0aW9uKHMpe3MmJihlPWUuc2xpY2UoMCkpO2Zvcih2YXIgdT1bXSxsPW51bGwsZj0oMCxhLmhLKSgpLFM9Z1tvXXx8KEg/Z1sxXTpnWzBdKSxkPShafHxXKG8pfHxTJiYzPT09Uy5fdHJhbnNwb3J0KSYmIVQmJmsmJigwLGkuTUYpKCk7XyhlLG8sbik7KXt2YXIgcD1lLnNoaWZ0KCk7cCYmcC5jb3VudCgpPjAmJihFLmlzVGVuYW50S2lsbGVkKHAuaUtleSgpKT91LnB1c2gocCk6KGw9bHx8Qi5jcmVhdGVQYXlsb2FkKG4scixILGQsYyxvKSxCLmFwcGVuZFBheWxvYWQobCxwLHQpP251bGwhPT1sLm92ZXJmbG93JiYoZT1bbC5vdmVyZmxvd10uY29uY2F0KGUpLGwub3ZlcmZsb3c9bnVsbCxyZShsLGYsKDAsYS5oSykoKSxjKSxmPSgwLGEuaEspKCksbD1udWxsKToocmUobCxmLCgwLGEuaEspKCksYyksZj0oMCxhLmhLKSgpLGU9W3BdLmNvbmNhdChlKSxsPW51bGwpKSl9bCYmcmUobCxmLCgwLGEuaEspKCksYyksZS5sZW5ndGg+MCYmKEw9ZS5jb25jYXQoTCkpLGFlKHUsODAwNCxvKX0pLChmdW5jdGlvbigpe3JldHVybntiYXRjaGVzOiQobCkscmV0cnlDb3VudDpuLGlzVGVhcmRvd246cixpc1N5bmNocm9ub3VzOkgsc2VuZFJlYXNvbjpjLHVzZVNlbmRCZWFjb246VyhvKSxzZW5kVHlwZTpvfX0pLCFIKX1jYXRjaChlKXsoMCxzLmtQKShOLmRpYWdMb2coKSwyLDQ4LCJVbmV4cGVjdGVkIEV4Y2VwdGlvbiBzZW5kaW5nIGJhdGNoOiAiKygwLGkuZVUpKGUpKX19fWZ1bmN0aW9uIHRlKGUsdCl7dmFyIG49e3VybDp4LGhkcnM6e30sdXNlSGRyczohMX07dD8obi5oZHJzPSgwLGEubDcpKG4uaGRycyxGKSxuLnVzZUhkcnM9KDAsby5GWSkobi5oZHJzKS5sZW5ndGg+MCk6KDAsby5yVykoRiwoZnVuY3Rpb24oZSx0KXt2W2VdP20obix2W2VdLHQsITEpOihuLmhkcnNbZV09dCxuLnVzZUhkcnM9ITApfSkpLG0obixwLnloLCJOT19BVVRIIix0KSxtKG4scC5CZSxhLnZzLHQpO3ZhciByPSIiOygwLG8udE8pKGUuYXBpS2V5cywoZnVuY3Rpb24oZSl7ci5sZW5ndGg+MCYmKHIrPSIsIikscis9ZX0pKSxtKG4scC50MixyLHQpLG0obixwLkNrLCgwLG8ubTYpKCkudG9TdHJpbmcoKSx0KTt2YXIgaT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUuYmF0Y2hlcy5sZW5ndGg7dCsrKXt2YXIgbj1lLmJhdGNoZXNbdF0uTXNmcGMoKTtpZihuKXJldHVybiBlbmNvZGVVUklDb21wb25lbnQobil9cmV0dXJuIiJ9KGUpO2lmKCgwLGEuU24pKGkpJiYobi51cmwrPSImZXh0LmludHdlYi5tc2ZwYz0iK2kpLE8uc2hvdWxkQWRkQ2xvY2tTa2V3SGVhZGVycygpJiZtKG4scC5ROSxPLmdldENsb2NrU2tld0hlYWRlclZhbHVlKCksdCksSy5nZXRXUGFyYW0pe3ZhciBzPUsuZ2V0V1BhcmFtKCk7cz49MCYmKG4udXJsKz0iJnc9IitzKX1mb3IodmFyIHU9MDt1PEQubGVuZ3RoO3UrKyluLnVybCs9IiYiK0RbdV0ubmFtZSsiPSIrRFt1XS52YWx1ZTtyZXR1cm4gbn1mdW5jdGlvbiBuZShlLHQsbil7ZVt0XT1lW3RdfHx7fSxlW3RdW04uaWRlbnRpZmllcl09bn1mdW5jdGlvbiByZSh0LG4scyxsKXtpZih0JiZ0LnBheWxvYWRCbG9iJiZ0LnBheWxvYWRCbG9iLmxlbmd0aD4wKXt2YXIgZj0hIWUuc2VuZEhvb2ssUz1nW3Quc2VuZFR5cGVdOyFXKHQuc2VuZFR5cGUpJiZ0LmlzQmVhY29uJiYyPT09dC5zZW5kUmVhc29uJiYoUz1nWzJdfHxnWzNdfHxTKTt2YXIgZD1WOyh0LmlzQmVhY29ufHwzPT09Uy5fdHJhbnNwb3J0KSYmKGQ9ITEpO3ZhciBDPXRlKHQsZCk7ZD1kfHxDLnVzZUhkcnM7dmFyIEE9KDAsYS5oSykoKTsoMCx1LkxtKShLLChmdW5jdGlvbigpe3JldHVybiJIdHRwTWFuYWdlcjpfZG9QYXlsb2FkU2VuZCJ9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGg9MDtoPHQuYmF0Y2hlcy5sZW5ndGg7aCsrKWZvcih2YXIgdj10LmJhdGNoZXNbaF0uZXZlbnRzKCksST0wO0k8di5sZW5ndGg7SSsrKXt2YXIgVT12W0ldO2lmKGope3ZhciBtPVUudGltaW5ncz1VLnRpbWluZ3N8fHt9O25lKG0sInNlbmRFdmVudFN0YXJ0IixBKSxuZShtLCJzZXJpYWxpemF0aW9uU3RhcnQiLG4pLG5lKG0sInNlcmlhbGl6YXRpb25Db21wbGV0ZWQiLHMpfVUuc2VuZEF0dGVtcHQ+MD9VLnNlbmRBdHRlbXB0Kys6VS5zZW5kQXR0ZW1wdD0xfWFlKHQuYmF0Y2hlcywxZTMrKGx8fDApLHQuc2VuZFR5cGUsITApO3ZhciBnPXtkYXRhOnQucGF5bG9hZEJsb2IsdXJsU3RyaW5nOkMudXJsLGhlYWRlcnM6Qy5oZHJzLF90aGVQYXlsb2FkOnQsX3NlbmRSZWFzb246bCx0aW1lb3V0Ond9OygwLG8ubzgpKGIpfHwoZy5kaXNhYmxlWGhyU3luYz0hIWIpLGQmJihSKGcuaGVhZGVycyxwLkFXKXx8KGcuaGVhZGVyc1twLkFXXT1wLnF3KSxSKGcuaGVhZGVycyxwLkRPKXx8KGcuaGVhZGVyc1twLkRPXT1wLkVkKSk7dmFyIHk9bnVsbDtTJiYoeT1mdW5jdGlvbihuKXtPLmZpcnN0UmVxdWVzdFNlbnQoKTt2YXIgcz1mdW5jdGlvbihuLGkpeyFmdW5jdGlvbih0LG4saSxzKXt2YXIgdT05ZTMsbD1udWxsLGY9ITEsUz0hMTt0cnl7dmFyIGQ9ITA7aWYodHlwZW9mIHQhPT1jLmpBKXtpZihuKXtPLnNldENsb2NrU2tldyhuW3AuJF9dKTt2YXIgQz1uW3AuR3RdfHxuWyJraWxsLWR1cmF0aW9uLXNlY29uZHMiXTsoMCxvLnRPKShFLnNldEtpbGxTd2l0Y2hUZW5hbnRzKG5bcC5nYl0sQyksKGZ1bmN0aW9uKGUpeygwLG8udE8pKGkuYmF0Y2hlcywoZnVuY3Rpb24odCl7aWYodC5pS2V5KCk9PT1lKXtsPWx8fFtdO3ZhciBuPXQuc3BsaXQoMCk7aS5udW1FdmVudHMtPW4uY291bnQoKSxsLnB1c2gobil9fSkpfSkpfWlmKDIwMD09dHx8MjA0PT10KXJldHVybiB2b2lkKHU9MjAwKTsoISgwLEguRCkodCl8fGkubnVtRXZlbnRzPD0wKSYmKGQ9ITEpLHU9OWUzK3QlMWUzfWlmKGQpe3U9MTAwO3ZhciBBPWkucmV0cnlDbnQ7MD09PWkuc2VuZFR5cGUmJihBPHI/KGY9ITAsb2UoKGZ1bmN0aW9uKCl7MD09PWkuc2VuZFR5cGUmJk0tLSxlZShpLmJhdGNoZXMsQSsxLGkuaXNUZWFyZG93bixaPzI6aS5zZW5kVHlwZSw1KX0pLFosKDAsSC5lKShBKSkpOihTPSEwLFomJih1PTgwMDEpKSl9fWZpbmFsbHl7Znx8KE8uc2V0Q2xvY2tTa2V3KCksZnVuY3Rpb24odCxuLHIsaSl7dHJ5e2kmJk4uX2JhY2tPZmZUcmFuc21pc3Npb24oKSwyMDA9PT1uJiYoaXx8dC5pc1N5bmN8fE4uX2NsZWFyQmFja09mZigpLGZ1bmN0aW9uKGUpe2lmKGope3ZhciB0PSgwLGEuaEspKCk7KDAsby50TykoZSwoZnVuY3Rpb24oZSl7ZSYmZS5jb3VudCgpPjAmJmZ1bmN0aW9uKGUsdCl7aiYmKDAsby50TykoZSwoZnVuY3Rpb24oZSl7bmUoZS50aW1pbmdzPWUudGltaW5nc3x8e30sInNlbmRFdmVudENvbXBsZXRlZCIsdCl9KSl9KGUuZXZlbnRzKCksdCl9KSl9fSh0LmJhdGNoZXMpKSxhZSh0LmJhdGNoZXMsbix0LnNlbmRUeXBlLCEwKX1maW5hbGx5ezA9PT10LnNlbmRUeXBlJiYoTS0tLDUhPT1yJiZlLnNlbmRRdWV1ZWRSZXF1ZXN0cyh0LnNlbmRUeXBlLHIpKX19KGksdSxzLFMpKSxhZShsLDgwMDQsaS5zZW5kVHlwZSl9fShuLGksdCxsKX0sdT10LmlzVGVhcmRvd258fHQuaXNTeW5jO3RyeXtTLnNlbmRQT1NUKG4scyx1KSxlLnNlbmRMaXN0ZW5lciYmZS5zZW5kTGlzdGVuZXIoZyxuLHUsdC5pc0JlYWNvbil9Y2F0Y2goZSl7Ti5kaWFnTG9nKCkud2FyblRvQ29uc29sZSgiVW5leHBlY3RlZCBleGNlcHRpb24gc2VuZGluZyBwYXlsb2FkLiBFeDoiKygwLGkuZVUpKGUpKSxxKHMsMCx7fSl9fSksKDAsdS5MbSkoSywoZnVuY3Rpb24oKXtyZXR1cm4iSHR0cE1hbmFnZXI6X2RvUGF5bG9hZFNlbmQuc2VuZGVyIn0pLChmdW5jdGlvbigpe2lmKHkpaWYoMD09PXQuc2VuZFR5cGUmJk0rKyxmJiYhdC5pc0JlYWNvbiYmMyE9PVMuX3RyYW5zcG9ydCl7dmFyIG49e2RhdGE6Zy5kYXRhLHVybFN0cmluZzpnLnVybFN0cmluZyxoZWFkZXJzOigwLGEubDcpKHt9LGcuaGVhZGVycyksdGltZW91dDpnLnRpbWVvdXQsZGlzYWJsZVhoclN5bmM6Zy5kaXNhYmxlWGhyU3luY30scj0hMTsoMCx1LkxtKShLLChmdW5jdGlvbigpe3JldHVybiJIdHRwTWFuYWdlcjpfZG9QYXlsb2FkU2VuZC5zZW5kSG9vayJ9KSwoZnVuY3Rpb24oKXt0cnl7ZS5zZW5kSG9vayhuLChmdW5jdGlvbihlKXtyPSEwLFR8fGUuX3RoZVBheWxvYWR8fChlLl90aGVQYXlsb2FkPWUuX3RoZVBheWxvYWR8fGcuX3RoZVBheWxvYWQsZS5fc2VuZFJlYXNvbj1lLl9zZW5kUmVhc29ufHxnLl9zZW5kUmVhc29uKSx5KGUpfSksdC5pc1N5bmN8fHQuaXNUZWFyZG93bil9Y2F0Y2goZSl7cnx8eShnKX19KSl9ZWxzZSB5KGcpfSkpfSksKGZ1bmN0aW9uKCl7cmV0dXJue3RoZVBheWxvYWQ6dCxzZXJpYWxpemF0aW9uU3RhcnQ6bixzZXJpYWxpemF0aW9uQ29tcGxldGVkOnMsc2VuZFJlYXNvbjpsfX0pLHQuaXNTeW5jKX10LnNpemVFeGNlZWQmJnQuc2l6ZUV4Y2VlZC5sZW5ndGg+MCYmYWUodC5zaXplRXhjZWVkLDgwMDMsdC5zZW5kVHlwZSksdC5mYWlsZWRFdnRzJiZ0LmZhaWxlZEV2dHMubGVuZ3RoPjAmJmFlKHQuZmFpbGVkRXZ0cyw4MDAyLHQuc2VuZFR5cGUpfWZ1bmN0aW9uIG9lKGUsdCxuKXt0P2UoKTpJLnNldChlLG4pfWZ1bmN0aW9uIGllKHQpe3ZhciBuPWUuX3Jlc3BvbnNlSGFuZGxlcnM7dHJ5e2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXRyeXtuW3JdKHQpfWNhdGNoKGUpeygwLHMua1ApKE4uZGlhZ0xvZygpLDEsNTE5LCJSZXNwb25zZSBoYW5kbGVyIGZhaWxlZDogIitlKX1pZih0KXt2YXIgbz1KU09OLnBhcnNlKHQpOygwLGEuU24pKG8ud2ViUmVzdWx0KSYmKDAsYS5Tbikoby53ZWJSZXN1bHRbcC5hQl0pJiZ5LnNldCgiTVNGUEMiLG8ud2ViUmVzdWx0W3AuYUJdLDMxNTM2ZTMpfX1jYXRjaChlKXt9fWZ1bmN0aW9uIGFlKGUsdCxuLHIpe2lmKGUmJmUubGVuZ3RoPjAmJmgpe3ZhciBvPWhbKGM9dCxsPUFbY10sKDAsYS5TbikobCl8fChsPXAuVVgsYz49OWUzJiZjPD05OTk5P2w9cC5ZYjpjPj04ZTMmJmM8PTg5OTk/bD1wLnVGOmM+PTFlMyYmYzw9MTk5OSYmKGw9cC5YNCkpLGwpXTtpZihvKXt2YXIgaT0wIT09bjsoMCx1LkxtKShLLChmdW5jdGlvbigpe3JldHVybiJIdHRwTWFuYWdlcjpfc2VuZEJhdGNoZXNOb3RpZmljYXRpb24ifSksKGZ1bmN0aW9uKCl7b2UoKGZ1bmN0aW9uKCl7dHJ5e28uY2FsbChoLGUsdCxpLG4pfWNhdGNoKGUpeygwLHMua1ApKE4uZGlhZ0xvZygpLDEsNzQsInNlbmQgcmVxdWVzdCBub3RpZmljYXRpb24gZmFpbGVkOiAiK2UpfX0pLHJ8fGksMCl9KSwoZnVuY3Rpb24oKXtyZXR1cm57YmF0Y2hlczokKGUpLHJlYXNvbjp0LGlzU3luYzppLHNlbmRTeW5jOnIsc2VuZFR5cGU6bn19KSwhaSl9fXZhciBjLGx9ZS5pbml0aWFsaXplPWZ1bmN0aW9uKGUsdCxuLHIsYSl7dmFyIHM7YXx8KGE9e30pLHg9ZSt4LFY9ISEoMCxvLm84KShhLmF2b2lkT3B0aW9ucyl8fCFhLmF2b2lkT3B0aW9ucyxLPXQseT10LmdldENvb2tpZU1ncigpLGo9IUsuY29uZmlnLmRpc2FibGVFdmVudFRpbWluZ3M7dmFyIHU9ISFLLmNvbmZpZy5lbmFibGVDb21wb3VuZEtleTtOPW47dmFyIGM9YS52YWx1ZVNhbml0aXplcixIPWEuc3RyaW5naWZ5T2JqZWN0czsoMCxvLm84KShhLmVuYWJsZUNvbXBvdW5kS2V5KXx8KHU9ISFhLmVuYWJsZUNvbXBvdW5kS2V5KSx3PWEueGhyVGltZW91dCxiPWEuZGlzYWJsZVhoclN5bmMsaz0hKDAsaS5iJCkoKSxCPW5ldyBsLmUoSyxjLEgsdSk7dmFyIGQ9cixwPWEuYWx3YXlzVXNlWGhyT3ZlcnJpZGU/cjpudWxsLEM9YS5hbHdheXNVc2VYaHJPdmVycmlkZT9yOm51bGw7aWYoIXIpe1Q9ITE7dmFyIEE9KDAsaS5rJCkoKTtBJiZBLnByb3RvY29sJiYiZmlsZToiPT09QS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpJiYoZj0hMSk7dmFyIGg9W107aD0oMCxpLmIkKSgpP1syLDFdOlsxLDIsM107dmFyIHY9YS50cmFuc3BvcnRzO3YmJigoMCxvLmhqKSh2KT9oPVt2XS5jb25jYXQoaCk6KDAsby5rSikodikmJihoPXYuY29uY2F0KGgpKSkscj1TKGgsITEpLGQ9UyhoLCEwKSxyfHxOLmRpYWdMb2coKS53YXJuVG9Db25zb2xlKCJObyBhdmFpbGFibGUgdHJhbnNwb3J0IHRvIHNlbmQgZXZlbnRzIil9KHM9e30pWzBdPXIsc1sxXT1kfHxTKFsxLDIsM10sITApLHNbMl09cHx8UyhbMywyXSwhMCl8fGR8fFMoWzFdLCEwKSxzWzNdPUN8fFMoWzIsM10sITApfHxkfHxTKFsxXSwhMCksZz1zfSxlLl9nZXREYmdQbGdUYXJnZXRzPWZ1bmN0aW9uKCl7cmV0dXJuW2dbMF0sRSxCLGddfSxlLmFkZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxELmxlbmd0aDtuKyspaWYoRFtuXS5uYW1lPT09ZSlyZXR1cm4gdm9pZChEW25dLnZhbHVlPXQpO0QucHVzaCh7bmFtZTplLHZhbHVlOnR9KX0sZS5hZGRIZWFkZXI9ZnVuY3Rpb24oZSx0KXtGW2VdPXR9LGUuY2FuU2VuZFJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gUSgpJiZPLmFsbG93UmVxdWVzdFNlbmRpbmcoKX0sZS5zZW5kUXVldWVkUmVxdWVzdHM9ZnVuY3Rpb24oZSx0KXsoMCxvLm84KShlKSYmKGU9MCksWiYmKGU9WShlKSx0PTIpLF8oTCxlLDApJiZlZShHKCksMCwhMSxlLHR8fDApfSxlLmlzQ29tcGxldGVseUlkbGU9ZnVuY3Rpb24oKXtyZXR1cm4hUCYmMD09PU0mJjA9PT1MLmxlbmd0aH0sZS5zZXRVbmxvYWRpbmc9ZnVuY3Rpb24oZSl7Wj1lfSxlLmFkZEJhdGNoPWZ1bmN0aW9uKGUpe2lmKGUmJmUuY291bnQoKT4wKXtpZihFLmlzVGVuYW50S2lsbGVkKGUuaUtleSgpKSlyZXR1cm4hMTtMLnB1c2goZSl9cmV0dXJuITB9LGUudGVhcmRvd249ZnVuY3Rpb24oKXtMLmxlbmd0aD4wJiZlZShHKCksMCwhMCwyLDIpfSxlLnBhdXNlPWZ1bmN0aW9uKCl7UD0hMH0sZS5yZXN1bWU9ZnVuY3Rpb24oKXtQPSExLGUuc2VuZFF1ZXVlZFJlcXVlc3RzKDAsNCl9LGUuc2VuZFN5bmNocm9ub3VzQmF0Y2g9ZnVuY3Rpb24oZSx0LG4pe2UmJmUuY291bnQoKT4wJiYoKDAsby5sZSkodCkmJih0PTEpLFomJih0PVkodCksbj0yKSxlZShbZV0sMCwhMSx0LG58fDApKX19KSl9fSw4NjM0MzM6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7WjooKT0+aX0pO3ZhciByPW4oOTIzODA2KSxvPW4oOTI5NTQxKTtjb25zdCBpPWZ1bmN0aW9uIGUoKXt2YXIgdD17fTsoMCxyLlopKGUsdGhpcywoZnVuY3Rpb24oZSl7ZS5zZXRLaWxsU3dpdGNoVGVuYW50cz1mdW5jdGlvbihlLG4pe2lmKGUmJm4pdHJ5e3ZhciByPShzPWUuc3BsaXQoIiwiKSx1PVtdLHMmJigwLG8udE8pKHMsKGZ1bmN0aW9uKGUpe3UucHVzaCgoMCxvLm5kKShlKSl9KSksdSk7aWYoInRoaXMtcmVxdWVzdC1vbmx5Ij09PW4pcmV0dXJuIHI7Zm9yKHZhciBpPTFlMypwYXJzZUludChuLDEwKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFtyW2FdXT0oMCxvLm02KSgpK2l9Y2F0Y2goZSl7cmV0dXJuW119dmFyIHMsdTtyZXR1cm5bXX0sZS5pc1RlbmFudEtpbGxlZD1mdW5jdGlvbihlKXt2YXIgbj10LHI9KDAsby5uZCkoZSk7cmV0dXJuIHZvaWQgMCE9PW5bcl0mJm5bcl0+KDAsby5tNikoKXx8KGRlbGV0ZSBuW3JdLCExKX19KSl9fSw4ODQ4MzooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtaOigpPT5VfSk7dmFyIHI9bigzNDUzNjIpLG89big5MjM4MDYpLGk9bigzMTcxNDApLGE9big3MDYwMzgpLHM9bigyMzU2MiksdT1uKDY5MTI1NCksYz1uKDkyOTU0MSksbD1uKDgwMzE0NSksSD1uKDcxODgxNCksZj1uKDY2MjM3MiksUz1uKDc2Njg2NCksZD1uKDk4MDM3KSxwPW4oNTQ3NDEwKSxDPW4oNTYwNDgxKSxBPW4oNDUyODQ4KSxoPW4oOTYwNjY2KSx2PW4oODA1ODgyKSxJPSJldmVudHNEaXNjYXJkZWQiO2NvbnN0IFU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuaWRlbnRpZmllcj0iUG9zdENoYW5uZWwiLHIucHJpb3JpdHk9MTAxMSxyLnZlcnNpb249IjMuMi4zIjt2YXIgUyxVLFIsbSxOLGcsSyx5PSExLHc9W10sYj1udWxsLHg9ITEsRT0wLFA9NTAwLE89MCxrPTFlNCxNPXt9LFQ9ZC5vdyxEPW51bGwsRj1udWxsLEw9MCxCPTAsaj17fSxaPS0xLFY9ITAsWD0hMSx6PTYscT0yO3JldHVybigwLG8uWikodCxyLChmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSl7ImJlZm9yZXVubG9hZCIhPT0oZXx8KDAsbC5KaikoKS5ldmVudCkudHlwZSYmKFg9ITAsVS5zZXRVbmxvYWRpbmcoWCkpLGVlKDIsMil9ZnVuY3Rpb24gbyhlKXtYPSExLFUuc2V0VW5sb2FkaW5nKFgpfWZ1bmN0aW9uIEooZSx0KXtpZihlLnNlbmRBdHRlbXB0fHwoZS5zZW5kQXR0ZW1wdD0wKSxlLmxhdGVuY3l8fChlLmxhdGVuY3k9MSksZS5leHQmJmUuZXh0LnRyYWNlJiZkZWxldGUgZS5leHQudHJhY2UsZS5leHQmJmUuZXh0LnVzZXImJmUuZXh0LnVzZXIuaWQmJmRlbGV0ZSBlLmV4dC51c2VyLmlkLFYmJihlLmV4dD0oMCxjLkF4KShlLmV4dCksZS5iYXNlRGF0YSYmKGUuYmFzZURhdGE9KDAsYy5BeCkoZS5iYXNlRGF0YSkpLGUuZGF0YSYmKGUuZGF0YT0oMCxjLkF4KShlLmRhdGEpKSksZS5zeW5jKWlmKEx8fHgpZS5sYXRlbmN5PTMsZS5zeW5jPSExO2Vsc2UgaWYoVSlyZXR1cm4gViYmKGU9KDAsYy5BeCkoZSkpLHZvaWQgVS5zZW5kU3luY2hyb25vdXNCYXRjaChwLmwuY3JlYXRlKGUuaUtleSxbZV0pLCEwPT09ZS5zeW5jPzE6ZS5zeW5jLDMpO3ZhciBuPWUubGF0ZW5jeSxyPU8sbz1rOzQ9PT1uJiYocj1FLG89UCk7dmFyIGk9ITE7aWYocjxvKWk9IXJlKGUsdCk7ZWxzZXt2YXIgYT0xLHM9MjA7ND09PW4mJihhPTQscz0xKSxpPSEwLGZ1bmN0aW9uKGUsdCxuLHIpe2Zvcig7bjw9dDspe3ZhciBvPXRlKGUsdCwhMCk7aWYobyYmby5jb3VudCgpPjApe3ZhciBpPW8uc3BsaXQoMCxyKSxhPWkuY291bnQoKTtpZihhPjApcmV0dXJuIDQ9PT1uP0UtPWE6Ty09YSxmZShJLFtpXSxILmguUXVldWVGdWxsKSwhMH1uKyt9cmV0dXJuIG9lKCksITF9KGUuaUtleSxlLmxhdGVuY3ksYSxzKSYmKGk9IXJlKGUsdCkpfWkmJkhlKEksW2VdLEguaC5RdWV1ZUZ1bGwpfWZ1bmN0aW9uIFcoZSx0LG4pe3ZhciByPWllKGUsdCxuKTtyZXR1cm4gVS5zZW5kUXVldWVkUmVxdWVzdHModCxuKSxyfWZ1bmN0aW9uIFkoKXtyZXR1cm4gTz4wfWZ1bmN0aW9uIFEoKXtpZihaPj0wJiZpZShaLDAsTikmJlUuc2VuZFF1ZXVlZFJlcXVlc3RzKDAsTiksRT4wJiYhRiYmIXgpe3ZhciBlPU1bVF1bMl07ZT49MCYmKEY9XygoZnVuY3Rpb24oKXtGPW51bGwsVyg0LDAsMSksUSgpfSksZSkpfXZhciB0PU1bVF1bMV07IUQmJiFiJiZ0Pj0wJiYheCYmKFkoKT9EPV8oKGZ1bmN0aW9uKCl7RD1udWxsLFcoMD09PUI/MzoxLDAsMSksQisrLEIlPTIsUSgpfSksdCk6Qj0wKX1mdW5jdGlvbiBHKCl7bj1udWxsLHk9ITEsdz1bXSxiPW51bGwseD0hMSxFPTAsUD01MDAsTz0wLGs9MWU0LE09e30sVD1kLm93LEQ9bnVsbCxGPW51bGwsTD0wLEI9MCxTPW51bGwsaj17fSxSPXZvaWQgMCxtPTAsWj0tMSxOPW51bGwsVj0hMCxYPSExLHo9NixxPTIsZz1udWxsLEs9KDAsdi56RykoKSxVPW5ldyBDLngoNTAwLDIsMSx7cmVxdWV1ZTpjZSxzZW5kOlNlLHNlbnQ6ZGUsZHJvcDpwZSxyc3BGYWlsOkNlLG90aDpBZX0sSyksdWUoKSxqWzRdPXtiYXRjaGVzOltdLGlLZXlNYXA6e319LGpbM109e2JhdGNoZXM6W10saUtleU1hcDp7fX0salsyXT17YmF0Y2hlczpbXSxpS2V5TWFwOnt9fSxqWzFdPXtiYXRjaGVzOltdLGlLZXlNYXA6e319LGhlKCl9ZnVuY3Rpb24gXyhlLHQpezA9PT10JiZMJiYodD0xKTt2YXIgbj0xZTM7cmV0dXJuIEwmJihuPSgwLEEuZSkoTC0xKSksSy5zZXQoZSx0Km4pfWZ1bmN0aW9uICQoKXtyZXR1cm4gbnVsbCE9PUQmJihLLmNsZWFyKEQpLEQ9bnVsbCxCPTAsITApfWZ1bmN0aW9uIGVlKGUsdCl7JCgpLGImJihLLmNsZWFyKGIpLGI9bnVsbCkseHx8VygxLGUsdCl9ZnVuY3Rpb24gdGUoZSx0LG4pe3ZhciByPWpbdF07cnx8KHI9alt0PTFdKTt2YXIgbz1yLmlLZXlNYXBbZV07cmV0dXJuIW8mJm4mJihvPXAubC5jcmVhdGUoZSksci5iYXRjaGVzLnB1c2gobyksci5pS2V5TWFwW2VdPW8pLG99ZnVuY3Rpb24gbmUodCxuKXtVLmNhblNlbmRSZXF1ZXN0KCkmJiFMJiYoUj4wJiZPPlImJihuPSEwKSxuJiZudWxsPT1iJiZlLmZsdXNoKHQsbnVsbCwyMCkpfWZ1bmN0aW9uIHJlKGUsdCl7ViYmKGU9KDAsYy5BeCkoZSkpO3ZhciBuPWUubGF0ZW5jeSxyPXRlKGUuaUtleSxuLCEwKTtyZXR1cm4hIXIuYWRkRXZlbnQoZSkmJig0IT09bj8oTysrLHQmJjA9PT1lLnNlbmRBdHRlbXB0JiZuZSghZS5zeW5jLG0+MCYmci5jb3VudCgpPj1tKSk6RSsrLCEwKX1mdW5jdGlvbiBvZSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWZ1bmN0aW9uKG4pe3ZhciByPWpbbl07ciYmci5iYXRjaGVzJiYoMCxjLnRPKShyLmJhdGNoZXMsKGZ1bmN0aW9uKHIpezQ9PT1uP2UrPXIuY291bnQoKTp0Kz1yLmNvdW50KCl9KSl9LHI9MTtyPD00O3IrKyluKHIpO089dCxFPWV9ZnVuY3Rpb24gaWUodCxuLHIpe3ZhciBvPSExLGE9MD09PW47cmV0dXJuIWF8fFUuY2FuU2VuZFJlcXVlc3QoKT8oMCxpLkxtKShlLmNvcmUsKGZ1bmN0aW9uKCl7cmV0dXJuIlBvc3RDaGFubmVsLl9xdWV1ZUJhdGNoZXMifSksKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49NDtuPj10Oyl7dmFyIHI9altuXTtyJiZyLmJhdGNoZXMmJnIuYmF0Y2hlcy5sZW5ndGg+MCYmKCgwLGMudE8pKHIuYmF0Y2hlcywoZnVuY3Rpb24odCl7VS5hZGRCYXRjaCh0KT9vPW98fHQmJnQuY291bnQoKT4wOmU9ZS5jb25jYXQodC5ldmVudHMoKSksND09PW4/RS09dC5jb3VudCgpOk8tPXQuY291bnQoKX0pKSxyLmJhdGNoZXM9W10sci5pS2V5TWFwPXt9KSxuLS19ZS5sZW5ndGg+MCYmSGUoSSxlLEguaC5LaWxsU3dpdGNoKSxvJiZaPj10JiYoWj0tMSxOPTApfSksKGZ1bmN0aW9uKCl7cmV0dXJue2xhdGVuY3k6dCxzZW5kVHlwZTpuLHNlbmRSZWFzb246cn19KSwhYSk6KFo9Wj49MD9NYXRoLm1pbihaLHQpOnQsTj1NYXRoLm1heChOLHIpKSxvfWZ1bmN0aW9uIGFlKGUsdCl7VygxLDAsdCksb2UoKSxzZSgoZnVuY3Rpb24oKXtlJiZlKCksdy5sZW5ndGg+MD9iPV8oKGZ1bmN0aW9uKCl7Yj1udWxsLGFlKHcuc2hpZnQoKSx0KX0pLDApOihiPW51bGwsUSgpKX0pKX1mdW5jdGlvbiBzZShlKXtVLmlzQ29tcGxldGVseUlkbGUoKT9lKCk6Yj1fKChmdW5jdGlvbigpe2I9bnVsbCxzZShlKX0pLC4yNSl9ZnVuY3Rpb24gdWUoKXsoTT17fSlbZC5vd109WzIsMSwwXSxNW2QuamVdPVs2LDMsMF0sTVtkLmUyXT1bMTgsOSwwXX1mdW5jdGlvbiBjZSh0LG4pe3ZhciByPVtdLG89ejtYJiYobz1xKSwoMCxjLnRPKSh0LChmdW5jdGlvbih0KXt0JiZ0LmNvdW50KCk+MCYmKDAsYy50TykodC5ldmVudHMoKSwoZnVuY3Rpb24odCl7dCYmKHQuc3luYyYmKHQubGF0ZW5jeT00LHQuc3luYz0hMSksdC5zZW5kQXR0ZW1wdDxvPygoMCx1LmlmKSh0LGUuaWRlbnRpZmllciksSih0LCExKSk6ci5wdXNoKHQpKX0pKX0pKSxyLmxlbmd0aD4wJiZIZShJLHIsSC5oLk5vblJldHJ5YWJsZVN0YXR1cyksWCYmZWUoMiwyKX1mdW5jdGlvbiBsZSh0LG4pe3ZhciByPWUuX25vdGlmaWNhdGlvbk1hbmFnZXJ8fHt9LG89clt0XTtpZihvKXRyeXtvLmFwcGx5KHIsbil9Y2F0Y2gobil7KDAsZi5rUCkoZS5kaWFnTG9nKCksMSw3NCx0KyIgbm90aWZpY2F0aW9uIGZhaWxlZDogIituKX19ZnVuY3Rpb24gSGUoZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt0JiZ0Lmxlbmd0aD4wJiZsZShlLFt0XS5jb25jYXQobikpfWZ1bmN0aW9uIGZlKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dCYmdC5sZW5ndGg+MCYmKDAsYy50TykodCwoZnVuY3Rpb24odCl7dCYmdC5jb3VudCgpPjAmJmxlKGUsW3QuZXZlbnRzKCldLmNvbmNhdChuKSl9KSl9ZnVuY3Rpb24gU2UoZSx0LG4pe2UmJmUubGVuZ3RoPjAmJmxlKCJldmVudHNTZW5kUmVxdWVzdCIsW3Q+PTFlMyYmdDw9MTk5OT90LTFlMzowLCEwIT09bl0pfWZ1bmN0aW9uIGRlKGUsdCl7ZmUoImV2ZW50c1NlbnQiLGUsdCksUSgpfWZ1bmN0aW9uIHBlKGUsdCl7ZmUoSSxlLHQ+PThlMyYmdDw9ODk5OT90LThlMzpILmguVW5rbm93bil9ZnVuY3Rpb24gQ2UoZSl7ZmUoSSxlLEguaC5Ob25SZXRyeWFibGVTdGF0dXMpLFEoKX1mdW5jdGlvbiBBZShlLHQpe2ZlKEksZSxILmguVW5rbm93biksUSgpfWZ1bmN0aW9uIGhlKCl7bT1uJiZuLmRpc2FibGVBdXRvQmF0Y2hGbHVzaExpbWl0PzA6TWF0aC5tYXgoMTUwMCxrLzYpfUcoKSxlLl9nZXREYmdQbGdUYXJnZXRzPWZ1bmN0aW9uKCl7cmV0dXJuW1VdfSxlLmluaXRpYWxpemU9ZnVuY3Rpb24obCxILGYpeygwLGkuTG0pKEgsKGZ1bmN0aW9uKCl7cmV0dXJuIlBvc3RDaGFubmVsOmluaXRpYWxpemUifSksKGZ1bmN0aW9uKCl7dmFyIGk9SDt0LmluaXRpYWxpemUobCxILGYpO3RyeXtILmFkZFVubG9hZENiO2c9KDAsYS5qVSkoKDAscy5KKShlLmlkZW50aWZpZXIpLEguZXZ0TmFtZXNwYWNlJiZILmV2dE5hbWVzcGFjZSgpKTt2YXIgZD1lLl9nZXRUZWxDdHgoKTtsLmV4dGVuc2lvbkNvbmZpZ1tlLmlkZW50aWZpZXJdPWwuZXh0ZW5zaW9uQ29uZmlnW2UuaWRlbnRpZmllcl18fHt9LG49ZC5nZXRFeHRDZmcoZS5pZGVudGlmaWVyKSxLPSgwLHYuekcpKG4uc2V0VGltZW91dE92ZXJyaWRlLG4uY2xlYXJUaW1lb3V0T3ZlcnJpZGUpLFY9IW4uZGlzYWJsZU9wdGltaXplT2JqJiYoMCx1Lm1KKSgpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0V1BhcmFtO2UuZ2V0V1BhcmFtPWZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gbi5pZ25vcmVNYzFNczBDb29raWVQcm9jZXNzaW5nJiYoZXw9MiksZXx0KCl9fShpKSxuLmV2ZW50c0xpbWl0SW5NZW0+MCYmKGs9bi5ldmVudHNMaW1pdEluTWVtKSxuLmltbWVkaWF0ZUV2ZW50TGltaXQ+MCYmKFA9bi5pbW1lZGlhdGVFdmVudExpbWl0KSxuLmF1dG9GbHVzaEV2ZW50c0xpbWl0PjAmJihSPW4uYXV0b0ZsdXNoRXZlbnRzTGltaXQpLCgwLGMuaGopKG4ubWF4RXZlbnRSZXRyeUF0dGVtcHRzKSYmKHo9bi5tYXhFdmVudFJldHJ5QXR0ZW1wdHMpLCgwLGMuaGopKG4ubWF4VW5sb2FkRXZlbnRSZXRyeUF0dGVtcHRzKSYmKHE9bi5tYXhVbmxvYWRFdmVudFJldHJ5QXR0ZW1wdHMpLGhlKCksbi5odHRwWEhST3ZlcnJpZGUmJm4uaHR0cFhIUk92ZXJyaWRlLnNlbmRQT1NUJiYoUz1uLmh0dHBYSFJPdmVycmlkZSksKDAsdS5TbikobC5hbm9uQ29va2llTmFtZSkmJlUuYWRkUXVlcnlTdHJpbmdQYXJhbWV0ZXIoImFub25ja25tIixsLmFub25Db29raWVOYW1lKSxVLnNlbmRIb29rPW4ucGF5bG9hZFByZXByb2Nlc3NvcixVLnNlbmRMaXN0ZW5lcj1uLnBheWxvYWRMaXN0ZW5lcjt2YXIgcD1uLm92ZXJyaWRlRW5kcG9pbnRVcmw/bi5vdmVycmlkZUVuZHBvaW50VXJsOmwuZW5kcG9pbnRVcmw7ZS5fbm90aWZpY2F0aW9uTWFuYWdlcj1sLmV4dGVuc2lvbkNvbmZpZy5Ob3RpZmljYXRpb25NYW5hZ2VyLFUuaW5pdGlhbGl6ZShwLGUuY29yZSxlLFMsbik7dmFyIEM9bC5kaXNhYmxlUGFnZVVubG9hZEV2ZW50c3x8W107KDAsYS5jOSkocixDLGcpLCgwLGEuVEopKHIsQyxnKSwoMCxhLm5EKShvLGwuZGlzYWJsZVBhZ2VTaG93RXZlbnRzLGcpfWNhdGNoKHQpe3Rocm93IGUuc2V0SW5pdGlhbGl6ZWQoITEpLHR9fSksKGZ1bmN0aW9uKCl7cmV0dXJue2NvcmVDb25maWc6bCxjb3JlOkgsZXh0ZW5zaW9uczpmfX0pKX0sZS5wcm9jZXNzVGVsZW1ldHJ5PWZ1bmN0aW9uKHQscil7KDAsdS5pZikodCxlLmlkZW50aWZpZXIpO3ZhciBvPShyPWUuX2dldFRlbEN0eChyKSkuZ2V0RXh0Q2ZnKGUuaWRlbnRpZmllciksaT0hIW4uZGlzYWJsZVRlbGVtZXRyeTtvJiYoaT1pfHwhIW8uZGlzYWJsZVRlbGVtZXRyeSk7dmFyIGE9dDtpfHx5fHwobi5vdmVycmlkZUluc3RydW1lbnRhdGlvbktleSYmKGEuaUtleT1uLm92ZXJyaWRlSW5zdHJ1bWVudGF0aW9uS2V5KSxvJiZvLm92ZXJyaWRlSW5zdHJ1bWVudGF0aW9uS2V5JiYoYS5pS2V5PW8ub3ZlcnJpZGVJbnN0cnVtZW50YXRpb25LZXkpLEooYSwhMCksWD9lZSgyLDIpOlEoKSksZS5wcm9jZXNzTmV4dChhLHIpfSxlLl9kb1RlYXJkb3duPWZ1bmN0aW9uKGUsdCl7ZWUoMiwyKSx5PSEwLFUudGVhcmRvd24oKSwoMCxhLkpBKShudWxsLGcpLCgwLGEuQzkpKG51bGwsZyksKDAsYS5ZbCkobnVsbCxnKSxHKCl9LGUuc2V0RXZlbnRRdWV1ZUxpbWl0cz1mdW5jdGlvbihlLHQpe2s9ZT4wP2U6MWU0LFI9dD4wP3Q6MCxoZSgpO3ZhciBuPU8+ZTtpZighbiYmbT4wKWZvcih2YXIgcj0xOyFuJiZyPD0zO3IrKyl7dmFyIG89altyXTtvJiZvLmJhdGNoZXMmJigwLGMudE8pKG8uYmF0Y2hlcywoZnVuY3Rpb24oZSl7ZSYmZS5jb3VudCgpPj1tJiYobj0hMCl9KSl9bmUoITAsbil9LGUucGF1c2U9ZnVuY3Rpb24oKXskKCkseD0hMCxVLnBhdXNlKCl9LGUucmVzdW1lPWZ1bmN0aW9uKCl7eD0hMSxVLnJlc3VtZSgpLFEoKX0sZS5hZGRSZXNwb25zZUhhbmRsZXI9ZnVuY3Rpb24oZSl7VS5fcmVzcG9uc2VIYW5kbGVycy5wdXNoKGUpfSxlLl9sb2FkVHJhbnNtaXRQcm9maWxlcz1mdW5jdGlvbihlKXskKCksdWUoKSxUPWQub3csUSgpLCgwLGMuclcpKGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYobj49Mil7dmFyIHI9bj4yP3RbMl06MDtpZih0LnNwbGljZSgwLG4tMiksdFsxXTwwJiYodFswXT0tMSksdFsxXT4wJiZ0WzBdPjApe3ZhciBvPXRbMF0vdFsxXTt0WzBdPU1hdGguY2VpbChvKSp0WzFdfXI+PTAmJnRbMV0+PTAmJnI+dFsxXSYmKHI9dFsxXSksdC5wdXNoKHIpLE1bZV09dH19KSl9LGUuZmx1c2g9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PWUmJihlPSEwKSwheClpZihuPW58fDEsZSludWxsPT1iPygkKCksaWUoMSwwLG4pLGI9XygoZnVuY3Rpb24oKXtiPW51bGwsYWUodCxuKX0pLDApKTp3LnB1c2godCk7ZWxzZXt2YXIgcj0kKCk7VygxLDEsbiksbnVsbCE9dCYmdCgpLHImJlEoKX19LGUuc2V0TXNhQXV0aFRpY2tldD1mdW5jdGlvbihlKXtVLmFkZEhlYWRlcihoLlFqLGUpfSxlLmhhc0V2ZW50cz1ZLGUuX3NldFRyYW5zbWl0UHJvZmlsZT1mdW5jdGlvbihlKXtUIT09ZSYmdm9pZCAwIT09TVtlXSYmKCQoKSxUPWUsUSgpKX0sZS5fYmFja09mZlRyYW5zbWlzc2lvbj1mdW5jdGlvbigpe0w8NCYmKEwrKywkKCksUSgpKX0sZS5fY2xlYXJCYWNrT2ZmPWZ1bmN0aW9uKCl7TCYmKEw9MCwkKCksUSgpKX0sKDAsYy5sXykoZSwiX3NldFRpbWVvdXRPdmVycmlkZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEsuc2V0fSksKGZ1bmN0aW9uKGUpe0s9KDAsdi56RykoZSxLLmNsZWFyKX0pKSwoMCxjLmxfKShlLCJfY2xlYXJUaW1lb3V0T3ZlcnJpZGUiLChmdW5jdGlvbigpe3JldHVybiBLLmNsZWFyfSksKGZ1bmN0aW9uKGUpe0s9KDAsdi56RykoSy5zZXQsZSl9KSl9KSkscn1yZXR1cm4oMCxyLm5lKSh0LGUpLHR9KFMuaSl9LDQ1Mjg0ODooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtEOigpPT5yLGU6KCk9Pm99KTtmdW5jdGlvbiByKGUpe3JldHVybiEoZT49MzAwJiZlPDUwMCYmNDA4IT1lJiY0MjkhPWV8fDUwMT09ZXx8NTA1PT1lKX1mdW5jdGlvbiBvKGUpe3ZhciB0LG49TWF0aC5mbG9vcigxMjAwKk1hdGgucmFuZG9tKCkpKzI0MDA7cmV0dXJuIHQ9TWF0aC5wb3coMixlKSpuLE1hdGgubWluKHQsNmU1KX19LDQ2MDE0OTooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtlOigpPT5IfSk7dmFyIHI9bigzMTcxNDApLG89big5Mjk1NDEpLGk9big2OTEyNTQpLGE9big1NDc0MTApLHM9big5MjM4MDYpLHU9MmU2LGM9TWF0aC5taW4odSw2NWUzKSxsPS9cLi8sSD1mdW5jdGlvbiBlKHQsbixILFMpe3ZhciBkPSJkYXRhIixwPSJiYXNlRGF0YSIsQz0hIVMsQT1uLGg9e307KDAscy5aKShlLHRoaXMsKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oZSx0LHIsYSxzLHUsYyl7KDAsby5yVykoZSwoZnVuY3Rpb24oZSxmKXt2YXIgUz1udWxsO2lmKGZ8fCgwLGkuU24pKGYpKXt2YXIgZD1yLHA9ZSx2PXMsST10O2lmKEMmJiFhJiZsLnRlc3QoZSkpe3ZhciBVPWUuc3BsaXQoIi4iKSxSPVUubGVuZ3RoO2lmKFI+MSl7diYmKHY9di5zbGljZSgpKTtmb3IodmFyIG09MDttPFItMTttKyspe3ZhciBOPVVbbV07ST1JW05dPUlbTl18fHt9LGQrPSIuIitOLHYmJnYucHVzaChOKX1wPVVbUi0xXX19dmFyIGc9YSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1oW2VdO3JldHVybiB2b2lkIDA9PT1uJiYoZS5sZW5ndGg+PTcmJihuPSgwLG8ueGUpKGUsImV4dC5tZXRhZGF0YSIpfHwoMCxvLnhlKShlLCJleHQud2ViIikpLGhbZV09biksbn0oZCk7aWYoUz0hZyYmQSYmQS5oYW5kbGVGaWVsZChkLHApP0EudmFsdWUoZCxwLGYsSCk6KDAsaS55aikocCxmLEgpKXt2YXIgSz1TLnZhbHVlO2lmKElbcF09Syx1JiZ1KHYscCxTKSxjJiYib2JqZWN0Ij09dHlwZW9mIEsmJiEoMCxvLmtKKShLKSl7dmFyIHk9djt5JiYoeT15LnNsaWNlKCkpLnB1c2gocCksbihmLEssZCsiLiIrcCxhLHksdSxjKX19fX0pKX1lLmNyZWF0ZVBheWxvYWQ9ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybnthcGlLZXlzOltdLHBheWxvYWRCbG9iOiIiLG92ZXJmbG93Om51bGwsc2l6ZUV4Y2VlZDpbXSxmYWlsZWRFdnRzOltdLGJhdGNoZXM6W10sbnVtRXZlbnRzOjAscmV0cnlDbnQ6ZSxpc1RlYXJkb3duOnQsaXNTeW5jOm4saXNCZWFjb246cixzZW5kVHlwZTppLHNlbmRSZWFzb246b319LGUuYXBwZW5kUGF5bG9hZD1mdW5jdGlvbihuLGkscyl7dmFyIGw9biYmaSYmIW4ub3ZlcmZsb3c7cmV0dXJuIGwmJigwLHIuTG0pKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIlNlcmlhbGl6ZXI6YXBwZW5kUGF5bG9hZCJ9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aS5ldmVudHMoKSxyPW4ucGF5bG9hZEJsb2IsbD1uLm51bUV2ZW50cyxIPSExLGY9W10sUz1bXSxkPW4uaXNCZWFjb24scD1kPzY1ZTM6Mzk4NDU4OCxDPWQ/Yzp1LEE9MCxoPTA7QTx0Lmxlbmd0aDspe3ZhciB2PXRbQV07aWYodil7aWYobD49cyl7bi5vdmVyZmxvdz1pLnNwbGl0KEEpO2JyZWFrfXZhciBJPWUuZ2V0RXZlbnRCbG9iKHYpO2lmKEkmJkkubGVuZ3RoPD1DKXt2YXIgVT1JLmxlbmd0aDtpZihyLmxlbmd0aCtVPnApe24ub3ZlcmZsb3c9aS5zcGxpdChBKTticmVha31yJiYocis9IlxuIikscis9SSwrK2g+MjAmJihyLnN1YnN0cigwLDEpLGg9MCksSD0hMCxsKyt9ZWxzZSBJP2YucHVzaCh2KTpTLnB1c2godiksdC5zcGxpY2UoQSwxKSxBLS19QSsrfWlmKGYmJmYubGVuZ3RoPjAmJm4uc2l6ZUV4Y2VlZC5wdXNoKGEubC5jcmVhdGUoaS5pS2V5KCksZikpLFMmJlMubGVuZ3RoPjAmJm4uZmFpbGVkRXZ0cy5wdXNoKGEubC5jcmVhdGUoaS5pS2V5KCksUykpLEgpe24uYmF0Y2hlcy5wdXNoKGkpLG4ucGF5bG9hZEJsb2I9cixuLm51bUV2ZW50cz1sO3ZhciBSPWkuaUtleSgpOy0xPT09KDAsby5VQSkobi5hcGlLZXlzLFIpJiZuLmFwaUtleXMucHVzaChSKX19KSwoZnVuY3Rpb24oKXtyZXR1cm57cGF5bG9hZDpuLHRoZUJhdGNoOntpS2V5OmkuaUtleSgpLGV2dHM6aS5ldmVudHMoKX0sbWF4OnN9fSkpLGx9LGUuZ2V0RXZlbnRCbG9iPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4oMCxyLkxtKSh0LChmdW5jdGlvbigpe3JldHVybiJTZXJpYWxpemVyLmdldEV2ZW50QmxvYiJ9KSwoZnVuY3Rpb24oKXt2YXIgdD17fTt0Lm5hbWU9ZS5uYW1lLHQudGltZT1lLnRpbWUsdC52ZXI9ZS52ZXIsdC5pS2V5PSJvOiIrKDAsaS5qTSkoZS5pS2V5KTt2YXIgcj17fSxhPWUuZXh0O2EmJih0LmV4dD1yLCgwLG8uclcpKGEsKGZ1bmN0aW9uKGUsdCl7bih0LHJbZV09e30sImV4dC4iK2UsITAsbnVsbCxudWxsLCEwKX0pKSk7dmFyIHM9dC5kYXRhPXt9O3MuYmFzZVR5cGU9ZS5iYXNlVHlwZTt2YXIgdT1zLmJhc2VEYXRhPXt9O3JldHVybiBuKGUuYmFzZURhdGEsdSxwLCExLFtwXSwoZnVuY3Rpb24oZSx0LG4pe2YocixlLHQsbil9KSwhMCksbihlLmRhdGEscyxkLCExLFtdLChmdW5jdGlvbihlLHQsbil7ZihyLGUsdCxuKX0pLCEwKSxKU09OLnN0cmluZ2lmeSh0KX0pLChmdW5jdGlvbigpe3JldHVybntpdGVtOmV9fSkpfWNhdGNoKGUpe3JldHVybiBudWxsfX19KSl9O2Z1bmN0aW9uIGYoZSx0LG4scil7aWYociYmZSl7dmFyIGE9KDAsaS5Wdikoci52YWx1ZSxyLmtpbmQsci5wcm9wZXJ0eVR5cGUpO2lmKGE+LTEpe3ZhciBzPWUubWV0YWRhdGE7c3x8KHM9ZS5tZXRhZGF0YT17Zjp7fX0pO3ZhciB1PXMuZjtpZih1fHwodT1zLmY9e30pLHQpZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBsPXRbY107dVtsXXx8KHVbbF09e2Y6e319KTt2YXIgSD11W2xdLmY7SHx8KEg9dVtsXS5mPXt9KSx1PUh9dT11W25dPXt9LCgwLG8ua0opKHIudmFsdWUpP3UuYT17dDphfTp1LnQ9YX19fX0sODA1ODgyOihlLHQsbik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3JldHVybiBzZXRUaW1lb3V0KGUsdCxuKX1mdW5jdGlvbiBvKGUpe2NsZWFyVGltZW91dChlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJue3NldDplfHxyLGNsZWFyOnR8fG99fW4uZCh0LHt6RzooKT0+aX0pfSw0ODUzNjI6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7Qnk6KCk9Pm8sY2M6KCk9Pml9KTt2YXIgcj1uKDkyOTU0MSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD17fTtyZXR1cm4oMCxyLnJXKShlLChmdW5jdGlvbihlLG4pe3RbZV09bix0W25dPWV9KSksKDAsci5fQSkodCl9ZnVuY3Rpb24gaShlKXt2YXIgdD17fTtyZXR1cm4oMCxyLnJXKShlLChmdW5jdGlvbihlLG4pe3RbZV09blsxXSx0W25bMF1dPW5bMV19KSksKDAsci5fQSkodCl9fSw3MTg4MTQ6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7aDooKT0+cn0pO3ZhciByPSgwLG4oNDg1MzYyKS5CeSkoe1Vua25vd246MCxOb25SZXRyeWFibGVTdGF0dXM6MSxJbnZhbGlkRXZlbnQ6MixTaXplTGltaXRFeGNlZWRlZDozLEtpbGxTd2l0Y2g6NCxRdWV1ZUZ1bGw6NX0pfSw0OTY1MjI6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7RjooKT0+bH0pO3ZhciByPW4oMzQ1MzYyKSxvPW4oNzQ1MDI5KSxpPW4oMzU0ODUwKSxhPW4oMzE3MTQwKSxzPW4oNjYyMzcyKSx1PW4oOTIzODA2KSxjPW4oOTI5NTQxKSxsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuKDAsdS5aKSh0LG4sKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmdldE5vdGlmeU1ncigpO24mJm4uZXZlbnRzRGlzY2FyZGVkKFt0XSwyKX1lLmluaXRpYWxpemU9ZnVuY3Rpb24oZSxuLHIsbyl7dC5pbml0aWFsaXplKGUsbixyfHxuZXcgcy5BUShlKSxvfHxuZXcgaS5mKGUpKX0sZS50cmFjaz1mdW5jdGlvbihyKXsoMCxhLkxtKShlLmdldFBlcmZNZ3IoKSwoZnVuY3Rpb24oKXtyZXR1cm4iQXBwSW5zaWdodHNDb3JlOnRyYWNrIn0pLChmdW5jdGlvbigpe251bGw9PT1yJiYobihyKSwoMCxjLl95KSgiSW52YWxpZCB0ZWxlbWV0cnkgaXRlbSIpKSxmdW5jdGlvbihlKXsoMCxjLmxlKShlLm5hbWUpJiYobihlKSwoMCxjLl95KSgidGVsZW1ldHJ5IG5hbWUgcmVxdWlyZWQiKSl9KHIpLHQudHJhY2socil9KSwoZnVuY3Rpb24oKXtyZXR1cm57aXRlbTpyfX0pLCFyLnN5bmMpfX0pKSxufXJldHVybigwLHIubmUpKHQsZSksdH0oby5BKX0sNzQ1MDI5OihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse0E6KCk9Pk59KTt2YXIgcj1uKDM0NTM2Miksbz1uKDgyNjQ1NCksaT1uKDkyMzgwNiksYT1uKDQ3NjkwNSkscz1uKDk0OTY3MCksdT1uKDMxNzE0MCksYz1uKDczMTc0MCksbD1uKDkyOTU0MSksSD1uKDQxODAwMSksZj1uKDY2MjM3MiksUz1uKDI5MjM5KSxkPW4oNzI5NjYxKSxwPW4oNTA0NTcpLEM9bigyMzU2MiksQT1uKDg1MTkzMCksaD1uKDM4Mjc3OCksdj0iUGx1Z2lucyBtdXN0IHByb3ZpZGUgaW5pdGlhbGl6ZSBtZXRob2QiLEk9IlNESyBpcyBzdGlsbCB1bmxvYWRpbmcuLi4iLFU9e2xvZ2dpbmdMZXZlbENvbnNvbGU6MX07ZnVuY3Rpb24gUihlLHQpe3JldHVybiBuZXcgdS5Kayh0KX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49ITE7cmV0dXJuKDAsbC50TykodCwoZnVuY3Rpb24odCl7aWYodD09PWUpcmV0dXJuIG49ITAsLTF9KSksbn12YXIgTj1mdW5jdGlvbiBlKCl7dmFyIHQsbixOLGcsSyx5LHcsYix4LEUsUCxPLGssTSxULEQsRixMLEIsaj0wOygwLGkuWikoZSx0aGlzLChmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dD0hMSxlLmNvbmZpZz0oMCxsLm1tKSghMCx7fSxVKSxlLmxvZ2dlcj1uZXcgZi5BUShlLmNvbmZpZyksZS5fZXh0ZW5zaW9ucz1bXSxNPW5ldyBwLlIsbj1bXSxOPW51bGwsZz1udWxsLEs9bnVsbCx5PW51bGwsdz1udWxsLHg9bnVsbCxiPVtdLEU9bnVsbCxQPW51bGwsTz1udWxsLGs9ITEsVD1udWxsLEQ9KDAsQy5KKSgiQUlCYXNlQ29yZSIsITApLEY9KDAsQS5ZKSgpLEI9bnVsbH1mdW5jdGlvbiBaKCl7cmV0dXJuKDAsYS5DRCkoeigpLGUuY29uZmlnLGUpfWZ1bmN0aW9uIFYodCxuKXt2YXIgcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10sbz17fTtyZXR1cm4oMCxsLnRPKShuLChmdW5jdGlvbihuKXsoKDAsbC5sZSkobil8fCgwLGwubGUpKG4uaW5pdGlhbGl6ZSkpJiYoMCxsLl95KSh2KTt2YXIgaT1uLnByaW9yaXR5LGE9bi5pZGVudGlmaWVyO24mJmkmJigoMCxsLmxlKShvW2ldKT9vW2ldPWE6KDAsZi5qVikoZSwiVHdvIGV4dGVuc2lvbnMgaGF2ZSBzYW1lIHByaW9yaXR5ICMiK2krIiAtICIrb1tpXSsiLCAiK2EpKSwoIWl8fGk8dCkmJnIucHVzaChuKX0pKSx7YWxsOm4sY29yZTpyfX0oZS5sb2dnZXIsZC5BdyxiKTt4PXIuY29yZSx3PW51bGw7dmFyIG89ci5hbGw7aWYoTz0oMCxsLkZMKSgoMCxkLkEwKShQLG8sdCxlKSksRSl7dmFyIGk9KDAsbC5VQSkobyxFKTstMSE9PWkmJm8uc3BsaWNlKGksMSksLTEhPT0oaT0oMCxsLlVBKSh4LEUpKSYmeC5zcGxpY2UoaSwxKSxFLl9zZXRRdWV1ZShPKX1lbHNlIEU9KDAsZC5jdCkoTyxlKTtvLnB1c2goRSkseC5wdXNoKEUpLGUuX2V4dGVuc2lvbnM9KDAscy5BQSkobyksRS5pbml0aWFsaXplKHQsZSxvKSwoMCxzLmJQKShaKCksbyksZS5fZXh0ZW5zaW9ucz0oMCxsLkZMKSgoMCxzLkFBKSh4fHxbXSkpLnNsaWNlKCksbiYmZnVuY3Rpb24odCl7dmFyIG49KDAsYS54eSkoeigpLGUpO2UuX3VwZGF0ZUhvb2smJiEwPT09ZS5fdXBkYXRlSG9vayhuLHQpfHxuLnByb2Nlc3NOZXh0KHQpfShuKX1mdW5jdGlvbiBYKHQpe3ZhciBuPW51bGwscj1udWxsO3JldHVybigwLGwudE8pKGUuX2V4dGVuc2lvbnMsKGZ1bmN0aW9uKGUpe2lmKGUuaWRlbnRpZmllcj09PXQmJmUhPT1FJiZlIT09TSlyZXR1cm4gcj1lLC0xfSkpLCFyJiZFJiYocj1FLmdldENoYW5uZWwodCkpLHImJihuPXtwbHVnaW46cixzZXRFbmFibGVkOmZ1bmN0aW9uKGUpeygwLHMuT1kpKHIpW2guQzBdPSFlfSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCxzLk9ZKShyKTtyZXR1cm4hZVtoLnZFXSYmIWVbaC5DMF19LHJlbW92ZTpmdW5jdGlvbih0LG4pe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbz1bcl07cShvLHtyZWFzb246MSxpc0FzeW5jOnR9LChmdW5jdGlvbih0KXt0JiZWKGUuY29uZmlnLHtyZWFzb246MzIscmVtb3ZlZDpvfSksbiYmbih0KX0pKX19KSxufWZ1bmN0aW9uIHooKXtpZighdyl7dmFyIHQ9KHh8fFtdKS5zbGljZSgpOy0xPT09KDAsbC5VQSkodCxNKSYmdC5wdXNoKE0pLHc9KDAsYS5qVikoKDAscy5BQSkodCksZS5jb25maWcsZSl9cmV0dXJuIHd9ZnVuY3Rpb24gcSh0LG4scil7aWYodCYmdC5sZW5ndGg+MCl7dmFyIG89KDAsYS5qVikodCxlLmNvbmZpZyxlKSxpPSgwLGEuQnQpKG8sZSk7aS5vbkNvbXBsZXRlKChmdW5jdGlvbigpe3ZhciBlPSExLG49W107KDAsbC50TykoYiwoZnVuY3Rpb24ocixvKXttKHIsdCk/ZT0hMDpuLnB1c2gocil9KSksYj1uO3ZhciBvPVtdO1AmJigoMCxsLnRPKShQLChmdW5jdGlvbihuLHIpe3ZhciBpPVtdOygwLGwudE8pKG4sKGZ1bmN0aW9uKG4pe20obix0KT9lPSEwOmkucHVzaChuKX0pKSxvLnB1c2goaSl9KSksUD1vKSxyJiZyKGUpfSkpLGkucHJvY2Vzc05leHQobil9ZWxzZSByKCExKX1mdW5jdGlvbiBKKCl7dmFyIHQ9ZS5sb2dnZXI/ZS5sb2dnZXIucXVldWU6W107dCYmKCgwLGwudE8pKHQsKGZ1bmN0aW9uKHQpe3ZhciBuPXtuYW1lOlR8fCJJbnRlcm5hbE1lc3NhZ2VJZDogIit0Lm1lc3NhZ2VJZCxpS2V5OmUuY29uZmlnLmluc3RydW1lbnRhdGlvbktleSx0aW1lOigwLGwuWTYpKG5ldyBEYXRlKSxiYXNlVHlwZTpmLmxRLmRhdGFUeXBlLGJhc2VEYXRhOnttZXNzYWdlOnQubWVzc2FnZX19O2UudHJhY2sobil9KSksdC5sZW5ndGg9MCl9ZnVuY3Rpb24gVyhlLHQsbixyKXtyZXR1cm4gRT9FLmZsdXNoKGUsdCxufHw2LHIpOih0JiZ0KCExKSwhMCl9ZnVuY3Rpb24gWSh0KXt2YXIgbj1lLmxvZ2dlcjtuPygwLGYua1ApKG4sMiw3Myx0KTooMCxsLl95KSh0KX1pKCksZS5pc0luaXRpYWxpemVkPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuaW5pdGlhbGl6ZT1mdW5jdGlvbihuLG8saSxhKXtrJiYoMCxsLl95KShJKSxlLmlzSW5pdGlhbGl6ZWQoKSYmKDAsbC5feSkoIkNvcmUgc2hvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBtb3JlIHRoYW4gb25jZSIpLG4mJiEoMCxsLmxlKShuLmluc3RydW1lbnRhdGlvbktleSl8fCgwLGwuX3kpKCJQbGVhc2UgcHJvdmlkZSBpbnN0cnVtZW50YXRpb24ga2V5IiksTj1hLGUuX25vdGlmaWNhdGlvbk1hbmFnZXI9YSxlLmNvbmZpZz1ufHx7fSxmdW5jdGlvbihlKXshMD09PWUuZGlzYWJsZURiZ0V4dCYmTCYmKE5baC5YUF0oTCksTD1udWxsKSxOJiYhTCYmITAhPT1lLmRpc2FibGVEYmdFeHQmJihMPSgwLFMucCkoZSksTltoLmRWXShMKSl9KG4pLGZ1bmN0aW9uKHQpeyF0LmVuYWJsZVBlcmZNZ3ImJksmJihLPW51bGwpLHQuZW5hYmxlUGVyZk1nciYmKDAsbC5zTykoZS5jb25maWcsImNyZWF0ZVBlcmZNZ3IiLFIpfShuKSxuLmV4dGVuc2lvbnM9KDAsbC5sZSkobi5leHRlbnNpb25zKT9bXTpuLmV4dGVuc2lvbnMsZnVuY3Rpb24oZSl7KDAsbC5xSykoZSxILkYpLk5vdGlmaWNhdGlvbk1hbmFnZXI9Tn0obiksaSYmKGUubG9nZ2VyPWkpLChiPVtdKS5wdXNoLmFwcGx5KGIsKDAsci4kaCkoKDAsci4kaCkoW10sbywhMSksbi5leHRlbnNpb25zLCExKSksUD0obnx8e30pLmNoYW5uZWxzLFYobixudWxsKSxPJiYwIT09Ty5sZW5ndGh8fCgwLGwuX3kpKCJObyBjaGFubmVscyBhdmFpbGFibGUiKSx0PSEwLGUucmVsZWFzZVF1ZXVlKCl9LGUuZ2V0VHJhbnNtaXNzaW9uQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gTyYmKDAsbC50TykoTywoZnVuY3Rpb24odCl7ZS5wdXNoKHQucXVldWUpfSkpLCgwLGwuRkwpKGUpfSxlLnRyYWNrPWZ1bmN0aW9uKHQpeygwLGwuc08pKHQsSC56LGUuY29uZmlnLmluc3RydW1lbnRhdGlvbktleSxudWxsLGwuRiksKDAsbC5zTykodCwidGltZSIsKDAsbC5ZNikobmV3IERhdGUpLG51bGwsbC5GKSwoMCxsLnNPKSh0LCJ2ZXIiLCI0LjAiLG51bGwsbC5sZSksIWsmJmUuaXNJbml0aWFsaXplZCgpP1ooKS5wcm9jZXNzTmV4dCh0KTpuLnB1c2godCl9LGUuZ2V0UHJvY2Vzc1RlbENvbnRleHQ9WixlLmdldE5vdGlmeU1ncj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBOfHwoTj0oMCxvLnB1KSgoKHQ9e30pW2guZFZdPWZ1bmN0aW9uKGUpe30sdFtoLlhQXT1mdW5jdGlvbihlKXt9LHRbaC5lT109ZnVuY3Rpb24oZSl7fSx0W2guSDRdPWZ1bmN0aW9uKGUsdCl7fSx0W2guclhdPWZ1bmN0aW9uKGUsdCl7fSx0KSksZS5fbm90aWZpY2F0aW9uTWFuYWdlcj1OKSxOfSxlW2guZFZdPWZ1bmN0aW9uKGUpe04mJk5baC5kVl0oZSl9LGVbaC5YUF09ZnVuY3Rpb24oZSl7TiYmTltoLlhQXShlKX0sZS5nZXRDb29raWVNZ3I9ZnVuY3Rpb24oKXtyZXR1cm4geXx8KHk9KDAsYy5OeikoZS5jb25maWcsZS5sb2dnZXIpKSx5fSxlLnNldENvb2tpZU1ncj1mdW5jdGlvbihlKXt5PWV9LGUuZ2V0UGVyZk1ncj1mdW5jdGlvbigpe3JldHVybiBnfHxLfHxlLmNvbmZpZyYmZS5jb25maWcuZW5hYmxlUGVyZk1nciYmKDAsbC5tZikoZS5jb25maWcuY3JlYXRlUGVyZk1ncikmJihLPWUuY29uZmlnLmNyZWF0ZVBlcmZNZ3IoZSxlLmdldE5vdGlmeU1ncigpKSksZ3x8S3x8KDAsdS5qNSkoKX0sZS5zZXRQZXJmTWdyPWZ1bmN0aW9uKGUpe2c9ZX0sZS5ldmVudENudD1mdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aH0sZS5yZWxlYXNlUXVldWU9ZnVuY3Rpb24oKXtpZih0JiZuLmxlbmd0aD4wKXt2YXIgZT1uO249W10sKDAsbC50TykoZSwoZnVuY3Rpb24oZSl7WigpLnByb2Nlc3NOZXh0KGUpfSkpfX0sZS5wb2xsSW50ZXJuYWxMb2dzPWZ1bmN0aW9uKHQpe1Q9dHx8bnVsbDt2YXIgbj1lLmNvbmZpZy5kaWFnbm9zdGljTG9nSW50ZXJ2YWw7cmV0dXJuIG4mJm4+MHx8KG49MWU0KSxqJiZjbGVhckludGVydmFsKGopLGo9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7SigpfSksbil9LGUuc3RvcFBvbGxpbmdJbnRlcm5hbExvZ3M9ZnVuY3Rpb24oKXtqJiYoY2xlYXJJbnRlcnZhbChqKSxqPTAsSigpKX0sKDAsbC5WYikoZSwoZnVuY3Rpb24oKXtyZXR1cm4gTX0pLFsiYWRkVGVsZW1ldHJ5SW5pdGlhbGl6ZXIiXSksZS51bmxvYWQ9ZnVuY3Rpb24obixyLG8pe3ZvaWQgMD09PW4mJihuPSEwKSx0fHwoMCxsLl95KSgiU0RLIGlzIG5vdCBpbml0aWFsaXplZCIpLGsmJigwLGwuX3kpKEkpO3ZhciBzPXtyZWFzb246NTAsaXNBc3luYzpuLGZsdXNoQ29tcGxldGU6ITF9LHU9KDAsYS5CdCkoeigpLGUpO2Z1bmN0aW9uIGModCl7cy5mbHVzaENvbXBsZXRlPXQsaz0hMCxGLnJ1bih1LHMpLGUuc3RvcFBvbGxpbmdJbnRlcm5hbExvZ3MoKSx1LnByb2Nlc3NOZXh0KHMpfXUub25Db21wbGV0ZSgoZnVuY3Rpb24oKXtpKCksciYmcihzKX0pLGUpLFcobixjLDYsbyl8fGMoITEpfSxlLmdldFBsdWdpbj1YLGUuYWRkUGx1Z2luPWZ1bmN0aW9uKHQsbixyLG8pe2lmKCF0KXJldHVybiBvJiZvKCExKSx2b2lkIFkodik7dmFyIGk9WCh0LmlkZW50aWZpZXIpO2lmKGkmJiFuKXJldHVybiBvJiZvKCExKSx2b2lkIFkoIlBsdWdpbiBbIit0LmlkZW50aWZpZXIrIl0gaXMgYWxyZWFkeSBsb2FkZWQhIik7dmFyIGE9e3JlYXNvbjoxNn07ZnVuY3Rpb24gcyhuKXtiLnB1c2godCksYS5hZGRlZD1bdF0sVihlLmNvbmZpZyxhKSxvJiZvKCEwKX1pZihpKXt2YXIgdT1baS5wbHVnaW5dO3EodSx7cmVhc29uOjIsaXNBc3luYzohIXJ9LChmdW5jdGlvbihlKXtlPyhhLnJlbW92ZWQ9dSxhLnJlYXNvbnw9MzIscygpKTpvJiZvKCExKX0pKX1lbHNlIHMoKX0sZS5ldnROYW1lc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gRH0sZS5mbHVzaD1XLGUuZ2V0VHJhY2VDdHg9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ8fChCPSgwLHMuWW4pKCkpLEJ9LGUuc2V0VHJhY2VDdHg9ZnVuY3Rpb24oZSl7Qj1lfHxudWxsfSwoMCxsLk9pKShlLCJhZGRVbmxvYWRDYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSwiYWRkIil9KSl9fSw3NjY4NjQ6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7aTooKT0+Y30pO3ZhciByPW4oOTIzODA2KSxvPW4oNDc2OTA1KSxpPW4oOTI5NTQxKSxhPW4oNDE4MDAxKSxzPW4oODUxOTMwKSx1PW4oMzgyNzc4KSxjPWZ1bmN0aW9uIGUoKXt2YXIgdCxuLGMsbCxILGY9dGhpcztmdW5jdGlvbiBTKGUpe3ZvaWQgMD09PWUmJihlPW51bGwpO3ZhciB0PWU7aWYoIXQpe3ZhciByPW58fCgwLG8uQ0QpKG51bGwse30sZi5jb3JlKTt0PWMmJmMuZ2V0UGx1Z2luP3IuY3JlYXRlTmV3KG51bGwsYy5nZXRQbHVnaW4pOnIuY3JlYXRlTmV3KG51bGwsYyl9cmV0dXJuIHR9ZnVuY3Rpb24gZChlLHQscil7ZSYmKDAsaS5zTykoZSxhLkYsW10sbnVsbCxpLmxlKSwhciYmdCYmKHI9dC5nZXRQcm9jZXNzVGVsQ29udGV4dCgpLmdldE5leHQoKSk7dmFyIHM9YztjJiZjLmdldFBsdWdpbiYmKHM9Yy5nZXRQbHVnaW4oKSksZi5jb3JlPXQsbj0oMCxvLkNEKShyLGUsdCxzKX1mdW5jdGlvbiBwKCl7dD0hMSxmLmNvcmU9bnVsbCxuPW51bGwsYz1udWxsLEg9W10sbD0oMCxzLlkpKCl9cCgpLCgwLHIuWikoZSxmLChmdW5jdGlvbihlKXtlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSxuLHIsbyl7ZChlLG4sbyksdD0hMH0sZS50ZWFyZG93bj1mdW5jdGlvbih0LG4pe3ZhciByPWUuY29yZTtpZihyJiYoIXR8fHI9PT10LmNvcmUoKSkpe3ZhciBhLHM9ITEsZj10fHwoMCxvLkJ0KShudWxsLHIsYyYmYy5nZXRQbHVnaW4/Yy5nZXRQbHVnaW4oKTpjKSxTPW58fHtyZWFzb246MCxpc0FzeW5jOiExfTtyZXR1cm4gZVt1LkhvXSYmITA9PT1lW3UuSG9dKGYsUyxkKT9hPSEwOmQoKSxhfWZ1bmN0aW9uIGQoKXtzfHwocz0hMCxsLnJ1bihmLG4pLCgwLGkudE8pKEgsKGZ1bmN0aW9uKGUpe2Uucm0oKX0pKSxIPVtdLCEwPT09YSYmZi5wcm9jZXNzTmV4dChTKSxwKCkpfX0sZS51cGRhdGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lLmNvcmU7aWYociYmKCF0fHxyPT09dC5jb3JlKCkpKXt2YXIgaSxhPSExLHM9dHx8KDAsby54eSkobnVsbCxyLGMmJmMuZ2V0UGx1Z2luP2MuZ2V0UGx1Z2luKCk6YyksdT1ufHx7cmVhc29uOjB9O3JldHVybiBlLl9kb1VwZGF0ZSYmITA9PT1lLl9kb1VwZGF0ZShzLHUsbCk/aT0hMDpsKCksaX1mdW5jdGlvbiBsKCl7YXx8KGE9ITAsZChzLmdldENmZygpLHMuY29yZSgpLHMuZ2V0TmV4dCgpKSl9fSxlLl9hZGRIb29rPWZ1bmN0aW9uKGUpe2UmJigoMCxpLmtKKShlKT9IPUguY29uY2F0KGUpOkgucHVzaChlKSl9LCgwLGkuT2kpKGUsIl9hZGRVbmxvYWRDYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSwiYWRkIil9KSksZi5kaWFnTG9nPWZ1bmN0aW9uKGUpe3JldHVybiBTKGUpLmRpYWdMb2coKX0sZlt1LlZyXT1mdW5jdGlvbigpe3JldHVybiB0fSxmLnNldEluaXRpYWxpemVkPWZ1bmN0aW9uKGUpe3Q9ZX0sZlt1LkVsXT1mdW5jdGlvbihlKXtjPWV9LGYucHJvY2Vzc05leHQ9ZnVuY3Rpb24oZSx0KXt0P3QucHJvY2Vzc05leHQoZSk6YyYmKDAsaS5tZikoYy5wcm9jZXNzVGVsZW1ldHJ5KSYmYy5wcm9jZXNzVGVsZW1ldHJ5KGUsbnVsbCl9LGYuX2dldFRlbEN0eD1TfX0sNzI5NjYxOihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse0F3OigpPT5zLGN0OigpPT5jLEEwOigpPT5sfSk7dmFyIHI9big5Mjk1NDEpLG89bigzODI3NzgpLGk9big0NzY5MDUpLGE9big5NDk2NzApLHM9NTAwO2Z1bmN0aW9uIHUoZSx0LG4sbyl7dCYmKDAsci5rSikodCkmJnQubGVuZ3RoPjAmJih0PXQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wcmlvcml0eS10LnByaW9yaXR5fSkpLCgwLHIudE8pKHQsKGZ1bmN0aW9uKGUpe2UucHJpb3JpdHk8cyYmKDAsci5feSkoIkNoYW5uZWwgaGFzIGludmFsaWQgcHJpb3JpdHkgLSAiK2UuaWRlbnRpZmllcil9KSksZS5wdXNoKHtxdWV1ZTooMCxyLkZMKSh0KSxjaGFpbjooMCxpLmpWKSh0LG4sbyl9KSl9ZnVuY3Rpb24gYyhlLHQpe3ZhciBuO2Z1bmN0aW9uIHUoKXtyZXR1cm4oMCxpLkNEKShudWxsLHQuY29uZmlnLHQsbnVsbCl9ZnVuY3Rpb24gYyhlLHQsbixvKXt2YXIgaT1lP2UubGVuZ3RoKzE6MTtmdW5jdGlvbiBhKCl7MD09PS0taSYmKG8mJm8oKSxvPW51bGwpfWk+MCYmKDAsci50TykoZSwoZnVuY3Rpb24oZSl7aWYoZSYmZS5xdWV1ZS5sZW5ndGg+MCl7dmFyIHI9ZS5jaGFpbixvPXQuY3JlYXRlTmV3KHIpO28ub25Db21wbGV0ZShhKSxuKG8pfWVsc2UgaS0tfSkpLGEoKX12YXIgbD0hMSxIPShuPXtpZGVudGlmaWVyOiJDaGFubmVsQ29udHJvbGxlclBsdWdpbiIscHJpb3JpdHk6cyxpbml0aWFsaXplOmZ1bmN0aW9uKHQsbixvLHMpe2w9ITAsKDAsci50TykoZSwoZnVuY3Rpb24oZSl7ZSYmZS5xdWV1ZS5sZW5ndGg+MCYmKDAsYS5iUCkoKDAsaS5DRCkoZS5jaGFpbix0LG4pLG8pfSkpfSxpc0luaXRpYWxpemVkOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHByb2Nlc3NUZWxlbWV0cnk6ZnVuY3Rpb24odCxuKXtjKGUsbnx8dSgpLChmdW5jdGlvbihlKXtlW28uWl9dKHQpfSksKGZ1bmN0aW9uKCl7bltvLlpfXSh0KX0pKX0sdXBkYXRlOmZ1bmN0aW9uKHQsbil7dmFyIHI9bnx8e3JlYXNvbjowfTtyZXR1cm4gYyhlLHQsKGZ1bmN0aW9uKGUpe2Vbby5aX10ocil9KSwoZnVuY3Rpb24oKXt0W28uWl9dKHIpfSkpLCEwfX0sbltvLm5FXT1mdW5jdGlvbigpe2MoZSx1KCksKGZ1bmN0aW9uKGUpe2UuaXRlcmF0ZSgoZnVuY3Rpb24oZSl7ZVtvLm5FXSYmZVtvLm5FXSgpfSkpfSksbnVsbCl9LG5bby5NZl09ZnVuY3Rpb24oKXtjKGUsdSgpLChmdW5jdGlvbihlKXtlLml0ZXJhdGUoKGZ1bmN0aW9uKGUpe2Vbby5NZl0mJmVbby5NZl0oKX0pKX0pLG51bGwpfSxuW28udkVdPWZ1bmN0aW9uKHQsbil7dmFyIHI9bnx8e3JlYXNvbjowLGlzQXN5bmM6ITF9O3JldHVybiBjKGUsdCwoZnVuY3Rpb24oZSl7ZVtvLlpfXShyKX0pLChmdW5jdGlvbigpe3Rbby5aX10ociksbD0hMX0pKSwhMH0sbi5nZXRDaGFubmVsPWZ1bmN0aW9uKHQpe3ZhciBuPW51bGw7cmV0dXJuIGUmJmUubGVuZ3RoPjAmJigwLHIudE8pKGUsKGZ1bmN0aW9uKGUpe2lmKGUmJmUucXVldWUubGVuZ3RoPjAmJigoMCxyLnRPKShlLnF1ZXVlLChmdW5jdGlvbihlKXtpZihlLmlkZW50aWZpZXI9PT10KXJldHVybiBuPWUsLTF9KSksbikpcmV0dXJuLTF9KSksbn0sbi5mbHVzaD1mdW5jdGlvbih0LG4scixvKXt2YXIgaT0xLGE9ITEscz1udWxsO2Z1bmN0aW9uIGwoKXtpLS0sYSYmMD09PWkmJihzJiYoY2xlYXJUaW1lb3V0KHMpLHM9bnVsbCksbiYmbihhKSxuPW51bGwpfXJldHVybiBvPW98fDVlMyxjKGUsdSgpLChmdW5jdGlvbihlKXtlLml0ZXJhdGUoKGZ1bmN0aW9uKGUpe2lmKGUuZmx1c2gpe2krKzt2YXIgbj0hMTtlLmZsdXNoKHQsKGZ1bmN0aW9uKCl7bj0hMCxsKCl9KSxyKXx8bnx8KHQmJm51bGw9PXM/cz1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3M9bnVsbCxsKCl9KSxvKTpsKCkpfX0pKX0pLChmdW5jdGlvbigpe2E9ITAsbCgpfSkpLCEwfSxuLl9zZXRRdWV1ZT1mdW5jdGlvbih0KXtlPXR9LG4pO3JldHVybiBIfWZ1bmN0aW9uIGwoZSx0LG4sbyl7dmFyIGk9W107aWYoZSYmKDAsci50TykoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHUoaSxlLG4sbyl9KSksdCl7dmFyIGE9W107KDAsci50TykodCwoZnVuY3Rpb24oZSl7ZS5wcmlvcml0eT5zJiZhLnB1c2goZSl9KSksdShpLGEsbixvKX1yZXR1cm4gaX19LDQxODAwMTooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHt6OigpPT5yLEY6KCk9Pm99KTt2YXIgcj0iaUtleSIsbz0iZXh0ZW5zaW9uQ29uZmlnIn0sNzMxNzQwOihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse2tqOigpPT5DLEpQOigpPT5oLE56OigpPT52LHA3OigpPT5JLFVZOigpPT5LfSk7dmFyIHI9big4MDMxNDUpLG89big5Mjk1NDEpLGk9bigzODI3NzgpLGE9big2NjIzNzIpLHM9InRvR01UU3RyaW5nIix1PSJ0b1VUQ1N0cmluZyIsYz0iZXhwaXJlcyIsbD1udWxsLEg9bnVsbCxmPW51bGwsUz0oMCxyLk1lKSgpLGQ9e30scD17fTtmdW5jdGlvbiBDKGUsdCl7dmFyIG49di5fY2tNZ3J8fHAuX2NrTWdyO3JldHVybiBufHwobj12Ll9ja01ncj12KGUsdCkscC5fY2tNZ3I9biksbn1mdW5jdGlvbiBBKGUpe3JldHVybiFlfHxlLmlzRW5hYmxlZCgpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbjtpZihlKW49ZS5nZXRDb29raWVNZ3IoKTtlbHNlIGlmKHQpe3ZhciByPXQuY29va2llQ2ZnO249ci5fY2tNZ3I/ci5fY2tNZ3I6dih0KX1yZXR1cm4gbnx8KG49Qyh0LChlfHx7fSkubG9nZ2VyKSksbn1mdW5jdGlvbiB2KGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb29raWVDZmc9ZS5jb29raWVDZmd8fHt9O2lmKCgwLG8uc08pKHQsImRvbWFpbiIsZS5jb29raWVEb21haW4sby5CWCxvLmxlKSwoMCxvLnNPKSh0LCJwYXRoIixlLmNvb2tpZVBhdGh8fCIvIixudWxsLG8ubGUpLCgwLG8ubGUpKHQuZW5hYmxlZCkpe3ZhciBuPXZvaWQgMDsoMCxvLm84KShlLmlzQ29va2llVXNlRGlzYWJsZWQpfHwobj0hZS5pc0Nvb2tpZVVzZURpc2FibGVkKSwoMCxvLm84KShlLmRpc2FibGVDb29raWVzVXNhZ2UpfHwobj0hZS5kaXNhYmxlQ29va2llc1VzYWdlKSx0LmVuYWJsZWQ9bn1yZXR1cm4gdH0oZXx8cCksYT1uLnBhdGh8fCIvIixsPW4uZG9tYWluLGY9ITEhPT1uLmVuYWJsZWQsUz17aXNFbmFibGVkOmZ1bmN0aW9uKCl7dmFyIGU9ZiYmSSh0KSxuPXAuX2NrTWdyO3JldHVybiBlJiZuJiZTIT09biYmKGU9QShuKSksZX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXtmPSExIT09ZX0sc2V0OmZ1bmN0aW9uKGUsdCxmLGQscCl7dmFyIEM9ITE7aWYoQShTKSl7dmFyIGg9e30sdj0oMCxvLm5kKSh0fHxpLlNNKSxJPXYuaW5kZXhPZigiOyIpO2lmKC0xIT09SSYmKHY9KDAsby5uZCkodC5zdWJzdHJpbmcoMCxJKSksaD1VKHQuc3Vic3RyaW5nKEkrMSkpKSwoMCxvLnNPKShoLCJkb21haW4iLGR8fGwsby5mUSxvLm84KSwhKDAsby5sZSkoZikpe3ZhciBOPSgwLHIudzEpKCk7aWYoKDAsby5vOCkoaC5leHBpcmVzKSl7dmFyIHk9KDAsby5tNikoKSsxZTMqZjtpZih5PjApe3ZhciB3PW5ldyBEYXRlO3cuc2V0VGltZSh5KSwoMCxvLnNPKShoLGMsUih3LE4/czp1KXx8Uih3LE4/czp1KXx8aS5TTSxvLmZRKX19Tnx8KDAsby5zTykoaCwibWF4LWFnZSIsaS5TTStmLG51bGwsby5vOCl9dmFyIGI9KDAsci5rJCkoKTtiJiYiaHR0cHM6Ij09PWIucHJvdG9jb2wmJigoMCxvLnNPKShoLCJzZWN1cmUiLG51bGwsbnVsbCxvLm84KSxudWxsPT09SCYmKEg9IUsoKCgwLHIualcpKCl8fHt9KS51c2VyQWdlbnQpKSxIJiYoMCxvLnNPKShoLCJTYW1lU2l0ZSIsIk5vbmUiLG51bGwsby5vOCkpLCgwLG8uc08pKGgsInBhdGgiLHB8fGEsbnVsbCxvLm84KSwobi5zZXRDb29raWV8fGcpKGUsbSh2LGgpKSxDPSEwfXJldHVybiBDfSxnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5TTTtyZXR1cm4gQShTKSYmKHQ9KG4uZ2V0Q29va2llfHxOKShlKSksdH0sZGVsOmZ1bmN0aW9uKGUsdCl7dmFyIG49ITE7cmV0dXJuIEEoUykmJihuPVMucHVyZ2UoZSx0KSksbn0scHVyZ2U6ZnVuY3Rpb24oZSxvKXt2YXIgYSxzPSExO2lmKEkodCkpe3ZhciB1PSgoYT17fSkucGF0aD1vfHwiLyIsYS5leHBpcmVzPSJUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAxIEdNVCIsYSk7KDAsci53MSkoKXx8KHVbIm1heC1hZ2UiXT0iMCIpLChuLmRlbENvb2tpZXx8ZykoZSxtKGkuU00sdSkpLHM9ITB9cmV0dXJuIHN9fTtyZXR1cm4gUy5fY2tNZ3I9UyxTfWZ1bmN0aW9uIEkoZSl7aWYobnVsbD09PWwpe2w9ITE7dHJ5e2w9dm9pZCAwIT09KFN8fHt9KS5jb29raWV9Y2F0Y2godCl7KDAsYS5rUCkoZSwyLDY4LCJDYW5ub3QgYWNjZXNzIGRvY3VtZW50LmNvb2tpZSAtICIrKDAsby5qaikodCkse2V4Y2VwdGlvbjooMCxyLmVVKSh0KX0pfX1yZXR1cm4gbH1mdW5jdGlvbiBVKGUpe3ZhciB0PXt9O2lmKGUmJmUubGVuZ3RoKXt2YXIgbj0oMCxvLm5kKShlKS5zcGxpdCgiOyIpOygwLG8udE8pKG4sKGZ1bmN0aW9uKGUpe2lmKGU9KDAsby5uZCkoZXx8aS5TTSkpe3ZhciBuPWUuaW5kZXhPZigiPSIpOy0xPT09bj90W2VdPW51bGw6dFsoMCxvLm5kKShlLnN1YnN0cmluZygwLG4pKV09KDAsby5uZCkoZS5zdWJzdHJpbmcobisxKSl9fSkpfXJldHVybiB0fWZ1bmN0aW9uIFIoZSx0KXtyZXR1cm4oMCxvLm1mKShlW3RdKT9lW3RdKCk6bnVsbH1mdW5jdGlvbiBtKGUsdCl7dmFyIG49ZXx8aS5TTTtyZXR1cm4oMCxvLnJXKSh0LChmdW5jdGlvbihlLHQpe24rPSI7ICIrZSsoKDAsby5sZSkodCk/aS5TTToiPSIrdCl9KSksbn1mdW5jdGlvbiBOKGUpe3ZhciB0PWkuU007aWYoUyl7dmFyIG49Uy5jb29raWV8fGkuU007ZiE9PW4mJihkPVUobiksZj1uKSx0PSgwLG8ubmQpKGRbZV18fGkuU00pfXJldHVybiB0fWZ1bmN0aW9uIGcoZSx0KXtTJiYoUy5jb29raWU9ZSsiPSIrdCl9ZnVuY3Rpb24gSyhlKXtyZXR1cm4hISgwLG8uSEQpKGUpJiYoISghKDAsby5fUSkoZSwiQ1BVIGlQaG9uZSBPUyAxMiIpJiYhKDAsby5fUSkoZSwiaVBhZDsgQ1BVIE9TIDEyIikpfHwoISEoKDAsby5fUSkoZSwiTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNCIpJiYoMCxvLl9RKShlLCJWZXJzaW9uLyIpJiYoMCxvLl9RKShlLCJTYWZhcmkiKSl8fCghKCEoMCxvLl9RKShlLCJNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE0Iil8fCEoMCxvLklkKShlLCJBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIikpfHwoISghKDAsby5fUSkoZSwiQ2hyb21lLzUiKSYmISgwLG8uX1EpKGUsIkNocm9tZS82IikpfHwoISghKDAsby5fUSkoZSwiVW5yZWFsRW5naW5lIil8fCgwLG8uX1EpKGUsIkNocm9tZSIpKXx8ISghKDAsby5fUSkoZSwiVUNCcm93c2VyLzEyIikmJiEoMCxvLl9RKShlLCJVQ0Jyb3dzZXIvMTEiKSkpKSkpKX19LDY4NTU4MzooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtHVzooKT0+ZixKajooKT0+UyxETzooKT0+ZH0pO3ZhciByLG89big4MjY0NTQpLGk9big3MzE3NDApLGE9big4MDMxNDUpLHM9big5Mjk1NDEpLHU9big3MDYwMzgpLGM9big3NTU5OTIpLGw9bigzODI3NzgpLEg9bnVsbDtmdW5jdGlvbiBmKCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZShDLChmdW5jdGlvbihlKXt2YXIgdD0wfCgwLGMuYXopKDE1KTtyZXR1cm4oIngiPT09ZT90OjMmdHw4KS50b1N0cmluZygxNil9KSl9ZnVuY3Rpb24gUygpe3ZhciBlPSgwLGEucikoKTtyZXR1cm4gZSYmZS5ub3c/ZS5ub3coKTooMCxzLm02KSgpfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGUsdD1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiXSxuPWwuU00scj0wO3I8NDtyKyspbis9dFsxNSYoZT0oMCxjLl9sKSgpKV0rdFtlPj40JjE1XSt0W2U+PjgmMTVdK3RbZT4+MTImMTVdK3RbZT4+MTYmMTVdK3RbZT4+MjAmMTVdK3RbZT4+MjQmMTVdK3RbZT4+MjgmMTVdO3ZhciBvPXRbOCsoMyYoMCxjLl9sKSgpKXwwXTtyZXR1cm4gbi5zdWJzdHIoMCw4KStuLnN1YnN0cig5LDQpKyI0IituLnN1YnN0cigxMywzKStvK24uc3Vic3RyKDE2LDMpK24uc3Vic3RyKDE5LDEyKX12YXIgcD17X2NhblVzZUNvb2tpZXM6dm9pZCAwLGlzVHlwZW9mOnMuWW0saXNVbmRlZmluZWQ6cy5vOCxpc051bGxPclVuZGVmaW5lZDpzLmxlLGhhc093blByb3BlcnR5OnMubnIsaXNGdW5jdGlvbjpzLm1mLGlzT2JqZWN0OnMuS24saXNEYXRlOnMuSl8saXNBcnJheTpzLmtKLGlzRXJyb3I6cy5WWixpc1N0cmluZzpzLkhELGlzTnVtYmVyOnMuaGosaXNCb29sZWFuOnMuam4sdG9JU09TdHJpbmc6cy5ZNixhcnJGb3JFYWNoOnMudE8sYXJySW5kZXhPZjpzLlVBLGFyck1hcDpzLk1yLGFyclJlZHVjZTpzLlh6LHN0clRyaW06cy5uZCxvYmpDcmVhdGU6by5wdSxvYmpLZXlzOnMuRlksb2JqRGVmaW5lQWNjZXNzb3JzOnMubF8sYWRkRXZlbnRIYW5kbGVyOnUuSWIsZGF0ZU5vdzpzLm02LGlzSUU6YS53MSxkaXNhYmxlQ29va2llczpmdW5jdGlvbigpe0EoKS5zZXRFbmFibGVkKCExKX0sbmV3R3VpZDpmLHBlcmZOb3c6UyxuZXdJZDpjLnBaLHJhbmRvbVZhbHVlOmMuYXoscmFuZG9tMzI6Yy5fbCxtd2NSYW5kb21TZWVkOmMuQ04sbXdjUmFuZG9tMzI6Yy5GNixnZW5lcmF0ZVczQ0lkOmR9LEM9L1t4eV0vZzt1LnBaLHUucFosdS5wRCx1LnBEO2Z1bmN0aW9uIEEoZSx0KXt2YXIgbj0oMCxpLmtqKShlLHQpLG89cC5fY2FuVXNlQ29va2llcztyZXR1cm4gbnVsbD09PUgmJihIPVtdLHI9bywoMCxzLmxfKShwLCJfY2FuVXNlQ29va2llcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSwoZnVuY3Rpb24oZSl7cj1lLCgwLHMudE8pKEgsKGZ1bmN0aW9uKHQpe3Quc2V0RW5hYmxlZChlKX0pKX0pKSksLTE9PT0oMCxzLlVBKShILG4pJiZILnB1c2gobiksKDAscy5qbikobykmJm4uc2V0RW5hYmxlZChvKSwoMCxzLmpuKShyKSYmbi5zZXRFbmFibGVkKHIpLG59fSwyMzU2MjooZSx0LG4pPT57InVzZSBzdHJpY3QiO24uZCh0LHtKOigpPT5mLEs6KCk9PlN9KTt2YXIgcj1uKDIyMTkwOCksbz1uKDkyOTU0MSksaT1uKDc1NTk5MiksYT1yLlJKLHM9IjIuOC40Iix1PSIuIisoMCxpLnBaKSg2KSxjPTA7ZnVuY3Rpb24gbChlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9ZnVuY3Rpb24gSChlLHQpe3ZhciBuPXRbZS5pZF07aWYoIW4pe249e307dHJ5e2wodCkmJihmdW5jdGlvbihlLHQsbil7aWYoYSl0cnl7cmV0dXJuIGEoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksITB9Y2F0Y2goZSl7fXJldHVybiExfSh0LGUuaWQsbil8fCh0W2UuaWRdPW4pKX1jYXRjaChlKXt9fXJldHVybiBufWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLCgwLG8uR2YpKGUrYysrKyh0PyIuMi44LjQiOiIiKSt1KX1mdW5jdGlvbiBTKGUpe3ZhciB0PXtpZDpmKCJfYWlEYXRhLSIrKGV8fCIiKSsiLiIrcyksYWNjZXB0OmZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSxnZXQ6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIGE9ZVt0LmlkXTtyZXR1cm4gYT9hWygwLG8uR2YpKG4pXTooaSYmKChhPUgodCxlKSlbKDAsby5HZikobildPXIpLHIpfSxraWxsOmZ1bmN0aW9uKGUsdCl7aWYoZSYmZVt0XSl0cnl7ZGVsZXRlIGVbdF19Y2F0Y2goZSl7fX19O3JldHVybiB0fX0sMjkyMzk6KGUsdCxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQodCx7ajooKT0+dSxwOigpPT5jfSk7dmFyIHIsbz1uKDgwMzE0NSksaT1bImV2ZW50c1NlbnQiLCJldmVudHNEaXNjYXJkZWQiLCJldmVudHNTZW5kUmVxdWVzdCIsInBlcmZFdmVudCJdLGE9bnVsbDtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLHI9dSh0KTtpZihyKXt2YXIgbz1yLmxpc3RlbmVyO28mJm9bZV0mJm9bZV0uYXBwbHkobyxuKX19fWZ1bmN0aW9uIHUoZSl7dmFyIHQsbj1hO3JldHVybiBufHwhMD09PWUuZGlzYWJsZURiZ0V4dHx8KG49YXx8KCh0PSgwLG8uYTgpKCJNaWNyb3NvZnQiKSkmJihhPXQuQXBwbGljYXRpb25JbnNpZ2h0cyksYSkpLG4/bi5DaHJvbWVEYmdFeHQ6bnVsbH1mdW5jdGlvbiBjKGUpe2lmKCFyKXtyPXt9O2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXJbaVt0XV09cyhpW3RdLGUpfXJldHVybiByfX0sNjYyMzcyOihlLHQsbik9PnsidXNlIHN0cmljdCI7bi5kKHQse2xROigpPT5sLHZIOigpPT5ILEFROigpPT5mLGtQOigpPT5kLGpWOigpPT5wfSk7dmFyIHI9big4MDMxNDUpLG89big5MjM4MDYpLGk9big5Mjk1NDEpLGE9bigyOTIzOSkscz1uKDM4Mjc3OCk7ZnVuY3Rpb24gdShlKXtyZXR1cm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.zianet.com/pipermail/nmythserv/attachments/20220701/6677b16a/attachment-0001.html>
More information about the Nmythserv
mailing list