<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Lyvette,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
We definitely missed you at the meeting on Saturday! I understand you are a bit busy, to say the least. Let's schedule a time to talk of the list at some point this week. Please email me at goharriet00@hotmail.com and let me know how your schedule looks. </div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Looking forward to hearing from you!</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Harriet</div>
<div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> KeyStoneChapter <keystonechapter-bounces@nfbnet.org> on behalf of LyVette Byrd via KeyStoneChapter <keystonechapter@nfbnet.org><br>
<b>Sent:</b> Monday, October 11, 2021 12:32 PM<br>
<b>To:</b> David Andrews via KeystoneChapter <keystonechapter@nfbnet.org><br>
<b>Cc:</b> LyVette Byrd <lyvettebyrd.howrc@gmail.com><br>
<b>Subject:</b> [KeyStoneChapter] Believe You Can 2021 and T shirt</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>Good morning, I was not able to attend the in person meeting this past weekend. I will try for November 6, 2021. While I have already registered and paid for the PA Conference I am trying to secure support for my disabled son that has recently come to
 live with me. If for any reason I can not secure support to attend the conference can I transfer my registration to someone in need? Please advise. Also, can the shirt I purchased be sent to me please and thank you.</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Mon, Oct 11, 2021 at 8:02 AM <<a href="mailto:keystonechapter-request@nfbnet.org">keystonechapter-request@nfbnet.org</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
Send KeyStoneChapter mailing list submissions to<br>
        <a href="mailto:keystonechapter@nfbnet.org" target="_blank">keystonechapter@nfbnet.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://nfbnet.org/mailman/listinfo/keystonechapter_nfbnet.org" rel="noreferrer" target="_blank">
http://nfbnet.org/mailman/listinfo/keystonechapter_nfbnet.org</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:keystonechapter-request@nfbnet.org" target="_blank">keystonechapter-request@nfbnet.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:keystonechapter-owner@nfbnet.org" target="_blank">keystonechapter-owner@nfbnet.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of KeyStoneChapter digest..."<br>
Today's Topics:<br>
<br>
   1. Keystone Chapter Meeting Recap And Links Mentioned<br>
      (David Goldstein)<br>
   2. Believe You Can! 2021 - Tickets on Sale NOW!!! (Harriet Go)<br>
   3. Re: Keystone Chapter Meeting Recap And Links Mentioned<br>
      (<a href="mailto:lynnelaineheitz1958@gmail.com" target="_blank">lynnelaineheitz1958@gmail.com</a>)<br>
<br>
<br>
<br>
---------- Forwarded message ----------<br>
From: David Goldstein <<a href="mailto:david@icantcu.com" target="_blank">david@icantcu.com</a>><br>
To: Keystone Chapter List of the NFB of Pennsylvania <<a href="mailto:keystonechapter@nfbnet.org" target="_blank">keystonechapter@nfbnet.org</a>><br>
Cc: <br>
Bcc: <br>
Date: Sun, 10 Oct 2021 18:09:31 -0400<br>
Subject: [KeyStoneChapter] Keystone Chapter Meeting Recap And Links Mentioned<br>
<div style="">Hello Keystone Chapter Peeps,
<div><br>
</div>
<div>How great was it to finally meet in-person again! If you were unable to join us today at the Penn Museum for our chapter meeting, you’ll get another chance on November 6 when we hold our next meeting again there at the Penn Museum. Note the date as it
 is one week earlier in the month than our normal second Saturday.</div>
<div><br>
</div>
<div>State Convention</div>
<div><br>
</div>
<div>We are having our chapter meeting a week earlier because the NFB of PA state convention runs from November 11th through the 14th in Harrisburg. You can get all the convention info at <a href="http://NFBP.org/convention" target="_blank">NFBP.org/convention</a>.
 I really hope you can make it.</div>
<div><br>
</div>
<div>Believe You Can! 2021 This Saturday</div>
<div><br>
</div>
<div>The Believe You Can! Talent show is coming October 16. Tickets are $10 for an <a href="https://py.pl/1geToc" target="_blank">Individual Ticket</a> and $25 for a <a href="https://py.pl/10VJYC" target="_blank">Watch Party Ticket</a>. Several of our members
 are performing, so buy a ticket and enjoy a great evening of entertainment. Please share these links with your friends and family. Here are the direct links to share in your emails and on your socials:</div>
<div>$10 Individual Ticket: <a href="https://py.pl/1geToc" target="_blank">https://py.pl/1geToc</a></div>
<div>$25 Watch Party Ticket: <a href="https://py.pl/10VJYC" target="_blank">https://py.pl/10VJYC</a></div>
<div>Website: <a href="https://www.BelieveYouCan.live" target="_blank">https://www.BelieveYouCan.live</a></div>
<div>Facebook: <a href="https://www.facebook.com/BelieveYouCanTalentShow" target="_blank">https://www.facebook.com/BelieveYouCanTalentShow</a></div>
<div><br>
</div>
<div>White Cane Coffee Company Program</div>
<div><br>
</div>
<div>Here is an easy way to support the Keystone Chapter if you or someone you know loves coffee. We are an affiliate of the <a href="https://whitecanecoffee.com/ref/keystonechapter" target="_blank">White Cane Coffee Company</a>. What does that mean? When you
 click our special link (<a href="https://whitecanecoffee.com/ref/keystonechapter" target="_blank">https://whitecanecoffee.com/ref/keystonechapter</a>) and make a purchase on the website, the Keystone Chapter earns a 10% commission! It doesn’t cost you anything
 more to use our link and it really helps the chapter.</div>
<div><br>
</div>
<div>Until we meet again on November 6, be well.</div>
<div><br>
</div>
<div>Regards,</div>
<div><br>
</div>
<div>David<br>
<div>
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style="">
<div dir="auto" style=""></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div dir="auto" style="">
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font size="1">David Goldstein</font></div>
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font size="1">Treasurer, Keystone Chapter, NFB of PA</font></div>
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font size="1"><a href="mailto:david@iCantCU.com" target="_blank">david@iCantCU.com</a></font></div>
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font size="1">(610) 715-5020 mobile</font></div>
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<a href="https://www.iCantCU.com" target="_blank"><font size="1">www.iCantCU.com</font></a></div>
<div style="color:rgb(0,0,0); font-variant-caps:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div><font size="1">iCantCU Podcast<br>
<a href="https://podcasts.apple.com/us/podcast/icantcu-podcast/id1445801370" target="_blank">Apple Podcasts</a> | <a href="https://open.spotify.com/show/3nck2D5HgD9ckSaUQaWwW2" target="_blank">Spotify</a> |<span> </span><a href="https://www.iheart.com/podcast/256-icantcu-podcast-31157111/" target="_blank">IHeartRadio</a></font></div>
<div>
<div><font size="1">Support The Podcast When You Shop</font></div>
<div><a href="https://www.iCantCU.com/amazon" target="_blank"><font size="1">Amazon</font></a></div>
<div><font size="1">Connect with me:</font></div>
<div><font size="1"><a href="https://twitter.com/davidbenj" target="_blank">Twitter</a> | <a href="https://www.instagram.com/davidbenj/" target="_blank">Instagram</a> | <a href="https://www.linkedin.com/in/davidbenj" target="_blank">LinkedIn</a> | <a href="https://www.facebook.com/davidbenj" target="_blank">Facebook</a> </font></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
</div>
<br>
<br>
<br>
---------- Forwarded message ----------<br>
From: Harriet Go <<a href="mailto:goharriet00@hotmail.com" target="_blank">goharriet00@hotmail.com</a>><br>
To: David Andrews via KeystoneChapter <<a href="mailto:keystonechapter@nfbnet.org" target="_blank">keystonechapter@nfbnet.org</a>>, "<a href="mailto:michellef176.mf@gmail.com" target="_blank">michellef176.mf@gmail.com</a>" <<a href="mailto:michellef176.mf@gmail.com" target="_blank">michellef176.mf@gmail.com</a>>,
 Jim Antonacci <<a href="mailto:jjantonacci@verizon.net" target="_blank">jjantonacci@verizon.net</a>>, Hope Hein <<a href="mailto:hwmhein@gmail.com" target="_blank">hwmhein@gmail.com</a>>, "<a href="mailto:beccaw77@icloud.com" target="_blank">beccaw77@icloud.com</a>"
 <<a href="mailto:beccaw77@icloud.com" target="_blank">beccaw77@icloud.com</a>>, "<a href="mailto:weberbecca630@gmail.com" target="_blank">weberbecca630@gmail.com</a>" <<a href="mailto:weberbecca630@gmail.com" target="_blank">weberbecca630@gmail.com</a>>, Gerald
 Jeandron <<a href="mailto:gjeandron@gmail.com" target="_blank">gjeandron@gmail.com</a>>, Toni Whaley <<a href="mailto:toni.whaley@verizon.net" target="_blank">toni.whaley@verizon.net</a>>, Cary Supalo <<a href="mailto:cas380@psu.edu" target="_blank">cas380@psu.edu</a>>,
 "<a href="mailto:suemwilcox@aol.com" target="_blank">suemwilcox@aol.com</a>" <<a href="mailto:suemwilcox@aol.com" target="_blank">suemwilcox@aol.com</a>>, Rick Hopkins <<a href="mailto:g49hop@gmail.com" target="_blank">g49hop@gmail.com</a>>, "<a href="mailto:ajones@asb.org" target="_blank">ajones@asb.org</a>"
 <<a href="mailto:ajones@asb.org" target="_blank">ajones@asb.org</a>>, LyVette Byrd <<a href="mailto:lyvettebyrd.howrc@gmail.com" target="_blank">lyvettebyrd.howrc@gmail.com</a>>, "<a href="mailto:jacksonwalter8@gmail.com" target="_blank">jacksonwalter8@gmail.com</a>"
 <<a href="mailto:jacksonwalter8@gmail.com" target="_blank">jacksonwalter8@gmail.com</a>>, Ruth Reynolds <<a href="mailto:rachelduncan@verizon.net" target="_blank">rachelduncan@verizon.net</a>>, "<a href="mailto:hey_dad2@yahoo.com" target="_blank">hey_dad2@yahoo.com</a>"
 <<a href="mailto:hey_dad2@yahoo.com" target="_blank">hey_dad2@yahoo.com</a>>, Alex Cohen <<a href="mailto:alexc@accessiblepharmacy.com" target="_blank">alexc@accessiblepharmacy.com</a>>, "<a href="mailto:ecmullen425@gmail.com" target="_blank">ecmullen425@gmail.com</a>"
 <<a href="mailto:ecmullen425@gmail.com" target="_blank">ecmullen425@gmail.com</a>>, Liliya Asadullina <<a href="mailto:lily2011a@gmail.com" target="_blank">lily2011a@gmail.com</a>>, Christine Sunhee Ahn <<a href="mailto:cnsahn@gmail.com" target="_blank">cnsahn@gmail.com</a>>,
 Mary Brucker <<a href="mailto:savic45@verizon.net" target="_blank">savic45@verizon.net</a>>, "<a href="mailto:mark.bias19126@gmail.com" target="_blank">mark.bias19126@gmail.com</a>" <<a href="mailto:mark.bias19126@gmail.com" target="_blank">mark.bias19126@gmail.com</a>>,
 "<a href="mailto:danielleb43@icloud.com" target="_blank">danielleb43@icloud.com</a>" <<a href="mailto:danielleb43@icloud.com" target="_blank">danielleb43@icloud.com</a>>, "<a href="mailto:robbinfaye61@gmail.com" target="_blank">robbinfaye61@gmail.com</a>"
 <<a href="mailto:robbinfaye61@gmail.com" target="_blank">robbinfaye61@gmail.com</a>><br>
Cc: <br>
Bcc: <br>
Date: Mon, 11 Oct 2021 03:53:34 +0000<br>
Subject: [KeyStoneChapter] Believe You Can! 2021 - Tickets on Sale NOW!!!<br>
<div dir="ltr">
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span style="margin:0px; font-size:12pt"><font face="Comic Sans MS, Chalkboard, cursive"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Tickets, tickets, tickets!</span></font></span>
<div style="margin:0px; font-size:14px">
<div dir="ltr" style="margin:0px">
<div dir="ltr" style="margin:0px">
<div dir="ltr" style="margin:0px">
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif; text-align:left; background-color:rgb(255,255,255); display:inline">Get your tickets to the second annual<span> </span></span><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif; text-align:left; background-color:rgb(255,255,255); display:inline"><b>Believe
 You Can!</b></span><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif; text-align:left; background-color:rgb(255,255,255); display:inline"><span> </span>Talent Show!</span><br>
</div>
<div style="margin:0px">
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Hosted by the Keystone Chapter of the National Federation of the Blind of Pennsylvania, this year's event promises to be filled with excitement, fun,
 and lots of positivity. Join us as we bring you a night packed with singers, dancers, musicians, spoken word artists, and more! </span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<b><br>
</b></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif; background-color:rgb(255,255,255); display:inline"><b>Tickets on sale now! </b></span><br>
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-family:"Comic Sans MS",Chalkboard,cursive; background-color:rgb(255,255,255); display:inline"><a href="https://believeyoucan.live/" target="_blank" style="margin:0px"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">https://believeyoucan.live/</span></a><br>
</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; background-color:rgb(255,255,255); display:inline"><br>
</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">When: October 16, 2021 at 7:00 p.m. EST</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Where: Anywhere you want, via Zoom!</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Cost: $10 individual ticket, $25 watch party ticket</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Why: To have a great night of entertainment and cheer on blind performers, while supporting a great cause.</span><br>
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:21px; font-family:NonBreakingSpaceOverride,"Hoefler Text",Garamond,"Times New Roman",serif"><br>
</span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Get your tickets to Believe You Can! 2021 NOW!!!</span><br>
</div>
<div style="margin:0px">
<div style="margin:0px">
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<a href="https://believeyoucan.live/" target="_blank" style="margin:0px"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">https://believeyoucan.live/</span></a><br>
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<br>
</div>
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">For more information, listen to the latest Blind Abilities podcast to get all the details and behind the scenes look at the Believe You Can! story.</span><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif"> </span><a href="http://blindabilities.com/?p=6954" rel="noopener noreferrer" target="_blank" style="margin:0px; font-size:12px; font-family:Helvetica; outline:0px; background-color:rgb(255,255,255)"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">http://blindabilities.com/?p=6954(opens
 in a new tab)</span></a></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<br>
</div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Also, check us out on Facebook at </span><a href="https://www.facebook.com/BelieveYouCanTalentShow" target="_blank" style="margin:0px"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">https://www.facebook.com/BelieveYouCanTalentShow</span></a><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif"> </span></div>
<div style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)">
<span style="margin:0px; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif"><br>
</span></div>
<span style="margin:0px; font-size:12pt; font-family:Calibri,Helvetica,sans-serif; background-color:rgb(255,255,255)"><span style="margin:0px; font-size:14pt; font-family:Mangal,"Nirmala UI","Devanagari Sangam MN",sans-serif">Hurry! You don't want to miss out
 on the talent show that everyone will be talking about!!!</span></span></div>
</div>
</div>
</div>
</div>
</div>
<br>
</div>
</div>
<br>
<br>
<br>
---------- Forwarded message ----------<br>
From: <<a href="mailto:lynnelaineheitz1958@gmail.com" target="_blank">lynnelaineheitz1958@gmail.com</a>><br>
To: "'Keystone Chapter List of the NFB of Pennsylvania'" <<a href="mailto:keystonechapter@nfbnet.org" target="_blank">keystonechapter@nfbnet.org</a>><br>
Cc: <br>
Bcc: <br>
Date: Mon, 11 Oct 2021 07:33:00 -0400<br>
Subject: Re: [KeyStoneChapter] Keystone Chapter Meeting Recap And Links Mentioned<br>
<div lang="EN-US" style="">
<div class="x_gmail-m_244795078803448233WordSection1">
<p class="x_MsoNormal">Good Morning,<u></u><u></u></p>
<p class="x_MsoNormal">Are you planning to use Zoom for this meeting?<u></u><u></u></p>
<p class="x_MsoNormal"><u></u> <u></u></p>
<p class="x_MsoNormal">Lynn <u></u><u></u></p>
<p class="x_MsoNormal"><u></u> <u></u></p>
<div>
<div style="border-right:none; border-bottom:none; border-left:none; border-top:1pt solid rgb(225,225,225); padding:3pt 0in 0in">
<p class="x_MsoNormal"><b>From:</b> KeyStoneChapter <<a href="mailto:keystonechapter-bounces@nfbnet.org" target="_blank">keystonechapter-bounces@nfbnet.org</a>>
<b>On Behalf Of </b>David Goldstein via KeyStoneChapter<br>
<b>Sent:</b> Sunday, October 10, 2021 6:10 PM<br>
<b>To:</b> Keystone Chapter List of the NFB of Pennsylvania <<a href="mailto:keystonechapter@nfbnet.org" target="_blank">keystonechapter@nfbnet.org</a>><br>
<b>Cc:</b> David Goldstein <david@iCantCU.com><br>
<b>Subject:</b> [KeyStoneChapter] Keystone Chapter Meeting Recap And Links Mentioned<u></u><u></u></p>
</div>
</div>
<p class="x_MsoNormal"><u></u> <u></u></p>
<p class="x_MsoNormal">Hello Keystone Chapter Peeps,<u></u><u></u></p>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">How great was it to finally meet in-person again! If you were unable to join us today at the Penn Museum for our chapter meeting, you’ll get another chance on November 6 when we hold our next meeting again there at the Penn Museum. Note
 the date as it is one week earlier in the month than our normal second Saturday.<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">State Convention<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">We are having our chapter meeting a week earlier because the NFB of PA state convention runs from November 11th through the 14th in Harrisburg. You can get all the convention info at <a href="http://NFBP.org/convention" target="_blank">NFBP.org/convention</a>.
 I really hope you can make it.<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">Believe You Can! 2021 This Saturday<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">The Believe You Can! Talent show is coming October 16. Tickets are $10 for an <a href="https://py.pl/1geToc" target="_blank">Individual Ticket</a> and $25 for a <a href="https://py.pl/10VJYC" target="_blank">Watch Party Ticket</a>. Several
 of our members are performing, so buy a ticket and enjoy a great evening of entertainment. Please share these links with your friends and family. Here are the direct links to share in your emails and on your socials:<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal">$10 Individual Ticket: <a href="https://py.pl/1geToc" target="_blank">https://py.pl/1geToc</a><u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal">$25 Watch Party Ticket: <a href="https://py.pl/10VJYC" target="_blank">https://py.pl/10VJYC</a><u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal">Website: <a href="https://www.BelieveYouCan.live" target="_blank">https://www.BelieveYouCan.live</a><u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal">Facebook: <a href="https://www.facebook.com/BelieveYouCanTalentShow" target="_blank">https://www.facebook.com/BelieveYouCanTalentShow</a><u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">White Cane Coffee Company Program<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">Here is an easy way to support the Keystone Chapter if you or someone you know loves coffee. We are an affiliate of the <a href="https://whitecanecoffee.com/ref/keystonechapter" target="_blank">White Cane Coffee Company</a>. What does
 that mean? When you click our special link (<a href="https://whitecanecoffee.com/ref/keystonechapter" target="_blank">https://whitecanecoffee.com/ref/keystonechapter</a>) and make a purchase on the website, the Keystone Chapter earns a 10% commission! It doesn’t
 cost you anything more to use our link and it really helps the chapter.<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">Until we meet again on November 6, be well.<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="x_MsoNormal">David<u></u><u></u></p>
</div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">David Goldstein</span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">Treasurer, Keystone Chapter, NFB of PA</span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black"><a href="mailto:david@iCantCU.com" target="_blank">david@iCantCU.com</a></span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">(610) 715-5020 mobile</span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="color:black"><a href="https://www.iCantCU.com" target="_blank"><span style="font-size:7.5pt">www.iCantCU.com</span></a><u></u><u></u></span></p>
</div>
<div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">iCantCU Podcast<br>
<a href="https://podcasts.apple.com/us/podcast/icantcu-podcast/id1445801370" target="_blank">Apple Podcasts</a> | <a href="https://open.spotify.com/show/3nck2D5HgD9ckSaUQaWwW2" target="_blank">Spotify</a> |<span class="x_gmail-m_244795078803448233apple-converted-space"> </span><a href="https://www.iheart.com/podcast/256-icantcu-podcast-31157111/" target="_blank">IHeartRadio</a></span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">Support The Podcast When You Shop</span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="color:black"><a href="https://www.iCantCU.com/amazon" target="_blank"><span style="font-size:7.5pt">Amazon</span></a><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black">Connect with me:</span><span style="color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-size:7.5pt; color:black"><a href="https://twitter.com/davidbenj" target="_blank">Twitter</a> | <a href="https://www.instagram.com/davidbenj/" target="_blank">Instagram</a> | <a href="https://www.linkedin.com/in/davidbenj" target="_blank">LinkedIn</a> | <a href="https://www.facebook.com/davidbenj" target="_blank">Facebook</a> </span><span style="color:black"><u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="x_MsoNormal"><u></u> <u></u></p>
</div>
<div id="x_gmail-m_244795078803448233DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>
<br>
<hr style="border:none; color:rgb(144,144,144); background-color:rgb(176,176,176); height:1px; width:99%">
<table style="border-collapse:collapse; border:none">
<tbody>
<tr>
<td style="border:none; padding:0px 15px 0px 8px"><a href="https://www.avast.com/antivirus" target="_blank"><img border="0" alt="Avast logo" src="data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGRpcj0ibHRyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0icHJhZ21hIiBjb250ZW50PSJuby1jYWNoZSIgLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPTAiIC8+CiAgICA8bWV0YSBuYW1lPSJnb29nbGUiIHZhbHVlPSJub3RyYW5zbGF0ZSIgLz4KICAgIDxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyIgLz4KICAgIDxtZXRhIG5hbWU9InNjcmlwdFZlciIgY29udGVudD0iMjAyMTEwMDQwMDIuMDIiIC8+CiAgICA8bWV0YSBuYW1lPSJwaHlzaWNhbFJpbmciIGNvbnRlbnQ9IlNJUCIgLz4KICAgIDxtZXRhIG5hbWU9ImVudmlyb25tZW50IiBjb250ZW50PSJQcm9kIiAvPgogICAgPG1ldGEgbmFtZT0iYm9vdEZsaWdodHMiIGNvbnRlbnQ9ImRpc2FibGVoeCIgLz4KICAgIDxtZXRhIG5hbWU9ImNkblVybCIgY29udGVudD0iLy9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvIiAvPgogICAgPG1ldGEgbmFtZT0iYmFja3VwQ2RuVXJsIiBjb250ZW50PSIvL291dGxvb2stMi5jZG4ub2ZmaWNlLm5ldC8iIC8+CiAgICA8bWV0YSBuYW1lPSJjZG5Db250YWluZXIiIGNvbnRlbnQ9Im93YW1haWwvIiAvPgogICAgPG1ldGEgbmFtZT0iZGV2Q2RuVXJsIiBjb250ZW50PSIiIC8+CiAgICA8bWV0YSBuYW1lPSJhcmlhVXJsIiBjb250ZW50PSIiIC8+CiAgICA8bWV0YSBuYW1lPSJjb21wYWN0QXJpYVVybCIgY29udGVudD0iIiAvPgogICAgPG1ldGEgbmFtZT0id2Nzc0ZyYW1lVXJsIiBjb250ZW50PSJodHRwczovL3dlYnNoZWxsLnN1aXRlLm9mZmljZS5jb20iIC8+CiAgICA8bWV0YSBuYW1lPSJzY3JpcHRQYXRoIiBjb250ZW50PSJzY3JpcHRzLyIgLz4KICAgIDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iL21haWwvZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiIgLz4KICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvcHdhL3YxL3BuZ3MvYXBwbGUtdG91Y2gtaWNvbi5wbmciIC8+CiAgICA8bm9zY3JpcHQ+SmF2YVNjcmlwdCBtdXN0IGJlIGVuYWJsZWQuPC9ub3NjcmlwdD4KICAgIDx0aXRsZT5PdXRsb29rPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBAZm9udC1mYWNlIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSBXZXN0RXVyb3BlYW4nOwogICAgICAgICAgICBzcmM6IGxvY2FsKCdTZWdvZSBVSSBMaWdodCcpLCBsb2NhbCgnU2Vnb2UgV1AgTGlnaHQnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1saWdodC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLWxpZ2h0LndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1saWdodC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7CiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICB9CgogICAgICAgIEBmb250LWZhY2UgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJIFdlc3RFdXJvcGVhbic7CiAgICAgICAgICAgIHNyYzogbG9jYWwoJ1NlZ29lIFVJJyksIGxvY2FsKCdTZWdvZSBXUCcpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXJlZ3VsYXIuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1yZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1yZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIH0KCiAgICAgICAgQGZvbnQtZmFjZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUkgV2VzdEV1cm9wZWFuJzsKICAgICAgICAgICAgc3JjOiBsb2NhbCgnU2Vnb2UgVUkgU2VtaWJvbGQnKSwgbG9jYWwoJ1NlZ29lIFdQIFNlbWlib2xkJyksCiAgICAgICAgICAgICAgICB1cmwoJ2h0dHBzOi8vb3V0bG9vay0xLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktc2VtaWJvbGQuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvYXNzZXRzL21haWwvZm9udHMvdjEvZm9udHMvc2Vnb2V1aS1zZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksCiAgICAgICAgICAgICAgICB1cmwoJ2h0dHBzOi8vb3V0bG9vay0xLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktc2VtaWJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICAgICAgfQoKICAgICAgICBAZm9udC1mYWNlIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSBXZXN0RXVyb3BlYW4nOwogICAgICAgICAgICBzcmM6IGxvY2FsKCdTZWdvZSBVSSBTZW1pbGlnaHQnKSwgbG9jYWwoJ1NlZ29lIFdQIFNlbWlsaWdodCcpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXNlbWlsaWdodC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9hc3NldHMvbWFpbC9mb250cy92MS9mb250cy9zZWdvZXVpLXNlbWlsaWdodC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksCiAgICAgICAgICAgICAgICB1cmwoJ2h0dHBzOi8vb3V0bG9vay0xLmNkbi5vZmZpY2UubmV0L2Fzc2V0cy9tYWlsL2ZvbnRzL3YxL2ZvbnRzL3NlZ29ldWktc2VtaWxpZ2h0LnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIH0KCiAgICAgICAgQGZvbnQtZmFjZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnRmFicmljTURMMkljb25zJzsKICAgICAgICAgICAgc3JjOiB1cmwoJ2h0dHBzOi8vb3V0bG9vay0xLmNkbi5vZmZpY2UubmV0L293YW1haWwvMjAyMTEwMDQwMDIuMDIvcmVzb3VyY2VzL2ZvbnRzL28zNjVpY29ucy1tZGwyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwKICAgICAgICAgICAgICAgIHVybCgnaHR0cHM6Ly9vdXRsb29rLTEuY2RuLm9mZmljZS5uZXQvb3dhbWFpbC8yMDIxMTAwNDAwMi4wMi9yZXNvdXJjZXMvZm9udHMvbzM2NWljb25zLW1kbDIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpOwogICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICAgICAgfQoKICAgICAgICBAZm9udC1mYWNlIHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdvZmZpY2UzNjVpY29ucyc7CiAgICAgICAgICAgIHNyYzogdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjExMDA0MDAyLjAyL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy5lb3Q/Jyk7CiAgICAgICAgICAgIHNyYzogdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjExMDA0MDAyLjAyL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjExMDA0MDAyLjAyL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy53b2ZmPycpIGZvcm1hdCgnd29mZicpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjExMDA0MDAyLjAyL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy50dGY/JykgZm9ybWF0KCd0cnVldHlwZScpLAogICAgICAgICAgICAgICAgdXJsKCdodHRwczovL291dGxvb2stMS5jZG4ub2ZmaWNlLm5ldC9vd2FtYWlsLzIwMjExMDA0MDAyLjAyL3Jlc291cmNlcy9mb250cy9vZmZpY2UzNjVpY29ucy5zdmc/I29mZmljZTM2NWljb25zJykgZm9ybWF0KCdzdmcnKTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIH0KCiAgICAgICAgI3ByZWxvYWREaXYgewogICAgICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgI2xvYWRpbmdTY3JlZW4gewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICByaWdodDogMDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbyB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgdG9wOiBjYWxjKDUwdmggLSA5MHB4KTsKICAgICAgICAgICAgbGVmdDogY2FsYyg1MHZ3IC0gOTBweCk7CiAgICAgICAgICAgIHdpZHRoOiAxODBweDsKICAgICAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICB9CgogICAgICAgICNNU0xvZ28gewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIGJvdHRvbTogMzZweDsKICAgICAgICAgICAgbGVmdDogY2FsYyg1MHZ3IC0gNDVweCk7CiAgICAgICAgfQoKICAgICAgICAuZGFyayAjbG9hZGluZ1NjcmVlbiB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgICAgICAgfQoKCiAgICAgICAgI2xvYWRpbmdMb2dvMl90cyB7CiAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzJfdHNfX3RzIDMwMDBtcyBsaW5lYXIgMSBub3JtYWwgZm9yd2FyZHM7CiAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzIgewogICAgICAgICAgICBhbmltYXRpb246IGxvYWRpbmdMb2dvMl9jX28gMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzNfdG8gewogICAgICAgICAgICBhbmltYXRpb246IGxvYWRpbmdMb2dvM190b19fdG8gMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzZfdHMgewogICAgICAgICAgICBhbmltYXRpb246IGxvYWRpbmdMb2dvNl90c19fdHMgMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzhfdHMgewogICAgICAgICAgICBhbmltYXRpb246IGxvYWRpbmdMb2dvOF90c19fdHMgMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzlfdG8gewogICAgICAgICAgICBhbmltYXRpb246IGxvYWRpbmdMb2dvOV90b19fdG8gMzAwMG1zIGxpbmVhciAxIG5vcm1hbCBmb3J3YXJkczsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTAwMDsKICAgICAgICB9CgogICAgICAgICNsb2FkaW5nTG9nbzI5X3RzIHsKICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nTG9nbzI5X3RzX190cyAzMDAwbXMgbGluZWFyIDEgbm9ybWFsIGZvcndhcmRzOwogICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzJfdHNfX3RzIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTA4Ljg5NDQzMHB4LDE1NS43MTUxMjdweCkgc2NhbGUoMC42Njg5NjMsMC42Njg5NjMpOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNDIwMDAwLDAsMC41ODAwMDAsMSkKICAgICAgICAgICAgfQogICAgICAgICAgICAyNi42NjY2NjclIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwOC44OTQ0MzBweCwxNTUuNzE1MTI3cHgpIHNjYWxlKDEsMSkKICAgICAgICAgICAgfQogICAgICAgICAgIDEwMCUgewogICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDguODk0NDMwcHgsMTU1LjcxNTEyN3B4KSBzY2FsZSgxLDEpCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzJfY19vIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAxOC4zMzMzMzMlIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEKICAgICAgICAgICAgfQogICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBsb2FkaW5nTG9nbzNfdG9fX3RvIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDE1NXB4LDE5NS45NzA3MDNweCkKICAgICAgICAgICAgfQogICAgICAgICAgICAxMy4zMzMzMzMlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDAxNTVweCwxOTUuOTcwNzAzcHgpOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsMCwxLDAuMDI1MDAwKQogICAgICAgICAgICB9CiAgICAgICAgICAgIDMxJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwMTU1cHgsMjA2cHgpOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMTM1MDAwLDAuNzEwMDAwLDAuMDMwMDAwLDAuOTg1MDAwKQogICAgICAgICAgICB9CiAgICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwMTU1cHgsMTk1Ljk3MDcwM3B4KQogICAgICAgICAgICB9CiAgICAgICAgICAgIDEwMCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDE1NXB4LDE5NS45NzA3MDNweCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGxvYWRpbmdMb2dvNl90c19fdHMgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNzA4cHgsOTcuNDk5NTg4cHgpIHNjYWxlKDEsLTAuMDAxNzIwKQogICAgICAgICAgICB9CiAgICAgICAgICAgIDIzLjMzMzMzMyUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDcwOHB4LDk3LjQ5OTU4OHB4KSBzY2FsZSgxLC0wLjAwMTcyMCk7CiAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4xMzUwMDAsMC43MTAwMDAsMC4wMzAwMDAsMC45ODUwMDApCiAgICAgICAgICAgIH0KICAgICAgICAgICAgNDAlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA3MDhweCw5Ny40OTk1ODhweCkgc2NhbGUoMSwxKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA3MDhweCw5Ny40OTk1ODhweCkgc2NhbGUoMSwxKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgbG9hZGluZ0xvZ284X3RzX190cyB7CiAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwxNTkuOTE0NzIzcHgpIHNjYWxlKDEsMSkKICAgICAgICAgICAgfQogICAgICAgICAgICAzOS42NjY2NjclIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwxNTkuOTE0NzIzcHgpIHNjYWxlKDEsMSkKICAgICAgICAgICAgfQogICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LDE1OS45MTQ3MjNweCkgc2NhbGUoMSwxLjA1MDM2MCkKICAgICAgICAgICAgfQogICAgICAgICAgICA1Mi4zMzMzMzMlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMS4wMDA2OTlweCwxNTkuOTE0NzIzcHgpIHNjYWxlKDEsMC45NTkyMzMpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgNTcuNjY2NjY3JSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsMTU5LjkxNDcyM3B4KSBzY2FsZSgxLDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsMTU5LjkxNDcyM3B4KSBzY2FsZSgxLDEpCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgbG9hZGluZ0xvZ285X3RvX190byB7CiAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMXB4LDIwNS43NTM3NjVweCkKICAgICAgICAgICAgfQogICAgICAgICAgICAyNi42NjY2NjclIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMXB4LDIwNS43NTM3NjVweCk7CiAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4xNzUwMDAsMC44ODUwMDAsMC4zMjAwMDAsMS4yNzUwMDApCiAgICAgICAgICAgIH0KICAgICAgICAgICAgNTAlIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMXB4LDgxcHgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDFweCw4MXB4KQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGxvYWRpbmdMb2dvMjlfdHNfX3RzIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAxLjAwMDY5OXB4LDk3LjQ5OTU3M3B4KSBzY2FsZSgxLDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgMTMuMzMzMzMzJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsOTcuNDk5NTczcHgpIHNjYWxlKDEsMSk7CiAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwwLDEsMC4wMjUwMDApCiAgICAgICAgICAgIH0KICAgICAgICAgICAgMjMuMzMzMzMzJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsOTcuNDk5NTczcHgpIHNjYWxlKDEsMC4wMDE3MjMpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDEuMDAwNjk5cHgsOTcuNDk5NTczcHgpIHNjYWxlKDEsMC4wMDE3MjMpCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQgbm9uY2U9ImxEeUczcFlaVlp0WjRWMTJoTUFwMkE9PSI+CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCdsb2NhbFN0b3JhZ2UnIGluIHdpbmRvdykgewogICAgICAgICAgICAgICAgdmFyIHVzZXJOb3JtYWxpemVkVGhlbWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1VzZXJzTm9ybWFsaXplZFRoZW1lJyk7CiAgICAgICAgICAgICAgICBpZiAodXNlck5vcm1hbGl6ZWRUaGVtZSAmJiAvXC5kYXJrJC8udGVzdCh1c2VyTm9ybWFsaXplZFRoZW1lKSkgewogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgcHdhYmFyY29sb3IgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1B3YVRoZW1lJyk7CiAgICAgICAgICAgICAgICBpZiAocHdhYmFyY29sb3IpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhlbWV0YWcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgndGhlbWUtY29sb3InKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhlbWV0YWcgJiYgdGhlbWV0YWcubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1ldGFnWzBdLnNldEF0dHJpYnV0ZSgnY29udGVudCcsIHB3YWJhcmNvbG9yKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7IH0KICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCBub25jZT0ibER5RzNwWVpWWnRaNFYxMmhNQXAyQT09Ij4KICAgICAgICB3aW5kb3cuRmFicmljQ29uZmlnID0gewogICAgICAgICAgICBmb250QmFzZVVybDogbnVsbCwKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5vd2FCYWNrZmlsbGVkRXJyb3JzID0gW107CiAgICAgICAgZnVuY3Rpb24gbG9nRXJyb3IobSwgZiwgbCwgYywgZSkgewogICAgICAgICAgICBpZiAod2luZG93Lm93YUVycm9ySGFuZGxlcikgewogICAgICAgICAgICAgICAgd2luZG93Lm93YUVycm9ySGFuZGxlcihtLCBmLCBsLCBjLCBlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5vd2FCYWNrZmlsbGVkRXJyb3JzLnB1c2goYXJndW1lbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aW5kb3cub25lcnJvciA9IGxvZ0Vycm9yOwogICAgICAgIGlmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykgewogICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHZhciByID0gKGUgJiYgZS5yZWFzb24pIHx8ICdbbm8gcmVhc29uIGdpdmVuXSc7CiAgICAgICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoJ1VuaGFuZGxlZCBSZWplY3Rpb246ICcgKyByLCAnJywgMCwgMCwgcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKCdVbmhhbmRsZWQgUmVqZWN0aW9uOiAnICsgKHR5cGVvZiByID09PSAnc3RyaW5nJyA/IHIgOiBKU09OLnN0cmluZ2lmeShyKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKCFzZWxmLk93YSAmJiBzZWxmLmxvY2F0aW9uICYmIHNlbGYubG9jYXRpb24uc2VhcmNoICYmIHNlbGYubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoJ2d1bHAnKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJy9vd2EvYXV0aC9mcm93bnkuYXNweD9icmV0PWZhaWwmZXNyYz1JbmRleFBhZ2VJbmNvbXBsZXRlJmFwcD1NYWlsJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH1jYXRjaCAoZSkgeyB9CiAgICAgICAgfTsKICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCBub25jZT0ibER5RzNwWVpWWnRaNFYxMmhNQXAyQT09Ij4KICAgICAgICB0cnkgewogICAgICAgICAgICAhKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICgnUGVyZm9ybWFuY2VMb25nVGFza1RpbWluZycgaW4gd2luZG93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSAod2luZG93Ll9fdHRpID0geyBlOiBbXSB9KTsKICAgICAgICAgICAgICAgICAgICBnLm8gPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihmdW5jdGlvbiAobCkgewogICAgICAgICAgICAgICAgICAgICAgICBnLmUgPSBnLmUuY29uY2F0KGwuZ2V0RW50cmllcygpKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBnLm8ub2JzZXJ2ZSh7IGVudHJ5VHlwZXM6IFsnbG9uZ3Rhc2snXSB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkoKTsKICAgICAgICB9IGNhdGNoIChlKSB7IH0KICAgIDwvc2NyaXB0Pgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0ibXMtZm9udC1zIGRpc2FibGVUZXh0U2VsZWN0aW9uIG1zLUZhYnJpYy0taXNGb2N1c0hpZGRlbiI+CiAgICA8ZGl2IGlkPSJwcmVsb2FkRGl2Ij4KICAgICAgICA8c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6IlNlZ29lIFVJIFdlc3RFdXJvcGVhbjtmb250LXdlaWdodDoxMDA7Iic+dDwvc3Bhbj4KICAgICAgICA8c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6IlNlZ29lIFVJIFdlc3RFdXJvcGVhbjtmb250LXdlaWdodDoyMDA7Iic+dDwvc3Bhbj4KICAgICAgICA8c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6IlNlZ29lIFVJIFdlc3RFdXJvcGVhbjtmb250LXdlaWdodDo0MDA7Iic+dDwvc3Bhbj4KICAgICAgICA8c3BhbiBzdHlsZT0nZm9udC1mYW1pbHk6IlNlZ29lIFVJIFdlc3RFdXJvcGVhbjtmb250LXdlaWdodDo2MDA7Iic+dDwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYXBwIj48L2Rpdj4KICAgIDxkaXYgaWQ9ImxvYWRpbmdTY3JlZW4iPgogICAgICAgIDxzdmcgaWQ9ImxvYWRpbmdMb2dvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjIwIDIyMCIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHRleHQtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIHdpZHRoPSIyMjAiIGhlaWdodD0iMjIwIj48ZyBpZD0ibG9hZGluZ0xvZ28yX3RzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDguODk0NDMwLDE1NS43MTUxMjcpIHNjYWxlKDAuNjY4OTYzLDAuNjY4OTYzKSI+PGcgaWQ9ImxvYWRpbmdMb2dvMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMC45OTg3NDksLTE0MSkiIG9wYWNpdHk9IjAiPjxnIGlkPSJsb2FkaW5nTG9nbzNfdG8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMS4wMDAxNTUsMTk1Ljk3MDcwMykiPjxnIGlkPSJsb2FkaW5nTG9nbzMiIHN0eWxlPSJmaWx0ZXI6ZHJvcC1zaGFkb3coMHB4IDRweCAwcHggcmdiYSgwLDAsMCwwKSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDEuMDAwMTU1LC0xOTUuOTcwNzAzKSI+PGcgaWQ9ImxvYWRpbmdMb2dvNCI+PHBhdGggaWQ9ImxvYWRpbmdMb2dvNSIgZD0iTTIwLjkzMzc4NCw5Ny4yMTA2MDBDMjAuOTMzNzg0LDk3LjIxMDYwMCwyMC4xNzgyNzEsOTIuOTQwMDUzLDIwLjAyNDAwMyw5M0wxODIuMDE5MjU1LDkzQzE4Mi4wMTkyNTUsOTMsMTgyLjAxNDAwMCw5NS41MzE5MDAsMTgxLjk5OTAwMCw5Ny4yMTA2MDBDMTgyLjAyMzAwMCw5OC45MDY2MDAsMTgxLjE3NzAwMCwxMDAuNDk2MDAwLDE3OS43NTkwMDAsMTAxLjQyMTAwMEwxMDYuNjg0MDAwLDE0NS45OTgwMDBMMTA1LjczMjAwMCwxNDYuNTU5MDAwQzEwNC4zMzcwMDAsMTQ3LjMwNjAwMCwxMDIuNzc4MDAwLDE0Ny42OTEwMDAsMTAxLjE5NzAwMCwxNDcuNjgyMDAwQzk5LjYzMzMwMCwxNDcuNjg5MDAwLDk4LjA5MzEwMCwxNDcuMzAzMDAwLDk2LjcxNjkwMCwxNDYuNTU5MDAwTDk1LjcwOTAwMCwxNDUuOTk4MDAwTDIyLjQxMDEwMCwxMDEuNDIxMDAwQzIwLjkwMjEwMCwxMDAuNTM1MDAwLDIyLjM4MTU4NSw5OC45MTY5MzcsMjAuOTMzNzg0LDk3LjIxMDYwMFoiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgLTAuMDIxODAyOTc2MzEzMzQgMy45OTk5OTk5OTY1OTY1MykiIGZpbGw9InJnYigxOCw1OSwxMDkpIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIvPjxnIGlkPSJsb2FkaW5nTG9nbzZfdHMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMS4wMDA3MDgsOTcuNDk5NTg4KSBzY2FsZSgxLC0wLjAwMTcyMCkiPjxwYXRoIGlkPSJsb2FkaW5nTG9nbzYiIGQ9Ik0xNzkuNzU5MDAwLDkzLjM3MzIwMEwxMDYuNTcyMDAwLDQ4Ljc0MDQwMEwxMDUuNjIwMDAwLDQ4LjEyMjgwMEMxMDQuMjE1MDAwLDQ3LjQwMzQwMCwxMDIuNjYzMDAwLDQ3LjAxOTEwMCwxMDEuMDg1MDAwLDQ3Qzk5LjUyNDYwMCw0Ny4wMTk2MDAsOTcuOTkwNzAwLDQ3LjQwNDEwMCw5Ni42MDQ5MDAsNDguMTIyODAwTDk1LjU5NzAwMCw0OC43NDA0MDBMMjIuMjk4MTAwLDkzLjMxNzAwMEMyMC44NzU1MDAsOTQuMjE4MTAwLDIwLjAwOTkwMCw5NS44MDQ5MTcsMjAuMDAyMjAwLDk3LjQ5MTkxN0MxOS45ODMzMDAsOTkuMjQ0MzE3LDIwLjkwMjEwMCwxMDAuODUyMDAwLDIyLjQxMDEwMCwxMDEuNzM4MDAwTDk1LjcwOTAwMCwxNDYuMzE1MDAwTDk2LjcxNjkwMCwxNDYuODc2MDAwQzk4LjA5MzEwMCwxNDcuNjIwMDAwLDk5LjYzMzMwMCwxNDguMDA2MDAwLDEwMS4xOTcwMDAsMTQ3Ljk5OTAwMEMxMDIuNzc4MDAwLDE0OC4wMDkwMDAsMTA0LjMzNzAwMCwxNDcuNjIzMDAwLDEwNS43MzIwMDAsMTQ2Ljg3NjAwMEwxMDYuNjg0MDAwLDE0Ni4zMTUwMDBMMTc5Ljc1OTAwMCwxMDEuNzM4MDAwQzE4MS4xNzcwMDAsMTAwLjgxMzAwMCwxODIuMDIzMDAwLDk5LjIyMzcwMCwxODEuOTk5MDAwLDk3LjUyNzcwMEMxODIuMDE0MDAwLDk1Ljg0OTAwMCwxODEuMTY4MDAwLDk0LjI4MDEwMCwxNzkuNzU5MDAwLDkzLjM3MzIwMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDEuMDAwNzA4LC05Ny40OTk1ODgpIiBmaWxsPSJyZ2IoMTgsNTksMTA5KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48L2c+PC9nPjxnIGlkPSJsb2FkaW5nTG9nbzciIGNsaXAtcGF0aD0idXJsKCNsb2FkaW5nTG9nbzIyKSI+PGcgaWQ9ImxvYWRpbmdMb2dvOF90cyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAxLjAwMDY5OSwxNTkuOTE0NzIzKSBzY2FsZSgxLDEpIj48ZyBpZD0ibG9hZGluZ0xvZ284IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAxLjAwMDY5OSwtMTU5LjkxNDcyMykiPjxnIGlkPSJsb2FkaW5nTG9nbzlfdG8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMSwyMDUuNzUzNzY1KSI+PGcgaWQ9ImxvYWRpbmdMb2dvOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMSwtODEpIj48cGF0aCBpZD0ibG9hZGluZ0xvZ28xMCIgZD0iTTI4LDEwQzI4LDQuNDc3MTUwLDMyLjQ3NzIwMCwwLDM4LDBMMTY0LDBDMTY5LjUyMzAwMCwwLDE3NCw0LjQ3NzE1MCwxNzQsMTBDMTc0LDEwLDE3My45OTkzMDEsMjguMzU1MDA5LDE3My45OTkzMDEsMjguMzU1MDA5TDI4LDUxLjA2MDUyOUwyOCwxMFoiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMC4wMDA2OTkwNDAwMDAwMCAwKSIgZmlsbD0icmdiKDMsODgsMTY3KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48ZyBpZD0ibG9hZGluZ0xvZ28xMSI+PHJlY3QgaWQ9ImxvYWRpbmdMb2dvMTIiIHdpZHRoPSI1NC4wNjM4NjYiIGhlaWdodD0iNTAuMTE4MTE4IiByeD0iMCIgcnk9IjAiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMjggMjQuMDAwMDAwMDAwNjk3OTYpIiBmaWxsPSJyZ2IoMCwxMjAsMjEyKSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCBpZD0ibG9hZGluZ0xvZ28xMyIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjUwLjExODExOCIgcng9IjAiIHJ5PSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjA0MzgxNTI0ODk3MDk4IDAgMCAxIDEyNS45ODQ0OTg1NDczMzQ3NyAyNCkiIGZpbGw9InJnYig4MCwyMTcsMjU1KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCBpZD0ibG9hZGluZ0xvZ28xNCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwLjExODExOCIgcng9IjAiIHJ5PSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDc4IDI0KSIgZmlsbD0icmdiKDQwLDE2OCwyMzQpIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIvPjwvZz48ZyBpZD0ibG9hZGluZ0xvZ28xNSI+PHJlY3QgaWQ9ImxvYWRpbmdMb2dvMTYiIHdpZHRoPSI1NC4wNjM4NjYiIGhlaWdodD0iNTAuNjU5MjY1IiByeD0iMCIgcnk9IjAiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMjggNzApIiBmaWxsPSJyZ2IoMywxMDAsMTg0KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCBpZD0ibG9hZGluZ0xvZ28xNyIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjUwLjY1OTI2NSIgcng9IjAiIHJ5PSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MTExNzc2ODk5MDA0IDAgMCAxIDEyNS42NDg1ODI2MjY0NTgwOCA3MCkiIGZpbGw9InJnYig0MCwxNjgsMjM0KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCBpZD0ibG9hZGluZ0xvZ28xOCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwLjY1OTI2NSIgcng9IjAiIHJ5PSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDc4IDcwKSIgZmlsbD0icmdiKDAsMTIwLDIxMikiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjxyZWN0IGlkPSJsb2FkaW5nTG9nbzE5IiB3aWR0aD0iNDYiIGhlaWdodD0iNDYiIHJ4PSIwIiByeT0iMCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNTg4NTAwNjU1MzA3NCAwIDAgMSAxMjUuMjkyODk2OTg1NTg2MDggMTE2KSIgZmlsbD0icmdiKDAsMTIwLDIxMikiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgaWQ9ImxvYWRpbmdMb2dvMjAiIHdpZHRoPSI1NC4wNjM4NjYiIGhlaWdodD0iNDYiIHJ4PSIwIiByeT0iMCIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAyOCAxMTYpIiBmaWxsPSJyZ2IoMjAsNjgsMTI1KSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCBpZD0ibG9hZGluZ0xvZ28yMSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjQ2IiByeD0iMCIgcnk9IjAiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgNzggMTE2KSIgZmlsbD0icmdiKDMsMTAwLDE4NCkiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjwvZz48L2c+PC9nPjxjbGlwUGF0aCBpZD0ibG9hZGluZ0xvZ28yMiI+PHBhdGggaWQ9ImxvYWRpbmdMb2dvMjMiIGQ9Ik0yMC4wMDIyMDAsOTEuNjAzMDY3QzIwLjAwOTkwMCw4OS43MzA3MTgsMjAuODc1NTAwLDg3Ljk5MjEwNywyMi4yOTgxMDAsODYuOTkyMTE1TDE3OS43NTkwMDAsODcuMDU0Mzc5QzE4MS4xNjgwMDAsODguMDYwOTE5LDE4Mi4wMTQwMDAsODkuODAyMTkzLDE4MS45OTkwMDAsOTEuNjY1MzMxQzE4Mi4wMjMwMDAsOTMuNTQ3NjY5LDE4MS4xNzcwMDAsOTUuMzExNjk1LDE3OS43NTkwMDAsOTYuMzM4MzI1TDEwNi42ODQwMDAsMTQ1LjgxMjk2OUwxMDUuNzMyMDAwLDE0Ni40MzU2MDVDMTA0LjMzNzAwMCwxNDcuMjY0Njc4LDEwMi43NzgwMDAsMTQ3LjY5MTk3NywxMDEuMTk3MDAwLDE0Ny42ODE5ODhDOTkuNjMzMzAwLDE0Ny42ODk3NTgsOTguMDkzMTAwLDE0Ny4yNjEzNDgsOTYuNzE2OTAwLDE0Ni40MzU2MDVMOTUuNzA5MDAwLDE0NS44MTI5NjlMMjIuNDEwMTAwLDk2LjMzODMyNUMyMC45MDIxMDAsOTUuMzU0OTgwLDE5Ljk4MzMwMCw5My41NDgwMDIsMjAuMDAyMjAwLDkxLjYwMzA2N1oiIHRyYW5zZm9ybT0ibWF0cml4KDIuMjM0MzQwODkyNzM4OTIgMCAwIDMuNDMzMTE3NjYwMDQyNDQgLTEyNC42NjkyOTMwMjAyODkwOCAtMzIyLjAxMDA3MjQ0NDIwOTE5KSIgZmlsbD0icmdiKDE4LDU5LDEwOSkiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9jbGlwUGF0aD48L2c+PGcgaWQ9ImxvYWRpbmdMb2dvMjQiIG1hc2s9InVybCgjbG9hZGluZ0xvZ28zMCkiPjxnIGlkPSJsb2FkaW5nTG9nbzI1Ij48cGF0aCBpZD0ibG9hZGluZ0xvZ28yNiIgZD0iTTE3MiwxODVMMjAsMTg1TDE4Miw5N0wxODIsMTc1QzE4MiwxODAuNTIzMDAwLDE3Ny41MjMwMDAsMTg1LDE3MiwxODVaIiBmaWxsPSJyZ2IoMjAsMTQ0LDIyMykiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PGcgaWQ9ImxvYWRpbmdMb2dvMjciPjxwYXRoIGlkPSJsb2FkaW5nTG9nbzI4IiBkPSJNMzAsMTg1TDE4MiwxODVMMjAsOTdMMjAsMTc1QzIwLDE4MC41MjMwMDAsMjQuNDc3MjAwLDE4NSwzMCwxODVaIiBmaWxsPSJyZ2IoNDAsMTY4LDIzNCkiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjwvZz48ZyBpZD0ibG9hZGluZ0xvZ28yOV90cyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAxLjAwMDY5OSw5Ny40OTk1NzMpIHNjYWxlKDEsMSkiPjxwYXRoIGlkPSJsb2FkaW5nTG9nbzI5IiBzdHlsZT0iZmlsdGVyOmRyb3Atc2hhZG93KDBweCAwcHggMHB4IHJnYmEoMCwwLDAsMC4wOSkpIiBkPSJNMjIuNDA4MTAwLDEwMS40MjEwMDBDMjAuOTAwMjAwLDEwMC41MzUwMDAsMTkuOTgxMzAwLDk4LjkwNjkwMCwyMC4wMDAzMDAsOTcuMTU0NTAwQzIwLjAwNzcwMCw5NS41MDIwMDAsMjAuODM4NTAwLDkzLjk2NTIwMCwyMi4yMDk1MDAsOTMuMDU2MTAwTDE3OS43NTcwMDAsOTMuMDU2MTAwQzE4MS4xNjYwMDAsOTMuOTYzMDAwLDE4Mi4wMTIwMDAsOTUuNTMxOTAwLDE4MS45OTcwMDAsOTcuMjEwNjAwQzE4Mi4wMjEwMDAsOTguOTA2NjAwLDE4MS4xNzUwMDAsMTAwLjQ5NjAwMCwxNzkuNzU3MDAwLDEwMS40MjEwMDBMMTA2LjY4MjAwMCwxNDUuOTk4MDAwTDEwNS43MzAwMDAsMTQ2LjU1OTAwMEMxMDQuMzM1MDAwLDE0Ny4zMDYwMDAsMTAyLjc3NjAwMCwxNDcuNjkxMDAwLDEwMS4xOTUwMDAsMTQ3LjY4MjAwMEM5OS42MzEzMDAsMTQ3LjY4OTAwMCw5OC4wOTExMDAsMTQ3LjMwMzAwMCw5Ni43MTUwMDAsMTQ2LjU1OTAwMEw5NS43MDcxMDAsMTQ1Ljk5ODAwMEwyMi40MDgxMDAsMTAxLjQyMTAwMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMDEuMDAwNjk5LC05Ny40OTk1NzMpIiBmaWxsPSJyZ2IoODAsMjE3LDI1NSkiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjxtYXNrIGlkPSJsb2FkaW5nTG9nbzMwIiBtYXNrLXR5cGU9ImFscGhhIj48cGF0aCBpZD0ibG9hZGluZ0xvZ28zMSIgZD0iTTIwLDk3TDE4Miw5N0wxODIsMTc1QzE4MiwxODAuNTIzMDAwLDE3Ny41MjMwMDAsMTg1LDE3MiwxODVMMzAsMTg1QzI0LjQ3NzIwMCwxODUsMjAsMTgwLjUyMzAwMCwyMCwxNzVMMjAsOTdaIiBmaWxsPSJyZ2IoMTk2LDE5NiwxOTYpIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIvPjwvbWFzaz48L2c+PC9nPjwvZz48L2c+PC9nPjwvc3ZnPgogICAgICAgICA8c3ZnIGlkPSJNU0xvZ28iIHdpZHRoPSI5OSIgaGVpZ2h0PSIyMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgPGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgZD0iTTM0LjY0MyAxMi4wNzVsLS41ODggMS42NDdoLS4wMzRjLS4xMDUtLjM4Ny0uMjgtLjkzNC0uNTU2LTEuNjNsLTMuMTUtNy44OTdoLTMuMDc3VjE2Ljc1aDIuMDNWOS4wMzJjMC0uNDc2LS4wMS0xLjA1Mi0uMDMtMS43MTEtLjAxLS4zMzMtLjA0OS0uNi0uMDU4LS44MDRoLjA0NWMuMTAzLjQ3My4yMS44MzQuMjg3IDEuMDc1bDMuNzc2IDkuMTZoMS40MmwzLjc0OC05LjI0M2MuMDg1LS4yMTEuMTc1LS42MjIuMjU3LS45OTJoLjA0NGMtLjA0OC45MTUtLjA5IDEuNzUtLjA5NSAyLjI1NnY3Ljk3OGgyLjE2NVY0LjE5NWgtMi45NTZsLTMuMjI4IDcuODh6IgogICAgICAgICAgICAgICAgICAgIGZpbGw9IiM3Mzc0NzQiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wIDIwLjk1Nmg5OC4xNDhWMEgweiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iIzczNzQ3NCIKICAgICAgICAgICAgICAgICAgICBkPSJNNDIuODY2IDE2Ljc1MWgyLjExOFY3Ljc1MmgtMi4xMTh6TTQzLjk0NyAzLjkyOWMtLjM0OSAwLS42NTMuMTE5LS45MDIuMzUzYTEuMTY2IDEuMTY2IDAgMDAtLjM3OC44ODNjMCAuMzQ0LjEyNi42MzYuMzc0Ljg2NS4yNDcuMjMuNTUyLjM0NS45MDYuMzQ1cy42Ni0uMTE1LjkxLS4zNDVjLjI1LS4yMy4zNzktLjUyLjM3OS0uODY1IDAtLjMzOS0uMTI1LS42MzItLjM3LS44NzNhMS4yNjIgMS4yNjIgMCAwMC0uOTE5LS4zNjNNNTIuNDc3IDcuNjYzYTUuODkyIDUuODkyIDAgMDAtMS4xODItLjEyN2MtLjk3MSAwLTEuODM4LjIwOS0yLjU3NC42Mi0uNzM5LjQxLTEuMzEuOTk4LTEuNjk5IDEuNzQ1LS4zODYuNzQ1LS41ODMgMS42MTUtLjU4MyAyLjU4NSAwIC44NS4xOSAxLjYzMS41NjcgMi4zMTguMzc3LjY5LjkxIDEuMjMgMS41ODUgMS42MDIuNjczLjM3MyAxLjQ1Mi41NjMgMi4zMTMuNTYzIDEuMDA2IDAgMS44NjYtLjIwMSAyLjU1NC0uNTk3bC4wMjctLjAxN3YtMS45NGwtLjA4OS4wNjZjLS4zMTIuMjI3LS42Ni40MDgtMS4wMzUuNTM4YTMuMTIxIDMuMTIxIDAgMDEtMS4wMTQuMTk3Yy0uODMgMC0xLjQ5Ny0uMjYtMS45ODItLjc3Mi0uNDg1LS41MTMtLjczLTEuMjMzLS43My0yLjE0IDAtLjkxMi4yNTUtMS42NTEuNzYxLTIuMTk2LjUwNC0uNTQ0IDEuMTczLS44MiAxLjk4Ni0uODIuNjk1IDAgMS4zNzQuMjM2IDIuMDE0LjcwMmwuMDkuMDYzVjguMDExbC0uMDI5LS4wMTdjLS4yNDEtLjEzNS0uNTcxLS4yNDYtLjk4LS4zMzFNNTkuNDUyIDcuNTk3YTIuMTcgMi4xNyAwIDAwLTEuNDE1LjUwN2MtLjM1OC4yOTYtLjYxNi43LS44MTQgMS4yMDdINTcuMlY3Ljc1M2gtMi4xMTZ2OC45OTlINTcuMnYtNC42MDNjMC0uNzg0LjE3OC0xLjQyNi41MjgtMS45MTIuMzQ2LS40OC44MDYtLjcyMyAxLjM2OS0uNzIzLjE5IDAgLjQwNC4wMzEuNjM2LjA5My4yMy4wNjMuMzk2LjEyOS40OTMuMmwuMDkuMDY0VjcuNzM3bC0uMDM0LS4wMTRjLS4xOTctLjA4My0uNDc3LS4xMjYtLjgzLS4xMjZNNjYuODg1IDE0LjQ2NWMtLjM5Ny40OTktLjk5Ni43NTEtMS43NzkuNzUxLS43NzcgMC0xLjM5LS4yNTYtMS44MjMtLjc2Ni0uNDM1LS41MS0uNjU1LTEuMjM4LS42NTUtMi4xNjMgMC0uOTU0LjIyLTEuNzAxLjY1NS0yLjIyLjQzMy0uNTE2IDEuMDQtLjc3OCAxLjgwNi0uNzc4Ljc0MyAwIDEuMzM1LjI1IDEuNzU4Ljc0NC40MjYuNDk2LjY0MiAxLjIzNy42NDIgMi4yMDIgMCAuOTc3LS4yMDMgMS43MjgtLjYwNCAyLjIzbS0xLjY4My02LjkyOWMtMS40ODQgMC0yLjY2My40MzUtMy41MDMgMS4yOTMtLjg0Ljg1Ny0xLjI2NSAyLjA0NC0xLjI2NSAzLjUyNyAwIDEuNDEuNDE1IDIuNTQzIDEuMjM1IDMuMzY4LjgyLjgyNiAxLjkzNiAxLjI0NSAzLjMxNiAxLjI0NSAxLjQzOCAwIDIuNTkzLS40NDEgMy40MzQtMS4zMS44NC0uODcgMS4yNjUtMi4wNDUgMS4yNjUtMy40OTMgMC0xLjQzMy0uNC0yLjU3My0xLjE4Ny0zLjM5NC0uNzg5LS44Mi0xLjg5Ny0xLjIzNi0zLjI5NS0xLjIzNk03NC4zNzggMTEuNDcxYy0uNjY3LS4yNjgtMS4wOTUtLjQ5LTEuMjctLjY2LS4xNy0uMTY1LS4yNTctLjM5OC0uMjU3LS42OTMgMC0uMjYyLjEwOC0uNDcyLjMyNy0uNjQyLjIxOS0uMTcuNTI2LS4yNTcuOTExLS4yNTcuMzU3IDAgLjcyMy4wNTYgMS4wODUuMTY2LjM2My4xMTEuNjgyLjI2Ljk0OS40NGwuMDg4LjA2VjcuOTI4bC0uMDM1LS4wMTVhNC43MTUgNC43MTUgMCAwMC0uOTYyLS4yNjggNS45MzIgNS45MzIgMCAwMC0xLjA1Ni0uMTA5Yy0xLjAxIDAtMS44NDUuMjU4LTIuNDgzLjc2Ny0uNjQuNTEyLS45NjcgMS4xODQtLjk2NyAxLjk5NyAwIC40MjIuMDcuNzk4LjIwOSAxLjExNi4xNC4zMi4zNTUuNi42NDEuODM3LjI4My4yMzMuNzIyLjQ3OCAxLjMwMi43MjguNDg4LjIuODUyLjM3IDEuMDgzLjUwNS4yMjcuMTMuMzg3LjI2My40NzcuMzkuMDg4LjEyNy4xMzMuMjk5LjEzMy41MTIgMCAuNjA0LS40NTIuODk3LTEuMzg0Ljg5N2EzLjggMy44IDAgMDEtMS4xNzItLjIxMyA0LjQxOCA0LjQxOCAwIDAxLTEuMi0uNjA5bC0uMDg5LS4wNjR2Mi4wNjRsLjAzMy4wMTVjLjMwNC4xNC42ODYuMjU3IDEuMTM3LjM1LjQ0OS4wOTQuODU5LjE0MSAxLjIxMy4xNDEgMS4wOTYgMCAxLjk3Ny0uMjYgMi42Mi0uNzcxLjY0OC0uNTE1Ljk3Ni0xLjIwNC45NzYtMi4wNDUgMC0uNjA3LS4xNzYtMS4xMjctLjUyNS0xLjU0Ni0uMzQ1LS40MTYtLjk0Ni0uNzk5LTEuNzg0LTEuMTM2TTg0LjA2MyAxNC40NjVjLS4zOTguNDk5LS45OTcuNzUxLTEuNzguNzUxLS43NzcgMC0xLjM5LS4yNTYtMS44MjItLjc2Ni0uNDM1LS41MS0uNjU1LTEuMjM4LS42NTUtMi4xNjMgMC0uOTU0LjIyLTEuNzAxLjY1NS0yLjIyLjQzMi0uNTE2IDEuMDQtLjc3OCAxLjgwNi0uNzc4Ljc0MyAwIDEuMzM1LjI1IDEuNzU4Ljc0NC40MjYuNDk2LjY0MiAxLjIzNy42NDIgMi4yMDIgMCAuOTc3LS4yMDQgMS43MjgtLjYwNCAyLjIzTTgyLjM4IDcuNTM2Yy0xLjQ4NCAwLTIuNjYzLjQzNS0zLjUwMyAxLjI5My0uODQuODU3LTEuMjY2IDIuMDQ0LTEuMjY2IDMuNTI3IDAgMS40MS40MTUgMi41NDMgMS4yMzUgMy4zNjguODIuODI2IDEuOTM2IDEuMjQ1IDMuMzE3IDEuMjQ1IDEuNDM4IDAgMi41OTMtLjQ0MSAzLjQzMy0xLjMxLjg0LS44NyAxLjI2Ni0yLjA0NSAxLjI2Ni0zLjQ5MyAwLTEuNDMzLS40LTIuNTczLTEuMTg3LTMuMzk0LS43ODktLjgyLTEuODk3LTEuMjM2LTMuMjk1LTEuMjM2TTk4LjE0OSA5LjQ4VjcuNzUyaC0yLjE0NFY1LjA2OWwtLjA3Mi4wMjItMi4wMTUuNjE2LS4wMzguMDEydjIuMDM0aC0zLjE3N1Y2LjYyYzAtLjUyNy4xMTgtLjkzMS4zNTEtMS4yLjIzLS4yNjYuNTYtLjQwMi45ODItLjQwMi4zMDMgMCAuNjE2LjA3Mi45MzEuMjEzbC4wNzkuMDM1VjMuNDQ3bC0uMDM3LS4wMTNjLS4yOTQtLjEwNS0uNjk1LS4xNTktMS4xOS0uMTU5LS42MjYgMC0xLjE5NC4xMzYtMS42ODkuNDA2LS40OTUuMjctLjg4Ni42NTUtMS4xNiAxLjE0Ni0uMjcyLjQ4OS0uNDEgMS4wNTQtLjQxIDEuNjh2MS4yNDZoLTEuNDkydjEuNzI2aDEuNDkzdjcuMjczaDIuMTQyVjkuNDc5aDMuMTc3djQuNjIyYzAgMS45MDMuODk3IDIuODY4IDIuNjY4IDIuODY4LjI5MSAwIC41OTctLjAzNC45MS0uMTAxLjMxOS0uMDcuNTM1LS4xMzcuNjYyLS4yMWwuMDI5LS4wMTZ2LTEuNzQzbC0uMDg3LjA1OGMtLjExNy4wNzgtLjI2Mi4xNC0uNDMyLjE4OC0uMTcuMDQ4LS4zMTIuMDcyLS40MjIuMDcyLS40MTYgMC0uNzIzLS4xMTItLjkxNC0uMzMyLS4xOTEtLjIyMy0uMjg5LS42MTItLjI4OS0xLjE1OFY5LjQ4aDIuMTQ0eiI+CiAgICAgICAgICAgICAgICA8L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPSIjRjA1MTI0IiBkPSJNMCA5Ljk1OGg5Ljk1OFYuMDAxSDB6Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPSIjN0VCQjQyIiBkPSJNMTAuOTk1IDkuOTU4aDkuOTU3Vi4wMDFoLTkuOTU3eiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iIzMyQTBEQSIgZD0iTTAgMjAuOTU2aDkuOTU4VjExSDB6Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPSIjRkRCODEzIiBkPSJNMTAuOTk1IDIwLjk1Nmg5Ljk1N1YxMWgtOS45NTd6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L3N2Zz4KICAgIDwvZGl2PgogICAgPC9kaXY+CjxzY3JpcHQgbm9uY2U9ImxEeUczcFlaVlp0WjRWMTJoTUFwMkE9PSI+c2VsZi5zY3JpcHRzTG9hZGVkID0gc2VsZi5zY3JpcHRzTG9hZGVkIHx8IHt9OyBzZWxmLnNjcmlwdFByb2Nlc3NTdGFydCA9IHNlbGYuc2NyaXB0UHJvY2Vzc1N0YXJ0IHx8IHt9OyBzZWxmLnNjcmlwdFByb2Nlc3NTdGFydFsnb3dhLm1haWxpbmRleC5qcyddID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtzZWxmLk93YT1zZWxmLk93YXx8e30sc2VsZi5Pd2EubWFpbGluZGV4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBuLHIsbz10WzBdLGk9dFsxXSx1PXRbM118fFtdLGw9MCxmPVtdO2w8by5sZW5ndGg7bCsrKXI9b1tsXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxyKSYmYVtyXSYmZi5wdXNoKGFbcl1bMF0pLGFbcl09MDtmb3IobiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKTtmb3IoZCYmZCh0KSx1LmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWFbZV0pe2FbZV09bnVsbDt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7dC5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixjLm5jJiZ0LnNldEF0dHJpYnV0ZSgibm9uY2UiLGMubmMpLHQucmVsPSJwcmVmZXRjaCIsdC5hcz0ic2NyaXB0Iix0LmhyZWY9cyhlKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfX0pKTtmLmxlbmd0aDspZi5zaGlmdCgpKCl9dmFyIG49e30scj0iQUcwOCI9PT0oZG9jdW1lbnQucXVlcnlTZWxlY3RvcigibWV0YVtuYW1lPSdlbnZpcm9ubWVudCddIikmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbbmFtZT0nZW52aXJvbm1lbnQnXSIpLmdldEF0dHJpYnV0ZSgiY29udGVudCIpKXx8IkFHMDkiPT09KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbbmFtZT0nZW52aXJvbm1lbnQnXSIpJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJtZXRhW25hbWU9J2Vudmlyb25tZW50J10iKS5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKSk/WyIuLi9yZXNvdXJjZXMvbG9jYWxlLWNvbnNvbGlkYXRlZC9bbG9jYWxlXS9vd2EuY29uc29saWRhdGVkLm1haWxpbmRleC5qc29uIl06W10sbz1bXTtzZWxmLl9sb2NTdHJpbmdzPXthZGRMb2NzdHJpbmdBc3NldDpmdW5jdGlvbihlKXtyZXR1cm4gci5wdXNoKGUpLFByb21pc2UuYWxsKG8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oYW5kbGVyKGMucCtlLnJlcGxhY2UoL1xbbG9jYWxlXF0vZyx0LmxvY2FsZSkpfSkpKX0scmVnaXN0ZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8ucHVzaCh7bG9jYWxlOmUsaGFuZGxlcjp0fSksUHJvbWlzZS5hbGwoci5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiB0KGMucCtuLnJlcGxhY2UoL1xbbG9jYWxlXF0vZyxlKSl9KSkpfSx1bnJlZ2lzdGVySGFuZGxlcjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248bztuKyspaWYob1tuXS5sb2NhbGU9PT1lJiZvLmhhbmRsZXI9PXQpcmV0dXJuIHZvaWQgby5zcGxpY2UobiwxKX19O3ZhciBpPXsxNjoxNiwyODoyOCwzMzozMyw0Mzo0Myw0Njo0Niw0Nzo0Nyw2NTo2NSw2Nzo2Nyw2OTo2OSw3MDo3MCw3OTo3OSw4Mjo4Miw4Mzo4Myw4NDo4NCw5NDo5NCw5ODo5OCwxMDE6MTAxLDEwMjoxMDIsMTA1OjEwNSwxMDk6MTA5LDExNDoxMTQsMTE1OjExNSwxMTc6MTE3LDEyMDoxMjAsMTIxOjEyMSwxMjM6MTIzLDEyNToxMjUsMTI2OjEyNiwxMzI6MTMyLDEzMzoxMzMsMTM1OjEzNSwxMzY6MTM2LDE0MDoxNDAsMTQxOjE0MSwxNTM6MTUzLDE1NDoxNTQsMTU4OjE1OCwxNTk6MTU5LDE2MToxNjEsMTYzOjE2MywxNjQ6MTY0LDE2ODoxNjgsMTY5OjE2OSwxNzA6MTcwLDE3NDoxNzQsMTkwOjE5MCwxOTI6MTkyLDE5NDoxOTQsMTk3OjE5NywxOTg6MTk4LDE5OToxOTksMjAxOjIwMSwyMDQ6MjA0LDIwNToyMDUsMjA2OjIwNiwyMDc6MjA3LDIwOToyMDksMjExOjIxMSwyMTM6MjEzLDIxNDoyMTQsMjE1OjIxNSwyMTY6MjE2LDIxNzoyMTcsMjE4OjIxOCwyMjE6MjIxLDIyMzoyMjMsMjI2OjIyNiwyMjg6MjI4LDIzNDoiTWFpbEJvb3R+QWRkaW5zflJlYWRpbmdQYW5lIiwyMzY6Ik1haWxCb290fkNhbGVuZGFyQ2FyZH5DYWxlbmRhckl0ZW1QZWVrIiwyMzc6Ik1haWxCb290fkNhbGVuZGFyQ2FyZH5UaW1lUGFuZWxFdmVudERldGFpbHMiLDIzODoiTWFpbEJvb3R+Q2FsZW5kYXJEZWVwQm9vdH5PcHhCb290IiwyMzk6Ik1haWxCb290fkNhbGVuZGFyV2lkZ2V0T3B4flRpbWVQYW5lbENhbGVuZGFyIiwyNDA6Ik1haWxCb290fkNhbGVuZGFyV2lkZ2V0T3B4flRvZG9XaWRnZXRPcHgiLDI0MToiTWFpbEJvb3R+TG9jYXRpb25DYXJkfkxvY2F0aW9uQ2FyZE9weCIsMjQzOiJNYWlsQm9vdH5UaW1lUGFuZWx+VGltZVBhbmVsT3B4IiwyNDQ6Ik1haWxCb290flRvZG9MaXN0flRvZG9XaWRnZXRPcHgiLDI0NToyNDUsMjQ2OjI0NiwyNDc6MjQ3LDI0OToyNDksMjUwOjI1MCwyNTI6MjUyLDI1MzoyNTMsMjU1OjI1NSwyNTc6MjU3LDI2MDoyNjAsMjYxOjI2MSwyNjQ6MjY0LDI2NToyNjUsMjY2OjI2NiwyNjc6MjY3LDI2OToyNjksMjcwOjI3MCwyNzE6MjcxLDI3MzoyNzMsMjc0OjI3NCwyNzU6Mjc1LDI3NjoyNzYsMjc3OjI3NywyNzg6Mjc4LDI4MToyODEsMjg0OjI4NCwyODc6Mjg3LDI4ODoyODgsMjg5OjI4OSwyOTA6MjkwLDI5MToyOTEsMjk0OjI5NCwyOTY6Mjk2LDI5NzoyOTcsMjk5OjI5OSwzMDA6MzAwLDMwMzozMDMsMzA1OjMwNSwzMDY6MzA2LDMwNzozMDcsMzA5OjMwOSwzMTA6MzEwLDMxMTozMTEsMzEzOjMxMywzMTc6MzE3LDMxOTozMTksMzIyOjMyMiwzMjM6MzIzLDMyNjozMjYsMzI3OjMyNywzMjg6MzI4LDMyOTozMjksMzMxOjMzMSwzMzU6MzM1LDMzNjozMzYsMzM3OjMzNywzMzg6MzM4LDM0MDozNDAsMzQ1OjM0NSwzNTM6MzUzLDM1NDozNTQsMzY2OiJDYWxlbmRhckJvYXJkQXNzZXRzIiwzNjc6IkNhbGVuZGFyQm9vdCIsMzY4OiJDYWxlbmRhckZ1bGxDb21wb3NlIiwzNzA6IkNhbGVuZGFyUXVpY2tDb21wb3NlIiwzNzE6IkNhbGVuZGFyUmVhZGluZ1BhbmUiLDM3MjoiQ2FsZW5kYXJSaWJib24iLDM3NDoiRmlsZXNCb290IiwzNzg6IkxvY2F0aW9uQ2FyZCIsMzc5OiJNYWlsQm9vdCIsMzgwOiJNYWlsQm9vdH5BY2NvdW50cyIsMzgxOiJNYWlsQm9vdH5BZGRpbnMiLDM4MjoiTWFpbEJvb3R+QXBwSG9zdEJvb3QiLDM4OToiTWFpbEJvb3R+Q2FsZW5kYXJCb2FyZCIsMzkwOiJNYWlsQm9vdH5DYWxlbmRhckJvb3RzdHJhcFV0aWxzIiwzOTE6Ik1haWxCb290fkNhbGVuZGFyQ2FyZCIsMzkyOiJNYWlsQm9vdH5DYWxlbmRhckRlZXBCb290IiwzOTM6Ik1haWxCb290fkNhbGVuZGFyRnVuY3Rpb25hbEJvb3QiLDM5NDoiTWFpbEJvb3R+Q2FsZW5kYXJJdGVtUGVlayIsMzk1OiJNYWlsQm9vdH5DYWxlbmRhcldpZGdldE9weCIsMzk4OiJNYWlsQm9vdH5MZWdhY3lBcHBCYXIiLDM5OToiTWFpbEJvb3R+TG9jYXRpb25DYXJkT3B4Iiw0MDA6Ik1haWxCb290fk1haWxGdW5jdGlvbmFsQm9vdCIsNDA3OiJNYWlsQm9vdH5QZW9wbGVCb290Iiw0MTA6Ik1haWxCb290flJlYWRpbmdQYW5lIiw0MTE6Ik1haWxCb290flJlbGF0ZWRDb250ZW50Iiw0MTI6Ik1haWxCb290flJlbGF0ZWRDb250ZW50SW5zaWdodHNPcHgiLDQxMzoiTWFpbEJvb3R+Um9vbVNlbGVjdG9yIiw0MTQ6Ik1haWxCb290flNjaGVkdWxpbmdBc3Npc3RhbnQiLDQxNToiTWFpbEJvb3R+U2hhcmVkQm9vdCIsNDE2OiJNYWlsQm9vdH5UaW1lUGFuZWxDYWxlbmRhciIsNDE4OiJNYWlsQm9vdH5UaW1lUGFuZWxFdmVudERldGFpbHMiLDQyMDoiTWFpbEJvb3R+VGltZVN0cmVhbUNhbnZhcyIsNDIxOiJNYWlsQm9vdH5UaW1lU3RyZWFtQ29udGV4dE1lbnUiLDQyMjoiTWFpbEJvb3R+VG9kb0xpc3QiLDQyMzoiTWFpbEJvb3R+VG9kb1dpZGdldE9weCIsNDI0OiJNYWlsQm9vdH5UeHAiLDQyNToiTWFpbEJvb3R+Z2ZoLWl0ZW1zdmlldyIsNDI3OiJNYWlsQ29tcG9zZSIsNDI4OiJNYWlsRGVlcEJvb3QiLDQzMDoiTWFpbFJpYmJvbiIsNDMzOiJUaW1lUGFuZWwiLDQzNToiVGltZXN0cmVhbVF1aWNrU3dpdGNoZXIiLDQ0NjoiZmlsZXNWaWV3Iiw0NjQ6NDY0LDQ2NTo0NjUsNDY2OjQ2Niw0Njc6NDY3LDQ2ODo0NjgsNDY5OjQ2OSw0NzA6NDcwLDQ3MTo0NzEsNDcyOjQ3Miw0NzM6NDczLDQ3NDo0NzQsNDc2OjQ3Niw0Nzg6NDc4LDQ3OTo0NzksNDgwOjQ4MCw0ODE6NDgxLDQ4Mjo0ODIsNDgzOjQ4Myw0ODQ6NDg0LDQ4NTo0ODUsNDg2OjQ4Niw0ODc6NDg3LDQ4ODo0ODgsNDg5OjQ4OSw0OTA6NDkwLDQ5MTo0OTEsNDkzOjQ5Myw0OTQ6NDk0LDQ5NTo0OTUsNDk2OjQ5Niw0OTc6NDk3LDQ5ODo0OTgsNDk5OjQ5OSw1MDA6NTAwLDUwMTo1MDEsNTAyOjUwMiw1MDM6NTAzLDUwNDo1MDQsNTA1OjUwNSw1MDY6NTA2LDUwNzo1MDcsNTA4OjUwOCw1MDk6NTA5LDUxMDo1MTAsNTExOjUxMSw1MTI6NTEyLDUxMzo1MTMsNTE1OjUxNSw1MTc6NTE3LDUxOTo1MTksNTIxOjUyMSw1MjI6NTIyLDUyNDo1MjQsNTI1OjUyNSw1MjY6NTI2LDUyNzo1MjcsNTI4OjUyOCw1Mjk6NTI5LDUzMDo1MzAsNTMxOjUzMSw1MzI6NTMyLDUzNTo1MzUsNTM2OjUzNiw1Mzk6NTM5LDU0MTo1NDEsNTQzOjU0Myw1NDc6NTQ3LDU0ODo1NDgsNTQ5OjU0OSw1NTA6NTUwLDU1MTo1NTEsNTUyOjU1Miw1NTM6NTUzLDU1NDo1NTQsNTU1OjU1NSw1NTY6NTU2LDU1Nzo1NTcsNTYxOjU2MSw1NjI6NTYyLDU2Mzo1NjMsNTY4OjU2OCw1Njk6NTY5LDU3MDo1NzAsNTcxOjU3MSw1NzQ6NTc0LDU3NTo1NzUsNTc2OjU3Niw1Nzc6NTc3LDU3ODo1NzgsNTgwOjU4MCw1ODE6NTgxLDU4Mjo1ODIsNTgzOjU4Myw1ODU6NTg1LDU4Njo1ODYsNTg3OjU4Nyw1ODg6NTg4LDU4OTo1ODksNTkxOjU5MSw1OTI6NTkyLDU5Mzo1OTMsNTk2OjU5Niw1OTc6NTk3LDU5ODo1OTgsNTk5OjU5OSw2MDI6NjAyLDYwMzo2MDMsNjA0OjYwNCw2MDU6NjA1LDYwNjo2MDYsNjA3OjYwNyw2MDg6NjA4LDYwOTo2MDksNjExOjYxMSw2MTI6NjEyLDYxNDo2MTQsNjE2OjYxNiw2MTc6NjE3LDYxODo2MTgsNjE5OjYxOSw2MjA6NjIwLDYyMTo2MjEsNjIzOjYyMyw2MjQ6NjI0LDYyNTo2MjUsNjI2OjYyNiw2MzY6NjM2LDYzNzo2MzcsNjM4OjYzOCw2Mzk6NjM5LDY0MDo2NDAsNjQzOjY0Myw2NDQ6NjQ0LDY0NTo2NDUsNjQ3OjY0Nyw2NDg6NjQ4LDY0OTo2NDksNjUwOjY1MCw2NTE6NjUxLDY1Mzo2NTMsNjU0OjY1NCw2NTU6NjU1LDY1ODo2NTgsNjYwOjY2MCw2NjE6NjYxLDY2Mjo2NjIsNjY0OjY2NCw2NjU6NjY1LDY2Njo2NjYsNjY3OjY2Nyw2Njg6NjY4LDY2OTo2NjksNjcxOjY3MSw2NzI6NjcyLDY3Mzo2NzMsNjc0OjY3NCw2NzU6Njc1LDY3ODo2NzgsNjc5OjY3OSw2ODE6NjgxLDY4NDo2ODQsNjg2OjY4Niw2ODc6Njg3LDY4ODo2ODgsNjg5OjY4OSw2OTA6NjkwLDY5MTo2OTEsNjkyOjY5Miw2OTg6Njk4LDY5OTo2OTksNzAwOjcwMCw3MDE6NzAxLDcwMjo3MDIsNzAzOjcwMyw3MDU6NzA1LDcwNjo3MDYsNzA3OjcwNyw3MDg6NzA4LDcwOTo3MDksNzEwOjcxMCw3MTU6NzE1LDcxNjo3MTYsNzE4OjcxOCw3MTk6NzE5LDcyMjo3MjIsNzIzOjcyMyw3MjQ6NzI0LDcyODo3MjgsNzI5OjcyOSw3MzE6NzMxLDczNDo3MzQsNzM1OjczNSw3MzY6NzM2LDczNzo3MzcsNzM4OjczOCw3Mzk6NzM5LDc0NTo3NDUsNzQ2Ojc0Niw3NDg6NzQ4LDc0OTo3NDksNzUwOjc1MCw3NTI6NzUyLDc1Mzo3NTMsNzU0Ojc1NCw3NTc6NzU3LDc1ODo3NTgsNzU5Ojc1OSw3NjE6NzYxLDc2Mjo3NjIsNzYzOjc2Myw3NjQ6NzY0LDc2Nzo3NjcsNzY4Ojc2OCw3NzE6NzcxLDc3Mjo3NzIsNzczOjc3Myw3Nzk6Nzc5LDc4MDo3ODAsNzgxOjc4MSw3ODI6NzgyLDc4Mzo3ODMsNzg2Ojc4Niw3ODc6Nzg3LDc4ODo3ODgsNzg5Ojc4OSw3OTA6NzkwLDc5MTo3OTEsNzk1Ojc5NSw3OTY6Nzk2LDc5Nzo3OTcsNzk4Ojc5OCw3OTk6Nzk5LDgwMDo4MDAsODAxOjgwMSw4MDM6ODAzLDgwNDo4MDQsODA5OjgwOSw4MTA6ODEwLDgxMTo4MTEsODEyOjgxMiw4MTM6ODEzLDgxNDo4MTQsODE1OjgxNSw4MTY6ODE2LDgyMTo4MjEsODIyOjgyMiw4MjM6ODIzLDgyNDo4MjQsODI1OjgyNSw4Mjk6ODI5LDgzMDo4MzAsODMxOjgzMSw4MzI6ODMyLDgzMzo4MzMsODM0OjgzNCw4MzU6ODM1LDgzNjo4MzYsODM3OjgzNyw4Mzg6ODM4LDg0Mjo4NDIsODQzOjg0Myw4NDQ6ODQ0LDg0NTo4NDUsODQ2Ojg0Niw4NDc6ODQ3LDg0ODo4NDgsODU0Ojg1NCw4NTU6ODU1LDg1Njo4NTYsODU3Ojg1Nyw4NTg6ODU4LDg1OTo4NTksODYwOjg2MCw4NjI6ODYyLDg2Mzo4NjMsODY0Ojg2NCw4NjU6ODY1LDg2Njo4NjYsODc5Ojg3OSw4ODA6ODgwLDg4MTo4ODEsODgyOjg4Miw4ODM6ODgzLDg4NDo4ODQsODk4Ojg5OCw4OTk6ODk5LDkwMDo5MDAsOTAxOjkwMSw5MDI6OTAyLDkwMzo5MDMsOTA0OjkwNCw5MDU6OTA1LDkwNjo5MDYsOTA4OjkwOCw5MTg6OTE4LDkyMDo5MjAsOTIxOjkyMSw5MjI6OTIyLDkyMzo5MjMsOTI1OjkyNSw5MjY6OTI2LDkyNzo5MjcsOTM3OjkzNyw5Mzg6OTM4LDkzOTo5MzksOTUwOjk1MCw5NTE6OTUxLDk1Mjo5NTIsOTUzOjk1Myw5NTQ6OTU0LDk1Nzo5NTcsOTU4Ojk1OCw5NTk6OTU5LDk2NDo5NjQsOTY1Ojk2NSw5NjY6OTY2LDk2Nzo5NjcsOTY4Ojk2OCw5Njk6OTY5LDk3MDo5NzAsOTcxOjk3MSw5NzI6OTcyLDk3Mzo5NzMsOTc5Ojk3OSw5ODA6OTgwLDk4MTo5ODEsOTgyOjk4Miw5ODM6OTgzLDk4NTo5ODUsOTg2Ojk4Niw5ODc6OTg3LDk4ODo5ODgsOTg5Ojk4OSw5OTA6OTkwLDk5Mjo5OTIsOTk0Ojk5NCwxMDA1OjEwMDUsMTAwNjoxMDA2LDEwMDc6MTAwNywxMDA4OjEwMDgsMTAwOToxMDA5LDEwMTI6MTAxMiwxMDE2OjEwMTYsMTAyNjoxMDI2LDEwMjc6MTAyNywxMDI5OjEwMjksMTAzMDoxMDMwLDEwMzE6MTAzMSwxMDMyOjEwMzIsMTAzNDoxMDM0LDEwMzU6MTAzNSwxMDM2OjEwMzYsMTAzNzoxMDM3LDEwMzg6MTAzOCwxMDM5OjEwMzksMTA0MDoxMDQwLDEwNDE6MTA0MSwxMDUzOjEwNTMsMTA1NDoxMDU0LDEwNTY6MTA1NiwxMDU3OjEwNTcsMTA1ODoxMDU4LDEwNTk6MTA1OSwxMDYwOjEwNjAsMTA2MToxMDYxLDEwNjI6MTA2MiwxMDYzOjEwNjMsMTA2NToxMDY1LDEwNjY6MTA2NiwxMDY3OjEwNjcsMTA2OToxMDY5LDEwNzA6MTA3MCwxMDcxOjEwNzEsMTA3NDoxMDc0LDEwNzU6MTA3NSwxMDc2OjEwNzYsMTA5NjoxMDk2LDEwOTc6MTA5NywxMDk4OjEwOTgsMTEwMDoxMTAwLDExMDE6MTEwMSwxMTAzOjExMDMsMTEwNDoxMTA0LDExMDU6MTEwNSwxMTA2OjExMDYsMTEwOToxMTA5LDExMTA6MTExMCwxMTExOjExMTEsMTExMjoxMTEyLDExMTM6MTExMywxMTMxOjExMzEsMTEzMzoxMTMzLDExMzU6MTEzNSwxMTM2OjExMzYsMTEzNzoxMTM3LDExMzg6MTEzOCwxMTM5OjExMzksMTE0MDoxMTQwLDExNDM6MTE0MywxMTQ0OjExNDQsMTE0NToxMTQ1LDExNDc6MTE0NywxMTQ4OjExNDgsMTE0OToxMTQ5LDExNTA6MTE1MCwxMTUxOjExNTEsMTE1MjoxMTUyLDExNTM6MTE1MywxMTY5OjExNjksMTE3MToxMTcxLDExNzQ6MTE3NCwxMTc1OjExNzUsMTE3NjoxMTc2LDExNzk6MTE3OSwxMTgwOjExODAsMTE4MToxMTgxLDExODI6MTE4MiwxMTgzOjExODMsMTE4NzoxMTg3LDExODg6MTE4OCwxMTg5OjExODksMTE5MDoxMTkwLDExOTE6MTE5MSwxMTkyOjExOTIsMTE5MzoxMTkzLDEyMTA6MTIxMCwxMjExOjEyMTEsMTIxMzoxMjEzLDEyMTQ6MTIxNCwxMjE2OjEyMTYsMTIxNzoxMjE3LDEyMTk6MTIxOSwxMjIwOjEyMjAsMTIyMToxMjIxLDEyMjU6MTIyNSwxMjI2OjEyMjYsMTIyNzoxMjI3LDEyMjk6MTIyOSwxMjMwOjEyMzAsMTIzMToxMjMxLDEyMzI6MTIzMiwxMjMzOjEyMzMsMTIzNDoxMjM0LDEyMzU6MTIzNSwxMjM2OjEyMzYsMTIzNzoxMjM3LDEyMzg6MTIzOCwxMjM5OjEyMzksMTI0MDoxMjQwLDEyNDE6MTI0MSwxMjQyOjEyNDIsMTI0MzoxMjQzLDEyNDQ6MTI0NCwxMjQ1OjEyNDUsMTI0NjoxMjQ2LDEyNzY6MTI3NiwxMzA0OjEzMDQsMTMwNToxMzA1LDEzMDY6MTMwNiwxMzA3OjEzMDcsMTMwODoxMzA4LDEzMDk6MTMwOSwxMzEwOjEzMTAsMTMxMToxMzExLDEzMTI6MTMxMiwxMzEzOjEzMTMsMTMxNDoxMzE0LDEzMTU6MTMxNSwxMzE2OjEzMTYsMTg3OToxODc5fSxhPXs0NTA6MCwxNzowLDk5OjAsMTEwOjAsMTEzOjB9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGMucCsib3dhLiIrKHsxMTM6Ik1haWxCb290fkNhbGVuZGFyRGVlcEJvb3R+RXZlbnRpZnlCb290fk5hdGl2ZVJlc29sdmVyc35PcHhCb290fk93YU1hbmFnZWRRdWVyeUxpbmt+UmVzb2x2ZXJzV2ViflNoYXJlZEJvb3QiLDE4MzoiTWFpbEJvb3R+Q2FsZW5kYXJEZWVwQm9vdH5PcHhCb290flBlb3BsZUJvb3QiLDE4NDoiTWFpbEJvb3R+TG9jYXRpb25DYXJkfkxvY2F0aW9uQ2FyZE9weH5Sb29tU2VsZWN0b3IiLDE4NToiTWFpbEJvb3R+UmVhZGluZ1BhbmV+VGltZVBhbmVsflRpbWVQYW5lbE9weCIsMjM0OiJNYWlsQm9vdH5BZGRpbnN+UmVhZGluZ1BhbmUiLDIzNToiTWFpbEJvb3R+QXBwSG9zdEJvb3R+TGVnYWN5QXBwQmFyIiwyMzY6Ik1haWxCb290fkNhbGVuZGFyQ2FyZH5DYWxlbmRhckl0ZW1QZWVrIiwyMzc6Ik1haWxCb290fkNhbGVuZGFyQ2FyZH5UaW1lUGFuZWxFdmVudERldGFpbHMiLDIzODoiTWFpbEJvb3R+Q2FsZW5kYXJEZWVwQm9vdH5PcHhCb290IiwyMzk6Ik1haWxCb290fkNhbGVuZGFyV2lkZ2V0T3B4flRpbWVQYW5lbENhbGVuZGFyIiwyNDA6Ik1haWxCb290fkNhbGVuZGFyV2lkZ2V0T3B4flRvZG9XaWRnZXRPcHgiLDI0MToiTWFpbEJvb3R+TG9jYXRpb25DYXJkfkxvY2F0aW9uQ2FyZE9weCIsMjQyOiJNYWlsQm9vdH5OYXRpdmVSZXNvbHZlcnN+UmVzb2x2ZXJzV2ViIiwyNDM6Ik1haWxCb290flRpbWVQYW5lbH5UaW1lUGFuZWxPcHgiLDI0NDoiTWFpbEJvb3R+VG9kb0xpc3R+VG9kb1dpZGdldE9weCIsMzYyOiJBcHBIb3N0RnVuY3Rpb25hbEJvb3QiLDM2NjoiQ2FsZW5kYXJCb2FyZEFzc2V0cyIsMzY3OiJDYWxlbmRhckJvb3QiLDM2ODoiQ2FsZW5kYXJGdWxsQ29tcG9zZSIsMzY5OiJDYWxlbmRhclBlZWsiLDM3MDoiQ2FsZW5kYXJRdWlja0NvbXBvc2UiLDM3MToiQ2FsZW5kYXJSZWFkaW5nUGFuZSIsMzcyOiJDYWxlbmRhclJpYmJvbiIsMzczOiJDb21wYWN0RGVuc2l0eSIsMzc0OiJGaWxlc0Jvb3QiLDM3NToiRnVsbERlbnNpdHkiLDM3NjoiR2V0SHhBY2NvdW50IiwzNzc6IkxvY2FsU3RhdGVSZXNvbHZlcnMiLDM3ODoiTG9jYXRpb25DYXJkIiwzNzk6Ik1haWxCb290IiwzODA6Ik1haWxCb290fkFjY291bnRzIiwzODE6Ik1haWxCb290fkFkZGlucyIsMzgyOiJNYWlsQm9vdH5BcHBIb3N0Qm9vdCIsMzg5OiJNYWlsQm9vdH5DYWxlbmRhckJvYXJkIiwzOTA6Ik1haWxCb290fkNhbGVuZGFyQm9vdHN0cmFwVXRpbHMiLDM5MToiTWFpbEJvb3R+Q2FsZW5kYXJDYXJkIiwzOTI6Ik1haWxCb290fkNhbGVuZGFyRGVlcEJvb3QiLDM5MzoiTWFpbEJvb3R+Q2FsZW5kYXJGdW5jdGlvbmFsQm9vdCIsMzk0OiJNYWlsQm9vdH5DYWxlbmRhckl0ZW1QZWVrIiwzOTU6Ik1haWxCb290fkNhbGVuZGFyV2lkZ2V0T3B4IiwzOTY6Ik1haWxCb290fkNoYW5nZU1vZHVsZSIsMzk4OiJNYWlsQm9vdH5MZWdhY3lBcHBCYXIiLDM5OToiTWFpbEJvb3R+TG9jYXRpb25DYXJkT3B4Iiw0MDA6Ik1haWxCb290fk1haWxGdW5jdGlvbmFsQm9vdCIsNDAxOiJNYWlsQm9vdH5NYWlsUm91dGVzIiw0MDI6Ik1haWxCb290fk1haWxTdG9yZUFjdGlvbnMiLDQwNDoiTWFpbEJvb3R+TmF0aXZlUmVzb2x2ZXJzIiw0MDY6Ik1haWxCb290fk93YU1hbmFnZWRRdWVyeUxpbmsiLDQwNzoiTWFpbEJvb3R+UGVvcGxlQm9vdCIsNDA4OiJNYWlsQm9vdH5QZW9wbGVGdW5jdGlvbmFsQm9vdCIsNDA5OiJNYWlsQm9vdH5Qb3N0U2hhcmVkQm9vdCIsNDEwOiJNYWlsQm9vdH5SZWFkaW5nUGFuZSIsNDExOiJNYWlsQm9vdH5SZWxhdGVkQ29udGVudCIsNDEyOiJNYWlsQm9vdH5SZWxhdGVkQ29udGVudEluc2lnaHRzT3B4Iiw0MTM6Ik1haWxCb290flJvb21TZWxlY3RvciIsNDE0OiJNYWlsQm9vdH5TY2hlZHVsaW5nQXNzaXN0YW50Iiw0MTU6Ik1haWxCb290flNoYXJlZEJvb3QiLDQxNjoiTWFpbEJvb3R+VGltZVBhbmVsQ2FsZW5kYXIiLDQxNzoiTWFpbEJvb3R+VGltZVBhbmVsQ29tcG9zZSIsNDE4OiJNYWlsQm9vdH5UaW1lUGFuZWxFdmVudERldGFpbHMiLDQxOToiTWFpbEJvb3R+VGltZVBhbmVsT3B4Iiw0MjA6Ik1haWxCb290flRpbWVTdHJlYW1DYW52YXMiLDQyMToiTWFpbEJvb3R+VGltZVN0cmVhbUNvbnRleHRNZW51Iiw0MjI6Ik1haWxCb290flRvZG9MaXN0Iiw0MjM6Ik1haWxCb290flRvZG9XaWRnZXRPcHgiLDQyNDoiTWFpbEJvb3R+VHhwIiw0MjU6Ik1haWxCb290fmdmaC1pdGVtc3ZpZXciLDQyNjoiTWFpbEJvb3R+cGRmanNXb3JrZXIiLDQyNzoiTWFpbENvbXBvc2UiLDQyODoiTWFpbERlZXBCb290Iiw0Mjk6Ik1haWxGb2xkZXJUcmVlc1BhcmVudCIsNDMwOiJNYWlsUmliYm9uIiw0MzE6Ik1lZGl1bURlbnNpdHkiLDQzMjoiU2hhcmVkT3B4RnVuY3Rpb25hbEJvb3QiLDQzMzoiVGltZVBhbmVsIiw0MzQ6IlRpbWVQYW5lbFRhc2tEZXRhaWxzIiw0MzU6IlRpbWVzdHJlYW1RdWlja1N3aXRjaGVyIiw0MzY6IlRpbWVzdHJlYW1TZWFyY2hPcmNoZXN0cmF0aW9uIiw0NDY6ImZpbGVzVmlldyJ9W2VdfHxlKSsiLmpzIn12YXIgdT17MDoic2hhMjU2LSt1RmdmQVhCbE5xSXZkTlNXaW5RUnpEVWJ4TXptYytqWTZ0TEpaTmR2MDg9IiwxOiJzaGEyNTYtamV1OTgyS0pZMTJkYWJ4bEllSHM5VUFMRW84TGtqSHB6R2huTlM0MVZxWT0iLDI6InNoYTI1Ni1tdmtjbjFpRUx2NVBmR1F5SXBJYW5yTEFpUjJJZC9tVi9YbWFhY1gyL0hVPSIsMzoic2hhMjU2LWNNV0w4dmI5ZEx4amNnS3ZHSEp5RHUwUFVMdy9RQWk5azBiWDd2MUp3bVU9Iiw0OiJzaGEyNTYtdXl6Qi9uMFhhWHBRNWxrVHIvWWxoclZhQTBiREc1dmdlallsYXNjck5Dcz0iLDU6InNoYTI1Ni1jZCtpZW5rczRxcE1obUxSc09Jb1pvNDdOQ09KR1dsS2k5NXlSRUd6NzJFPSIsNjoic2hhMjU2LVBXSkFuUy91a3lZR085Kys4Q3FGbHNFbFVMVnJEbWtRN0E0eWExTXBXZGM9Iiw3OiJzaGEyNTYtby94V0dMTU1idy9JNVpXQTh0VDV2SGJhVkFHNW0vM25DSmxrQUpEclBaVT0iLDg6InNoYTI1Ni04K3ptY1N5cXV3V0VYdmk0YnRycmJYSGthWmxTNmhpcytZQkJPN1VKUXg0PSIsOToic2hhMjU2LXdXY2FwcE84VDFnZGsxUENZQ2xydkhVS1Z2U3pIUzNJZ045TEk2ZXdvOU09IiwxMDoic2hhMjU2LUFZR1dsWVVoaVhXYWUrUHN1STNkT3JRNTNrdEVGcHp0NGI4YlF6c3F0bVE9IiwxMToic2hhMjU2LVRMZ1RvUi9nV2h4RVk2ODk4MlhJcVhnazQxbHVqaloxVCtnZEQ1dm4rZ2c9IiwxMjoic2hhMjU2LXhoS3NjNlFhUnUxOHZLVll0dDhEMWFYRnYwcVhMZTM3cTZVeTVpZDFaTDA9IiwxMzoic2hhMjU2LTRqbVZqVVNWVHpiMGZKWWwySVlodDdPaXZkeVBPN1lMc1dYbmRUczZWN1E9IiwxNDoic2hhMjU2LWNqdUJaamdpdkNVaWJSTExFcjlMN24wOXdYUmhhVmZEN2hOaTN3SnBPd289IiwxNToic2hhMjU2LU5Xa0FGS3VhblZkSUF1QjluUzdnWmp4alJ4ak4veUU3bHNOTEp6ak1TZlk9IiwxNjoic2hhMjU2LTlzaFBKVDh5cWJGb2R2OGRNRnpYYWVXMGNrRzM5TFFVOXQ0SWNESkRKdGM9IiwxNzoic2hhMjU2LTlXZWluZFFYYUFJSllaM05pRUx1cUNEK2tQTjNzQnY3WVMrL1JCVG9qNzg9IiwxODoic2hhMjU2LTU3TTJVWG1oUi9oRjBCYkw1VHNUeE5wNHdqUTBoaWpndWFWenFZQVA1dDQ9IiwxOToic2hhMjU2LUp5d0wrbDh0ZEtJc1VIVGdSY0dueHpmSTFkNlJkY0FMNUVzSUU5RXdKV1U9IiwyMDoic2hhMjU2LXFlVHBhekJ1VTF3STZkWmNtSUtMbWNrajV3VUo4SXk4NEJITFk3dzFOeEU9IiwyMToic2hhMjU2LWYrQllHRGNIaE9oUVVRS3A4akhDbDdXRkVGVmphbWhTQk9wVXBCakl3THM9IiwyMjoic2hhMjU2LU85UCsrUlFFYW9lMUl5OThWQzZyTzVPOVkvdFUwcmJuVzUrdkpJbldTdE09IiwyMzoic2hhMjU2LURha2o2SFNzWm1kZ285WkFadW9oMUFYVVpKTVh0ajNlc3V1Y2JjdC90YzA9IiwyNDoic2hhMjU2LVJLZHZtZDBEd3FTUGZYaG1YblMyYmtFakh4bHRGRnZENTRZMUVpMFhrSE09IiwyNToic2hhMjU2LUdWZFBTQXVoSktYN3pqR21CZnd6WXdPRldRNm1rYUJGU2tabG9rZFM5Nlk9IiwyNjoic2hhMjU2LThRUXRibFNCb2s3KzNaSkNjUXFVcHVENmZzUkVZS3F0T3dmT0ZQS25nOEU9IiwyNzoic2hhMjU2LXZ6TXAzMnlmYU9WTzdqRHhjZzlkT3NOT1JJaXhFUE1aTmtudzcxeE8rZWM9IiwyODoic2hhMjU2LTlvMDljUGtuMWJ0ZU5mbHFQRVV3dnBlL1I2MVJWSVA0dG1JaDdnbDVYUjA9IiwyOToic2hhMjU2LXBWdnRpYlcrSFVBeTZBZmQyUkJFKzdyVTk4aXJBcFBWQUxZYjhvS3ZjV0E9IiwzMDoic2hhMjU2LXluS2dDLy8vcTJhaEtSaHJQcFBTTjRDeTh5WDdXUnN1VTJ2QVJPMkIwKzg9IiwzMToic2hhMjU2LXlPemVoekIrc0NBSDJsZFBQbEhOK2Y4SzVnUGQ2dURCRCtNZWFMM1BGanM9IiwzMjoic2hhMjU2LTZWbEYrNjhsUXc2ZlJtanF6c1hBK01PRmtVbjNycHZKZHlObjd2ZzlMdHM9IiwzMzoic2hhMjU2LUpqVkIrR2xsVzU0T0ZmT1VYUXdSd09zMWprMUk3eVIyczBoVlRIUWR5RkE9IiwzNDoic2hhMjU2LXRtY3FQcHpmdDQvZEdyWGZEeUJtYXcraGtjY3RCYTVIS1Q3WmJtOFVMcEU9IiwzNToic2hhMjU2LUFyL3k3dHZwTGEzd1JFWko2SjRlc1o3YUZpY0lMVXJPY29RT0E2YmczdUE9IiwzNjoic2hhMjU2LXNzV0ZsdldKcmpSeW4xcllVb010TzVxaUU2cXArR2VlY2pjSDZ3NGlNQXc9IiwzNzoic2hhMjU2LUdJUFAxcnRwSm1CYURhaXdYNkxuUWxNbzNtUHVPZWFwajdZTUdXTVpIYkU9IiwzODoic2hhMjU2LVptMXlSZ1loSHBaRWRyY053T3B0cFBjc0EremlPejMxS053QW9SemY4Umc9IiwzOToic2hhMjU2LXFOMjQxRVBKbm42THNXMkoxMVNzYUVRWFBtS3lDUmdhOTlWQVk4WEtTbVE9Iiw0MDoic2hhMjU2LTZkRlJzYVdWMUwvYVBlVmtVY0dzcHJVOVFMVWQwQWNnWnFud0ZuQU9ZaFE9Iiw0MToic2hhMjU2LXdnV3RMV2VGS3MvREpsSnlJb05QbE1mN0kwVDBTd1RxOStHOWxDMkdXZGs9Iiw0Mjoic2hhMjU2LTBlS1FvUDdnbEw5YlhKeUV0YzVDNzdEeGN2dFlWajVhS0QxWGZXS2YwbkE9Iiw0Mzoic2hhMjU2LXVhYzgwN0NWTVA0MFlzSjlwbzY1WDlSTWVCT3M5eFIxeXdKSTFwQklqVHM9Iiw0NDoic2hhMjU2LW5SUlhYZ1ZOL2VzeWZNMWp2cVN1WHk2WnV6OG1PTWc4UmRJUkNRaVE4cDQ9Iiw0NToic2hhMjU2LXNnRHlneE5HWnFXMXkzOGF0TmFqbWFGNWNXellVVVJZV1hEMGs2ZERLOTg9Iiw0Njoic2hhMjU2LVhwKzhlaTZadStrQjNEZEtVYjNqa2pGNUNRQVhuZWI4bDBnbGlMOHFHTlU9Iiw0Nzoic2hhMjU2LXJ2VDg5Z1diT3orZ1ZmZGcvcnk5L3Z2dSs3dGVEUmJjaExQR3g0VzFjblk9Iiw0ODoic2hhMjU2LWxHOGFIV1VGallwWXZQdEx6Z01SbkM1THRjR2cwUTZpNkpRTEppcmI5MkE9Iiw0OToic2hhMjU2LUhBb0VaUUN6TEdQZTgwVGpRbDNNR3hvQTdQUSsxTDZjS0xVR3gwMGlvR2s9Iiw1MDoic2hhMjU2LXFsWFhHTlcybTlDTDRwOXc2NWhqdllFSG9xaHUwMFJTdzJvc2JpVTFaeWM9Iiw1MToic2hhMjU2LTV5YlljN0lDSFpXbWxOa3l0U0s2L1UzUFRveE1zb28zRmZuQUJseEVtdW89Iiw1Mjoic2hhMjU2LS9vcllzS0pjRkorNndMMmZxNmRlQmQxam05c0pLS0tCWkpqU3BwNHpUWkk9Iiw1Mzoic2hhMjU2LURHK3p4d3NycGI2Z2dVdUVtMXFPVXRvVm5ha3lSSDRHL2dXNm1ic0s4UzA9Iiw1NDoic2hhMjU2LVNTZVpvNHR6UitTM1l3ZDAxcjhWQW4rTzZCc0Y2bWw3dWk0KzFIL2NHbVk9Iiw1NToic2hhMjU2LXpDOUZCUTUzZTZSb0FzRnVseVVPaDcrUEY3WTlTZk9lKzdvKzdJOWZsOVk9Iiw1Njoic2hhMjU2LXp3WkJzN2d1T0lCRVlhRWlnM0ZZVVpSOHlrRkh1Z1dtems4SmE5WFFuVmM9Iiw1Nzoic2hhMjU2LVhiOHE5TEJZeUNiZmhkaGZxSURJa0htQTh2L1c0Q3BFdUdUUStuTkk2T1U9Iiw1ODoic2hhMjU2LUdGYXdSZC94R1RhZjk3bGw5Yk0wcEwzYnFxdVRaTlg4OFR3MzFCelo4S1k9Iiw1OToic2hhMjU2LVg1aHNkVDBOZ2FWSXI0YWJaMXlCOVRmRW05d0V4WjV5OG1VS3JNSWt3amM9Iiw2MDoic2hhMjU2LStYSWxtYjJ6NW1MSTJKcnJqcTlsMzhlRHVYWTkyTXZwdXdSSlBGR0Fjd2s9Iiw2MToic2hhMjU2LStIdThJQkN0UVRMNHE3ekhZNHQ3aklLQ1JKSkZaVDYvSkN0UUNhUU5EMEU9Iiw2Mjoic2hhMjU2LXJUR01RRysxL3FFUnBIS21QQ0ZCR2w1Q1RycGprVlJZdW85RS8rK0xRUkU9Iiw2Mzoic2hhMjU2LXMvRDJuWHpBOWJKeHZDQkhPMW5zNXUzU2JNdlZuZTFPUUlwdGxsS1dDRlE9Iiw2NDoic2hhMjU2LWtsdDdlZ0dxNXlCTEhPVWloQ1FJekpUZUtlWEFNcHJPZnVHeit0dmR1cFU9Iiw2NToic2hhMjU2LUtBSm04MzhzWmgyQUpYNXU0Z0JIaS9sWEo4RUNDY0xHekF1bitZeEdlUk09Iiw2Njoic2hhMjU2LWhvZngyY0RRZTNNbzFoV2UzWXdldVBqdGdWa2J0azE1TWVaMFJjck1CSjQ9Iiw2Nzoic2hhMjU2LUl2N1M0dFF5UU42ay9XeVIyMUxOUXVSZXhMaTBPazBJbjVXMkMvUGZRTzQ9Iiw2ODoic2hhMjU2LWxuQW1OVExlT2k1bmpScGdlVUtiVmllWmNGSWl5ZkJqOW9ZMFg3VnpCQ009Iiw2OToic2hhMjU2LVpNcGNaRk1RRWpTT0psZVlmUVpDRTBWUHFNL3c0eUd0TjBjSWZ1ZUVOekU9Iiw3MDoic2hhMjU2LWNoTTZSc3NjbEN1d0k3Z1I3NnFTNFdSYnR4MjNQU0lTcWQ1L3FFUkNOWE09Iiw3MToic2hhMjU2LUVZSmw2RjJFRFo0MUFrUUNReVhpMnBqMUlTYVQ0SmJCT2ZRdXBrb0grbTA9Iiw3Mjoic2hhMjU2LUFrWFhpaHVyRlVvelNxbEtGeFFRTyttSHlFZlEybDluU0I1cHBaOG9yWm89Iiw3Mzoic2hhMjU2LVVQSGhsZ05acHVZTXUyWWV5OVpMbzRaY3IwNm9GWVUzVjJVWGdheHBEV009Iiw3NDoic2hhMjU2LTBGcVVKcUNJb21nZXQyOWliUi9JMUdKdHRGQ1pSdm5DQ0UwNXUySFZFOGs9Iiw3NToic2hhMjU2LWZDZGUwYWh0VVF4OHBsRGlBTmFOVXR0TVc5UEQvSHg4RHN3ZWJUMHYrcW89Iiw3Njoic2hhMjU2LTZkOUNpeURJUjJsV1FDNGs5czYvVHBRUjZIK21EM2srbFJWOGxzQ3BOVWc9Iiw3Nzoic2hhMjU2LThnREdPYWVld1RPOWJ4SVY3b1FWVG1VaXptL0tzcWhFMlJkODQyR0krbUU9Iiw3ODoic2hhMjU2LUNyQkozM3dwVmhqWUFsbEU5b0cxLzNwN1pac3UwTzM3SEZad2wvU0dxd3M9Iiw3OToic2hhMjU2LVhuTm45bG0zbW1NWFMyQ1NDK3k1UThYN1IwcFJuMURvWjBYaEh1Um9wZGs9Iiw4MDoic2hhMjU2LXVEOXJlT1FGbkRySXFQSlQ0Y0U1T1hjeXFucFE3TGMxZ3JkRUlUVnFmRkk9Iiw4MToic2hhMjU2LXo5cHN6Z1hQQi9GTWtOMHlhV081cmFHS2xGL3F6V1pzdGdVMXNoUU5LTU09Iiw4Mjoic2hhMjU2LXdIbzNwWExYVnJSU0svTGQxTG9VYWp2WXVnbktRUVhBdW5OQTNxTFhuUEE9Iiw4Mzoic2hhMjU2LW4rVXY5bndoZVlCNUxEaVMrUjBmUkgzSGpXcU1Cb1plQkI1cjdoUGY0aEE9Iiw4NDoic2hhMjU2LWF5MGhHRkFscXIzQnFJNldKU3dQV0NWWFk5NjZSZjZBOXo3b3VTRWMvcmc9Iiw4NToic2hhMjU2LWFnT1kzVlBYMTBQZEZsOUYydHRHWmJaV1VxbWNqUkUvRTJFVnZhUGoyU2M9Iiw4Njoic2hhMjU2LUZycU1ENEtHZGkwSDRrRlNnSlc4RVZ6dVNobVJvWnNKQ1dsSWVtaUNJRXc9Iiw4Nzoic2hhMjU2LVJHUWZsQlFrM2xMQlp4RFdDNWpsV0tHZENDS2xCc0xYMFRsUFVqbTBiUVU9Iiw4ODoic2hhMjU2LU5MUWp1Q2VJaWI4dU1zTmpvQ2ZUajN4aEVmOTl3R0JEeGt2QndIcnFzVTA9Iiw4OToic2hhMjU2LWw4YitvU1lWV2kreVhZWGVDenFkNzB1RHFlOEJOQXBUTDB0c2kzUzJXRTA9Iiw5MDoic2hhMjU2LU9ETzZSZWpsNHpOMktwNXV6VVVEKzRrOVNnSUFvYkhxQmEySk1DcXRKcms9Iiw5MToic2hhMjU2LTNMMzJwdmRjM0dwU2hKZ2p2VGVDUVJ0SW8rNEJtem8yd1V4b0xveHlkT0U9Iiw5Mjoic2hhMjU2LTh2ck5kK1V3UE1kY285akNlOVhrbERsZ2ZrSjByUjlVdy9xTmIwaUIvRGc9Iiw5Mzoic2hhMjU2LXVPaG85YzlTZXVLRGYzL1RHL3IrbFNBa2QvdklPZk9ud2ZmcDA5Wjc0QWc9Iiw5NDoic2hhMjU2LVN1aXpDZC9nM1h2L2I0bG4xQkJPSHhoVDBUMFlvVVBiRzArNEMxVWN6ZUE9Iiw5NToic2hhMjU2LVIvMVk0UURHVUJ0K1VVNVRYbWQrVnRqazM3QlYvYThzZE9xbGZ0T2ZPMk09Iiw5Njoic2hhMjU2LUhyVElhc3FTcGtpLy95VjN1anhnR0tPMHBTdGZuczNTbDJoWjAyMEdwQ2c9Iiw5Nzoic2hhMjU2LVFnY0ZPb284RWZJZW9Ja0FHNHlvbHdTWnBvZTNCN0U4d0JBeHVIQmFRODQ9Iiw5ODoic2hhMjU2LTE5V3JOYTdUWDJ3OEFOckQraTI4QzFTY0xrWWVMZGIwTlI3WjhHY3EyRzQ9Iiw5OToic2hhMjU2LW52ckJCcGwwWEwrdkFFMEdUSllUTlFXY01QSFJ3blYvME94aW9vZm16WlU9IiwxMDA6InNoYTI1Ni1Vb05ScEs1L1NMVGlPUHYyVXNvdS9wZm5ITVFoaDY4UUZ2NDhGdEliZSt3PSIsMTAxOiJzaGEyNTYtclg5S1NkbDJnTGVBa1FjQlE4T3hVR1B6aDBzUHZrdGlTZXZWTjA5eUoybz0iLDEwMjoic2hhMjU2LVR2eGxvUnJZNHZtWWFkUUF5U002ajl0Y1ZTb3dJS3I2YlRhcmNveUFVWm89IiwxMDM6InNoYTI1Ni0zakZpaXZNTU9HMWxuSjV2MnNLRmJmN1JrVDhFQXNpT1V0a1ludDNhUWcwPSIsMTA0OiJzaGEyNTYtTWQ4TS9NSjltN3hYZm42UFhQVUVBallMRFJPVDlTeXlORmJkTE9GSkRxND0iLDEwNToic2hhMjU2LWJkYm0zYTkrR2dYM3ZtTEE5ZjNUeG1DR0JVN0dMZnNRMTU4TUpveHIwVm89IiwxMDY6InNoYTI1Ni1aOVhUdTVFeUZseEp6V0t0UXJpU3VKa1R6M1hRaktCcDg5MVBHZFdPVEZrPSIsMTA3OiJzaGEyNTYtUFUrYlRxWWpRVHlDSlNxRVBsaWZNU1orNkVJUFpCcWpPUEt4b0plSU5Daz0iLDEwODoic2hhMjU2LU16Ny9GbU1EcHR6aE9mRnZEcEJCbHV3eHZZeE4ybXNqMjkvc0xCSlNYcXM9IiwxMDk6InNoYTI1Ni1MckpHczNmMW92U1Jub2ViZ3FMUE1WTmhMUTZuM2l6cGtXeUFkRUlmNVRNPSIsMTEwOiJzaGEyNTYtWWoydVFUcG4rQWNtajFlLzlqQnN6cDl5cVYzTTBsL3kyTDV1NHk3WnlhMD0iLDExMToic2hhMjU2LVRwbjFPUDRzYm9hb1RYUWtzayt5RmhOaGMrbWQraEdtRkIxQjh0MTJnRHc9IiwxMTI6InNoYTI1Ni1Rb0o5aVBRM3NZZWI5Skc4U0ZPaWI2NlhSM25PeWtqN0pYYkFyOVRzYnd3PSIsMTEzOiJzaGEyNTYtT1BpZHJvVlNhaFhiYklNdEFvWGNBQXE4N29SWENEMmFxK3BGcWhkZkR6OD0iLDExNDoic2hhMjU2LXNyM0RSSTdQZFc5ZU5ZamJsNWNQL0VtOXJjZUxrYUFyNGNHcEU2U1NZTlE9IiwxMTU6InNoYTI1Ni1hcTlYYVJLNWt2TS95bERJbHlIYWtJcGZsS2lFTk9jeXNkMW1BWmwxaTN3PSIsMTE2OiJzaGEyNTYtM2cvTnNteXZEa0p1TVRMZVVLYk5oOFduQmF5UHBieGhMWU4zb1BqN1p4cz0iLDExNzoic2hhMjU2LXB3TEtHRUF5SjZxUXlCY1lETG9jT0dkSFZyNFUxM2pmcUJKZGI5SzUvc009IiwxMTg6InNoYTI1Ni1YYk5GMlpjQnhWUE1BR2R4NDRYem1hakVXNWVtTkx2MWtJNExseHg5UXRJPSIsMTE5OiJzaGEyNTYtWlhkNmdNMGNBQVJSWDBtQjBXenJsR3FJZzhzL3pWVlYwRXVRWCtPTkpNZz0iLDEyMDoic2hhMjU2LVZibERPaW45YmlaendRQTdqL1J6MUlOOWs0REN2R0Uwb1p1ZXE3WUFPcTA9IiwxMjE6InNoYTI1Ni1pQlRIMDZ2SllRNno4em4xZW51am5PaktTQXZRb3FMVzZPcGRmVFlsQXNzPSIsMTIyOiJzaGEyNTYtbUE4bHk2VXp1TU5TczZzWlBRZTdWdjNQME1POWtOVDBZeVFCQm1EYVAxQT0iLDEyMzoic2hhMjU2LVp6V1h6ejJ5MDBqWU56VmwzV3pLOXpUSzZCQmo5NnRMaXJ1N3lzOWsxdDA9IiwxMjQ6InNoYTI1Ni02dkg5S2JBbkVmcldJa01Qc04zZmRmUlYxb2JVUkd1VW16QjhvbkJLajV3PSIsMTI1OiJzaGEyNTYtZ2ZwRXBqQUxERVp1WmExeFRSaHc1ejcrMUUwVXg4bjRKbmJ5aDN3dHFVbz0iLDEyNjoic2hhMjU2LXFrbVBhRzVPaExTaHU4c0FZQzRCcnE2N043K3psUXRQeXk5Y2hQamUxcms9IiwxMjc6InNoYTI1Ni0xMFpZc2JLYjhmWXhWdGhSRmtaalZUcmdUYUY5V25wTGZpY2VDZ2tKZ1lvPSIsMTI4OiJzaGEyNTYtcVQ2YmViT1N0MzY0WUZ6aDhNOThHZW41dmhCMm9qUnh6NSs3RDIxTHdtdz0iLDEyOToic2hhMjU2LW5HZlM0L3ZjVFpBKzhVUEswL0kwRlNsWEdKNDN2elcvdG1tUlNtUzJiQ1E9IiwxMzA6InNoYTI1Ni1IcjBscS9yeHV3bk1mTjBXeG5jMEhJQ1RNNEw1bGppZm1GR3FLOS9TeHNvPSIsMTMxOiJzaGEyNTYtYm1GNW54d29UZE9IZnlMT2dTMVpFSTlTU0pJd1lLN3ZWRjhncEJ1RWppdz0iLDEzMjoic2hhMjU2LXBEOG1zd2xEUHJsMTFIT21TNjdlODVLeVVsdHB1VzFyYldpeEs4ajI5Tzg9IiwxMzM6InNoYTI1Ni14TXRONWdoUDQ5eFUvU0oyS0NUWVJaTFcreDZlSXVaTkZaQjJZcDlFUHRBPSIsMTM0OiJzaGEyNTYtOWlmTkQ5Vmk5ZlltMXY4R0RjakxmQWNZS01RdllxKy9UK3pKZ3ZsTmxOMD0iLDEzNToic2hhMjU2LUpQSmxNUUVwcVJFc3l1TURtRjZHM0JDWllzQmphZE9wR2diL1E1TTAxTW89IiwxMzY6InNoYTI1Ni1CU0t2MEtoWmVZU3h1eDQvWUNTcm42U1VJOHJacEkwdWpjbER2enVYd09VPSIsMTM3OiJzaGEyNTYtVzRROVRjS2syOSs2USthdE90QjZDR1k4N1p6ckY4eElSalZjaGl4dEYrcz0iLDEzODoic2hhMjU2LXZpVCtzSDBWQURmNVBVRFdlVFJwVEhoeVR4Qm53SVdsMUNIZURHRkYzOEU9IiwxMzk6InNoYTI1Ni15VXBjRE1UQndIOVBEY2JVejRGanU3ZkJZbm5UUEpjcDFTUTN5NUY3Y0NnPSIsMTQwOiJzaGEyNTYtL052eHFHTzFNSXRzSnlvblhvYktYY0F6VGlremt0ZTFoa1NNVC9TN1hHbz0iLDE0MToic2hhMjU2LUJzazd6elZSSVdoWUZ4YzhLb2czWHFkSjV2Lys0OTdsTEhrTXZ0Ylh4MzQ9IiwxNDI6InNoYTI1Ni1nb1FkYjVoVS9TUHppSml1QU1UUDV3Y25IK3dSZmxrSmVLRktvMlVPNFZVPSIsMTQzOiJzaGEyNTYtRk85OFlZazNvYWN1cjI5T3ZGemVSVkg0S0EvRGYybVo3NXZxR0xIR1g4az0iLDE0NDoic2hhMjU2LXhlR0tBN2d6SlA2dWxyTnJKUEZOUE93NDVDNWh3SUc5RDY3anNYOWh5Z3c9IiwxNDU6InNoYTI1Ni1ZNG9PYmRRQktsTEZxV2oxejF0L1I2eTJqVGUwM0N4ZlBOSDFZMVd1c2drPSIsMTQ2OiJzaGEyNTYtNjlrQnFYdm0wczZZcWtiQUtYcnpXeTd2VWx5MVBueW9SMDFHVkRXVWNJND0iLDE0Nzoic2hhMjU2LURHOVFTTHdZYUs0NTdrZFJxczg0WDhyYTJONjRNWnZXS3k4NkdxUG16V2M9IiwxNDg6InNoYTI1Ni1DNFVORkUxZ0pMcmFocVpzU3AzQlJqTzFmcHRDQklrcE00R0NZVE4zWTI0PSIsMTQ5OiJzaGEyNTYtZG0vU25xc1NSNDZhOFBIOFh6Z1NNaGNrSXVJb1g0SWxtbTk2UG5lLzM4OD0iLDE1MDoic2hhMjU2LWY0cmI5bHNabkhYSEV2NTVVdndWOHpqbXhUaEdESTVoa1RjNnM1czY2blk9IiwxNTE6InNoYTI1Ni1yQmQzSCtSeEFFaTFSUjgvOFdtL25hcVk2VUx6Y3kreitoRUVWYnBOWWFZPSIsMTUyOiJzaGEyNTYtR25zQk5mMlhpVlhGUjJ4UjdWQVVSWFp2d0h1czN1ektYMFZndWpzeHMvND0iLDE1Mzoic2hhMjU2LXh3cy9wcGhXWEh5VnNzSEpBK3E5RlRibnAzQkpJTkZVZzlJTkgzOS9vb3M9IiwxNTQ6InNoYTI1Ni0rakdac1hnRzlmdjNneW9LY2hORXo0VG90T3FMUDdsaExIZGZlUExQbVhzPSIsMTU1OiJzaGEyNTYtSkNKbjY4RFB4aW9oa0pTWGxuWmp3bGdLaXRLaHJTUEptYUQxZjVTL3ZGUT0iLDE1Njoic2hhMjU2LWp0YmViTGd2S0lzNS81aEVwd3NZd2RzUk8yelcxQ203aHJ6a2dXN2ZXWjA9IiwxNTc6InNoYTI1Ni1jbmhYb3ZaWFRUbU81TnJsY2h0Rm80dHFyN1ZFQU1WYmJtVGJhOG9WL3NRPSIsMTU4OiJzaGEyNTYteTZZRjhHeGNSbUJCQmJvaXc1TGE1TUsrWTBtKzI4YzNJRjRMVXZpalB2OD0iLDE1OToic2hhMjU2LU9DR2N0eVl6YkMxdDRWaGYwYWNaS29MYm1SejU5SnBydW1SUW1DR0xvYjQ9IiwxNjA6InNoYTI1Ni1SdlpYTlZxZWlncDZESUNISkU4YUpWeGFxOHdUVm1DdFkxYUVuQ1hUWDRBPSIsMTYxOiJzaGEyNTYtbkg0RDgrRTBxanRtSVcrMlUzT2pZd0c5MGVOak1GbXJhZVZXWE14b25lcz0iLDE2Mzoic2hhMjU2LXNWQkIrUXluc01BSUkvQnRwSmRDNmlNdGNIajRTTE5zYmFma0h1Tml3QW89IiwxNjQ6InNoYTI1Ni10MEdJb3AwNEgwQ0M5NzUvNUw1ejdWUEJSM2hrbDlqaExKbXE3QllQRVl3PSIsMTY1OiJzaGEyNTYtanp6blA5TEF6MGcybkNEd2FibHdVNklwckRaQTJUaS9ML0RpY2t1bGljdz0iLDE2Njoic2hhMjU2LXJpQlhENnVPYnZWVWhaWndlVG9NS01BbUhaZDRrcldzTVQ2Z0xMZCt0UUk9IiwxNjc6InNoYTI1Ni1GQVJJUVZ1UlZwdEhNdlMxRU5MbHhTb0FxcDVkWFoyZFp3QkZhQ01tdVRNPSIsMTY4OiJzaGEyNTYtVkpVUjUybVJLZlhYZStMQmRWbktMWXlBb0FKY1N1dThJb0FFeVY3elFmRT0iLDE2OToic2hhMjU2LWFqdlI4ekFmMXUwQVM5ZGFWU0pQUGo5cW1CaDg0emtkZTgzVkpqNmU3bUE9IiwxNzA6InNoYTI1Ni00NXp5V1E4M2JTZzhuS25SQlh5UlNjbFRQNXU5SlJGemo0NXhrR0Z6WHAwPSIsMTcyOiJzaGEyNTYtQ3NDNVkvc0FMc2hGcUV5ZVB1dHRlajZ5djZRak4vNzZjMTFuZ3kwalNibz0iLDE3Mzoic2hhMjU2LWxlM21TZGU0QWZXYnVUWkNIMG0xNWRUdnU1NkppZDhSbU5Yc3RoZVJ4Njg9IiwxNzQ6InNoYTI1Ni0rMUR5OXVyeU53UlNXL0tDb3VwaGF4bEUzN1N2RzA0TW1sd2RjeHFIYlhvPSIsMTc1OiJzaGEyNTYtcDg3L2dyMlJ4bjlsRVF4b2J3WGNQN245KzNGall6eXBGMlFJT0o3TlR6MD0iLDE3Njoic2hhMjU2LUdhNkFBVHpCQXUxZVA2UXVOY0w4UnhJK0pkUi9wTzNPWndvZCsxdlg0WDQ9IiwxNzc6InNoYTI1Ni1lSjVWY21uYTRsekF3b2R0U3E5c29xSHVieXlSdEVCS0JwYVZBdU0yRzBrPSIsMTc4OiJzaGEyNTYtbHBId1ZZMG1YaWs0Y1RvanlwUXdLZ0lsMkRGb2FnYkFtNWVVWC9uYzJFWT0iLDE3OToic2hhMjU2LVZPVU5nNUo4R0RxYVVid2VOZExnc1dkMFRtbmY0UXBwejQ2a01xMkt6NlU9IiwxODA6InNoYTI1Ni1NdXp3QVR1czE3MktDZldRLzFpcTZRclh1amZXRGtoVS9FSHhMK1J0SC9ZPSIsMTgxOiJzaGEyNTYtdG1CODhteG10MFI2aHlycFQ0TDRna3JnVTFKYWVoR0IrRDk1NTZodWZDYz0iLDE4Mjoic2hhMjU2LWdlaHU5eE40a2xDTUlxWDk2OGtqZDZBU1hZem1yc1A0SGVsSnJYakhUYnc9IiwxODM6InNoYTI1Ni1nUXRVQ0lPTW95bDdkM0txb1VzTllwZXZFZkVBN1pPU2k0cm84SE0wcDZvPSIsMTg0OiJzaGEyNTYtdUtQYjR5VUlCZk5YWnBPR2FrOU5ERzBHdnFJaVd0RHd6VUkyWXJLRVYrMD0iLDE4NToic2hhMjU2LTBYWU5MS2o1elh3bFZHdEdLRzJyd01rc0FnZU54bnprZlM2V1Job2kwcmc9IiwxODY6InNoYTI1Ni1nZXRXM2hadm5saksxRXR0eEw4S1FiVWxCS1pnN05IUG5pNEhJWjFFUHI0PSIsMTg3OiJzaGEyNTYtd29SSCt5bEsvVEpBekdmT292MnVNNW1QWm16YmlkOGhJanBtTkZ1ZU5URT0iLDE4ODoic2hhMjU2LTQ4RTdzVTVPa0xFRVA3Ull2L3JsR0gvN0RCcDZTaHFvcVlkdlVlS1ZjZ0U9IiwxODk6InNoYTI1Ni1Gb2ZnT0R2SUk1WHRsSjViZjdqQS9TRlpLZFpUK1NOWTBxVTAyeTZKSEcwPSIsMTkwOiJzaGEyNTYtenA5cWJYc2VRcVkydnRDMm4yRXNhbmxsUDY4Ylc4UStieHljRVNBRVlTdz0iLDE5MToic2hhMjU2LVpHWWFzcjc2djM3NGs5bUQwOTFkMXpsRUEydHNhdXg0S0lBMVF5YzdCQlU9IiwxOTI6InNoYTI1Ni0yc0tMWE51QlFKNU84UmRJUU1XK1pXMkpPUS92cXNTQW9YTS9GUXFzTndBPSIsMTkzOiJzaGEyNTYtbCtSZ1hhYTNBViswby9yNTdFZjNlb0JLL081UzhHVmxSdUxWYmNpSStPbz0iLDE5NDoic2hhMjU2LU1QWExVZ2pYNkZPT1Z6TkREWkxRQWF6MmIzU2l4b1dVNEszU25PM3RGK1E9IiwxOTU6InNoYTI1Ni12NFp3dHdydXRKRndPakJQYm1yNnhvb0ZYaUp6RSt5eWxDL0psUFFZWUJFPSIsMTk2OiJzaGEyNTYtMHJPVmUzYmZ3S1YyT2RoNVZXYiszcGZ6SlBGaitTTWNOUk5GTGx1dkdTbz0iLDE5Nzoic2hhMjU2LS8wRmJOaDBvMTY0aWc4dGpCM1ZXVTRyeGtxc3pLYVZnVmxGcFovVDVwOVk9IiwxOTg6InNoYTI1Ni1HNjF0N0xPamdTdHFlZ3pUUldveWxHeVFPS2Jmbm13Qjc1M2ptbVNvVzV3PSIsMTk5OiJzaGEyNTYtbU52WlRDN2JaUE55cWFWM01rbHRtUFIzY2puUDJlS3FEVmFtRlMrNnpoOD0iLDIwMDoic2hhMjU2LXorZC9TYWcyWHpQSEk0b0VEOE5mak1FY3kwdzFoeEhDRDlsOEJkZHF4VGM9IiwyMDE6InNoYTI1Ni1Ba2lLNHMzWEtBM0lla0t0NkJrOW1RdVVTdmpiQ2lJdFYxQVZQV2RDNXlvPSIsMjAzOiJzaGEyNTYtRTVYdXNtQml4UG1jeUxNZXVPL29ybmtaTW1vMFVwYmhDRkFNV3BGRDRjdz0iLDIwNDoic2hhMjU2LWVocnBFc09BblZKQ05LL29HNHcvMDdsZlVVeXBkeUZlTTdjUHFMWVd5N3c9IiwyMDU6InNoYTI1Ni1rWHF1L0RJWjBMSXNzNDJHbHRNZWo4Sk8yUWxhckJkRWU4NlFOemZsL05RPSIsMjA2OiJzaGEyNTYtYktpaFJJNmQ3NEtoODkxNUQ0OVJhY2hDWEZoUnJDRnlNVVRLV1EzVVlRUT0iLDIwNzoic2hhMjU2LVNDZlkzK0llVGpYMTgwVHZpbFFpQkd1OXBJYkYrQ3BFV25yTFB2R2RyYUU9IiwyMDg6InNoYTI1Ni1pTFZxYk1iM091OXZRY09MNWM0WDljakd0bkk3UGdqVFVtZG1MMzR4T2U4PSIsMjA5OiJzaGEyNTYtb3A4YkRhaTVOVkxrVXptZ3JiRTN4Q3RNbE85YlhsU05lcDdPbDZNeW53TT0iLDIxMDoic2hhMjU2LXlNd1ZHbk16UEFTaU9DRE9VWEw2eGp4NTJZdklFWm9XWHEzc1l1NnlnaUE9IiwyMTE6InNoYTI1Ni1SV3I1YWdTTXNoMXBTZmpFVmQvcG15aG80TStoSjNVaTlVZkdkTUFOY21nPSIsMjEyOiJzaGEyNTYtdUtyMDNLdXE1UFYrVkNjU0RGRFY2SWZJaStnK0JndEdGdDlmcjNYdW5JVT0iLDIxMzoic2hhMjU2LURlRGJ6SU9hZUM1Qkx5Vko2NVdkWFhZa1B1SHlvTUNtWVRtNko1eFhpeUU9IiwyMTQ6InNoYTI1Ni1NZ3UzRHYwem1VZUxMMHAzWDg0U1N4Q0V2WFJHVjhqNGwwQlkyTnVWTkM4PSIsMjE1OiJzaGEyNTYtOGZodkFrdUtwTm1KZEM3dXU1R3BiMExTTXNRSE1iUk9scmJvRGpzclZsYz0iLDIxNjoic2hhMjU2LVc5ei9YSDl5eXdzL3FwNHZ5TS94dUUxaFFOVmxwRURieVE3dkZwaTg2RjQ9IiwyMTc6InNoYTI1Ni1ZdERQZ3ltL3lnWittaEpzOHo5KzkvS0ZXSDh0V3ZlYy9tUlJ2V0hiekJNPSIsMjE4OiJzaGEyNTYtWEMzU0pVL2ZHSU82OWpXd1BVU2UzdUE3ZUFGcUg5b1pRdlh5M2FSTTUvdz0iLDIxOToic2hhMjU2LURweDl3ZlRJWWVFRjVPQ0lLV2dkMkIvblp0dmpwMG5yK3VqTXRYRExNRFk9IiwyMjA6InNoYTI1Ni1oTldiTE1NczNyTVRQbEpEZ1FWMlR1bzhHRzd2Q1ZQOTN0K0Q1YzkyVG5JPSIsMjIxOiJzaGEyNTYtSnoybEYvaGZPbmlLSExoblZGZW1TSThmZUJtcjlOcU1QeHZWbEZHVlc0bz0iLDIyMjoic2hhMjU2LTFMMHBWL3F1ZXhnVmZTeXlTMzhaMGh3SERyMjlwRFRRQlhCcFduZWIxUms9IiwyMjM6InNoYTI1Ni02VnpLZEVUemZyUURjR29GemNrY21ZdUMvSEFMWmozRGdhZHZWOFpwd25NPSIsMjI0OiJzaGEyNTYtbkRVdE91NjYrRDhoc3VlaHVvNzZGYUtRbnhqOHNPT3J2SjJETG84TU5hQT0iLDIyNToic2hhMjU2LTA2VHo3U0hUaW9pbjB4ck9IWmxLOVFDcVFHYnJ4aHJXU1F4RWRORGxmWXM9IiwyMjY6InNoYTI1Ni1jT0llblJxRjJuaVZ0ZE10UGFmbnNmR0dZcElwRWVYQ3I1dEFtQStRV3FZPSIsMjI3OiJzaGEyNTYtcmh0Ymo1YzJoS0ZMTWYySzdMd2ROMFhWNEZ1T0ZXZ1BCZHNLTEtLTzJtcz0iLDIyODoic2hhMjU2LUJpRFd3YzNCRlNwY1o2KzhpZkV3U0pLRG0wZjBDUVdZNU1hbElhblk5NlU9IiwyMjk6InNoYTI1Ni05MU16djFpaHEyY3IxYUFKZmtyQ1I1NlVoMUMrdGJJajAwbWNiTE5BZVVNPSIsMjMwOiJzaGEyNTYtWlE4U25vWHJYOXQvWjhiSzhQZ1VJQVRUMy9nRERSVlFxa1JHRWt4cys2OD0iLDIzMToic2hhMjU2LXZJckF4cWNKL05kcFYyanE1ODB6VnVPL1UxT2pQMGlLTnBkMHhwbVRLaTQ9IiwyMzI6InNoYTI1Ni1EUmlIR3ZiZ0tJNU5OWEM4Y0pHOWJvWWUwU2Q5aVdOSFF4cHRkNm9jMTBvPSIsMjMzOiJzaGEyNTYtbm9OZ3pBRUQ1Q0xPZHE1R29aVlNncm50ODU2aHpFK3dSbmt2V3VyK29MRT0iLDIzNDoic2hhMjU2LVNvbzloWjZiUFdySkJ1MmE0QXl2QisrQlhFa0dTTXFlaFlIL3I2aWt1WVE9IiwyMzU6InNoYTI1Ni1JY3loZDFpTklhb3VCMytQOWgyRWxrL2dBaGFBdGk3WFhRUE50Y0JveWxvPSIsMjM2OiJzaGEyNTYtUlVuK1RCUlJ1UE4rbE9QUjltZnMvdUdQbUJqVzRueWM5WTlCZ2FHZVpucz0iLDIzNzoic2hhMjU2LU1WQXdmaWY4Z0xydkpVNDJTbW5vWXY4S0JBcElHR09KZ1lMOEVMRnFkTnc9IiwyMzg6InNoYTI1Ni1PTS9QME1jbmEvOGxiWFd6VzdXeDdGZFpYUTZyYllQYkJQMFQ1NDMvNHB3PSIsMjM5OiJzaGEyNTYtWXgxTjNkNjk4MGYxL05CbTl5ZWw2cDBFamk3VGZZVjNNQzZSeW1UdVRRYz0iLDI0MDoic2hhMjU2LVpjWE9RYkVrQUVGdVdlWUxwWVFnd3R4cDhnTnpHUDJGMVJ2UEwzK1ZGMHc9IiwyNDE6InNoYTI1Ni1SSkJCblFLWWVibGxZRXZJMmVYQlJDZTh6dVNPdFhqNE5Td0l4bWRiN1FJPSIsMjQyOiJzaGEyNTYtdEhXRks1WXlyTG1FbVFua0ZzSi9UVloybW9YYW1WMllQUkpCMTUrdnZFUT0iLDI0Mzoic2hhMjU2LXpBRWxHa0xCUmNWWlFMNjBLdE5WUUk3MjFsOTNiTzVMejcxanhnVVhEK2M9IiwyNDQ6InNoYTI1Ni1tbTJzNTV2L25CTmtlaUE1R2JSbzcyb3RTWk9Kanp5SlBjdEY0cE5BQ3ZvPSIsMjQ1OiJzaGEyNTYtMm9xRnJ4NWNXZWZoRVdUdmlBQmVnRTlVNW4wLzJ6RlVDRHcrQ1hLUVhXOD0iLDI0Njoic2hhMjU2LXgwc3l4UjhTazNxeDB0YnRUTFhlWUlyZGd2SFY5WjhzdWtxOUhmTWdDdWM9IiwyNDc6InNoYTI1Ni1GZW84T2R2RThHWU9qK1FCQmZ5d0tMNjNXRU9jcTA3QVp2b3pMM0xucU9NPSIsMjQ4OiJzaGEyNTYtUVkyZklEM2NtQXZvaW1nc0FON05hMWNlUzBCR3dLbDZJbTVnZjdqRzA2az0iLDI0OToic2hhMjU2LXVkWnZSaE9lM2dFQWg4YktocHdkTzVYUHNtamUrdkVhQVIvL0FoT1JBNWM9IiwyNTA6InNoYTI1Ni15UDM1ai9JUkZ1NUVJUFM4YnBxRzRQUHlVVmJ2SWdUdnY1OXJQM2FkSVRFPSIsMjUxOiJzaGEyNTYtWlRXTSt4Q013d3haNnMzU21laExlKzY0dXlFcEI4N0QwMS9GQ1FCUGJjbz0iLDI1Mjoic2hhMjU2LTRVQkFZemJCT0V2RTZPUXdxOEk4eTdoRWZEcElyUk0yNm9GY3BZVXI2ZjQ9IiwyNTM6InNoYTI1Ni1iMGtMcEVZY3BCemR6eUZuMnRxekc5YXdWY1NxSUtnNXMzN2JwelJ5M0VZPSIsMjU1OiJzaGEyNTYtbW8rMjJTNUVZTjFqK2pEbzZjVkVXbG83a3c5TVRnMU5sRnBoV1BHV3lGUT0iLDI1Njoic2hhMjU2LXZlaHRVVjF6WjdwYm1VN3BudVMvRXo4SWJoUVVwWG5lWWkveEZwY1dkQzQ9IiwyNTc6InNoYTI1Ni0wTVZROTE2T2pRUGNTaHMzS0NZbUVrZEdQd1l4UEVlVm92UjlLUk5RUml3PSIsMjU4OiJzaGEyNTYtSkNoTkRwOXhCc0NOT1RtaTBNbHMxOXNhbjhDbGpNU0FxNmdEWnFTYjc1ND0iLDI1OToic2hhMjU2LTk1LzVlS0E5Y1R3eG1ZUmpRSWFhRXhTaFlLSnNBQXI4TGF2Y09NcG9VZ0U9IiwyNjA6InNoYTI1Ni1mb0lmeFdPRTBwWVRaTm9FV2x2Nm5nVEZTOEprSnB0WEZUeExmUElFUzAwPSIsMjYxOiJzaGEyNTYtS0x5eS9xMWE1YVdhZ1JHaFhqckNOSVF5YmVyWXZIVVJNSm5YcjJ2RCthST0iLDI2Mjoic2hhMjU2LXdqK25TWVl0QzBzdTZrblVwMlEyNG5RMjhlK1diN0pGQzVJaGR6cXg2UjA9IiwyNjM6InNoYTI1Ni1uWDYyYzVoTG9YcjFseFNQOUduWUhSeng0a29LT0RkOHFIZlU3VzZYdHg0PSIsMjY0OiJzaGEyNTYtc2hzanF3elQ0RnlFNkl4QWRLT2FXK1JaTS9tKzJrZzlLakV3ZlBWM2tPTT0iLDI2NToic2hhMjU2LURsZjlRR1prc3dWeW1kMXN1Y3BRaTBFUVZ4NURmcnJ6eXBudmxza3lJVTA9IiwyNjY6InNoYTI1Ni1PUit6YlNyVFlMb3Ezbi9vUnhONENFanozZTNiR2dVaEJJS1kxRm41NjFvPSIsMjY3OiJzaGEyNTYtWStjUitIaWt6eGlKb2I3eE5wRGoyanNrZzB4b1FZM0Z2NW1kb0E3WUFZST0iLDI2ODoic2hhMjU2LUpna0FtWEFVQ3U0OXA5bTMyd0dIUlJmWCtabW84OTczK3NwNDNPMU4waGM9IiwyNjk6InNoYTI1Ni1aT0ZtODd0UFZKRzVnL3ZGY3htZDFkaEpqOStsaFpleWpaSWNEVzFwWmxzPSIsMjcwOiJzaGEyNTYtVWdTZ0JlV3BpZjBUdzVZdUNldkVHQlpySyt6YURDNzYzK2tjbnE1eThmWT0iLDI3MToic2hhMjU2LUIxMlhsQ2ZsMjBONi82dVdjajVIQ1gzVmNsV3dIaGZaRFEwNUU4WTB0N3c9IiwyNzI6InNoYTI1Ni0zazhMRk83RjdsdENIMldTaU9ZWFlVMnhMMzRUVVRrWWhvOTR6bzUzRUUwPSIsMjczOiJzaGEyNTYtS1J4bXhmblRpRzdJY3p5MlZUNFlnYjc4aS9OVEQzWEp1eWs4T0RGSkVVbz0iLDI3NDoic2hhMjU2LWM3Q2NXRnl6S1I5cmw3bm9lRnJkMHozSXE2QURpRFhlYUUzTStOb0Y5VUE9IiwyNzU6InNoYTI1Ni1wM21ScHZLYzNJVjJKVHlVZ3E4Yy9wdzNidzJMM1V2b3JTVDJBNHNNTmFzPSIsMjc2OiJzaGEyNTYtTVBNNXRnaUFmS014VGVOcnRia2tDTXNiNzFVcGFTMGV6ZTZFbnRyMEo2ST0iLDI3Nzoic2hhMjU2LUZFRGdjR2RDdUdyUEFRYlJTYVRQcmw1dVkvZE81VndaQVUvWjBzYnczelU9IiwyNzg6InNoYTI1Ni14TFlwSHNORmJxUzVDRElmSjNvNFRHY00yRE8yMXo3Q2kraXFSRjNWbnA0PSIsMjgwOiJzaGEyNTYtb3FPeVFkOStFbWlJRnNHNzV3YlEzRlV2VXArOXovTFBEbGlkclkxeUllbz0iLDI4MToic2hhMjU2LS9pTlFQejdVUnY0bTBWaU5vRGxqWi8zbnozTFVNMGVIVFhTUTJKNzZMMjA9IiwyODI6InNoYTI1Ni1BcTFvYmRxeE82SXlaRzNqS1RwTmFyUEhPaXlEUzBxNWxOQ2p1b0N3Wm9jPSIsMjgzOiJzaGEyNTYtZEZuZHFSbUxwODI5WWhmUDYyMGUwQmxNbktxL3ZMemNGSC96b2FMRWtsTT0iLDI4NDoic2hhMjU2LWsvSndmMHBRUXpYeXhpdEhkNm9DM3NvMytmSUtYNncrZXN1UTBCSzNCK2M9IiwyODU6InNoYTI1Ni1BK1VOTUc3emJPZ2tXM2NRc3BOZFpCbjVWc2JKQVRVYXk3MUllUG55WGJJPSIsMjg2OiJzaGEyNTYtWUorOEZ1OFdYRGUxVEF1blBESTh4ckt6OEE0SmN5SFFWcVkvalNOdjR1WT0iLDI4Nzoic2hhMjU2LUtXbU5TTGducTg4QUJicmRiNGtaWHVrT2RibzV6ZXVEVFc1T1Z5VjFkZkk9IiwyODg6InNoYTI1Ni1abDZMU0FCWDBhTkhvS3hOUmU0Q1Erc3JSVmxLMDhtWUczN2xTUSs0dXVBPSIsMjg5OiJzaGEyNTYtdWR1Snc2alJKR05UMmpFTThiYk0zK0lzWStEVks0dFQ4K3Q5V21CNzUyYz0iLDI5MDoic2hhMjU2LXdKYmVwb0U2RG9YdENSZStnYk4xSkI3SDA1V3lDYnRJSHk0eGE1c1FrNlU9IiwyOTE6InNoYTI1Ni1KdkJNME0zRXZtd05KZE8yUkFFQWNnTG0yWVJZSlc1ZWt6MWdjeGsxN1JrPSIsMjkzOiJzaGEyNTYtNFo4RmhSQnNpWTN5VXVHOHI5Y3pCdHpUZkE3Y0lvaDVOaFRTY1dtZWlQbz0iLDI5NDoic2hhMjU2LWVzQzBkQnVuU2FzOHVXejI2WUwxUys1aFRjc0Q2ZHVPMnR1WG4ybG5SWkk9IiwyOTU6InNoYTI1Ni0yVjkraDBmZmVrZHQ0cGIyV2VFNDBIVzA0d0E2dnhSZ0ZNMmhuUXByVEk4PSIsMjk2OiJzaGEyNTYtTEJrMWorZ3JWT1owL25hYmNmMmh6eUM3Sm05cTZvVEg2TUoxTFJNU1pmWT0iLDI5Nzoic2hhMjU2LWxZTkhCOHBZanZZUUtiVVhLbkhIdlcrd1pVVEszZ1NNVnVRQzcrN2RtNWM9IiwyOTg6InNoYTI1Ni1xZlJ0NjU2eXlmQ0tDbVMxSVQzaVorS2hKNlZMNUt1eTdlVFc0UldTWFkwPSIsMjk5OiJzaGEyNTYtQ3pmeHFDSGJuL1BXK2N1UzQ1dVhIK3BWdGZxTytKMTBIejg4QllINHRyOD0iLDMwMDoic2hhMjU2LVZLVUV1QmdDRWpxc3dXV2VFSG9ZUHJmU0YzOFpmSWV1NzE5b0R6T09QcGM9IiwzMDE6InNoYTI1Ni13bHRaOFhCSzNFQ0lNL2lkRkNwbFQrZ1p0b25kSW5yQ1FwMXFpcmNuOEtrPSIsMzAyOiJzaGEyNTYtZ3U2YWs2eUc5eTRLQ1VCVzJ4MFJwYzloNVpSMlJabWlIcHcwRFd0N3pUTT0iLDMwMzoic2hhMjU2LWNRaXBnWHNOdXZmZHlLZUxZUVVheFA1YVREU0I4MGxMY2V0Y3lWczVManc9IiwzMDU6InNoYTI1Ni11ME5meHVtenV2VEx2OG9hMzhmWnVHc1RkOWRORVgrTjM2MXBEeGVTeWYwPSIsMzA2OiJzaGEyNTYtYk82akJjdkwvSW9GSVhOdDh6Q2pYUSt1VjFDTW91NDJBbHFXdDJRL0Fpcz0iLDMwNzoic2hhMjU2LXUvUEpMQ1hIZFFranU0YVlTWGloNDFSSXFPeDRYZ3V2UHp2QjFoM0hYSFU9IiwzMDk6InNoYTI1Ni1BUTVXOVdkS2hYb0w4WjhmTkFzRjVDaGRZRmh6THFNWE1rUnZYa0lINXQ4PSIsMzEwOiJzaGEyNTYtd1dnTERrbUM5VzZiMHlLUkN3SERrZXBvaXJuL0txVy9FYk5KdGl4QjVIcz0iLDMxMToic2hhMjU2LU1IdUVGOEFTdlQ3T3BzbzgrdWpnWE5nZXhpclFvZWhXVnFJdWRNek85b1k9IiwzMTI6InNoYTI1Ni1MdFN0ZXRqVXMzd1lzY01rb3BNaFQ0eVZaeHMvSXRpdDFpY1dMaUZVeU1rPSIsMzEzOiJzaGEyNTYtZnNDb0xHS29jWnhNbFZMeko0SGxPZElLQzYvcjRKR0c1VlFQNkdLRTZQbz0iLDMxNToic2hhMjU2LTM1VEJnbzVEZmY5M0RtY0ZKSThlRUozREYxQkRJeTBSRXNvMU4xM1pIYjA9IiwzMTc6InNoYTI1Ni1UT25ZdGQzaXdqRVBmK3VzSUxlNnk4ajVsK3RDQURHN095VFBFWjdiQUVBPSIsMzE4OiJzaGEyNTYtbHhXUTBEOWp0SUNsVU1RekphUjBQYXE4NDkrOVBTb1NoUDZHTDE2dkpIOD0iLDMxOToic2hhMjU2LVVwQnpGdGEvbWU4bzczWDNvS1NlYmhTbkhlM3ZJOU5uUGZPb2ErbitpVEE9IiwzMjE6InNoYTI1Ni14Zm5DNFhKY3lKZllOMzBVVjlKdlExazNJUThQendzRWtQczZJMmdKN1NvPSIsMzIyOiJzaGEyNTYtUlppV1ZuOTd1THZMVTJTV3VLeGN1NVYwZllBaHJHakFjbXRqNlZKV203dz0iLDMyMzoic2hhMjU2LTBCdG9lSEJwZWRHVUZ4WjZnRHpXSlFBZnI3Nm5Jc2QvYlVhd09pdnorUGs9IiwzMjQ6InNoYTI1Ni1PZmErWWJiSTlZSXZiY0hRTFNNazdpNS8wK0RBUEhKb0lOZ3pNOENENWNVPSIsMzI1OiJzaGEyNTYtL2Z1TlZwanJGVk9Ybndtbi9QcjM0aGlxVEgzdUNGL0ZSalBYMVl6K2FNND0iLDMyNjoic2hhMjU2LUgydmE3RVYybU41ajlJNnZRMVVTNmVCNUw4b2RiVnF4VThseU5JUys2VTQ9IiwzMjc6InNoYTI1Ni0wVC9zMVhsU2Z0dlJDY3VBQjlsOVBCMFFza0c0NHpOMmJaRFJWdzhhNWkwPSIsMzI4OiJzaGEyNTYtV3AyaTZlcXVQYzU2Vkh5Q2JvWG5JVjhWK1IxWDZVRzB5OUtneGtCUGRITT0iLDMyOToic2hhMjU2LWpweDNMZTRNSkJLMFBKbE9tVGgrU0cyOHhIRkpFVjhQckRrY2hRU2hCNGM9IiwzMzA6InNoYTI1Ni1kRkd0VTRQeTkyY293eVpnY3Z4aDhZd3pTVCtnanlmTktxMWVmd3Zxc1dnPSIsMzMxOiJzaGEyNTYtTnA2S3I0c04xRUFDOHNsV0lmZU44dGE0emdYdDRiRjZUZ0lQY3BjNzB0MD0iLDMzMjoic2hhMjU2LVJ4bkpQMDhQdEZRdTZnclFYSjQzUlE2a0h5bDZsQ3lwNGJNRy80cnNQelE9IiwzMzM6InNoYTI1Ni1MSXg4bG5BdFVqaFZuMjNKWklGYmhuWExIS292Yy9BaVdmT3g1ci9GQi9NPSIsMzM0OiJzaGEyNTYtdEZiWlBLZ29pTjBiL0JyblRFMm9OS3dvZnJxUklxeUhCRUZ0TWk1MFN5dz0iLDMzNToic2hhMjU2LVdmZ1lhR2kzR0x2bVc5Zkh6VFpIRWUrUXIySTd4RzVIS1lFTjJkV0gwZXM9IiwzMzY6InNoYTI1Ni1mL1J2VWVlSTBQY2xDSnN5NHJqamZiR3hweVdybFhFc3BrZ1hYVVNucEdBPSIsMzM3OiJzaGEyNTYtMVo0SFo4ZU1nSDRJS3QwbmlVYzNpVlFIS3lRYTZ1MDVJM0tYaXAxcUdKOD0iLDMzODoic2hhMjU2LVRZcUs2ZjlCOURmaFVRTmZnNFVpYUpEandyZ1QwT0h4eVdvU29QS3VxOGM9IiwzMzk6InNoYTI1Ni1OMWJMRDBvQ1FXVHB6NzhEeTV4b0ZyN2RUOTJ5dHV6RnlqRUszZnIzNTdNPSIsMzQwOiJzaGEyNTYta0NxVFlFZTZacTNRR2JzTGZBSXpIL1VjMTJUZ2lYOGVLcGMwWlRiWU5VQT0iLDM0MToic2hhMjU2LXJRTmFYV3BPdUhqVWFiUXVqWHNVZ0NuTlBoUVdic2ZRVlZGdmtzUXkvalU9IiwzNDI6InNoYTI1Ni00d1lyMklQbTNuTnE1ZVB1dVFabVRiNmdOWXNTTzRFNUROcEhaQmZCMiswPSIsMzQzOiJzaGEyNTYtRDg5UDdJUFNZeVVnSlBtUEFDZ3lpVzR1VmlpeDVsZFZpZzhJMnN6YXdMOD0iLDM0NDoic2hhMjU2LVpVS3drelk2UngvY3NaMU5udWJ4V1I1MlNWUitzd2UyUHhKZkUwelk0dEE9IiwzNDU6InNoYTI1Ni1Ia1dPQXVSbnROTTkxUmE5UU5lQUpQYW9iVFJHWFkvS0JReFJNMnlWNXlvPSIsMzQ2OiJzaGEyNTYtQkJYY3VGN09RbjZMVXhVb2RSUU16VFpZRGVyQzNPWEc5MnlxUlBsR3JwND0iLDM0Nzoic2hhMjU2LUZwbWpoODljQVZibHczYVA1Z1k0RXc1N3l5RU01NXNobThVSWZ1bGpEcG89IiwzNDk6InNoYTI1Ni1oaC9EeWY5aGMxbldGMVo5Wm13K1pteWE3dXFkaW5jVEpzVDBGVXJzS3NZPSIsMzUwOiJzaGEyNTYtRVBFZFRQVDBRMmw3bGFxc2p6TzBtYVoxZUpIOWhsSWN0MXNvazlqbzkwVT0iLDM1MToic2hhMjU2LS9TZHFkV0dXN1I4eXorVGZqejUzN3Yvbm95aitSRHRUU2pVbEVSNnNoQlk9IiwzNTI6InNoYTI1Ni00M1o3MkUxQ0NqTlZLTFM0V0FhK3NiMzdtK2l1b1VEaVJJNmd1U2toUkJvPSIsMzUzOiJzaGEyNTYteEliUngrT3R4eWhNcXUrZHMrMWxjeW9GRTNydGpDY2lFWDBUdzBjL3VPdz0iLDM1NDoic2hhMjU2LTZibzU0RXBMaUUrMHRFcHM2OWgwT2NNTlhnM0FvTFUvOG5wTGlzSHJpRUk9IiwzNTU6InNoYTI1Ni0xZlJKcTcrZ1RPV3kxcXp3eXVnRGlHUFRYbXRxZTg0NHVMT2piazlaNkNJPSIsMzU2OiJzaGEyNTYtV3V3QTFsaXZXTTJrS0daREVCbWp6blFWcE9VNXJWK09XL1RwcFBLZUd5dz0iLDM1Nzoic2hhMjU2LVA0ZlV4MmJHbWFBcW5iSU9UZis5a2Q3ZnU2cXByTTRDd09SNlBDakx1OU09IiwzNTg6InNoYTI1Ni02ZC82Vm9ESVlPd0twNTFabEhYMUVUeTdnQWt1NHlHMEZBM0RKUzFhL1l3PSIsMzU5OiJzaGEyNTYtaGVEZFBDYzhuRlF1aldFZEI0VEdkeXhTZEl1ZEpHUkVYZm1TUGNneXB4VT0iLDM2MDoic2hhMjU2LTRhRlVNZ1ZmUk5wZnVPS2FvU1ZneGRSc3JTRGc3bVExTmk1SFByRS91bUk9IiwzNjE6InNoYTI1Ni00OHVOOHRJYUZmVmJrSmszYjBxdHdudXZuN1hWQ2VwR2JuVXVidUdBUnk4PSIsMzYyOiJzaGEyNTYtOEphaGpGOElOWHRNd1o4TFg0SC9vVzJPZ0wrOUpDLzJBT3VHdWNwaExBST0iLDM2Njoic2hhMjU2LUlHcEhPMjF5ZnA0VlhaWHNGc0pIN3ZYVTVHeU0rNm55c1lNdGFnMEFUcVU9IiwzNjc6InNoYTI1Ni1CNlUzbHA5V2E5dzUzd0NWVkRFT3hWOVJrKzhHODQ0RWtEZmtYdVhNekt3PSIsMzY4OiJzaGEyNTYtaGluK2JjcXhUL2l4WHkxSHV4K0w2TTNPRHRwdW51S3hOTXQ0MWUxKzFLcz0iLDM2OToic2hhMjU2LUczYjNTeGpPZmJ2UFRSbmM5cUxESGZxUTY2a3F1YVQydU5aMUdqUHdnbDA9IiwzNzA6InNoYTI1Ni1ZM0xoY3hGcXZlRjhRV3BYeVNFcU9LNE5WYTZlV2IzcUozUzk2c3l5THZVPSIsMzcxOiJzaGEyNTYtNllZNDZHNkhua2RJY0x6b1NZYjBDbjRXT1piQWFRTkJFMS9hWHNnWEtTWT0iLDM3Mjoic2hhMjU2LTlPWUVuZVNpazNSZFg0Y1BBRFcwa20zL2dXTWRQMGszcEtZR3l5dE1mZnM9IiwzNzM6InNoYTI1Ni1DK2lSK3Q3ZDZZL01xU0c5azJYVWV3SkUwVUZST2FMb05HTGkwY0sxVXY0PSIsMzc0OiJzaGEyNTYtS2tMZXhELzJGb2hXd1hraFhEeGJPdEFSUGltZWd4b3RFN3RiOXBQcmNhTT0iLDM3NToic2hhMjU2LTBoT1pWQ0VnUGg3dklPbmxWdXRMN2tSWThQSjJaV09xVmttRXJzOFFhU1E9IiwzNzY6InNoYTI1Ni1ZYTN6TUJ6OXJoUFNtZGZNanFsRnhQd0h0MnN6cklrZ1hZRHgvR2wwYmd3PSIsMzc3OiJzaGEyNTYtb1hjdXVXeHJ3Q05DWnRLRGl1MDdxTytBdTBCUWc2NkJMUVF1L0E2ZTlTUT0iLDM3ODoic2hhMjU2LWtHSjVpWkFJN2tRVWtpVEw0SzNiVFhhQzV5cTFFN3BWN28vSU41cG83aDA9IiwzNzk6InNoYTI1Ni1nUjR5WkRIb1RSZng4UXBDUmpTbWpZaHFFa2FrUThaeWVtWmUwem1qanUwPSIsMzgwOiJzaGEyNTYtMW1MUjdGdTdObG14dnEzN1lKaG93UHp5REVZQ0RoelpvbmlSUDI5VENYQT0iLDM4MToic2hhMjU2LUY3aFpuZzI1UTlJeEVpSzZWd2VEQk10VHNzZ2YrQUFFT0E3aUp1WjU3VWc9IiwzODI6InNoYTI1Ni1HdG1zUE1IYlY3bnpCRHNRMEppYlJVNHpwWjBGQUp1TUVFRndXMEdrN2R3PSIsMzg5OiJzaGEyNTYtSXh0bXkzWWZwbDNBUm1BTHc5QWJMVlZVVlZCVEhZdGttb2Vqa0s5b0pBMD0iLDM5MDoic2hhMjU2LURMYmtTdEEyRzAwNytocHI0bFpYekQzeWdtNHRKODQweEk5RTZ1YnVvRnc9IiwzOTE6InNoYTI1Ni0rZWtqSFNrcE9pZmRJN1FWRWVKVmF6VUFvWHVSd1VLUHhaU2M3d2NCRWZVPSIsMzkyOiJzaGEyNTYtY1l1ZFJuZTNoOTF2TitCajhjTm1WTjBVOEFUd2dxZk1KUGJQdGxHOS8yVT0iLDM5Mzoic2hhMjU2LWkvRElZNU1tUjI0NWRmdlJySjc1YTh6T0xjQTBaQTIrYmpPc3ZGQ2tVUUk9IiwzOTQ6InNoYTI1Ni0wYXRFRU1EbEIrZy9wOTdNakZ2ZldhSjFWV1MvZFBZaW5tQUNmSU93emU0PSIsMzk1OiJzaGEyNTYtY1Q3Sm9Hb1VDaUFKZkxRWUpXbWNJQldnRzhzZCs5eTRlRUkyRktpSWJvRT0iLDM5Njoic2hhMjU2LVZQOEpqMjYyZU1qYmRYaTkvZnVtSkZBY25VK1hpSCt6MU4yUW5wVWZrYzQ9IiwzOTg6InNoYTI1Ni1hdjA1NzRlK3EwM0h0M3RPVmVSY2w1NHFXN0NnVHNVWEtEeUtUQmIrdXcwPSIsMzk5OiJzaGEyNTYtZG5MMWlabjZLUjZZQmYyQXdtYldzdnVOa0xqZjFtUlFScmlEVHZ0SjBwST0iLDQwMDoic2hhMjU2LTFRMTFGajBvQklmQ2ZNeHBHU2RaWU8rZm1HTVRsWDlMbitoVFczTDZVOUE9Iiw0MDE6InNoYTI1Ni1ZWlA2VGhLQVBEaU14emI5UVVtbGtuT0UvUFVXL1dKWEdNbjBQRG5BSmpVPSIsNDAyOiJzaGEyNTYtMXJoWTBnallPRE5Oa3NOaWJVSzc1cHNINVE5SHFuS1BweDlnNS9EWi8rbz0iLDQwNDoic2hhMjU2LTNtY2Z2ekVOM2h2eGVTWnJSWTdlcWxUSzdzTFBNRnQwRkk1VGVaTHRpNjQ9Iiw0MDY6InNoYTI1Ni1mT0VOcTJyU3BVdTBtckRpZGEvbC9GSjFQUUZseWlZbXN5YzRvM1dOMXRZPSIsNDA3OiJzaGEyNTYtQXpMeFY4NGo1NjVQcU1UKzdKVDREOFRRWlNZNWw1SDR2eEYvMmJISHQzST0iLDQwODoic2hhMjU2LUlrRTdQZTNnVlJiVlA0eVBicGxXQSsrNExIMGpNQVBWejkvZTJxVllXN3c9Iiw0MDk6InNoYTI1Ni1SNlBHQVZyUytNOUZ5b2xkM3hMWTFPTHYwZ0NOTGl0eUNPNVpyK2dNNG9BPSIsNDEwOiJzaGEyNTYtU3VnRmp2S1hDZUpaNmxoOHc2cE14dGo0YnZVakVaRDZraWNrNDRzUmhQTT0iLDQxMToic2hhMjU2LWJjQUdSdCtXbkh4S2VEV0FGdndCSVZjOWZ0TFpqNEpYUXFLdEM2T2RCMEk9Iiw0MTI6InNoYTI1Ni1KRUxhdlJTTFh3bS8vTitmN2syV20rdzFQbUVBaUMwK0JralE3WWRLQkdVPSIsNDEzOiJzaGEyNTYtaXRtTU5rTm1qcTFVUFdpZWRyVmwxVmUvSmVMZmlDSGpHTkIyWlBCZGRvbz0iLDQxNDoic2hhMjU2LWhHNm9ZdW41bS9GLzFjMGF6R2VoV1NVK0lpTzFkMTdTOVdmK1Q1SGJjMHM9Iiw0MTU6InNoYTI1Ni00QXVYNXpqQTJYOWZlRWlSbFkzYXMxSTZJV01yQXFmbzVGK3BqNHJ2YU93PSIsNDE2OiJzaGEyNTYtRlV4SHFlT25Gd1Y5MkJiRkVRZnF6LzZnV29YNXdHaUhCbzZIb3pabmtwUT0iLDQxNzoic2hhMjU2LUNMcUFSTWY5VXYvTlJFMGRUMzZteklVREJodkxRRmVxa01WdzJCSmxEeW89Iiw0MTg6InNoYTI1Ni1FWHlpTmpqK0FOZ3hrUWswRytqSkVqRzFnZ0o4V0JpdnVrQ0FYamtJT0V3PSIsNDE5OiJzaGEyNTYtY2xZU0M5aWhjNDBPUk1NdkNFS3RiRmRwclVkK3MrUm5taFBJemxuUys4Zz0iLDQyMDoic2hhMjU2LTRZYUFqZnV4a3dGMmIrdEQ1eWg1RS96bWIyUmh6QmZJeEN1ZDVsTlVtT0E9Iiw0MjE6InNoYTI1Ni1KWlJpbldCR3N6ckJGMDZLMnovVzkzb3I3YytGWmRJTVNtSDJFMnBaelRjPSIsNDIyOiJzaGEyNTYtTFJ0N3oxT1p5OGhXejQ1dDI1YXZDQ3JyNFVEeGxCS202VzJuUFZ4N3Qycz0iLDQyMzoic2hhMjU2LVplZVhkdG5PUmVLRGlhQUx0OVdUVEpuR1p6UUQ3WklLZ2hHN0E0WVlVdFU9Iiw0MjQ6InNoYTI1Ni1MaXpsMFdySzdLSXVZd3FFZTlYL0prTHZxTjdKTmxQUEdCRnBjVTluWHZZPSIsNDI1OiJzaGEyNTYtb3JMSDUzVFNPMVNuYXdwM0daYzFPSGRvcXp4S2VxVTFjQmwrWVNreEN6QT0iLDQyNjoic2hhMjU2LU84anhZbllLdUt5MDF4OVdXamJuTm9mZ0NCdUt1cExkNGM0bUFLVE1vT2c9Iiw0Mjc6InNoYTI1Ni1sVXBGbmZBQUxWb3Y1RGxpWDFYL2RJTkhsYVoxMmNObWtNazl4SUcrTVZNPSIsNDI4OiJzaGEyNTYteGJnbHczNkhINXk5OWNmUytyV0N1aFAwNkxtSkxYTmF4d3J4N3UzU3V0QT0iLDQyOToic2hhMjU2LStaL3V2TSs1K3R5eGxUcUpYd29hZUdFcWN6aEU3N0xVRWxjTFlZTUpObTA9Iiw0MzA6InNoYTI1Ni0wTllPeWpSMGZ3NVh6L0hReXpxZGlNN0tMTDdaUXduSjNValMrM2V3ZDVzPSIsNDMxOiJzaGEyNTYtTGsvdkozKzF5bG9FbjFoRWxUc2Q1N3NkenF4QnMwMDAxUVIrM0ZMcitNUT0iLDQzMjoic2hhMjU2LWlWcWxpNittYUFQak9DanV1c0EzQ3hnNS91SXh3czZINHkzVm1IMENibmM9Iiw0MzM6InNoYTI1Ni11NUlVOVQxVVdxNDhTREVQSUZWRUVSNVpjb01mYWFzK0F2ZkxGRmI1V1o0PSIsNDM0OiJzaGEyNTYtUUc4U0tCeUZaQ3RnS3JKS2ZrdkVOQlBwMXR1dnBYRmUvSmdvS0lLdXhsND0iLDQzNToic2hhMjU2LXZLU01YT0xBcldreHg1Q3JsZlpNR25FeHlDYkx6VzAzcERxcTJldlJvUnc9Iiw0MzY6InNoYTI1Ni1sR1RMbjZuNjFuMXc2dFhpMW9Sb3ZVOFBsZFNtY3N0SzNZVzR6SVNlSDlNPSIsNDQ2OiJzaGEyNTYteTMrbElsYnJlVHFlOGtEbmlGSnNDajVLZzZralg0ZDJWSmg2YU9WUEN0VT0iLDQ2NDoic2hhMjU2LW9RMmdKdXN6RjJZczFEQ3ZnOUNBREl4Y1NQaFlEMUlwS3lIK2hTeG5TSkE9Iiw0NjU6InNoYTI1Ni1aeittdmUxTTlGb3BKa09hRlorL1pMRjROVnJ6RlZuY3ZTa21nWGR2cHRnPSIsNDY2OiJzaGEyNTYtWkU1Z3d6VmN4OWM0WmxUR2drZXpzZjV5WG14d0FlcGNVTjUrYWtJbWxLYz0iLDQ2Nzoic2hhMjU2LVZDTGRLTEc1bUNUOWhQRFhMMnFaOUx5WUh1SjQ3ZDg3U1hJai9idHNIblE9Iiw0Njg6InNoYTI1Ni1hY1NTb2JvMFJzdVpDZWRsVzhjeTR0ZVdORWJzU2wzWHRFMDJ3NWJocnc4PSIsNDY5OiJzaGEyNTYtTk9jR1ZNRW5yOWtxbldUZlRBZ0RVQUw2QXdkM2IxVGloMGdkTjl5eGRZUT0iLDQ3MDoic2hhMjU2LWdBdkhCbXdJV1FicHVWcG1BenVmY2VkeGVzejdaOG9WTlZxTTgvbHBJUU09Iiw0NzE6InNoYTI1Ni1Lb1Q0MzJKOUdGblM5NHlIME1vRW5SSnhYYkZTSXBoM3MxZ3I1bU10VEpBPSIsNDcyOiJzaGEyNTYtdHcxWTZkVjFFQ01FK0cxTWxWR1VFUE1hWlRla2tnYm9qQ2RRQmU2cGFqND0iLDQ3Mzoic2hhMjU2LWdRVkJYWFkrdXZGR3ducy9HSEdPLzBPWWVPT0tVNmJFUUp0eFFpMDlnREU9Iiw0NzQ6InNoYTI1Ni1aK29pTW9TUXlrdUtJbEtmUmUvNUF2RzFLRGxaMExPYzUwYTlvRzdYUG9RPSIsNDc2OiJzaGEyNTYtaDVCMkhhTy8wd1hpay91ejlrSXpzNzhmeXp3ZFc5NFVqUFYxR1FTVElJVT0iLDQ3ODoic2hhMjU2LUFENTBNSS9taC91VEYyRUJQRnB3SHBXMkhOYThsdzJoVTAvVU5MTnFhYlk9Iiw0Nzk6InNoYTI1Ni1IdThXQUN4SHBXUDNvNzZ0RmQvSi9zR3N6NTBzd1ZZc2cxZm15K1NGc2VFPSIsNDgwOiJzaGEyNTYtQXh4WGk4R1lFMVU1V1EvbEVHNjM2RTVINE5qUUZET3ZLbEw5UUVFekU4cz0iLDQ4MToic2hhMjU2LUZVVmRKWGlYSkR3ei8rWE53RlQxdERocE12SmFBVzJrMTVCMkZXQkE4QTg9Iiw0ODI6InNoYTI1Ni1PS2RZcitOaXAxT2gzbjVnMWdBWCtJNTZDUlhxb2ZIS2YyUnBPdGdqRlBBPSIsNDgzOiJzaGEyNTYtWU1zeEVudUJMdm5qcHVIVWNhWTl0NnRsVE53bWtaUG5WUllYeFJLNTBCbz0iLDQ4NDoic2hhMjU2LUM1TEpCS3RENmY3dy96eWtlZ2Vydk1yUDV3QmRPeDN0bnJHZXdPczIvWGc9Iiw0ODU6InNoYTI1Ni0xL1kvYURWbkhYVEdaWHh2WlBLazVLTkphM0U3UzVuT1cxMVJZRmdGRWZzPSIsNDg2OiJzaGEyNTYtNjJhMlpMeG9aL0lINHBJUWJZbkNNT0diK3RydUJRK1VLQmRMZUtBOURUTT0iLDQ4Nzoic2hhMjU2LWErdDc2bVpQazBhWGIrcVQrOWF5UUZRbkNKTVVMTkx4ZHlJenViMmRBNWM9Iiw0ODg6InNoYTI1Ni1PbWd5UUExTlBYdGdPZlBieHFJQm1yS0lMd3JEK0MyaFFMaTVWWWw3OU1BPSIsNDg5OiJzaGEyNTYtbFJScGliazk1bWZHSGM5QUFVY3h5N0VPOUtDZW8zTlc2dFhPZDRmMDExND0iLDQ5MDoic2hhMjU2LTBTcFh3c1VOaGRQTXRHekhhU09jR0xxOGtyelI0TXQxa2lHSTBTNWZYYnM9Iiw0OTE6InNoYTI1Ni1TdXVNT1plQXJUK3dHV3ZuWEUwYjJoYllQRHkyVHcxWlVqQTVqSzUreno4PSIsNDkyOiJzaGEyNTYtZTFoRHEyTWVFdTlWbXB2V013R29NY2NaY0lFcm52c3RObmJpQzhCdVBJTT0iLDQ5Mzoic2hhMjU2LXlkYk10ekFuYXRRd3oyejB6VHJXb0xOSmJIMWUzNDhITTR0K3FPcFp5MFk9Iiw0OTQ6InNoYTI1Ni1TVzFkZUdSYk1QWWVqbjUzK3ZFamM2Z0FTaXZQWG5PZ1c0VnFXUFdXZzUwPSIsNDk1OiJzaGEyNTYtVTUwd1Qxcm5Gb0JOSVlXbDBpVDJIVi9JM1FtbnVsQzRBS1FIM1JJMXhwOD0iLDQ5Njoic2hhMjU2LTl5eEtRWUJadXFHZXdjOUFkNlVDK0VNVkZPNk5yQlczWDJhUEwrMTBaMzg9Iiw0OTc6InNoYTI1Ni1FemU1SVp6TGZaV2hoaVo1eFl1T21JTmhrMVBHRU4vcjFDT2RGWnJwQ2dnPSIsNDk4OiJzaGEyNTYtY1NEZkxYMUE4NFBnbUxNS2VkTloyM2VZMEt1MHRJSWk5WHlZZUt0UWZZVT0iLDQ5OToic2hhMjU2LU1IVEh0YXUzS09LN2VjN1hvZ1VhdkFEbFlxa3FOcTAxbkV2NTJkdmdCU0E9Iiw1MDA6InNoYTI1Ni1UNG1EcHNBOTdnaDJvK0toc0loTnVKMzdwMnljeDg0VGxIVHg2dXhHcG9FPSIsNTAxOiJzaGEyNTYtSzN4N25DSzFGVHN5UFRndmwvSlFLUlpYSkMrekNHYjAxREVGWjFLc3JsYz0iLDUwMjoic2hhMjU2LUdYaGpmMFUwRUlOWW4zd3lHbUc0TVd1VWd2SmdxWEQwUmh3d1F2elJpRWc9Iiw1MDM6InNoYTI1Ni1RVGxmcVVtU3FQbDhXRlJGM0NjaUlvclRGblNrRkRNM05GN01hRFBYVnhJPSIsNTA0OiJzaGEyNTYtdHFjdjJpZzVWRTB0WjhZVXFxeDRYSmZsTjlPcnBLbUJtdzJaeVoyYjl6WT0iLDUwNToic2hhMjU2LTduUUxSOEVScDlmdUgyMXlVOTZwZ2lsWER3Y3JSZll1TmdicW52UHFFZEU9Iiw1MDY6InNoYTI1Ni1IaTE0ZXBNY0xxWXEzdDh0d2xKTkFpWXJRYUt6MXRxMnRCUmlZSCs0ZVV3PSIsNTA3OiJzaGEyNTYteWNWcDNQSlV2Sy8yRXQwak9yVkNBd0lGUDVYWVFnMkJzUTVYMEx3QVduND0iLDUwODoic2hhMjU2LXgrVmREL2Q5Z0xkSGQyYm9mK3JsMnpYc3pmcnJKYnNERnQzelZsM2toLzA9Iiw1MDk6InNoYTI1Ni0vUk9ZcTdZeHV5QXVBcDg1YWxjOFJlcG41bGRVRFJ1WDBQd3A1UGlaZ1VJPSIsNTEwOiJzaGEyNTYtSENCUjRlOEZhY3ZMVkpYQ0c1ZXcvWVFuc1I4NmFLVlRtN3BTNjFqeU0rdz0iLDUxMToic2hhMjU2LUxxV2k4SG8xNWIvMVJNSWRWazhmWHFubDFSb1NuV0tjVUdadlhZQm0ycUk9Iiw1MTI6InNoYTI1Ni1DZXdsdmVQT3IvU0V4OXp2QndTUmovOW80aWNNK3JjdElHVk9LTCtyQVNBPSIsNTEzOiJzaGEyNTYtV0xnUHpnbGlvUkx6TGJna3VZbGVxbzBsa2k1bTF6cGlNVDE2aVNBZHl6ND0iLDUxNDoic2hhMjU2LVRzSnVOY3Vqb05JZ1Frdk5ldXpDVmFubnBZcysxbWs2VUsvVlNobW43L3M9Iiw1MTU6InNoYTI1Ni1Cb09SNHA4eGJwVTJGTlMxc2xZNUMwWDdPaXlBZFVrdWtueHJRZ2VoVnpFPSIsNTE2OiJzaGEyNTYtakxLSndyMjl3eC9hNHozVEZ2MWhyQW9iU2Z2aTQ5dDBTM3JzaFBGRXJkTT0iLDUxNzoic2hhMjU2LWdJOUFCZzdkVHNqdlphL2lFdmNPUkg5R1VUWWVRQ3lwWTRENnh3UWE1Y009Iiw1MTg6InNoYTI1Ni1xYjVxUXdBVFRMb1BGblExdWovdS9hK3Jib3RuMkc1VGpZRWdqL0FZZFBNPSIsNTE5OiJzaGEyNTYtV1lRNGRBL3QxQlVKbEJPaUF5ejFZMHVTWE5ET2JXR1BwVGZsVndoc1pJQT0iLDUyMToic2hhMjU2LVpPTjdrY1JxV0tVRGd0bFMzeWJNdVFmbXlYVGRQMkx4U0VpUkRyQnl2WVE9Iiw1MjI6InNoYTI1Ni1SVy95K0RmSU5SSEExQzBRMXVXQ0NTcEk1SWdqWFhHR2hlS3VWT2dkZVBNPSIsNTIzOiJzaGEyNTYtazdaYzVhRlpYTzBnMngxSXo1Nkh0SHZnNzNGcGpqMFo1NmpheHdnK1JhRT0iLDUyNDoic2hhMjU2LWVkL3BlUTE3WU9zT2hqT2NXWEVmQmU3YVZrTktZN2hlQVY1aHhEQ0F1SGs9Iiw1MjU6InNoYTI1Ni0yenQvUWl4VlllRmhjNEQzWGh5WGk0OUU0d0RMS3laMTB3VlYxenJxQVdJPSIsNTI2OiJzaGEyNTYtK0l4NDA5MktvQngwRGkwSEFPVDBRWW9NWkFpcDZ1dndkbW8wTGxPOXNTYz0iLDUyNzoic2hhMjU2LVBraHFvTXRnZ05adzNxMEJTRm9Db2ZUaXM0dFNmMktmdlZPZXE3MHdNZE09Iiw1Mjg6InNoYTI1Ni1ieFRDMFpIQ0xJSzNKUjRCUEs3Mlc1akdyeFVKRWZ4UisxeFN4eGR6cFlvPSIsNTI5OiJzaGEyNTYtdGpya3AzUXNNZnVyelpSTWw2WFZCcUU4NzlFS282QTZ5bE1YQldTdDJHND0iLDUzMDoic2hhMjU2LXZGci9oa0dkTTlhUWRRR0xwcmtuSUxhVjhydE00Q3NhRnhJdEd0amIvNG89Iiw1MzE6InNoYTI1Ni1iSHVBUEpoTHhVQ3prbDd0cGJoMUhGMy9mWmlURlBBWHhKZlJYN3JkcjNJPSIsNTMyOiJzaGEyNTYtQ0R1SEVVQ2Y3dDFQR2JlNGc4NlJFNXp2TGNCQnhMakJSR3FlQlE2dTA5cz0iLDUzMzoic2hhMjU2LUFEOFE4RFZxMlNBVi9odXMxdzJlTGhUaDBTY0o4eDVIT1RNWU1xcnlId0U9Iiw1MzU6InNoYTI1Ni0zUmE5YkdvQ1R0a1AreGRpeDd5S1VyS3lqOTZwMW5oeWRmNGpyVG9QQXVJPSIsNTM2OiJzaGEyNTYtU0tkYmVKTnkyakNSWWRSbkxjQ0JNTlpaMnhvcEErYSs1cmJtczdndkNmZz0iLDUzNzoic2hhMjU2LUdxVExEZFpScjA2am55Z1FMVVd5alBSZTA5azlEUTNDcFluYzZMc2YyWVU9Iiw1Mzg6InNoYTI1Ni1Lc0ZNZUtlN21VQ1JvTEU2V1hETWJiZUFBZ2ZHNFNvT2R4SFpvWWpBMndBPSIsNTM5OiJzaGEyNTYtYTZ0TmRkSFpGVzhGdDdudzc3ME55cUVMTllEMUNPUjRmcTRib0x2K3hYaz0iLDU0MToic2hhMjU2LXJkZ3VrUHU0bllHMTgveWpQL2JKQ0tOdkZPZHVPR3JpZXJWVTRaTzNvTVk9Iiw1NDI6InNoYTI1Ni1oVEhHeXVsTnFSK3dMWWxCY2pRb0RkYzZ3SnNPVU4zajBhY3JrNGVhUWhzPSIsNTQzOiJzaGEyNTYtYlFCa0x5bVlYNzY3ZWpJOGtCYjVhVW1WYlVnWGFYT0RrM2NVbG5rbkllQT0iLDU0NDoic2hhMjU2LVBYVnlvdWhCOXNOdFJTRFVlam1JaG1zUGhndzZQekFNdkUwSmRjMUx3NHM9Iiw1NDU6InNoYTI1Ni1PaHNTcHNpM1UxcFdqRnQ3MDY4VlBWMUVpNUgyclpVTUdibGlxbnRQN1lFPSIsNTQ2OiJzaGEyNTYtZVhLeTBZWjkvOWk2d3hoZk40UG45VWtpY2prU0JPWFpVRThBVDlDREU2TT0iLDU0Nzoic2hhMjU2LUZGSDlka2tsWWVqaVZnbzVZdnUrSjdxRFdLaUNoOXlURUVkUXluWHFUdHc9Iiw1NDg6InNoYTI1Ni1mcTY0eHpIUGR2bEhpRlNidG4wOThSWVo0MmhvVEREUTRQMmdpZCtTZ09JPSIsNTQ5OiJzaGEyNTYtcTdDalZTTWlTYzYwQmMvbTBydXcxazVQOGpaRGJNdk1UKzFlL1BKY3gwUT0iLDU1MDoic2hhMjU2LWpLYVRPUGJOQkI5ZTBOWUNkM2RmRUo4MFhUS1pCRStYQ0k0VkhQNXlvS2c9Iiw1NTE6InNoYTI1Ni1wUVNUMU5MRlBqdVdPNEFtTGVxZGFjY1VaS05laDNWdU5QajJjR0hkdkdVPSIsNTUyOiJzaGEyNTYtMStqcVR5RFE0Z0lOT3RXUTZVUE1ZaDIxaE1ZL0xzcjNXSnM5ZjBLTWNqRT0iLDU1Mzoic2hhMjU2LThmU0wxWmdtV2YxSDl0U3JkaFhrRmE1Yk1JTWU0TG1XYTQrb0lqeUJ4SDA9Iiw1NTQ6InNoYTI1Ni1OaEhKZkovSWZuY1RKcEtmT1JuUURFS2JQU1B2djJxTThvYzA1VjZNQjJFPSIsNTU1OiJzaGEyNTYtYTVBUml3SURBb3hmS0hZTHE3K2lNdnVFV3d4bWhoUm9OWXFWc04xZ2M0Zz0iLDU1Njoic2hhMjU2LWlKR1J3U01YRDB0VkVLWkpDZ3FxeWZxVnNDbzVLUGFQKzJiaGlTcmZTa0U9Iiw1NTc6InNoYTI1Ni0rZDVEMXZrWE9nT0UxQW5rZGdTK3FKNlNXNFdFYTNsN2QyUlZXMGJwcVNnPSIsNTU4OiJzaGEyNTYtUXNWektDWGVPbnVBYWUrZXVaOGUwamZFcjc1VE9UbzJsMHByMHEreGYrYz0iLDU1OToic2hhMjU2LU9SNkRVNnZkSHJDQkcwOTJrYVdHaVc4aW13ZHVWRVRUbW5NeThoc1BicUE9Iiw1NjA6InNoYTI1Ni1MdTBrN1Bpb0FwbzlJWDVDMTRjQ3R0UDM5aUxSY2RRRmpJVmx0RC9lQVlNPSIsNTYxOiJzaGEyNTYtNGxPK0sxb1g1VmJXMjN5dGE5Z2ZWRTJDVDcwcUN1ODRINXBsWHlnQWZtYz0iLDU2Mjoic2hhMjU2LWRIWXY4RjF4eGhUaEcrTFRDY2l3VFc3MTJmU3Z2cStlQm1zMDNETjBhbm89Iiw1NjM6InNoYTI1Ni11K05kMGdvSTZFT2RiM09Ednhpc0VHdlA5RVd4OUZsMTc5aDB5VlVOR3JrPSIsNTY0OiJzaGEyNTYtYlV4QUI4RmhHUXQ1YVAxbDZMZFJBQ1pIVGl2VEVEeHRENTllQnllU2tpaz0iLDU2NToic2hhMjU2LTlNd2FtN2paa1FDYVNiN2xHWE5uMzAwU1BHSDBpMURBelZLckovamswajA9Iiw1NjY6InNoYTI1Ni1pWXUzZEZ0YXExYmZrUVQyb283WWgyckVZaTV1L3p6TVJkMzNKdC83WlJVPSIsNTY4OiJzaGEyNTYtMlZtMnFOd29kbUpEcnVROVhURjlhWlVZZzBWYnFQaUNkRnRLdWJiQy80UT0iLDU2OToic2hhMjU2LUFPVHNPMkVlaVI4ZlBvcDJwUHBPUnc2T21MRjY3U3NSVGxmbkJyWnNvUWs9Iiw1NzA6InNoYTI1Ni1kcWFZY0JCblhCNW1iZ1hUVThkaDZPMTRoU3BObUFXUHpxWVRnYnFHaVYwPSIsNTcxOiJzaGEyNTYtRUhoR0ZBb05acERBTzFjMndobFZ6N0RoUFFlTDR0Tm1qdmNLbk1QYjJWQT0iLDU3Mjoic2hhMjU2LW12cDlLb1FzZjBTT1hpd3J2L05oNU1mOTF2Qld2V0tDd2V4d2pVVWl1OEE9Iiw1NzQ6InNoYTI1Ni1PR2lyMEIvbUE4dnFYSnI2aDVkbnd4N0M3dDRuN0hEVzRYekkyOGJlVHd3PSIsNTc1OiJzaGEyNTYtYy9SeFEzTUNCYmdXQnBpZ2tWcURXMTFPenNKRkk0UVV2WDZVcnVhNW1xQT0iLDU3Njoic2hhMjU2LUxvTm1rSzRGdDNHMWd4S05zQ1B3MUFIaTI1cnRjd0JkU2RMMjI1RFMraEU9Iiw1Nzc6InNoYTI1Ni1tVDFiT3Vma2lNaHV0anBPaTlHc3MyWGZ5RnE5Z0kxTU9Qc3VmMDh4UnNZPSIsNTc4OiJzaGEyNTYtc2VqWDZnajN3ZVE5bVZHUTFTVVV0R2k1MXVWRUMvWXFFb1FncmQrSXlyST0iLDU3OToic2hhMjU2LTVxNExNNzkzNSt5anZiM1k4VDFaZy9ZNi9hUlFrckQyUG9ZRVhUQVA5bEU9Iiw1ODA6InNoYTI1Ni13dG5BR01iTEoyVmNSOWpxK2hjNytsamZTSEJuMGZkZDNudi9hazhHaFlJPSIsNTgxOiJzaGEyNTYtR2pjOXYxdjZmREc1dnZISHhnQk1FK2ZFRW9JQ09EMzdIcFR2UTZnZnhPND0iLDU4Mjoic2hhMjU2LXpLT2tyZ2RnYm9OQTIxMGtxQUJtK3dBWFdkT3lNbU00TFdMWmtCTHZrTk09Iiw1ODM6InNoYTI1Ni1EYTdRSXAxR3BHb2wvNXpjS25RTVRPQmk1MkxHQ3lnZjZxTFJXQThsbmJFPSIsNTg0OiJzaGEyNTYtNWIvSzFJWTVEeUtJVzB6akt3ekxEaWhMS1EwcFIyN2kvSk5KM29keFc3TT0iLDU4NToic2hhMjU2LUg5cEIxMHBoV2hacnJWdGF5ZHVlZ3Z2cTVyOTBGN2Z5OHA2ZklIazh0Tms9Iiw1ODY6InNoYTI1Ni00MUJaT2JaYm1UQ0tOWkxNbWVFMkFGVE5rcFlEanBFZEZSV2h6UVRzTlFNPSIsNTg3OiJzaGEyNTYtSUhuN0hUUllVc1NvY0Q2YlYzZmRDNFF3d2s0U1MxZ1FETXVma3llVWtFYz0iLDU4ODoic2hhMjU2LWZUNjRqb0Y3K2tGMlVHaDhjSnY0ZXR1MEtRSHlQQzk2bUpZVm5RRWdtbGc9Iiw1ODk6InNoYTI1Ni1WNzgrWkJUUnF6QTdJS2VkZWRnZUtUL0crakNhWmRmWnhuTjZabjNNaEdNPSIsNTkwOiJzaGEyNTYtNmlCRE91Wk0wMTRtaGdXM0xOMWZpSXhXU3FNeEM3M0xjOG1IM24wUVc4OD0iLDU5MToic2hhMjU2LWQweStzSUoveXpDalA1Y0F3aGtSbnMwU3diV1BZTXkwUVp3NVhha25mOVE9Iiw1OTI6InNoYTI1Ni1HM1ZIVDBhQ3pWWUVvNlBCbzhtQSt6R2VkUXNqM2RSOTdvR1hQR3FqT2w0PSIsNTkzOiJzaGEyNTYtMXpuNWZDTmx6VExxN253MFZxbnVseU9ORldzRWFWdndWQ2FITkJIZ09mdz0iLDU5NDoic2hhMjU2LXhERzdxcUQvNTV3bDZZOE1aV2tSU3Q0ZEh6NUU2aksvcjRuVTRUUE01czA9Iiw1OTU6InNoYTI1Ni1BUFlpeHhmZ1c1ZXBuY0cxaGNsbkZlMzBMK2s0dDdJQVNUaEF6ajdxOTFNPSIsNTk2OiJzaGEyNTYtRHZxTFZ3NUVtTldRQkxjQkNORE1FdnVtYTNDU1dBcTcrdnJKRUFpeGxvVT0iLDU5Nzoic2hhMjU2LXdpaHpvZFpHSmxJdGVjeGJIVFFNVmkyZXVoMW15RjlzcGZSTGVTMjdPQzA9Iiw1OTg6InNoYTI1Ni1sMXdydzB4aldvVFYwM2tLV0tqZWNYdEpIUnVLQjdwSUxDaFdXWjI5aXBrPSIsNTk5OiJzaGEyNTYtTzBKZ1YzTUdUT0FRYTdmdjUvdUJtV3lvVUpMWVdveUdzWEI4SnRhc0NhQT0iLDYwMDoic2hhMjU2LTdtLzh1b3pVT1JDNjM0WnF5SlF0S21lc2lhMWN2SEJqWE1PRnlHT0kwRXc9Iiw2MDE6InNoYTI1Ni1qQjdDMUlaQkZXaVdLaXZpTU8wTU80OWVXWEE3S3Y0MWVNRDBOWHNla3pJPSIsNjAyOiJzaGEyNTYtenRrR0FYeVB4TWhabUJjajhHWDkzRnpjd3B0eFNueEdsZG4zSlBDVzluWT0iLDYwMzoic2hhMjU2LWllakh0YnI0Qk13cjVranVJbkh6dEhMTlpMaUt2Q1NseVR2UGxQYWtlNlE9Iiw2MDQ6InNoYTI1Ni14RkpXS00xUjNsdHdvbzBjbjVlMUpmZE80QlQzdkZhMFZnbGdQakszdW9RPSIsNjA1OiJzaGEyNTYtR0JUWUZPUjVGeXJ6MnF4T3picnVMdmhNSVZjUGZwWFNzMmdEdnJna3dKWT0iLDYwNjoic2hhMjU2LVVlanlzZ000SVMwUlZDRU1Gb09qRnh2WWlLWXUyeUNHdjhJMFlELytEWFE9Iiw2MDc6InNoYTI1Ni0vUklKODFNL0dtMjBtK1BsM28zd2ZjK1UzbU5EaE1OVjg0d0l1YWc0bWw0PSIsNjA4OiJzaGEyNTYtWkdBRnlSZTI2YkxMbmphZTdIem9IcXI3QXZpeEh4clg2WUV2cm43ZUJKUT0iLDYwOToic2hhMjU2LTcxQzNZS0NWRkRmVEVMS29scExjUTllVnlDdTlCY0xYVkFrZ2lZRndGdlU9Iiw2MTE6InNoYTI1Ni1TaU1jbGdONUFTenBYTzhWUlBTVmRremdRWStTTTB1UjY0clZKMnp5TFNJPSIsNjEyOiJzaGEyNTYtY1hnZGtnZjRwOUtoUnA4Q1RBY1pSbmg1S0hCdDV6OHlYeXI5elZiYmo3ND0iLDYxMzoic2hhMjU2LXpMdHFMTmsrNHhnaXBUUzNnSFFXTTYwSXFFd3NnaWo5cWlRbEZkWkZ1a0E9Iiw2MTQ6InNoYTI1Ni1sUWEza2V4Tkk5VlhIU1FKb290N1pMam96OFM3SGwzNllQdHR2QWxVOGVvPSIsNjE1OiJzaGEyNTYtejk2RVlzQ3oxeHlkVFU1OFhIbGVmTWFxMDJod1g3RmhXRXhlZ1ZSU1dsYz0iLDYxNjoic2hhMjU2LW0wUjJld0NWaWVCNGFmNDBweExWc2VidVo3RjUvNnNuTlVxbUs0TUVFVkE9Iiw2MTc6InNoYTI1Ni1teHJpWjdVNTl3cGdySnFUWVJrcjFUNXRWOXZpM2lkOUZ2NkdyRy9ra0J3PSIsNjE4OiJzaGEyNTYtNnVxVm5DSXd5d3N0ZTUxWlBsOWJ3SGswbGgwRWxCR2VSSWpwalVOS2pzVT0iLDYxOToic2hhMjU2LXVhZ3F0SlFZL2lJYk5manhIS1ZSWlFvRTh5Tk0yVitEQU5RT1RmTEVuOVU9Iiw2MjA6InNoYTI1Ni1tR3dqbnlPenBUU0RBWkFHdHBsQzgrTVdnT2JtbWhRVFZGaEc1Wng5a3hBPSIsNjIxOiJzaGEyNTYtam5FQjdJM2pPWFpxRVhrTWFNZ3Rqa01jTVdJdVluN08xOGVJbW1uU1JvOD0iLDYyMjoic2hhMjU2LTFqSmxlWk93VWJuVE5RbW9YWXQremdLalpEM3lEQnlQSkVKRkNTcDFuRGs9Iiw2MjM6InNoYTI1Ni1VZDMycFNtZWFIVjd2WUZycSt2NEo2Z2p1TDZDcUNrQnBaa2F6aVR6UHFrPSIsNjI0OiJzaGEyNTYtSU5IUlhTK0xNMUVMSHRVY3Q0WlYrWk40SVp1RFREQjZsblhxcUwxMHJtdz0iLDYyNToic2hhMjU2LXNUM3ltQXNPU2JGUHhocGJzTjB2ZDNuUFlWTFJYTkVJWjJkYnNXK09aTFk9Iiw2MjY6InNoYTI1Ni02QVN0T0N6UWxhZlB1d2JIVjduSkwxbmtCSjBWdHc1b1lNeUdRZGs1YUdJPSIsNjI3OiJzaGEyNTYtVGdZYWJ0d21ldGtTQ2VKb3BXNk8zQjNxZStYNStXTTUxWE94QzArTFg5ST0iLDYyODoic2hhMjU2LXNxV1J3MVNKKzJZUmxrWVJGb25mc1NUQURNOFNwZGhEc09wUWpMaE1xVmM9Iiw2Mjk6InNoYTI1Ni04WXhVNG5xS2pHS1dPVVZ4MS80WUJPVlBGZldCYkxKQ3RPME15U1ZDSWxVPSIsNjMwOiJzaGEyNTYtcE5TcUt4NDBaQTZyWmkzT2d4Y2p3TGpKaUR1N0xHSXpqWGJXaGtMWjBwYz0iLDYzMToic2hhMjU2LWpQZTBuSENrOStSSlNWeFdhbXZVM3RZeWphL2dUMWd2RGM0bkhuUWhqaFE9Iiw2MzI6InNoYTI1Ni1CMk8zZWwvUnlSMkZ6cTZoaVQ1OHJkQ0J5N3BnK1JxMGdFeHc4aCtQNjVvPSIsNjMzOiJzaGEyNTYtcHF3WWdNZE5KbVlUejBTVThDV3R5ZExnSzRUTVg1QlZzaFNwcW1nc24yaz0iLDYzNDoic2hhMjU2LUhqOHBnVmtwajJIOFc1NEFXSWhyWkNvMHZkeC9id2t6eFZOVVk3K3pPK2M9Iiw2MzU6InNoYTI1Ni1zWUx3MFIrN1hMRks2bkFkME16NVpzcjcrWTFTTUdwNHkzVWVLczBwZTRNPSIsNjM2OiJzaGEyNTYtWkxFdXU0b2xuamptb1lxMzNPaW5LMTNsbUx3VHFETk9HalVJdXJjN0p1cz0iLDYzNzoic2hhMjU2LWtEanJzblNmYWplY0J1SzhFZDYzeHRHODBSVGdJaVZMc3NVTHQ4ejlyOEk9Iiw2Mzg6InNoYTI1Ni1UeWxLb3QwYVhvR3lzeW42aDRaaS94b3hPRHJIK3R4UVN5NWVLbzlrV25RPSIsNjM5OiJzaGEyNTYtRnFhU21ZL1VJNk1TQ1M1K2oxbXF6YWpyWU9rMHgyeTRkeTlIbGZsVk1PTT0iLDY0MDoic2hhMjU2LWRxa2dOWERwUlRyYmpiTlpnVjNYTzJXTkZLWXpBeFJpRW5jUGdTTHV4SEU9Iiw2NDE6InNoYTI1Ni1wTEdDMFBuU0ljanVlTVNleHNZTDFveTIxTkE4WHY5T1J1YTJpQnlmNDhJPSIsNjQyOiJzaGEyNTYtc1VWUi9UYUdONVVDdS9BUC9NL3psZmZIbS85N3JyU3l3TjFLYy9BUkZTVT0iLDY0Mzoic2hhMjU2LXQvWUEwQzlHdHdRUHJYRlZady9wb0ZsMjFrNVd5QUZ0cnhvWmw1UUZ5REE9Iiw2NDQ6InNoYTI1Ni1STm8wSEhYdnpHSFFJQ1dRWDNEV0FmS3JiNzZBQmFxOWtxM3EzUzg2eWxVPSIsNjQ1OiJzaGEyNTYtaWluelRtVnkrVmtyWTJoZStxTXMxalBQUDVBRDhoeXVib2hoVHlXQWVUbz0iLDY0Njoic2hhMjU2LVJ2cDIvTjdaM1ZsV0NZKzl2NkRSeDNDMmlXSHkyaUxJZTU4TlIvREVVcWM9Iiw2NDc6InNoYTI1Ni1QNUYreHNMalBGTkszM3BXUGJWRU1Uek9lRmtRWkFDbGZEc0J2eDFCaDBVPSIsNjQ4OiJzaGEyNTYtTDJtcUk5Y2l4TUJqRkpicEZMRjg4OWM1dE0wdHhFOWpkV0JtY1FORzkvTT0iLDY0OToic2hhMjU2LWtIMDM2RVhFdllzNDIvLzZIdURNVTBtYndiaXhDdDZ0QmMzTERjeWtVK009Iiw2NTA6InNoYTI1Ni03aHFzTllJMXRhMW93NDB6Y1JRWWZlNjhBdmtWaWpWOTR0R05FWGltOWJvPSIsNjUxOiJzaGEyNTYtdnRaTUF2b215Mm9rQ3JRckZHTWtlR0hCSXJBUUZRU1oweHhuZ1VyN2lFaz0iLDY1Mzoic2hhMjU2LWJJTk14RDFtQTArcUY1UlB4SzJvVXpYSGxkb2pUVXNCdUxqMTA0WVpKekE9Iiw2NTQ6InNoYTI1Ni10dHgyRk1GeVJsMVZvbjEvV0ZIVUorQnBVRGNNT1lrMWpOT1BqbWFla0wwPSIsNjU1OiJzaGEyNTYtQ3FjQ1I4SHFZOFFsdndQaTNLMURuaVpqMG4vUWJCd2N2b2R3eGVERWtlND0iLDY1Njoic2hhMjU2LTE2aTM3SXRBVDRqcCtXVWhhdm82bXU1NFJ4MkxNVFZ6OVo1dXlYTmZ1YVU9Iiw2NTc6InNoYTI1Ni1neDNleTFIWWZubVI4REwzN0hBaXpFVFNoZHVTTGduT2l4YzJ1OElCeTRZPSIsNjU4OiJzaGEyNTYtYTM1TEo3eFYzcndEMU1SdkxYRU90VXZ3amZxc2s5NWErVUNpWjZaL2pHQT0iLDY1OToic2hhMjU2LThyb1BId3QxVHdCZndYaDFzL3FZaWVRUHJnS1h5VnZvSlY4ZzRKVlpTdHc9Iiw2NjA6InNoYTI1Ni0yMXF4ODA1REhCd3pia2ZZSjRESGttTGJGOXdNazd1YjMxWTY4ZlR2TXljPSIsNjYxOiJzaGEyNTYtVEdzMUUwQzZjdUh5MUdraEtwNTd6MGxUZEJhcUVhYzJGeGVaRzd2d3Fpdz0iLDY2Mjoic2hhMjU2LVZyaHlyV2g4dFdCdFJqWWxrNFRZczRXN0xsUGRvb1diRVBxTWdYVmFVTGs9Iiw2NjM6InNoYTI1Ni10ZWlILy9ZemkyUnV0S3pDZUtlMVIycThBR0Q3Y1IrNEZXQWcra295TmZjPSIsNjY0OiJzaGEyNTYteWV2R1owd1NFSGtQYlI3SEs0dENmSDJGWmVoNytGZFpteFZaUEFqZG9Xcz0iLDY2NToic2hhMjU2LXRRMXRkOSsvYkR4cWxab003TnQrZ2F0S3ozWW9hd0tzQUdpSzVWRkIyOUE9Iiw2NjY6InNoYTI1Ni1qSmFIUmJVR0poZVVLdG5rRUhuWHVWbUlBMGhYNFo0R2VCQzhHV25objRRPSIsNjY3OiJzaGEyNTYtMjdOd2xWS0k0cEFYM2JlWWJSeTVlSVRlR2JMSDc0R3FNMWE4ZWl0aTJHOD0iLDY2ODoic2hhMjU2LXA3RzFWWDhBTHBVc3pBbU5QZllxUVZWUUs0d29TWWg0ZmNISXRzRngwbHM9Iiw2Njk6InNoYTI1Ni0xSUNDbjBVWVJUUnhpbTB5RW1mVVB1K1VsTXpHUVZ4NG5PU3YxOEgvZlVVPSIsNjcwOiJzaGEyNTYtTW16R2VxVmxXQjVYOHRqd1VMWVJGYit4UFgwR2VUYjk1NW1RS3ZXbllEUT0iLDY3MToic2hhMjU2LUkwKzdBNW9MeExIOXZlZEFERjhxOUw1Mmd6NDhWVjFEZlFCcHNBMDNZOVk9Iiw2NzI6InNoYTI1Ni1DUFRlSHBTWXdYWkFHVmpTOERqWjJFSjl2Q0tsMTd1VVVSRjdvS1pNUzUwPSIsNjczOiJzaGEyNTYtNkN5MzhYQThvWU9RbUlhK0VZMUU1LzRIRHk0cTFoS1BwZ1hMWVRLWVQ5TT0iLDY3NDoic2hhMjU2LVpTZHEwcTBHSnZLSFRBQ3N2TVhqcml1RDhzZ0txL2ZwRkc1ekJOWnpFNWs9Iiw2NzU6InNoYTI1Ni1uMEhqeURVOFZ2bkNMYytaSjZCVDlSTldqb08ySW5QWjE1QUduV2dhdVFnPSIsNjc2OiJzaGEyNTYtd3UwQVJBTWVOenJOV0hhOHdEWFo1TlI5UFpnelBYRHc3a3lpVVlTVnVhST0iLDY3Nzoic2hhMjU2LTRqcHhnSFd2UGs0NUVBS2Y3WWl0U3cyazhMZGRGZHhOLyswSWt0V1FQdzQ9Iiw2Nzg6InNoYTI1Ni1zdCtDeUpWViszZXBsaVdmY0s2ZG5IZzBWTXdXdkxVNksvQmN0OVZKVzV3PSIsNjc5OiJzaGEyNTYtZGd1MkJmRFNqRjRhRkNrUElieFdQb2padUh6MTB6clg3K1dYU2JNMHVKST0iLDY4MDoic2hhMjU2LW5UMy9OdmhUTVVNVmRpTlFnaVBoL2NvL2FpTHhHQklpZTE2ODJESGgvdTA9Iiw2ODE6InNoYTI1Ni12SndCZXc4NklEV1pNdjJoN05vNjlVTkp4Y0V1MDVoRkZUUWt1OCtEMGI4PSIsNjgyOiJzaGEyNTYteEFCN0VuYWU1T0Zha0cwM0YvOWx0Y1ZsN1QrNWNaYTBtelZ2cmFxMW8rWT0iLDY4Mzoic2hhMjU2LW1DdFpPYzA4R2YwaWVzK3VwMU52SG8rWjNSMVRrWXFDNGgzbWZMaldsL289Iiw2ODQ6InNoYTI1Ni1UUWMzaDhDcngwT1pkbnJTOWMxdjBQa0ZPalVNRmRURlQySE0zQ21TQWpVPSIsNjg1OiJzaGEyNTYtaDdYaWRlNUZpc2IvbVpGdk1saFByR2pmdUNVNlpabDh1NUZoNEN2ejBNTT0iLDY4Njoic2hhMjU2LWQ4dVRNTjUwT0ZUREV4R2FVbGRXTWhuWStSVlZoZkZ3OFdCSkx2OHNDT2c9Iiw2ODc6InNoYTI1Ni14aG9OQnd0SU9sOG5EaStoOHd0OUlXV2MzcmFVUjdSbFpCZkFhdXRSYlc4PSIsNjg4OiJzaGEyNTYtQ2FGZERxdjZFSzFLTXZuVkJHVHdqbFE5aXJWTDZpMkdTWUNJSzF0ancwcz0iLDY4OToic2hhMjU2LVFDQ3pOemhudlA0amhnVEhCM3NkYnNDVWQwRUpIZ3JKajJ2dDJydFM5eWM9Iiw2OTA6InNoYTI1Ni0xL3JaeDJuRytvRkFWNXhaMUk0RGpkUkp2QngrQjl6K2J4eU85QzJ1VGQ4PSIsNjkxOiJzaGEyNTYtRC9lVHNGTURSYzdoMDVqQ1Zzb3BhOWY4RFRZb0hlL3RwQUlzT01XZ0dMND0iLDY5Mjoic2hhMjU2LWdnK3YwcVUvdzgxS0F3aTQ2UG9vVVNXc0hodTVOUkw4aHF4L29DY00yMDQ9Iiw2OTM6InNoYTI1Ni1iVHdXeno4QjBwTmd3cmZCNWk2cHNYY0RWczdCeFZ6d3VLaTVzQk5jaGZFPSIsNjk0OiJzaGEyNTYtTVlQTmxIQzVUNTBGMThCMDBiR2V2b3lnMXNPWm9uL3ZkNm1NcmVSYUllST0iLDY5Njoic2hhMjU2LXBWZ2E2SkxBRkFzRDl1U3BkbVJwUjEweDJ6bFliUTJWb2VsRTdyWDFYLzQ9Iiw2OTc6InNoYTI1Ni1PcVRZZHNiV1VXd3YwYmdNUmdtd0hYSEg0RFRydmRHS2pSblc3T2ZJUjB3PSIsNjk4OiJzaGEyNTYtRFpQbWJkTmRjckcvSzFkdit2UHBTeWxacTRnSUp0RzByaFdHWGZYVWdxMD0iLDY5OToic2hhMjU2LW5peW9RTitnK1dBdTZuZkkxd0g2cFZXdm9vTzJxOEFZYWNOd1FGOGRtbDA9Iiw3MDA6InNoYTI1Ni1GWGFXbWN4NVB0cURBYlhZVlN3bkRLZDhsMkcvanhtUEFMQm1EREJuWTVNPSIsNzAxOiJzaGEyNTYtTnFsVnpHWmtjbVlobUlJSzgyMmM5RnczQVZGUlR3UTlnVjdZRjV1Ni9HVT0iLDcwMjoic2hhMjU2LUpxSm1sYUU5SGRGb1FrVi9Yb3pZRzFoR2o5L3dmZG1EMVNXSEQxaXBTUnc9Iiw3MDM6InNoYTI1Ni1BeE9DOWVqL1FhdEdsK3BiMmN3Zkg4N2YwWVhUbnVvSDU2K1FraWhidWY0PSIsNzA0OiJzaGEyNTYtN1NyWWJNU21YZW84dE8vR2pZcHdrUXJXYkVpVkg5RUJYT1pBSTZSZGRicz0iLDcwNToic2hhMjU2LTU3L1ArL2FSQllWSk9NNDR2SnJ5RDZlSHpmRWdrTk15Qml6b3ZtUzdqUzg9Iiw3MDY6InNoYTI1Ni1jRVdsYzdlQ0N2ZkxJK3hSNUVRR1FKa2pJL3UwZWU5WWJRR2VWaFp5ajNJPSIsNzA3OiJzaGEyNTYtUmliT09DbTFSTm1MU3NLQlJuSENOVFVrUnVYSzE1cDliMHNLSjJudHJNMD0iLDcwODoic2hhMjU2LUNVWWVvYTNoMDErTVNhTllEcmN6VTEwNm1OejRlQ3YzR2QzUWhtNXd5WGM9Iiw3MDk6InNoYTI1Ni1EVDlzLzdJM1lZY0JCdHVlVkJ2dGE2aGtvUEI3MVFKQkJsV0M5WDFWTnBBPSIsNzEwOiJzaGEyNTYtTDdBMkF0TFJ4c1NNT25ZNlRjTDcxdTI0RUJxMFg5czFoclBCcTNSVVM0cz0iLDcxMToic2hhMjU2LTJhS0ZIZ1FIejVHNXBVT2dWcFRIWFQ3QzdtWENvRW1PME85NUZuWUY5Y3c9Iiw3MTI6InNoYTI1Ni1zT0Rwa0pRSXBDWnVzdWFxVjg1dkJHRHVteGZlQnJhbXpUbHBId3FKVXBZPSIsNzEzOiJzaGEyNTYtOUpDMVZxbnBXYkE3VUpjaFVYc2RsUjdwajZUY0ZDRFdZZHo3d2RjZVV2MD0iLDcxNToic2hhMjU2LStRZzlidzMrRmUrSng3QVJhQWdrU3hKd0V4ZWFydHNXaDUvMkdwY2RGTms9Iiw3MTY6InNoYTI1Ni1DbVVlR0x1UW5OQ3lMUnk1c3N1UzByUngvYkZrUjVTQkZuK3lIRnE0T2Z3PSIsNzE3OiJzaGEyNTYtdUxHYS9qMGhzQTVscGJzYjFDSUc2bXl5aTVhRzI2STQrL2MwYkRyZE5IRT0iLDcxODoic2hhMjU2LU1LYTZ3SFVEb0tjM1BuWExmTjJWenNCQ0hNK2wxNDRGMXg1ZXZGOG1RR2M9Iiw3MTk6InNoYTI1Ni1NZllDOTFHOEZRMTd5R1J4dnhMUG5vcGtXSWhXVDlBWERTZlhwektLZWo0PSIsNzIwOiJzaGEyNTYtMGRnT3FKN0poRDV2alFWNVk1TUFDZnBVT3l1RmRqNEtwemNINXBsTzRlND0iLDcyMjoic2hhMjU2LUh2UmJud1B1MUFKOWtQRWNqL1czaFlSMjk3ZjJwUm5HdDdTdWVMd05mN2M9Iiw3MjM6InNoYTI1Ni1PVDJ5TnRIN05hcnRYaFBiRFBnb1JJaVFLNmlGeWNEZXY2bCt3SjFjTDIwPSIsNzI0OiJzaGEyNTYtVktwbVJpTW5lWDJ6bXV6aWZnZTI2VjFtZkVYVklrR3JjSWhqQXkrRDdhdz0iLDcyNToic2hhMjU2LWVXUzVwTFN1SnlNZnA2WDVxL21adkN5YWcyc095SndkUXlkalhxYVZqY0E9Iiw3MjY6InNoYTI1Ni1hRlJxN243UmFsVjZlZnYzZlBBcFJLUnEzYnhwVU82VHY4dGNQT0tURG5JPSIsNzI3OiJzaGEyNTYtUzU3YzI1b1FQZjFWTEhhWVNHd0JtcDlTQWRPanpuMG1DMjhsdVpBVzNTdz0iLDcyODoic2hhMjU2LWozSXdlQXQ2eGtMd2loZFBFOVdCQ0hUa1ZER0RLTGFCbmwyTFVMMXJSNVU9Iiw3Mjk6InNoYTI1Ni0yZWhKYUZhZXlpV1k2SFNKWkEvUHA0eFlTRFhDdVYrOWZpNnRaVVRJMktVPSIsNzMwOiJzaGEyNTYtUHZKMHN3d2hXRU1HaXB3eWN4WEI1dURuRjR0WXVIS2x6cVQ3SlFMSE9KTT0iLDczMToic2hhMjU2LW5VWWh0Nmxxazc1N0c3M1A4TFJuNUUzaGtCWDBVakhRdVluYkY5WTZWRFE9Iiw3MzI6InNoYTI1Ni1uTklqSEVhNGJpSG5yRkh2SWZLODBlNS9UT3RDNHE3QWhrZG5haDZDWm5vPSIsNzM0OiJzaGEyNTYta01YNXZlUjlsUWM2cjRMM0kvdkh4ZjhpUEtTZVEreHZBZ0ZDQW1vTm8vcz0iLDczNToic2hhMjU2LTRMWGthblpUemkzZ2hkRjZER042dlJBTlI3QW5ocmNtK3VKT2dQVXZkekE9Iiw3MzY6InNoYTI1Ni1yVy9SZTZISmNPVEozQWswMSs3cXhUUDNlMmVSTktGYTQ1WnlvTzMxZUFzPSIsNzM3OiJzaGEyNTYtbzVENWk1MXNNRlR1VjdITkRnd1lqWFB2OTRLaHpjbG03TDhobC81WGN0MD0iLDczODoic2hhMjU2LTdHdkJBSUFvdW1WQ0tPQmRVNGxYQmZMcU1KVXZYOFI2bHY0TmFkd0JBYkU9Iiw3Mzk6InNoYTI1Ni0za2hsRGlQNEtzRkIrb0k2QmJ2ZDJQamFITmE1a2xxRnZ3czIxWitjOGljPSIsNzQwOiJzaGEyNTYteE5BaDdkNWZoWmsyQWR6S3kreHBPNk0xc0IyaHV0amh6Y0pPRnBYRXBOaz0iLDc0MToic2hhMjU2LWtwNk5KWDkrZlVJSjRCOTI5VWhJMkMrYnVrMUpXZ0F5VFl1Z2Q2N1ZVUnM9Iiw3NDI6InNoYTI1Ni1uME0vRlQrYURCT3gwK2lweEVCejhGSGE3c3FyRHFBUDQ2akpYU3krbTFvPSIsNzQzOiJzaGEyNTYtSFhLUzdlblZQVE1YUjZFeXR1dWZnbU0vTFJSa2hESVJ1S2luNEZxd3pVQT0iLDc0NDoic2hhMjU2LXRqTGovejhXZ0Z5TWthdDQ0VmFMaTFiQUVvRWJUM0c1UG1DY1gyQzBSVVU9Iiw3NDU6InNoYTI1Ni1HNEgwbHo1WTM1MXZTSUw1MDdEclFBUVIxQmFMdHdtTVg0WERCQmN0UkY4PSIsNzQ2OiJzaGEyNTYtNWJLL0tJTEp4V1pFZFFkRXRZQXF3UTc5U3dpcWc2L2pXOWFMYVNxYy84OD0iLDc0Nzoic2hhMjU2LXFuZFZCWHN1UWlocy9LU1NYeFNMb0FsbXVQMHZERi9VaXpRU1NjV1FiQ0U9Iiw3NDg6InNoYTI1Ni1BVnY3SG5taTFKcm82UndrQy9BZVJXQ0hSU0MxNDFLd1U5YS9ISXNSUkM4PSIsNzQ5OiJzaGEyNTYtYi9sSGNLTEVHM21WdjZKaEhDQWlGWkhXY0dMdFJicyt3WVhuRW1jZmxITT0iLDc1MDoic2hhMjU2LVIwNndQZlN1R3h3K2ErSlBZTk5oNGpUTEpLSVVzaStmWWl3VW0wKzlVUTQ9Iiw3NTE6InNoYTI1Ni1hZHZ3S1A4bmlmMXJIeUg2TDgzbHBtQ0tSYVplRXl2MTlIRFljL1hENyt3PSIsNzUyOiJzaGEyNTYtSjNSaHV2NUNtN1N2VUtBL1hZUXlkWDROQ1FkUXowNGQ3Z24rUkhEdyszOD0iLDc1Mzoic2hhMjU2LW5QQ3VGRkpQMzM5Sm9sMU9aZkxiYUxKNnBWL2YxeDE3elVsMG40NmJlajg9Iiw3NTQ6InNoYTI1Ni1seDZ2OHpKN2VsMGJRbm5aQ21BNXVUMWRQUDYwTXI1eTRMd0JwMy9WZHJNPSIsNzU1OiJzaGEyNTYtTHNjWmlkeHZLTlk4WUV5VHJlSFFwUmVsMStwUEFJcFd0WHFoR0ZhQzlqQT0iLDc1Nzoic2hhMjU2LUt4L1d4WnRxdDVkMDB1VlNZMW9XNklCVXIrZkVDMnoxcURKRzBFbjhOM1U9Iiw3NTg6InNoYTI1Ni1qWEtDcE1NRENwUGZyN2orKzNGZ3JmMm5acnF4cWlGcWpIallZQ3EycHlJPSIsNzU5OiJzaGEyNTYtUzQvOUhFSWdRUkovcDNZdW5EM1RWcUU4RzN6TUIxUXNieUlnbnFCUHl5UT0iLDc2MDoic2hhMjU2LWJwT0UrYjhyZGtUaXVGbk96M1JuaUNtaWZqOURQM3c0WjFqZjgrUWEyZmM9Iiw3NjE6InNoYTI1Ni1lRTNQazR2SnFsRGNCaVdXdnhXMnV3Zk5EMm1KTUVGS2hUQ0lnWmd5ZUtJPSIsNzYyOiJzaGEyNTYtc0VVbkN4cWRkVjJyV3BFWHZ6N1kvdVIzczJ6bGVTOFM4bHVLTmtiUDN3RT0iLDc2Mzoic2hhMjU2LUFMQkR5ajNQSWMyMkJMZ3ZualJHUWdlZ0IrQUlkeE1HeTEyVTZ2dERLRTA9Iiw3NjQ6InNoYTI1Ni02RjI3VDNycFdQaWsybW8zWmN6bUo4VThBcnltaURteHFTdFdQMnFoK1ZFPSIsNzY1OiJzaGEyNTYtbnlSa2oxRzhWMHBKMXoyVjJKM0tUYnJmQWt4NlNOWjRXWDhZVnJJWkI2bz0iLDc2Nzoic2hhMjU2LXFSMENUNHlMLzlVcVBNcmVFOUFIdlVvUXhsSWdQem5acHpwN2UvQkN6bEk9Iiw3Njg6InNoYTI1Ni1FSzlIZWJIT3JRdUFjNXRnaVhRU0Fwb2w0cHZwRG1Yc3QrTTZrTWo2ditjPSIsNzY5OiJzaGEyNTYtL2cxN0ptdFNyMzhmMGtNcmd6MmhRajZBT01vaTdJS1pMK0VIemhEVkNXcz0iLDc3MDoic2hhMjU2LUhMNE5hVFJLL0l2OHg3STg5NDV6T0tvQVZ5eTdKUDZXN0VoeG1PZUNtVjg9Iiw3NzE6InNoYTI1Ni1ISnJYb0Y2TGlkVnZ0TWZJbm1GbndIWVhYcU13d3BhcG5QOXViVENyS0NJPSIsNzcyOiJzaGEyNTYtbkdkWWUzVG4zNjBzbzFzd1VpeFRyOUVBMkZrazZJeU41SDBqTko1cFEzTT0iLDc3Mzoic2hhMjU2LVczSmRLTko2aXdveE81WW44KzN5ZFhvWksxSTlEMEZaZFZBWnN0Y0M5M0k9Iiw3NzQ6InNoYTI1Ni16SndVbGN1OW5MVEpIOFVLSUV1cDMvZVBOU1lQOElOSG9oVE8yMWVkUElFPSIsNzc1OiJzaGEyNTYtdFk5ZWZqL0ZCaWtxS0FaZS9MSGNTS1RDREFQYlFwZ0ZKVHpaSG14RW1UYz0iLDc3Njoic2hhMjU2LWx0N3Rzcy9OTXdwbExSQW0vaDg2dmxUYStuVUhlZXNoL1dpZ0ViSHdoUUk9Iiw3Nzc6InNoYTI1Ni1FeEc2Sk00dXZRbnNEd28reHBoaXFSUXdBZ1UrSUUwQy9BR2UrNnRoRjdZPSIsNzc5OiJzaGEyNTYtVWFSYldRa0cveCtGandoa2ZGK0xPUGpiWkhiaDM4Qmt3SVFCZ2MrVVFyVT0iLDc4MDoic2hhMjU2LW1UdXFuR2JpT3MwcGkrSFlsTTN6eVpMdWd6MVIweGt2clBxNTA4N3VzTkE9Iiw3ODE6InNoYTI1Ni1IZ3ZCQWd5cDRkUVR3OWhFcmlxVDRyV2o5dmE1T3J5S0dDS0VTRVFWaUlNPSIsNzgyOiJzaGEyNTYtVXc5ay95RFFGL1Vib25HRGkwUnN0Qm8yR0JlNHFLVlZ4dDVQZFFuUFRlRT0iLDc4Mzoic2hhMjU2LUlkbzNJRzBRYXZpQ2xCbHVFcmF4N1VMRGxBalBma2VvNEdvSXArbTI1djg9Iiw3ODQ6InNoYTI1Ni14a3dWdnhmcVVrcjF4R2QrbmlhMUdSM0Z2aVFtU3BZVlhuQU5iRmlEaWtZPSIsNzg1OiJzaGEyNTYtSm9obGo3T1dnajZPVWNjbGU4NlgwaG5JUWVIOEg4WmJLNkRISmhFTGpuTT0iLDc4Njoic2hhMjU2LXVxZm1XK0xCTVdNcGtUcjFhZFI0QjBmVlZFRG0rZUg1SzR5TjNHaFBLRW89Iiw3ODc6InNoYTI1Ni1mMDQ4L3FKbGJPWkZvWXBwRGpUR0RMQ0Zhb0l2Uld5aUE5QS9KeHpYZ04wPSIsNzg4OiJzaGEyNTYtTUN4UWFucHY2dmdhSm92UG5NaTJvNGcvZHkya2hHekZ4SjlsZ2s1cUNUZz0iLDc4OToic2hhMjU2LUhOTHBRellRZ2owNGo4TWFUK1owbHNqUTlOSGE0bVF0SFJRc0VKUXNHdlk9Iiw3OTA6InNoYTI1Ni1zL0ovR0E3K3YvclJtZmFVTys2TGhrak1YOW9MTDUzeVBoTkJXUGJUSEFVPSIsNzkxOiJzaGEyNTYtekxmZ0lsRkdUaWZNRlB3V2NRcDF2bnRkTTZlTFhCRWR6U2cvNmNDaUtUMD0iLDc5Mjoic2hhMjU2LVpGeUxGSENCS1BZVVJCT1phSktnZkpHb1htcHNjZHI0RUMyZ2ZTZWNkTEU9Iiw3OTM6InNoYTI1Ni0rNmxYY08wRE55ZHg5aGFoYnV4c05KcnV6T0RkeVBpTmV2eUtvS3NBUnJJPSIsNzk0OiJzaGEyNTYtQzAzTGlhRUdKS3lNS1N0c3ZRSFhBNTdDZThXdis4VUs0NUdiSktVNTBNbz0iLDc5NToic2hhMjU2LU80K050bVZoVEhyVHNRYWlqS0E5T29FUWxzUTdNcVZFWkVBWmZMbVZUcmM9Iiw3OTY6InNoYTI1Ni1MeXJsZjRJdXlKb3JXMTlLN2xsdndUcjFvclB6U2lOZnc5c1RLcG5PNUUwPSIsNzk3OiJzaGEyNTYteG5oWVBtNVg5WFNkMlNwVHJTRjQvVVlCN2tMM0tnS0pmNi9GOEJQTE00dz0iLDc5ODoic2hhMjU2LUN1bkhQaDNoMWhpcVlPVjVxRmtScTBxN0dUVTYwbUlPQkE1ZnpCenZyak09Iiw3OTk6InNoYTI1Ni0wcGI2YkdmSmhwL2JuZEdSZ1JmWUlVMzg5dW5LVUVJQ2h5SXN4SVVYZzlFPSIsODAwOiJzaGEyNTYtZXk4Qnpnb0pkcDhpcEtKQm9Sd1o5emNzUUE3RWtRMFV6aG5wc2ZSTFJUaz0iLDgwMToic2hhMjU2LWdrYng4Z3I1SWVmYzFxcXpET3RKVUVqTDlCdTRzMkh6TlovUlpRbFVoVTA9Iiw4MDI6InNoYTI1Ni1qY3Y4WjdHdHNBaWdSTHN4bnFXU1ozRjJwZXh5UnhoWjU1KzJ4NzBjbzJNPSIsODAzOiJzaGEyNTYtdlVrS0VackFWTlBEOFpMbDNUMUlCN3V6bW14UlNVQzR2aWNHNHYrSzYzcz0iLDgwNDoic2hhMjU2LUdhaG1pcGFWVjRWL2hzci82UlQ4Vi9BWTdwdlRpeWViM0poQUpHYmFtTzA9Iiw4MDU6InNoYTI1Ni1ObC9UR2hLYjZyQVh2a1RvNlJTYjBFRjdjeitEZnZaQVdxK2FrRXYwN2ZRPSIsODA2OiJzaGEyNTYtdDI4SzRiWTZGekVhT3pjejBCWVZ0SlQxWm5yY2tyQ09WZ2tTdXNiSVVjND0iLDgwNzoic2hhMjU2LTUxU0RWb2FHcU1QdWxzbWZQWDY2ck42clRpNWg4WnY5bEIyblk2M1ZzRU09Iiw4MDg6InNoYTI1Ni1oSzcxWXVabWpBK3p3SG5jRDlxZzhzd21vU2hDTlI0dVR1QW5ZSmcwalJRPSIsODA5OiJzaGEyNTYtZTZUUnl3S2Z6L0h5Tm0xNnRnTDM5T1Y4emVMakh2aG9aaWtENG1GWnIwTT0iLDgxMDoic2hhMjU2LXZPdmt2bjA1RHFZNEpRUU5PT3ducXJoTDNHalBudG9CeGt1M1d4YVU0cTg9Iiw4MTE6InNoYTI1Ni1zcUE5YmNzbTQ5akdvTjFMaVpLZm8zOVl2dEppa2hJQmpqYTlZQytjem80PSIsODEyOiJzaGEyNTYtNXQvTEpoSU9Ia0lRNG5hZi9ncEQ2Nmp2OXdZWHloMk43TFZuVXlRaW8vTT0iLDgxMzoic2hhMjU2LWV1UWE5MS80blB5UlNkd200SVErbWZ3Z2NZS0IrY3UrYTFObHowQWEwSEk9Iiw4MTQ6InNoYTI1Ni1ESndzK0FJUHZTRW5IbkRXK25MTTRXTUVFMng1SzE5bUFQcHljaUJ2eU5NPSIsODE1OiJzaGEyNTYtaWI2SThKamJMZWlhMlVCSDI2T3RSZ2V2SEFVeTJIejhjeVZ6bFdBWXduOD0iLDgxNjoic2hhMjU2LTNuN1dtVU9CMGNtNThBZ1U1bmFkcGQrUklhL0hLajFNeFY1SWpTelhlZUE9Iiw4MTc6InNoYTI1Ni05MUlabmVxeVl6NG9CaU9sSTZ1WG8vRk9VSWtVRWlOdWJxYVZmL0w2bFh3PSIsODE4OiJzaGEyNTYtbnRkUUVnLytkSjNNY3NpM1JhT1lXdXJIbS9BeVJWcnNUV1gvbHhNTXkrOD0iLDgxOToic2hhMjU2LS9WZ0NVTnVtSHMzZkxCNmtTbGJvbkp4MUl2a3d2Yi9HaWYzTU9WVXkvRXc9Iiw4MjE6InNoYTI1Ni1WUVZzYTBCaStVQ3dDdmQ1R2lFVi9OcmlESmlsM3pZelBTdjR3T05KNVUwPSIsODIyOiJzaGEyNTYtN1pIZ0h3a21Jb2lFek56QklSS2JIVGZGREdvZHREbHNDdC9FZ2MvUlIyYz0iLDgyMzoic2hhMjU2LTV6NThMQ0pRWUFubUZvQXF4SytrM0dQaE90N1U5dnljUmZPNEVsMFBmQVE9Iiw4MjQ6InNoYTI1Ni1idDFJZC9Hc2N6YWJ1c1dlbVB4MDdtTXF0bVh3K2hqcjRPR1VWWkNIaXV3PSIsODI1OiJzaGEyNTYtaExvQUMvRFhEVitpZmdXVW5peHRGL0xiOXZuQ0pzaWxyQ2VIa2hjQW9LWT0iLDgyNjoic2hhMjU2LUpWT3pRbnoxbzQ5RnZYWndIbkgzNG55QkVaOWhxWEpVaGtQU2xYc1Z6Z2M9Iiw4Mjc6InNoYTI1Ni1WWnhYVUtyaEVJcWw0TmdoNTFJRy94VU9SU25KTCtzcmx1SWROZDIvbnZRPSIsODI4OiJzaGEyNTYtc2tFMmJVMCt3cTJuNW5WUGNxQU12WlB6UUJRMmVlb3p5NHphZGRpUzRMcz0iLDgyOToic2hhMjU2LVVyb3crRHo1SFJmeGRIaFR3V3VCcU9yU212WlowNkZWR1RUU1F0aUt3M0k9Iiw4MzA6InNoYTI1Ni1SaGx0YklHTGxLSGVJMFFidWdhdFR3OTRnMGJPYjRnMldzL0RMZ0tudTNvPSIsODMxOiJzaGEyNTYtUS9TK0ZXTXVnbWlwNUYyS1ZUbm9zUjBRanU4OVkrbEJ2aU5VSzVBSFNDaz0iLDgzMjoic2hhMjU2LVd5R2Z0UittK1AxS3FBbTc1T3Z1TThXeGdjcjhNL0k2OWJvZzFLT0ZucTQ9Iiw4MzM6InNoYTI1Ni0wMURXa1VUNHY2dUZHUUp1RTJRZzJLWEkxMXRnams4QWFhZ1N1Z1dsT3FJPSIsODM0OiJzaGEyNTYtVXgwMHo2bFBTdDN5NjUyRk54cVM1NlV5VHdnTS93QVVWMWFydmJLOTZVcz0iLDgzNToic2hhMjU2LUxqSXA3cGdUUGQwcllzOC9ubjlHcTNKTXNmS2wvb2tjSGNhRkc0bzhqSjQ9Iiw4MzY6InNoYTI1Ni1zbDVISHZzMkJ4YUxWNnRTQzN0RVp1UFJkU0s5UUxxYW5XL3YrdGdSNUw4PSIsODM3OiJzaGEyNTYtbElHeGk2TW96ZlNWZ2lVNHBqNUNpT2Vrbys4ZUJ5bmJhdlRRWEZGMmZBQT0iLDgzODoic2hhMjU2LXNEc3dXMTdiUnRwZ1NidjlGbUtoWmIwbFVBZzVsaUdqaUtrbDZYQnYyMFE9Iiw4Mzk6InNoYTI1Ni1aRUdQSU9lNVJudGVEN3A0cDNFNkhoR1JaUUpLU09KakdwclNGR0duTGpZPSIsODQxOiJzaGEyNTYtT1MxMVpPWmxqZ1JNaFZ0UnM5SXVvTFhxMWJmMHArUmhMaHlIeklJS1lwaz0iLDg0Mjoic2hhMjU2LTZ0R1FWQjBsbERXbmI0VUdTc0VWMkYzUHRUMjI4cGVhQ01oTmNnRERwTW89Iiw4NDM6InNoYTI1Ni0zSEZRSjk2MmRkcHYzL2lTK1cwU1hBekFodmducXRSZGVXTktLU2ZOVkswPSIsODQ0OiJzaGEyNTYtUHRtUjhYVCtSa3FnanFrNmxxMHA3M3hNSHBqVEdTZWNSS1J5cDN3ek0zST0iLDg0NToic2hhMjU2LUZHSkJtMDlkMTZEc3dYOGdGdmNObHJ3UHQ0TlJiSnAzZUpmUk1PUEplYlk9Iiw4NDY6InNoYTI1Ni1kanB5NTcxT2l0b21OT29rTkxvQmRyWm5MYkExZ2ViM0M0QkVra2ZBanJFPSIsODQ3OiJzaGEyNTYtR0dvSmIxT0sza0tlcmh0STRhVzEreFc5MUtiZi9obTZuNFBYNFU2Yzd0VT0iLDg0ODoic2hhMjU2LWpvUy9NcG1RUWQyYWVTYTVLZU5sK2x5Qyt6YlRDZ3MvOVdHbjZlVDhBakU9Iiw4NDk6InNoYTI1Ni1Uak9YcTdwYmNsWGg5VjMwd1hDbkVmT3hKY1ZqR25Pandnekdrb0RXK3VVPSIsODUwOiJzaGEyNTYtZWNTSDVNWWFLK2xIMjhJbTVSSE9CZFdZdlh3Z1BtcTgvbmRRdmNMZWNzWT0iLDg1MToic2hhMjU2LVF2enNFa1BvTjhHRFJaV056V0dyQ0YwOTJlUTNUM0p4OUdZZ2dUL3lsZ3M9Iiw4NTI6InNoYTI1Ni1wTnd0ZEc3cHdGZ1RBZUwzQWRqK0hUL3MreTNFYUpmTEtHM3lISU5zdFB3PSIsODUzOiJzaGEyNTYtcFdwWXBCTERFeVd5b3lKd3JtelhWS2NXa1R4Q2s1T3JjUHVROCtlc3VhND0iLDg1NDoic2hhMjU2LTZMYnFlTDJXak5OUTFyeU9BdDdsWVcrcFdZajBKdytLamdsUmRObDNyd2c9Iiw4NTU6InNoYTI1Ni1CWWZFdk5ZTUJlenhFWllGUzNtWTNMZHlleTZwS2FnbG0xOGxMMHBtNXBRPSIsODU2OiJzaGEyNTYtdzZZdGdyZnYyUHZwWWJmSVJqV3QzVUk5MTZ0RVNuRXRiRDFoVjB3UUNzMD0iLDg1Nzoic2hhMjU2LUY3aG52Slg3UTViQ2o1eXI0SUZrdi9NSVdEVTduYTViTVlTT3RJcW82aDg9Iiw4NTg6InNoYTI1Ni1lWEUreEpoSmx3K1VKdmR0disxa3ZNVGRtcjU3QisybXIzak02QWZ4dVdrPSIsODU5OiJzaGEyNTYtY2cvTzAwSGNjMCtWWjRrK1NOTUkxT2tBbXRwcVBCQ09FamxMeHdZZnY3Zz0iLDg2MDoic2hhMjU2LVpDTFFXdm1RanU3TXp1N3hoQlFibXFHWG5QT2czSE1WNEhwRnhQQm16cW89Iiw4NjE6InNoYTI1Ni1NdksvZjA0Wk11SjBWdjZSUzMvbkNEcUdmbldHclZMM29FY0hTUTNPRnY4PSIsODYyOiJzaGEyNTYtMDRMZERzODJLZXhLREVQVHp3bjh3VFllVGtUTUJ2NllPSmh2K2d4clNvbz0iLDg2Mzoic2hhMjU2LVVESUNCTDZOWjRxNlRiSTlMMUZFVTdVazZjTjFLeWNoSHFYNjA3MHVZOFk9Iiw4NjQ6InNoYTI1Ni03ZUZjUkFVOVZ6c0ttVWxLODVQajA5WDlWb29IYWZaUy9yY0RtZlp3SXNBPSIsODY1OiJzaGEyNTYtUTFiQmlzVVQzdUxETVU3UmNsZ01wakg4Zjcyc2FOcmNjL2VqYWZyRk9MQT0iLDg2Njoic2hhMjU2LUlhVm5INmdTekNvNzFyWTFWaHp5U2RIQ2R0N2NHVHhITUdlVFlNbXlHaU09Iiw4Njc6InNoYTI1Ni1SdC9wVjdwUXJtMGtEd21KNGs1TGhMeitudTZFWEYzUzlKZEp1Ukw4Wlc4PSIsODY4OiJzaGEyNTYtdE40YXdRd1RQcCtiWFAvWHUrV29ld0NlMVM3RnBqdHdUNExwaXRZekkraz0iLDg2OToic2hhMjU2LUsrUVh0dlNiWkZ5U2Z4R2F4NHdhMjZ6N0c3MjErN1BSbEt2dE5RNjBUWFU9Iiw4NzA6InNoYTI1Ni1hMFBsNEpKL0hhcE9CeENwZXFtTHM1cnF3TVZmK0toS0tJMDdBY2NWRGNzPSIsODcxOiJzaGEyNTYtMFRpbVh2MlZEdU9jMk5zd2M3aFEzdjNCRDFGTDM4V0QwTEZKNjR0L1VZST0iLDg3Mjoic2hhMjU2LVJCS2tJaXhFSVp1TEZQZ3VzMGpKL1dYREIxVlJya3FtbjIwZG85bVhVNU09Iiw4NzM6InNoYTI1Ni1CcUxjNGU4RlpZaU5OeUlYbXU1dXZBUTJpNStQNUZDT2R2REw2ZWkyWk40PSIsODc0OiJzaGEyNTYtTjIrQ3d0K21zZjdrcXE0MFcxMFFURWs2QmlEWkhTTnEyV1gzbnVmMG5LUT0iLDg3NToic2hhMjU2LWZCakxPNjNwZTlBWjd0clZ0eGFwdm1hTFRvOGpYRlg1Mk5sY0s4YlU3YWM9Iiw4NzY6InNoYTI1Ni15YzhmQlV1QkJ1Q1RsVFNjbzJZZlQ3d2xpU2F6dlVCZ1VINEp6M0F0Z0xBPSIsODc3OiJzaGEyNTYtSXVzUTNXa1o4RXlVaDhmY1BHMStSbEkyS2ZIakl6RVB3WHVSeUgxT3ZSVT0iLDg3OToic2hhMjU2LU41dEVSUTFmbWF6Z09MekZJK2JYQzk4c3VwZHFOTjRsVGVycTIyZytHZ009Iiw4ODA6InNoYTI1Ni1GZDZlZkd6aEpiNm9jM21sMnpscndaVWR0WHNrQzgyRlJSTmlWSFl0NENRPSIsODgxOiJzaGEyNTYtNlR3M0tnNjNKeHlsd2Fkc2JxbWM1OEU4QStRd3VicHFFbGVINTNaTDg2TT0iLDg4Mjoic2hhMjU2LThMSS8zSjB5aTk3QlhkenRpZlNGaFBhb2FsOTFKRkJZcXlXaHF4R0RzZ3c9Iiw4ODM6InNoYTI1Ni02SmVMUXl5YXh2Zzd2SEdWUGxlLzg1emJuWkxmb3ZxSnM2a3JEZ0ozMlpjPSIsODg0OiJzaGEyNTYtTFlTTXpBRFpJSzAxZGhNbUZaMkxVdTJGazZPd1RuS1hhcUJnREJhZk91WT0iLDg4NToic2hhMjU2LXJLVm5YZEp5STIvRWJpQXkwNHBzL25kS0ROY2ozVkRLbXVCWjN4dUkvYnc9Iiw4ODY6InNoYTI1Ni1RNnZJYUoydUo0eFAwUnJSQkpST2VYNDhMR29YeXkwdU1Semludy9YU0NRPSIsODg3OiJzaGEyNTYtOHpqL0hmMVNNdjhVRDdxdURwaTYrMy9naGlrQXF5ak5nMkJSSnVxTDNOQT0iLDg4ODoic2hhMjU2LUtEZ21HS1VMZ09PTWh5V0hqUWU0WndkdXRNMUUrZFYwSEpHaUJUK29WcEk9Iiw4ODk6InNoYTI1Ni1HQ3dNWlJwTVluYjJnVlF1dkFJOTJBcGE2ZU12bXhadytJdzZIa0hteUIwPSIsODkwOiJzaGEyNTYtWlVvbTY1eVptSTNwMzJnTmVqWmJPUEtGQlZscmxIeGpPdVo2V0VWamxXcz0iLDg5MToic2hhMjU2LVd1YmxWdktzZmRzKzBMTlpCVWVvRElUT3cwZ1JWbTJzS3JMaEd1a0Q4RXc9Iiw4OTI6InNoYTI1Ni1FYlMzU2tpVkpYbHhoakZycFhjYldJU3UzTHNLMTRWVVlVYmhiaHVsdzI4PSIsODkzOiJzaGEyNTYtTlV1Q25XYlgwbW1oS0dwTjY5WVlhTWpSdUtVcERmQnk4Y0plSEJReVdMcz0iLDg5NDoic2hhMjU2LThQNVVCK0xPeGYzb3F4eTcySHM1MFg4d2pobys0V3MxTzVQaXJSdmtxcDg9Iiw4OTU6InNoYTI1Ni1rN0c0VWhqTDlyMDBaeVVQWGlta3Mzczd1RGFaYkh2UkVrSUd2cW5CNndzPSIsODk2OiJzaGEyNTYtbWlZTlpCMytmUm4vRHhzam5nVzBTN2kxTmhoa1NQUjhmcGMxZ3FNbWczVT0iLDg5Nzoic2hhMjU2LTVyY1FReDhyZW5tZGN1TmFtam10aDRrMVpMQVVXa0Q4MVZKTmdZNkFKeG89Iiw4OTg6InNoYTI1Ni1jcHEzTEsvN3pVaW1YQ0lIaGxvY0p5czRqVm1sbjhvQjBXK0V6bjQwVmFFPSIsODk5OiJzaGEyNTYtMDVrZmhNWGhlWjA1czcvckIyYi90Y2llL3gydTBSdmp0a1d0S1REY3hpdz0iLDkwMDoic2hhMjU2LVRBdGN3bWVLOHY2WGlVQmhyMGp4M3dRVW9yVHV2Z0FrLzhIclYxVG1ZQWM9Iiw5MDE6InNoYTI1Ni1OdVVraFQrbEdaa2Z0VnZnYnh2OXlxVi9OTitqcXZKdVcwaHBVN0d6NjZZPSIsOTAyOiJzaGEyNTYtdGpwQzBGS3ZnUzhzdmhoN3VhY0RnQXpNVFo0QndvOGxNeGJDWUJndFYvTT0iLDkwMzoic2hhMjU2LUQ5MUtnRHFuZzJCMW9DMDdrTUk5U1Avbm53MGFVeXBTcGtRcmgwUENmbzQ9Iiw5MDQ6InNoYTI1Ni1VS1dqTzFKeHhzdjNXUjR2ZktHblNncXdQZjJMdUZ0SFJNRDA2bXZ1bVdBPSIsOTA1OiJzaGEyNTYtaVNPYnRjekU3Nk51dnF1a3YzSEsxdlpBV2dRNjR1a0hKaldDTFlTTmplTT0iLDkwNjoic2hhMjU2LWVFaVpVdGtkUjkrVWVRcld0aHpsUVAvS2llQytUQWs3VE1wSUdQajdHVGc9Iiw5MDc6InNoYTI1Ni12azBOcjIvZk96TzE2S3VvRU55L0JKWjk2N0tEaFhPUmZDZ1Z0RnhjZy8wPSIsOTA4OiJzaGEyNTYtVEFpeVk5RCtzQlJZN2dsdC9XR3NOMjJjTUZJQmVMN0NEa2VLSWVwM0xvYz0iLDkwOToic2hhMjU2LWt3cUpZZlQyVTBKbUtXNzhNTlA5NnlkR1dDZlZMU0Jiak5CdlM1SXhhYU09Iiw5MTA6InNoYTI1Ni1xNFJkOTZBaGdOY3VYaUp3ZWJ2YzhQWHJoYkV2dUJrNXY2UzdqYW9GQkNBPSIsOTExOiJzaGEyNTYtZndKMTFvVm9xSGJ6YjdPY3RTckZIWVM2eVJtTHJWQ0xwaHJTaDZiQ2JwOD0iLDkxMjoic2hhMjU2LUlDWkNBbWxadDNhVVRFdFpUaVErbXVLNFk4R3dIM1ZCb3dBdTVtUVdDZHM9Iiw5MTM6InNoYTI1Ni1lUHdRWGYwWTJGM1BXYWZOTHpJVlhKa0tjMHhHYXFkY1RkR3owT2hFS3djPSIsOTE0OiJzaGEyNTYtaHdlRG9DeUEwMmEvbU93SVdCczBIbWhrdHprQUJZejM3WGtjYnFFT3R1Zz0iLDkxNToic2hhMjU2LTc4QnQxMzlTdDVKWHdjVHU3eEZMQlpHVm45bzQ3b3AyQ0lrSmZSYXljMG89Iiw5MTY6InNoYTI1Ni00eDFvVUt4OWEyUnVWT1UrQ1ZYMXR1K2hleVZobmRCWUhCQldpWFpIOExvPSIsOTE3OiJzaGEyNTYtdm1tZ2xzbEgwK3JwQlR6R2ZhSDBqTWRYOGhPL0lJS1M2SDIzZU43NkszTT0iLDkxODoic2hhMjU2LTN4R2lDV1RHUDFVak9PRzdaTzVNamUzMThIVnBmSkF3d2xFdVBaRUVPU0k9Iiw5MTk6InNoYTI1Ni10dUlsR0hhMXBZRVFtYlp3aE95QmJVZ0xGd0pNNSt5bmQ5QXFVT1JhUUl3PSIsOTIwOiJzaGEyNTYtalFTdFFWcXlHU1BJNldFSDhpVkd3d3Bnem1yc2oxUllOK3VJUjRadUJDWT0iLDkyMToic2hhMjU2LVNGYUViV2YySEU4WXNweVcxSGlucGRHU090ek5tMjk0UHhacFdIcHNod1U9Iiw5MjI6InNoYTI1Ni1nRzNzczV5MFljZmxjV1NFQkRjR0hxT09sbXhYSmd2SkVUeC96UGxsSXFrPSIsOTIzOiJzaGEyNTYtZEZqUUU3SEdCQjVydG8vTCsxd3VUYjRyU0t6d2Z2dWY3M0tGQzZZS0FIQT0iLDkyNDoic2hhMjU2LU5YNGxtczQxWnpiVjdITUVWZ1dMWVZncW5VVWVydjN1YjNIakxUY3A0ZnM9Iiw5MjU6InNoYTI1Ni1xTWZJakdMeFQ2bk90dTBDaTcyMWhkaE5EcHRJSGdwWEplT3BncGxMWU80PSIsOTI2OiJzaGEyNTYtOUxNTTA3RWJSSEJIc2gxTG9rdVBsTUg4ZXYvaS9MRUNmbTcvUWJPOWhoVT0iLDkyNzoic2hhMjU2LWczWDBic25FaEpzNGpKbm1QN21SUmdKRTljMlR4ZzJsL3oyUExOMEZ0cDA9Iiw5Mjg6InNoYTI1Ni1qVG52ZnAxUUd5Z1IvMWJlajlxQUk3cURTcG5ycTE1Q1JBVTUwVlhuc0NnPSIsOTI5OiJzaGEyNTYtTDREbHY5ZXp5aEJPenZhUUM0TDN4Mkh2dTk1MGFEa0hOVzMyWkZvZHhyTT0iLDkzMDoic2hhMjU2LWpPNUJNZ0o1N085TUhQUHZpSlAyMzZyYlJoQUtDOFc2WGREcWtjbXZMdVk9Iiw5MzE6InNoYTI1Ni1aaDREb3ZzT2ROQWkzWC9RQ3d5OXp4ZDRUeC80QWhXWFNvd3RoLzlBNEZnPSIsOTMyOiJzaGEyNTYtZFVlclhrTkJoOGhWMDNJbWpkM2V1a1NxSFNwcVBHWXJ4Wm1BNCsxMGU3dz0iLDkzMzoic2hhMjU2LWtvckIyc01GN29zaWh1MHpTMVBuakg5Ly9SVkVFcHpLK1ppY3doWUpSdms9Iiw5MzQ6InNoYTI1Ni1GRlUyWitDNkpOMlcvVGxWdVZKME4zc3Y4UnVMeDBJT2dQWGJybzRKN1pVPSIsOTM1OiJzaGEyNTYtWE0zNjVDRFh1VWgxVTZncVl6K09IQUZLTGxkbGttcW5ENW03aGIvNDMrOD0iLDkzNzoic2hhMjU2LXcwcXdpYjNqL2RVVDdRYW9abFNrYWJ5Vk5sZ2FoV1ZkRUlkeUhFbEFsMVk9Iiw5Mzg6InNoYTI1Ni1YbXQ5K3d4VzFYeVhadVVCeUR5eTlIcDhMRURCamp0Mzd2RXB1WGFRb01rPSIsOTM5OiJzaGEyNTYtb3JKKzBrZ3FIV2FzaFcrL25oa3pwYXB2MHlMVWJYMGF2cXNrR1NsWWE1Zz0iLDk0MDoic2hhMjU2LTFSNjA2cEJRa1IwR0lkQlJ3TmdqSGFEUzZJbnpBd2dQZlplSVNFZkRPQzg9Iiw5NDE6InNoYTI1Ni1pby9VMnVUUUpGT3RkcHVtQ0xob0hJbkVJQTFxTDNqSE5VOWZMSzJab3lFPSIsOTQyOiJzaGEyNTYtTXA5NTZsQUFrWWxnTzd5RHZ5OWwrOXcyYmpmYndIUXNoZmxDY2wzV0lFZz0iLDk0Mzoic2hhMjU2LVhZbms3dVlHTjVkRHVZWThSN2NIT3dqRmtnSXJLL0FDdkc4SnVUQlVDbzg9Iiw5NDQ6InNoYTI1Ni1LK0NzeUFlNTBweGlBZXd1OWVEM0FockhXS3RRRUdjSzBFV1Y5a05tV1RVPSIsOTQ1OiJzaGEyNTYtREs2VitPaTg3NDZDQWlxUEUzRUxnRzJOL3V6bE0rNUduTENHcnREYVN5WT0iLDk0Njoic2hhMjU2LWNxVTJWUzc2MDdzeEVLenhUSENEdDR1a0lYcUhacUNsVnVqTlJnS0Y3Tk09Iiw5NDc6InNoYTI1Ni1rc0tMdGNBajNkaksxMWNIKzE2Y045YTlsN3FKZHNwTXJidHR3MWhDWnZ3PSIsOTQ4OiJzaGEyNTYtWmgvdCsvNmRLYm5teGZ5dUU0RG9yWFF3L3RWZnA3ay9xOW85alVOSkdNbz0iLDk0OToic2hhMjU2LVNxZ0QwVTlsRlFidWxnbGh1amFmeU9rNmtzbXQ3RkZYRTZIQStTNkdkTXc9Iiw5NTA6InNoYTI1Ni1uY21yRTVTU0pjUEphRk9tazZ3MzFzbTk5Tm9FazRJcDczd01HaWlRQWZjPSIsOTUxOiJzaGEyNTYtMTZ6dXdtcUVFQVFsM0R6L0RCdlB5ZDRzUDV1V1V0cFFCS1pnTXN0U2s4Yz0iLDk1Mjoic2hhMjU2LXE3TXNqbmxhanBSQjA5K2hNTEgwOVNHYWpEbktQdEhRZkJDelFHOUJwbUU9Iiw5NTM6InNoYTI1Ni16K01PdDZNdktwZjJpSnVpZXRpVjk2WC9hcmVNRVV6MXhkZ1VtM1FaMmRJPSIsOTU0OiJzaGEyNTYtZzVHTFp1WEpSN3FkWjhjWjZmdWkxS1FMd1hZeVdOMXBONXhrQWp6bE1xZz0iLDk1NToic2hhMjU2LWZhci9Xb2p0UncrRDNaY2NxT3QxZzdja2RiQUErZFFML1hEV3E1azhDc0E9Iiw5NTY6InNoYTI1Ni1uSTlwR0FNSGROd1ZvOUE1NDhVRjMrUDJRWU9sSVBSTUM0YklUZjYwKy9NPSIsOTU3OiJzaGEyNTYtT056NlFhNkNReWY1ZkhPS01iYlRvcU5mRUNLd2Y4Tmd0YUVxL1RUZ2JFOD0iLDk1ODoic2hhMjU2LStRWER5RXp1dUg2c21TTHFBWlB1bU9SaTlCSFZxZDhsc2V4WXlDd1lqZUE9Iiw5NTk6InNoYTI1Ni1rbVo2TnpkMTluZ2IxTGJoR1l3RVZtU1I2VjA4Rzl4OGxpTmx1emcvTkVBPSIsOTYwOiJzaGEyNTYtUjBkRVlCWEI5d1RibStpQXBrcm5PRWtheXloRkd2OEFzc1F6eThVWUhOVT0iLDk2MToic2hhMjU2LUFEVXE0ZUcrNDVERVQ5MjQvZ1NkYTdSbHJSV01TRjh3MkJBSjZESWxGbjQ9Iiw5NjI6InNoYTI1Ni1zOWVqWllIRDNwYnVPSUYrcnZiOEh5TS95YWtpOWNUTzB3U1J2dUplTjFzPSIsOTYzOiJzaGEyNTYtZ1RsT0pmdkpWb21jMm1YczhyM3JTeEhOS2dLTTNsRVFyaHlLbENUT2diQT0iLDk2NDoic2hhMjU2LW5yOUxmeEFkb0kyOFpmeEF5U3Zza3o0NEJhcXU2bUo0L0ZBWmF6WWd0bDQ9Iiw5NjU6InNoYTI1Ni1GRmIvTHV1cStRUGJOWDJuYW9aZy85MEVtMDRMZ1pEVkNaZE1SenFwOHJBPSIsOTY2OiJzaGEyNTYtUnFuM1V0bkN2bHFTNFZZNTdqaDNKL1BOMHBiZE9zTFVFYlYzMG1YNUUvVT0iLDk2Nzoic2hhMjU2LWtTekNqcUJvL1pBNktvWFRmNEN6M1l0TlJ3dGU3dmhOT0VFNk40ZjBNTjA9Iiw5Njg6InNoYTI1Ni12SnpsZ2lKaUVBakNxeXNjSHU5eVFSV084ZGpOQVAxQXFxMW9yZ0RpSk9zPSIsOTY5OiJzaGEyNTYtOXcvWWdDUElEOTNraFFFWmxxQVRzZW8vTkRrK3Azd2psaExCNTFWNEFPYz0iLDk3MDoic2hhMjU2LUs1eVdsRUs2QzVMQU5FTnRlV0dTRWpZaCtBc05qNThsRHhKS1MwME8rcmc9Iiw5NzE6InNoYTI1Ni0rRG1BWE9LQ2RrbG9BN0J5bE51YU9QQ0d0RTVEd0VnSHplanUwWHdVdzJVPSIsOTcyOiJzaGEyNTYtbWhJRVFZM2FkRjBkaVVFaXB5cDBwV3Rnam1JL3NyUXlmMUV6dVEvMHp4TT0iLDk3Mzoic2hhMjU2LWFEc1dOMVc0SWhuME9GWURTcjdUcDh2QXROck84cTZJdjNxTUp3WVRNL0U9Iiw5NzQ6InNoYTI1Ni1YVTR6d0FoNXdYakprYkNVc1pSNVNXanhZejF6Nm1IUjVsTThVRy9iUDNvPSIsOTc1OiJzaGEyNTYtRFFPeXNvY2hVeDFwSWZWOHlRRGdqbk0xbjFjRG1LYUYzQSsvcEc4Wk1WQT0iLDk3Njoic2hhMjU2LUQzemxOR3FOd2FpQnBFNzJSSld2VVlLNlUyczFyclhzOXpta25uYWFtNU09Iiw5Nzc6InNoYTI1Ni01QWdpZU56Um1rYWdPcnowQ2wxeUZJK2NpMHhkdThVOUQvazV6Tnc5WGlzPSIsOTc4OiJzaGEyNTYtUFNSQ3hhWWcrYU5tOGRKcWowUUV5Z2RZa1I3OU5CelpjVHdaSVdIRzhNTT0iLDk3OToic2hhMjU2LXBzdmVKRTNKUUxsRzF2NXVIZHE2RFdzSUZBdmw0ZkJvTXdaWnljNDRsYXM9Iiw5ODA6InNoYTI1Ni12aVN3VGR5Mld6ZFRERW5nUENxblBURkJhS2xQbThSb2tEY1FjZm1YU3JjPSIsOTgxOiJzaGEyNTYtaDFuclZMaUMyem4zR21EbmJIOVdJYkdZaS8rYWlaYTVxbFgwSmZGN3Rwcz0iLDk4Mjoic2hhMjU2LUJaZ3lsRW43VTRZUUVUVzB5c1VuajRGQ2QvWDNZZ0ZkY3JER3JQT3d5ckE9Iiw5ODM6InNoYTI1Ni1oNjU5cC9NdE1Sd0FQT0Y3R3I3ZG5SNmh3R2x1UjJDb0N6YUhySlh3bDdJPSIsOTg0OiJzaGEyNTYtMEloeUh4TGRPZ0JaZElJWHJWSlovWFFCN3dtc0ZTcHZIVjJ6eWhwaGRWWT0iLDk4NToic2hhMjU2LWpVSlE2S0hUK0N1TWpZU1Z1djBwdjVPSjBNakI2K3RlRVRJbERQZU5LVUE9Iiw5ODY6InNoYTI1Ni0weW9XOVFMa1U0Y25BWWFrQzEzRVEyc3lYTDFLbGpjL1g4NWdDQTNjbnpjPSIsOTg3OiJzaGEyNTYtVGJQREoxajZhb1EzR1dnVEp2cm4yVlhGTGYyV0xxU3FSWWY2UTdPYytUTT0iLDk4ODoic2hhMjU2LVlqWWN0REF5NmYxT1F5YUNHOWx5UDQwd3JtczA0OW00bElHaEpkemNlTFU9Iiw5ODk6InNoYTI1Ni04dy81aTB5aFdpcHZzandmdlFvWDVSL05JWWIwYmUvMmI5a1poM04zN29NPSIsOTkwOiJzaGEyNTYtSjFqMWNKWS9kNG44MDdxL2hDQnRRNWxqM2daZWwwaHVNZWhlbDZ2NnY1cz0iLDk5MToic2hhMjU2LWxlSmtPTE1FbjdwUGtGdzM4akUyMC93SnM3a3FjTHBzclRsUW1icUxycU09Iiw5OTI6InNoYTI1Ni1WZ1luRFNmYmh5QmsvOGtXMGx5QjBZTjNTMkVjQnVrMk44OXlGWDBybytBPSIsOTkzOiJzaGEyNTYtS3JnazVUQkY4UnY4NjRBTmdBM0xjN2puM3ZtbHptQjVJU0FneTZiUE9vZz0iLDk5NDoic2hhMjU2LUN0aGk0VmVIQ0RqVm52WjVnU0pPVjh0VjNBZG5NZ3FHSUlJZ2RSWWVuOWs9Iiw5OTU6InNoYTI1Ni1ydVJrQlNWWkg3ejFyeDgzWXNSN3h6TS8wTDVUNitJTWtkZjQrZCtvQ01BPSIsOTk2OiJzaGEyNTYta3hKT1B3M2s4NzJzdDVLcFhUeFNPa3gxcmZJM1ppdDJpZGdlbWVuRnRiTT0iLDk5Nzoic2hhMjU2LVpBWmZRZ2JZdHdqZy9CNi84TnBCVTMwRkNoRTFpV29PeGkvN21BQXpPb2s9Iiw5OTg6InNoYTI1Ni1OdDNOcm5DRVQvSXB5SHNpUzVCT2t1cmxMOVc1bG16dG1uaTdZOUVIRGFRPSIsOTk5OiJzaGEyNTYtSktUWmVSR2t3Y1RPNVJlZTQ0NTMxdUNybGJ1a2FpcENzNnUwM0l2akhoMD0iLDFlMzoic2hhMjU2LVhxd1VFZEREUElLQVZtRERxKzdoZk14Q3R0U0VrdE9lN3pDMVNLRy9tYWs9IiwxMDAxOiJzaGEyNTYtRUZJcWhJbEhsNGg1SW03YUFFRUVyRXAvbzNiWHBJN2owbFF0eFVUdnJKWT0iLDEwMDI6InNoYTI1Ni02dVY0aFRTRDB3bnpiSzhhTm85Mk9wRFNsbkZXSTJ5d1RpR0NlWTRiMlhrPSIsMTAwMzoic2hhMjU2LUp1M1gvOTZMNUk3WWRCdjU5QzVSRC83MEllL2U5VmdRcWc3UjhBTXk4SnM9IiwxMDA0OiJzaGEyNTYtbEFTYXFuVE5GNFVEckdVT2lSekt2OVBKdFp2N0xlQm1zdXRXSkFwTGlYdz0iLDEwMDU6InNoYTI1Ni02VlNWSGRkbVNvZGdFTEE3RlNKcUFQM2RtbjlhS3gvSjZBa3lDYWdYSVVrPSIsMTAwNjoic2hhMjU2LUN2TGlkZmJ0UjRZZ1g0M0s0MlBSYUxZTU5wZWt4YUg4eDI1YTVnVHJNVnM9IiwxMDA3OiJzaGEyNTYtdGkxa2dqS0xDSjAyMDBnL0ZCRWNsL1Y0eGlJQmR0c0JTckJVUExqRnBNYz0iLDEwMDg6InNoYTI1Ni12UkxySlVBTWlOdmZNN0hyMjRINjNWYkY0OWR6UXFaYmpRSnlsU2V2QTJRPSIsMTAwOToic2hhMjU2LWlVbmxHMklKSjZRTWtZNGNQVjdXNW9LeHEvelZIK2JGL0xsY3lnUitoeGM9IiwxMDEwOiJzaGEyNTYtUWhtV1NLWW1CME14dytwUEZTUlBwTUUvdzNzTFdxRWFVYncrd3V2SGk3MD0iLDEwMTE6InNoYTI1Ni16ZW9NaFdNNG9rS3Q5VHQxZjEvSFBJYmJLL2xiQXRYTitjWDJ5SUxSQk1jPSIsMTAxMjoic2hhMjU2LWF6VWtxREJSa2Q1dWxESElBUGp0YzdvOUo4MXRqRnJ0MVU1eWsyY3M4Mjg9IiwxMDEzOiJzaGEyNTYtV29qeVpkM1NHTUxlcFZnTVlLWU5HUXo0MGE5d1BzazQ1cW1zUXMvdFN4MD0iLDEwMTY6InNoYTI1Ni14Z0t2N2h1OUhxeFJLT2xxOUtlRENHQVgrbGVjTDBaMFVZUndGMUo3c2NVPSIsMTAxNzoic2hhMjU2LVBYbGZJUkJPVFVud1QwY083diswQVl5ZHF3dlNmT1pUaUpQWG04czhmRjg9IiwxMDE4OiJzaGEyNTYtVWhpb3FoeXJRNHNjWm9WSzFXNTA4aVdTc1BrcGdxZ3JvZmpORFgvLzBUOD0iLDEwMTk6InNoYTI1Ni1UcUZ0aDFTN3ltd2NabmlXZXZ2REVWem1ZVDAzMEdjSEhDcnpGYjg2TVo4PSIsMTAyMDoic2hhMjU2LWVnUEVjSXVNV0ZHT3NNMkZxK0NjTldMbVZSdURmNm8yQzBpL2FFdHJtVTA9IiwxMDIxOiJzaGEyNTYtMXcrUVp0UmRBaFNhRmdheGxCemRzNElBRjVpMmdEZ2xhbWxhU00zbDNLbz0iLDEwMjI6InNoYTI1Ni1lbFVxaHIzY0NYOVAwRVppN2FXNXdTN3pnTWJrUzhpWFBzYjUzSkZYd0xrPSIsMTAyMzoic2hhMjU2LThaUUI5SnhvUVkwRTZVLzdYbjFDN2lac2Y3dDRLM2VDbmtMUEUrN0VrNVE9IiwxMDI0OiJzaGEyNTYtOVBuRUlXZkdYc0NWTXcrL0V6TlhjT2ZOUS85MFNJNWhNZmZwbERCYm03RT0iLDEwMjU6InNoYTI1Ni0rSWp0M2pVa0tZaDkrVlRqWXZmNTlZeFJCenhxVnR4QXNOYUxDZEFpYmFNPSIsMTAyNjoic2hhMjU2LXZUSklWVWdpcC9CalJtSW42aUhDZ1gwOGZ6U1FVT054b05GN3R0dGhxd0E9IiwxMDI3OiJzaGEyNTYtZ08rTE9CMmhpejdGNW1RdWtnenRLZFJsWElhbW4yUGRFQ1R5MndQcXdiYz0iLDEwMjg6InNoYTI1Ni02YWlPRTJjanZiWWxFQ0R5RUdjN1BseE1XQ3FOV1N4LzZTeHlVOWh1YnZJPSIsMTAyOToic2hhMjU2LS9sTzdFZU1tWkpFdTFkbzlEWHNXT0FIQ05sdGRyZmF2QzJ3cVZqSWY4b0E9IiwxMDMwOiJzaGEyNTYtTnpKOEVUWGVsSkNsOXozK1RCaGQyOXp6dHNDSXN1REJnS2N1MEF1ZlJ1WT0iLDEwMzE6InNoYTI1Ni1vMS96WXlrbkNJTVpsL0JwcmhSd0hRd0hJNGM4Vi9uSlREWFhMNGRDVnc4PSIsMTAzMjoic2hhMjU2LXFka3VJRithczdzZ3VwOUpWY2dvU1FUNENFbzRjUFgvUWFjam56MnJuZnc9IiwxMDMzOiJzaGEyNTYtcTN4OWlVb1V4bnFaWGZOYzdLMmgvaGtVbXdBajBKRUpydXZvRUpYWE9WOD0iLDEwMzQ6InNoYTI1Ni1nc2VRNVBDbnEzR1pKQlptaGRMRUF4VVBMTkZ2Nm92cmQxQWh2SVYwQWNNPSIsMTAzNToic2hhMjU2LWFEZE5TanZWWDVsKzRnaVhmNFo3K2lzd3FpdkxlQkx6QUdEcjBXZW8yc0E9IiwxMDM2OiJzaGEyNTYtQjlDaHBwbUVMMTh5T3lka0xBWXBVb1Q2RGRsQU5nblVzT2l5bGoydXRxdz0iLDEwMzc6InNoYTI1Ni01QnBHVzh1MHdRQ0hDSG52NFhaTnZtS1FqLzJPcjlES3JYTVJ4Q1dqV05ZPSIsMTAzODoic2hhMjU2LVNrZXBKNGVJQ0d2NDFySHprRFJxcklKVVdKeXFlR1lTV2NNUE5DUzNyVVU9IiwxMDM5OiJzaGEyNTYtZEZwZ3ZxbEF2cUthUnpKSUVRYWJiblpJbDU5dmpWTHlpaHdnaG1UbSttND0iLDEwNDA6InNoYTI1Ni1IT1FWQnpZVE5vdEFmWmVHNDd2QUdUTU53Z3drS0pJbHo4dFFRajczQzhzPSIsMTA0MToic2hhMjU2LVFCNHQxRUUxajhOaWhySE1JQ0FkaDRETDZqeStyZzlYUVNIcUM4a2pjVDg9IiwxMDQyOiJzaGEyNTYtaTB2a2MwbHpMbjdPMTNhN0d6N2NHbW50MzhqdDI0ZWxqVXBTZFBEaC8raz0iLDEwNDM6InNoYTI1Ni1vT0V6TzEydkUxeSs5ZWh4TzgxRjFqcVlWRDQ2dDlEZnBLWnByVDBkY3JjPSIsMTA0NDoic2hhMjU2LTdwK2RhUzRiTWRENU1YbFA0QTNnMHhFbkRyQzZOaG1uYjcxc0REYnBEM3c9IiwxMDQ1OiJzaGEyNTYtNWlrcXA3SXpqZ1Zrbnh1RXc5Ykg2Z000YTdqTG5qM3lGenRjZU5aMU8vUT0iLDEwNDY6InNoYTI1Ni12ZG5waWdCeGYyQUxJVTU2OUFUcUIzK0NyVDhHcThsdGJHS2RBR1krNHRvPSIsMTA0Nzoic2hhMjU2LUVObms2Q3hUaUxGK3pQemlxRXMyNTJWRVgrOWFPa3o0TytsQ2RGZGZCeXc9IiwxMDQ4OiJzaGEyNTYtODRTY0UrM2lwVVBZWlorYjFGQTJRbFo1STF6NkVQS2w5d2Q2Z1BvZzh5MD0iLDEwNDk6InNoYTI1Ni1jWC9hYndJb0U0c2ZyUEVadTN5bVJsS0NDMk5pM1JWSFNQazZpaEhlblVNPSIsMTA1MDoic2hhMjU2LXJsT2VjOXFCcStwNlM3b21tdDFuaEsxUGZqRW5uSS9KN0tEOC8ybXlMUzA9IiwxMDUxOiJzaGEyNTYtcXR2ZHV1UkpmWTJ3aU5VU2lsVmJxL1dPVzRwa1dsOVBJaGVrcGNkWGFBYz0iLDEwNTM6InNoYTI1Ni04aUk0NXp0NThRaWR4QmE2QUJGM2k5OGhQOVhzMGVucHVZUjhKUElIVFpvPSIsMTA1NDoic2hhMjU2LXdDNmw5UC81Rk1oSW5xYjlPNXdFbjdPTXRSenh2Z3d1cE5LR0tVWE54djg9IiwxMDU2OiJzaGEyNTYtbmZpMk03bUE3d3ppZytvNUJqdk5yOFlIU25oSFlOV2dRZ2tZRkdvQ04rOD0iLDEwNTc6InNoYTI1Ni00V0o0blNPeEQzeXcweEgwUlBUZW10UjFsTWdtMWViUVJXSDR3aU5GNW5VPSIsMTA1ODoic2hhMjU2LVBNbkVKYTVPK1BvTEhmTm5VSVNtSnNJeENIakRQZlR4Mi9za2Jva1ZOUTg9IiwxMDU5OiJzaGEyNTYtUnNaeHJqcnVwVzJCRm1EOVpEUG82ZXlRdER5Z3paOG0rUDVYdWhKZDlOaz0iLDEwNjA6InNoYTI1Ni1DZFNtTjJhR1Y2eEdCcnhoWnpBSzNhS000QmdkWlRmMkU4Znk0My9PeTBFPSIsMTA2MToic2hhMjU2LWgyRncxVVBrUUxFNGxhVjBrdVhhNVpTRzJLU2FIRWxhZXFhNzdVVmsva3c9IiwxMDYyOiJzaGEyNTYtN01zT0JDZ2U3MXNjcTliRVZIZFhlMHRSQm1jWGtNcElwdGFvUzUyRnZibz0iLDEwNjM6InNoYTI1Ni1mejE5YnVReTRpZWVmVllPRnJjbkFjOTBmNnNEY2cyU2laTmZ2S3RUejQ4PSIsMTA2NDoic2hhMjU2LUxCa0Y0aGpzcldCaHZSMDk5MTV4eXM2ekFPUDVwcEJpVm9XN25POUwyWlU9IiwxMDY1OiJzaGEyNTYtSkY5OTAxK1VqRWFwQXZlVWdneEhoZUxoUHZzeVV0ZlVmeDc1K3pmVzdqYz0iLDEwNjY6InNoYTI1Ni1HOEpFRnhIRCtBejdUdnJiS3FESVBxQ3liYnp0VVY4SVVlMFBwN1JtVGpNPSIsMTA2Nzoic2hhMjU2LUZqeXhZWHNyVnhTbFRtamNaRTMyWHVOSnBGWVpuV1QrNkFFTEJ2elM0NDQ9IiwxMDY4OiJzaGEyNTYtSG5kbms0Y2wreHdKNkp5TmwzRE5aZDk4YThZN2NDM3Q4WDFialFoeHk4MD0iLDEwNjk6InNoYTI1Ni1ZdkRtZFc2OFZIeXRKRExqMTMya1VSWEtDZlpORXJmUjNEU245SXp0V1FJPSIsMTA3MDoic2hhMjU2LU9VWEJjZHg0V1VDcnZ3QXhFSDEray9YUGNZL2QrcU1hZWt3cVdkMElSdm89IiwxMDcxOiJzaGEyNTYtMmN3UWhUOGpCaGc2TnFwbUlSaFJSanJ1b3JjRWJHK2pYMG5VakJlUENRWT0iLDEwNzI6InNoYTI1Ni1vZUhDSzNjTEtsRkw4dHBOK2tmR1BxSXBuL3UzeUFlZFJKdGpBRHpWdlEwPSIsMTA3NDoic2hhMjU2LXVyTEw3NXBmMnVxa2x6T01HMGlJcGxLWWNiMmpkMlY3YWtyY2VlZmVPOHc9IiwxMDc1OiJzaGEyNTYtTnhpTEozalNVU1UzSVh4Tk12eUdNbW5sRk56TEY3bS9NYlVQdXpmdnJnMD0iLDEwNzY6InNoYTI1Ni1TRkswa0Jqc1lXRzIyNmJDRTRNMWoyT3c0MVcvQUNXZ3l3RlJNYklMVVgwPSIsMTA3Nzoic2hhMjU2LUk0R0FnTjd4S0xKNEdPVkZ6dkg0NHRvMlh1SHRIVEgzdXN5d1V0L2pqcWM9IiwxMDc4OiJzaGEyNTYtMEVUMGM2OWF1TVl5enRZQUdLeUd3Sk1DUHlxdmJsUmpLeStvSGZ6cnlnWT0iLDEwNzk6InNoYTI1Ni02QmpRMjU1a0hjanJNY1RObktQVjY2SzR2TmZQNXhHMFhLYTk5QWZNRFNjPSIsMTA4MDoic2hhMjU2LUJXcGg5MVpxQnhyK1JTKy9YSm1FL21yd0ZqMGE2aTNyZUVhcS9vNXJ1QVE9IiwxMDgxOiJzaGEyNTYtTGZZajJSc2VaZ1FnaHFRdElNdFowUTJSSzkvcU9sTllHVVFrUVhrcStEbz0iLDEwODI6InNoYTI1Ni14bHAxNy8xUTVDNFFsY2RSVm5HaEtKakxNanhPUGI1aDR0TjRUUjg5Y3BFPSIsMTA4Mzoic2hhMjU2LXloN25zRWE3K25FaTkzZ0NFRnNJdkR2U2F6TDBOV0IwRndkK0RwRFdzaG89IiwxMDg0OiJzaGEyNTYta3doaGRzYXBlWU4xSVRDM1lrQlpoMWdDOGdwZFdwd0hDNUFzTGxDRlU4ND0iLDEwODU6InNoYTI1Ni1vL2h0UkttZUlCVlgrVHZvSmpTNkNNK3FZZXNoSDVDbHV3Skx1aGoyZVdVPSIsMTA4Njoic2hhMjU2LUc1Nit3aHYyU3Y2QzdQV0xKYVZpM1ZVa3VaMzZPNFBjTUNEZlZhRTErU2M9IiwxMDg3OiJzaGEyNTYtUmN2Y2o5c0lqSkpqQzdBY0M0RVJ0enZqcnRSZEZ6aEFpT3N0UFVwZFhGST0iLDEwODg6InNoYTI1Ni1ZTFFQc0MxVFd3ekpkWS9zbUhOd2tVbVJmV2ExM0tST3p5S25BcTNLejhVPSIsMTA4OToic2hhMjU2LUN0UldDMXdBRTg3T3dwOVBwa3FOK1ZocnB4SWJGZ2xZUnZ1K3Z4bTIzWU09IiwxMDkwOiJzaGEyNTYtNmUyWjlzZjd4dXFweWttckhneDFmTkFzd3NPSjZ6YXpFOHNpR044c09wUT0iLDEwOTE6InNoYTI1Ni1CSlFzQlZmN2pBb2JpK1NMMmZYOVFLZjdTZ0lNWVQ2NWl6R0xqVFYvcTFJPSIsMTA5Mjoic2hhMjU2LXBoTXFiVHVLaWUrcDYyeXRDYThQeGhVWE9SQmdST2c5K3A3eXJoMUlkMU09IiwxMDk1OiJzaGEyNTYtVFlrbGFYQ21xTzJ1Z1UwQVRXTEU1RUEvOEg2UzJWWWRoS3pCayt5eUFoVT0iLDEwOTY6InNoYTI1Ni1vc29oL1FJbjg0QlFpbUlpTHRsZUZ2REJPMVI3T0tRcW1hL2tFdXRWa1FnPSIsMTA5Nzoic2hhMjU2LU1jRDFUaEd1YnBmN2RnQ3hmeWpzRXdhRjZPZFMxbEhmZEFNSHVCY1V5QVE9IiwxMDk4OiJzaGEyNTYtenNNMzFLVmhZQ0ZGYXdVenFaS1o0dmlxb01oUG1PQkM1UHBoRGVUdkc1UT0iLDEwOTk6InNoYTI1Ni1nVnhJOFUvR2RwZWJlOHRSSWpQdmxFVG5SL1JzMmNLTllQbk1TbWJFM2ljPSIsMTEwMDoic2hhMjU2LWF1bDRCYVRTSVorMVY5NVdhSi9KK01maHdhOGd5dFQ1VFU0bmpQT1hMSk09IiwxMTAxOiJzaGEyNTYtMmN2azFKRzlpalZHMUl1ak5PM0NwTkJPTVVqWVpEWFdYR21CejF2QmhwRT0iLDExMDI6InNoYTI1Ni1jQmJFck1EVlNFakg3ektKdkpsbTZWNkZKNmd2d1Z6MWp6ZjRFUUZNSUtzPSIsMTEwMzoic2hhMjU2LTBrVUplc0doTlovc1ZxOHVrUjN3dUNXNHNFK3FDcFNuZ1dOSktrNmQyWHM9IiwxMTA0OiJzaGEyNTYtUkZyOGlpRC92a3MyQ2xUUTBzZVR6eEJTVERDb3Yxbmg2QUgrcDg4SWlaOD0iLDExMDU6InNoYTI1Ni1vYXV2R2hzakZRVEVKQWE1VnlyUk1sMUROZ0VZd2taWVBzczJZTnlpL3RFPSIsMTEwNjoic2hhMjU2LWFwYytON2Q2RTFIM05mYXA1VmM0SDZSTXFGbDRFd3IrWnlDVzRUNjNMYjA9IiwxMTA3OiJzaGEyNTYtWk9QN3ljNlpBbzZvODFYR3ZyNVV5VHZ3cFRPemNHMkFsQTIwcHl2RGFDVT0iLDExMDg6InNoYTI1Ni1jZDcxMkFjZGtnQUpZSW54VE9kVE5ySmhnQ1I2cGh2UmhLSC9iWFRmZEFVPSIsMTEwOToic2hhMjU2LW01dnBxTDZCYlFJbG5YQzZyRnpzQVZ0S0cxUllxMzdOT3Fqa3FCMEJZdzg9IiwxMTEwOiJzaGEyNTYtRUJRTVJZWGVZQndEYzFRTlVBcVJka1JZVzBKalk4SXRMWDJXWk41bG56Yz0iLDExMTE6InNoYTI1Ni01SzA1Y1pYajhVaDNLRk56RkFxd0t3ck1JMWFvNWgzY3UxQXBSSmJPOEtJPSIsMTExMjoic2hhMjU2LUFYWDRjZXQ2M2haaE5NNUl0cFFKS2VBVnhhdEFqbVArb0NvUVRUN3VmWms9IiwxMTEzOiJzaGEyNTYtTnRvRExkLy9vNVV5N0x4bUY4Y05qY1lnb1RXQXUxQWV0RTV5ZmxYSE5Laz0iLDExMTQ6InNoYTI1Ni01M0tiQzl5MStrcGhiRjlZZHVuVXVzMFpiRkVKTjdjeXNNdVBuUGNJZldRPSIsMTExNToic2hhMjU2LTNwd2JFZnRuV1ltVnExMjV2NXpiQzM3TDBxQ2xodzJrSURjOGxoTkVTcWc9IiwxMTE2OiJzaGEyNTYtekFlS2JnZ2FvYkp1eko4QUY4eDJEc2k4ZFFsM3UwcWhwaHppeVRLaDlnaz0iLDExMTc6InNoYTI1Ni11dGw3U2FXVGY4R0w4c2drWXRNaThtcGJacjU4ZGFoU0s1YXErd2xDdmZFPSIsMTExODoic2hhMjU2LWhJQUQrVmhOSWlNNVU3RDNMQ3IyUUJ4dWYvZWtqZ3ZkWDZ2Nmp4WEVXYzA9IiwxMTE5OiJzaGEyNTYtTVlaTUlKbTUzdnZtR3NDb0EzU0dPM1FMMzZ4NXFBbmpDKzYxT1hnSzBwWT0iLDExMjA6InNoYTI1Ni1kZ00zNGYrZDVSaDBEUUtHcGQwQ1lKbXgrUUVyWG51TzE3MlIrWmExZ01vPSIsMTEyMToic2hhMjU2LXpRUnFjWGUzU1FJVVNsQXNicHlWNUtWMVA2TGpjS0FMSlpuSW1Semwvc2M9IiwxMTIyOiJzaGEyNTYtSkpYbkVFZ0lrUGdYQVl1b3VDaHI3U3UwZW1WREVMZGdSRUNPa2xUUTJ3az0iLDExMjM6InNoYTI1Ni1MdzJQSVZIRGw1bUY2OFM2QUdwWHo5aGdtOVRRRC9WTk8vaUxIWGZ2R25NPSIsMTEyNDoic2hhMjU2LUgyUzZUcjNtZzdjenZ3cFBDSmtROG5BdG1rVUo4RTM1TmhvcGJoS0xkTEU9IiwxMTI1OiJzaGEyNTYtTk1SYVJRT09qZnU5TjVqdkZXMGZZNlJkN0svNHlVVVNjcUxzUW9GNlYzYz0iLDExMjY6InNoYTI1Ni1JZG5OOEZWbSt6UFFOZGJ0dEhUUHFRWS9aaXlkTHE5Tk5nOXpkT1YwVkRRPSIsMTEyNzoic2hhMjU2LXJHMnp1eFFXcERSenVyZVlneXFOanJjRFNuWWxFdjF0RUlsVDNmaGpqMjg9IiwxMTI4OiJzaGEyNTYtaDgybmtIbE1QTGpBM3hsejIvTlJHVG0zZWphYnIrWTQ0WUhOby9XNVdXWT0iLDExMjk6InNoYTI1Ni1TZ0J5QzZWcmhqSVNzK3FSNEtLbTlha3R3aXFTU0xSRk9LUTIxaWFFUjV3PSIsMTEzMToic2hhMjU2LWNWYXk0VTArZFRUeFFuY0R6RVNRbU5QTVVlOXNXSy9sZjlnY2FUUW5TMFk9IiwxMTMyOiJzaGEyNTYtVDFGSERkMTArUFBlWk1mOXcyb20wU1d6SnZMd3hrbzVlNXU4djhXSjFVOD0iLDExMzM6InNoYTI1Ni1GWTBMRThuUk9aQURNb250UGNYWmE0Y0dNY2JTZDE1czFoTUFXYUJ2N0ZvPSIsMTEzNDoic2hhMjU2LVgyU2p2YXJBaE91U2RYR3lwMnI4RUs4U2JGbUNybG82eXVLcjB6R2k1eW89IiwxMTM1OiJzaGEyNTYtQmVsLzAwMjJVRlhuZTlWOXI2Y0hidW1UQWh6UVRQOFJQR0JWUW80dE04Zz0iLDExMzY6InNoYTI1Ni1meThtWDE1N2tpcUJBbU8yREdnWkc2WnNNS2pkdEpRMXdNMHhBY21DQ0FnPSIsMTEzNzoic2hhMjU2LWd2WjF3U2dpLytxYXl1Z2tHMmJ1TWcxL0w0QWFmQnc5NFVVME5SQnNSbkk9IiwxMTM4OiJzaGEyNTYtbVVqNFJvdTNvZHA5b0JtTzRZclVIazY5MWxvdXZ6Ly9PZnhPdU52TnNJRT0iLDExMzk6InNoYTI1Ni0yQUNDaUFOQ2JUTXJ2WjhaYkYzVnA3MXFEVUllUngrYVFOZkdFTkdsSVpnPSIsMTE0MDoic2hhMjU2LVkyTkd5TXgrOWhKdVkyd3hKL3htemtCdVdzVWxZVXRjUHgrQzNSMFQvRXc9IiwxMTQxOiJzaGEyNTYtTEdXS1NrT05Fa20vckVvSUU3dXhVNVA5YXhnbGFaakxUZ1NCTXVJNmdUWT0iLDExNDI6InNoYTI1Ni1nbWd0a0N4cFdwNzhxZERmeEMzK2RwbEV0a1NHU29mTEUvL0Rob3hPR3ZFPSIsMTE0Mzoic2hhMjU2LVIyMlNkckFBYkIxMS9ZaDdKeTh0U1ZWU29SOWQwZFQvM2hjUVprK2liTUU9IiwxMTQ0OiJzaGEyNTYtSTlWQXEzR0p4d3lwVnZGaDIreWJ5K0NOTWZlWjY1TzlzbWwwcGFqcU9zYz0iLDExNDU6InNoYTI1Ni1tdXRZZVdqSDFtRXB6anRnRzhRclF0Qnlad3ppWTRVLy9oK3JRUzkwM0dvPSIsMTE0Nzoic2hhMjU2LS83MllSV09NYStGd3RxbnVpNHpGV2ZrcTZDaTBmTkVLbndpUWhxT2lNMGM9IiwxMTQ4OiJzaGEyNTYtK05rclFMQ3JEU1lGR09YeC9mMjh3WmtFQzYrN0diek5OOHZ2SDZHK2tWMD0iLDExNDk6InNoYTI1Ni1vTTN0UGlNTUl4enlpUWJNS2ZQc1dYeHQ3NDZ6R3ErUlpSVFMxUEduWERnPSIsMTE1MDoic2hhMjU2LWRWd1BPVlpDMjFwbGhqL1hXWWRKTmRsUTAvOENIWWlibTlNc2x6NGdQM0E9IiwxMTUxOiJzaGEyNTYtbGlody9iZDVBYWZHNFR3QUp1TEtjL1UremhZak5CQXpSQTlpT1FHN3czVT0iLDExNTI6InNoYTI1Ni1KY0NlUzYyZmd0ejg1YXZpWitZSVFUa0FZTDFpcE9MN01OS2Z6QVliWDdJPSIsMTE1Mzoic2hhMjU2LUJSU3NJYzEwZUdySzJYaWhRWWlwbWZtQzZGbC81Q0g2RWdKM3A3a1ZUMkE9IiwxMTU0OiJzaGEyNTYtek9DME1vbmdvZ0E3OVErTlRjbEhxRWJta1c4WUMwMEpoNkZXbXFzb3VsOD0iLDExNTY6InNoYTI1Ni1ycFI1d2p5OCtHYkNKUmNrd3NUTEJjRS9RL0sveWVXZzk0UExsTUdYckpVPSIsMTE1Nzoic2hhMjU2LXBOZUJXZVF6TFE4WEc0UDhwNGxoZ2poRXVtVkoyc3BETDlJNXpCN1pyRlU9IiwxMTU4OiJzaGEyNTYtbytRZ2drRUdMV1VBejIyOGJ4UUs1elZpTnJURnIyaU9QY0dZdGRiZlF6dz0iLDExNjA6InNoYTI1Ni1vUDhWZ2JtTk02WDR5V0NFZDU3aENoT2hDM1J4bjNxNkcraVdEMGdwcndnPSIsMTE2MToic2hhMjU2LUFKL0owVmZEQVB6MnVKaDhUUFBORU5ycHNxUWc0OUE3NWlSRkZaR0xGOEE9IiwxMTYyOiJzaGEyNTYteUFXUVg2WWg0K1NncXlrUkl5dnU4eDlRaTVnbnAvM1lybkg1Y0F4LzJacz0iLDExNjM6InNoYTI1Ni1qZzNXVGlVbW1pc3EyeVNPdTlnWEZxRVF6am51elUvUFJXQVUvNzlCUFJ3PSIsMTE2NDoic2hhMjU2LXFNQVlkMmJjQVJkZml3NkJqeVdDTVhzR2tZaGIwL3laQkVzRWlrd014TFE9IiwxMTY1OiJzaGEyNTYtNnNjWHUycmR6aEhjK250dndnQWVKa09WZkUydXBkYnMveGYxdVlBWnIvYz0iLDExNjY6InNoYTI1Ni04NGN6NzlZMnc4elhDallGOW45YXcxSTc4RFJkK25Bb25FTXJRbnp1VWYwPSIsMTE2Nzoic2hhMjU2LUU5bEpxbStaOGw2NEM5K1hwN3VZdTE5dzRtZWZKYWs2anRuNC9LZXBuWlE9IiwxMTY4OiJzaGEyNTYtK2s0eUR1QXlSNXE3eC9VVngwRVdTOHpDdTdDT2hXdHk0WWFNdlZFRXBWVT0iLDExNjk6InNoYTI1Ni1DT1d2MmVDL3pqYlpGS25kMjB5SU1OS25UaXdvaHRUQVRGWEJHNTVuUTZ3PSIsMTE3MDoic2hhMjU2LURmdHdNMkhqemJ2dGgyQ3FyMFoxZ3FTbE15a3VGYmEyWWVxR3BkR1pialE9IiwxMTcxOiJzaGEyNTYtSXdkM3lUVXdFY1hoeElBMU96NTZvZ2hKM0pBNFg1SklQK3RNRHV4M0VaST0iLDExNzI6InNoYTI1Ni1hYnFUdGpxSXNNRDVsT1FOWUZ0K3Zsci8yNHArb1Q1dnkwbGxDdytGSkprPSIsMTE3Mzoic2hhMjU2LTRReDRCWHVTSGNWVFFzc0V4Y25CWnBXNkhPVDJWTjZkdko4ejdoTXNpTUE9IiwxMTc0OiJzaGEyNTYtV0tQWEVtNE1LS1dyYXhKUktUU1Z6a1FCNy9rWXA5VTVMQWdzUnNleHkzWT0iLDExNzU6InNoYTI1Ni13dEJSU2ZuK2RBV2dmSnZuZUNtd2pkSDYxZ01id2sxaURNVjg1WDNxL2o4PSIsMTE3Njoic2hhMjU2LTZZbUQwYUhLUTFQL0JBdGxIVDVQcXo4aUUxMWFvaXpRUlRabHJYbHlRNDA9IiwxMTc3OiJzaGEyNTYtNG5YUFlha1ZTUEZSRlFROW52REtCcU5Gem9lZzdla2tJZTBNb1Y5ZmM3ST0iLDExNzg6InNoYTI1Ni1VMnlaMWFQZEY5eTh4SXFaRzhpVUw0MGdROE9wOVJ4bFNzTzRCT0Jha1EwPSIsMTE3OToic2hhMjU2LWN6RTlRdU5ZV1hFUTEvQXNXd1J5Z2ppNVphKzRMeUFMelVuMGJscXllQ0k9IiwxMTgwOiJzaGEyNTYtOWZ6Q24wVlRSTW10c3JmcDZtWEh2c0Nyd3ZxK2R4OFVoeFlhRG1VdjZ1bz0iLDExODE6InNoYTI1Ni0wQ2Zud0o2WWptV2k4V3JtREtWVnMvUmtvSTQ3eFYvd1V1aXQ3c2NqUzlJPSIsMTE4Mjoic2hhMjU2LXh1SExaS2Z1L1RkYkozZ0krL1BNQUllSE9iN2FNMEFrVjZqNkxPb3gwUDg9IiwxMTgzOiJzaGEyNTYtV3pMckcwSm54K0FoMDJ1RElpQ0cydmxMWE80Y285NnFYN3M0cnVFWmdvbz0iLDExODQ6InNoYTI1Ni1HbW93ZnZlL0NHYldzYWpEdUNoMk1UdHNBT3lqcFVSNGJCTE96YUpuaVYwPSIsMTE4NToic2hhMjU2LTFUUHVmZkZkazVhRWhKVTU4Uzl6NGlIZkRaUVR2MHFKNktHU2plMnJyckk9IiwxMTg2OiJzaGEyNTYtc2tTUGN2QlFqSTNaVlNMbnIwSlBRSVdTcTZ5WmoxdmxROVZ3dS95a0FyOD0iLDExODc6InNoYTI1Ni1ja212R1Bmb2M0Sk16MWg2Sjk1Z3BjNlFUYkNrU3E3VUhWekQ0VSs4RFcwPSIsMTE4ODoic2hhMjU2LTMwY0NlRWtPZE9Pb0hTYnlEREJndjVvS3BsYXFHY3I0ZmRYZ1pMVkYxeEU9IiwxMTg5OiJzaGEyNTYtOUFoZHc3ZUlRa1F5KzRsTCtjS21KYXE1WFVDTThFQXpXRnhCNXQ1ZnJSND0iLDExOTA6InNoYTI1Ni0vY0NvT3g0WEVlY3VObmxLS3NKRklBeS9zc0Y4RXp3ZWdwTDMwOGEwSzRjPSIsMTE5MToic2hhMjU2LVJRcGJmVUJ1TFVneWIyV3EzcVB3eGVLczhHQkhjVlNaYWJUb1B0WXRXbVk9IiwxMTkyOiJzaGEyNTYtYnhHSHRVQlBHbUxxSy8rUHdLbHQwd0tpL0RRaVN0eW9vU0ZsU05SU1M1OD0iLDExOTM6InNoYTI1Ni1lNldIUk5jM1pJeWpQSFJIQkpDZit0REJGRHNwRjJJbnZBN21HTmR2THRvPSIsMTE5NDoic2hhMjU2LUpDQnFOUzQzUUl0N3NsNHFaTmNsajBodmwrSHl0QW1YVFhTUjU5czFTRGs9IiwxMTk1OiJzaGEyNTYtcEpTZkdRYzNDZnNNR2tNUmRHVUVqbjZrTElDN2hhc3dlVm4rVm9EbFAzcz0iLDExOTY6InNoYTI1Ni1wZ2lXYTgyL0ZyZ1VYUWM2aWw0QlpaQWRyZHlBRkY0d0IzQndYM0t5cUg0PSIsMTE5Nzoic2hhMjU2LUJxSmNOQnI5Qys1ekdYWTlFMDliOW5BTy9xVHI5K0VKcXlvcDBMVlU2QTg9IiwxMTk4OiJzaGEyNTYtV1B4WTROeThJWHNvUGtDSXJEYU54bFBKN1RkcmJMaVI2eDBCYVVGTTBZRT0iLDExOTk6InNoYTI1Ni01dmFueldyYnRQeWdDSXRhSWxCV3JjSWptZEM5QllmWk45aHFqMTRrU3hnPSIsMTIwMDoic2hhMjU2LWZzYWFhN1RaVFJIUDYxVnphSzE0RlpibUpzZERUcjBuV1E5QmdMVm9CZEk9IiwxMjAxOiJzaGEyNTYtYU9xbWhUeUNoRUpyQ0MxczBieHFHckxrMHBrZnZNemkzOTFXV0RzUlNaST0iLDEyMDI6InNoYTI1Ni1SR1RPR3N0UmExWkZUSjJIVmhweVVvRHJubi9ESVRTd3dzS3NiUUgyc2lnPSIsMTIwMzoic2hhMjU2LVJQdXZLV2YxMEZxbzYyM2VGQ3p0emIyQzhiNTRvTUJBaDVTeFI3enVkUVU9IiwxMjA0OiJzaGEyNTYta0JjTm5WeWovcXZUbjRkTEJTQVBLc2JPMTN1TDBESUk1Q2Rwemk1VklCOD0iLDEyMDU6InNoYTI1Ni16MDJzblB4MTUvNVBkaEJ6ZnhOSDVyTnQySDQ2d1JqZ0YrWnFmUmE0bC80PSIsMTIwNjoic2hhMjU2LXIxR3pYZFdMUUhNNjdzNW03Q0kzUEhQQ1psMmJlMUNucWhDSDNVTzFBV1U9IiwxMjA3OiJzaGEyNTYtaGpuVUdWRzluMWFZTmpLUWRDUS9DV2ZxVWxiUm1WcFRueVBMak9NS2pXcz0iLDEyMDg6InNoYTI1Ni12dml6Y0JQb3NHb1Y1Q2lodGd1VkJpYkE1WXZPL2cwQk1LUUY5S05admY0PSIsMTIwOToic2hhMjU2LTczVWdrQnBpQkdPMVFBMUgrcFZ1aDRyeUh2U3o2MGZGRU92NHJyUGtvTG89IiwxMjEwOiJzaGEyNTYtNUE2Qk5kTFEzRlVoMlhxTmdlbkRKNGFDVkxUSHg4SlM0TnJzTm02WjBUTT0iLDEyMTE6InNoYTI1Ni1RRzdLczYyb2o2R2l5TWFBbnY0NjZkd3J0dE5DNGVGN0c0YXNlMmpHRFRrPSIsMTIxMjoic2hhMjU2LTBXYVB4N0xSaGlWaFBLbGx1cXY3dzc0N1VDNzlJalZxbmNVb291bnVFQ2s9IiwxMjEzOiJzaGEyNTYtTlNLYmNjQldjUCs4bUt2VEVXK1g0d1g2Y3BqOWt6UzRLMVJld3BQS09HST0iLDEyMTQ6InNoYTI1Ni1EZFRKaXlMWkMwYlRQYVUvK0tjdzluY3ZZV0Z5K3dFUGxsWEsrWHRHcWc0PSIsMTIxNToic2hhMjU2LXBEWFo1RlFobUdibHMvZGk1NGFGMDJGMk9pQzg4UXNLRlVDTUNOS0NvSEk9IiwxMjE2OiJzaGEyNTYtMDNsdTFZSW1tMkRJWkd1ZitTNk5QNlVDaURJVXRsWlpNNzlYenhyUTZDYz0iLDEyMTc6InNoYTI1Ni1TYTZZdkQzelcwcFBRZUc1QkxvNGwyNGNFbmp4N2R1YzByb21UM1Q2VU1ZPSIsMTIxODoic2hhMjU2LVdSQVYwQS8xVnJYSGdzcVFXclV5Z2t1TVpVMDdFR2o2VTVmenpMUWpxS3M9IiwxMjE5OiJzaGEyNTYtZUFGYVlsWVlzNVpyZzFJZUpvN2FzNFNVdTk3TEtzL0cvRTI5NFZ1QlU2Yz0iLDEyMjA6InNoYTI1Ni1mK2JRVXR4ZmhONkxCYkxGYVhaWHZDd3ByK3NQejNjMktaVmhlOFhoK2o0PSIsMTIyMToic2hhMjU2LVl5UHp3SCs2UllXYUpKcFljR2tYVnJ2bjFGU1dtU3g0c3FmeWVGT1pDMzQ9IiwxMjIyOiJzaGEyNTYtbHIzaHJTczljeXlSU20yNE04NU85d2p2VEp2L3hQclpDeUJwOXN2NEkrTT0iLDEyMjM6InNoYTI1Ni1ZRXZva3NKRm9qcE9Fb0FGSThBZ0J4V2VNZzFvdEUxb0N2L1RnUHR3b3VJPSIsMTIyNDoic2hhMjU2LWQra21zenplbG9DbEl6c3ZUOVZXeGZtM29sQTVtSEdKQ01JeVA4ZE1nWFk9IiwxMjI1OiJzaGEyNTYtSFJDR1JzV2ZvWUZYUm90TVVrYjFWWlNjT014QjhhaDJVN1dmQmtHdXJqND0iLDEyMjY6InNoYTI1Ni12QTh0SkkrS2ZvbHVTZXNvN1AwNno2dlRHUWpMSVYzM3VnYUFYNWFheStvPSIsMTIyNzoic2hhMjU2LTl5LzhqMXV1bHlpbGVUS0lHQzVSc2IrUFYwRGt2aHNxdzhMNlFTL0lSVWc9IiwxMjI4OiJzaGEyNTYtR2Y3U3BMdFl1TWlYNXdFZHhHTHB2VmlhL0dYam1WSFZveGg0TEt0eXlpND0iLDEyMjk6InNoYTI1Ni1sZ0RQZzhVSnF0OFRSOFVtZHg1MzdPRFBtSzdlR3F2OUxFZU93Z2NyY3Q0PSIsMTIzMDoic2hhMjU2LUZ2ZnNGL0lteWJWWUhoNHJhL0JQamRZWXQ5Zm9rZkZkVFkxcUpjQlRYMU09IiwxMjMxOiJzaGEyNTYtZHU5K0FmT2FsL003ekxiM3BPTEhXSElqdGErQ2E1elRnUVFQd1RtR2xrND0iLDEyMzI6InNoYTI1Ni1TUWN6S0Roa0Z3MmhoamJwUW4xdXg0dnhDNHBFMVFmcEFmKzhRUG1aSVFvPSIsMTIzMzoic2hhMjU2LS9SMC9xNEZ0bnpDK3BMYVE5QzkyQXo3VTNKbUphMXN4UEw5RjVpVmhvbm89IiwxMjM0OiJzaGEyNTYtcFQybXlOeXg1RjJKTC81M2dNNVVqTzRMbHlkOFlTVVhFbjhuVm9xNjhRUT0iLDEyMzU6InNoYTI1Ni03NkxkSmJnSmF5dk5WMXBIakE3T3FFaVRIWEpTMkxZZEk0cFNYd2pMQ3l3PSIsMTIzNjoic2hhMjU2LWxubWRZMk5IZFAvdmZJYy9XdXo0ZUhhL3k5UmVZbFhWckU5K1R4RWx4aUk9IiwxMjM3OiJzaGEyNTYtOXQ3ekh0Vjc1VGhsWTdxTTRJWXhXendlVDllL1JGTnRNb1hlaG5tcFRidz0iLDEyMzg6InNoYTI1Ni1QeldqZ2xsbFNxRCtIZmJqYmdDNlhhMkNMM2lFOGEwR25WNktFbXNpcjhnPSIsMTIzOToic2hhMjU2LUxwc1NlZEpmODVRMTc0QVM1Y3lhcWV1NVc2cVpmd1VaV0MzT2V3eWxKWjQ9IiwxMjQwOiJzaGEyNTYtYlJHam00K1VXMmNFQWtoMTBWWjk5bGQrTHlidEZxK0pEdEp2d3JqMUJ1ST0iLDEyNDE6InNoYTI1Ni1Sa0V2bEs0TGpLRWpZV0dqVWVETUtiQUdQeWZZQW04SytvaENzbG8rWjQwPSIsMTI0Mjoic2hhMjU2LW9oNFJ5cUY3dzI4OE12ekZZaWdaME9CNFcrR0dJRFdid1RrQWZLWU5BSUE9IiwxMjQzOiJzaGEyNTYtWjJDOHBqTVBSL3pxNC9HaWQ5Qktnb3ZBQmdOektvdzY5R1VsaDE3WUNRbz0iLDEyNDQ6InNoYTI1Ni10MDl5QTAxTFpORVRQKzRXNC9HZ05iVFNOTVFjalljR3lXd1NYSDBWVUZRPSIsMTI0NToic2hhMjU2LVJKdk5haGVYcmFBcXA1VUhESEMwQ1B0M3hCMWtHemVKZm5YdmVMbStKZUU9IiwxMjQ2OiJzaGEyNTYtUXVZVndhcC9zeWNCdElNbHY4QmRRc2V4NFAwQzkybFZvUEZEZll4ZWZTdz0iLDEyNDc6InNoYTI1Ni1NSzNqSTA0OGtJNndIWFcrbWQrOUR2cjYyQTcxSjdRbDZaYWNqYjJmZ0JJPSIsMTI0ODoic2hhMjU2LVpKdjEyeTh4T0hGZ3NSb2swUkF3d2ozZm1ZeGR6elpaRzhVclU0SUtldWs9IiwxMjQ5OiJzaGEyNTYtUFo0dFdCMDF4MEhGUndpeTdCZzNzRVRrU25IZ1ZvNGxkTmZ5UHczTXJpbz0iLDEyNTA6InNoYTI1Ni1kK2lUUnI4UWtvcUVpYnh5ejJqV0R0YUtkcVBuZVR6YW5HelRxOVNOcXdjPSIsMTI1MToic2hhMjU2LXJmQXhXWHUxWHliTTFLeWVNbnQzZUJ1a3JmK05mbEdkLzA3Z0VMOEc1d009IiwxMjUyOiJzaGEyNTYta0tPc004a3B6U3B3aERkN1ZzdWtodVFGdnBoOC93M0R5ZkJseTFwSTFSbz0iLDEyNTM6InNoYTI1Ni1yNU5obnhVNTJUMlpXMU5BNXExSm1LTkh2Z3dEZmQvRHBkV21aekNSUnk4PSIsMTI1NDoic2hhMjU2LVdpdWowb2o3VndTV1VvZTY3QUNDcUZlb2NZdHU0NEpsNkxONndUNG41Z0U9IiwxMjU1OiJzaGEyNTYtTmtMQUlQZHM4QlhlTWxkd3kyOUdRckNob0tiMGhFSlFHL01iaWZPQU9uaz0iLDEyNTY6InNoYTI1Ni1DcEpqUitMUlRuSGoycDlDRElJUFlCaTQ0Z2Y2ak9SMTZrN20vcXpXaWE4PSIsMTI1Nzoic2hhMjU2LW1qTXNpR2FNNnZwRy9MVDlqWnNya3VZaWRBdVZXcmxJMFhQUit3RGdsbDg9IiwxMjU4OiJzaGEyNTYtbjVMSi8yWWtlNW1LTmtaU2RJb3NzTlM2bDI1TGFtTjluYmV3bnhkMC9ZMD0iLDEyNTk6InNoYTI1Ni10disyaUJsMXJKYXN4Wnc5NXYzcEN5RnczN3dPZHppSnFpMCtwenJ2VjlrPSIsMTI2MDoic2hhMjU2LXE2dmJUb1dJN0lvRXgzVUF3UW9wM0k5azhTQUJaK1cyVURKOUZWaWdrNEE9IiwxMjYxOiJzaGEyNTYtaDFWU1ZiOEo3T0lkOS81bEVJYnB0eWh5VUx2ditpd29UV2VadkpzMFBXQT0iLDEyNjI6InNoYTI1Ni12VzQ1QUYxUkxsSmY5eDhEZmQ3L1lKdG4xNnVkMm8rekZGSkdFUHdVbDlzPSIsMTI2Mzoic2hhMjU2LVpFVVVhZU4xZ21HMzRTUVF0SEhOMWNhRmtmS3c3OG1lM25oVUxiUTVQZlE9IiwxMjY0OiJzaGEyNTYtbDlpaTA0VkwvbUJWR2VjbFZCdGtyNlF0WEVFdTczRkxZZXN6VVNOcXdCRT0iLDEyNjU6InNoYTI1Ni1ON2hZd3krTytZQWhDdW5SSzk1REpSN3U4MDhhdTNMdHVwWXp1cUpIb284PSIsMTI2Njoic2hhMjU2LXVqaWlJSlFtdWZKbGZheU9CNEhQT1VHZVphRC8zUlA3S04yaEFYaUU5ckE9IiwxMjY3OiJzaGEyNTYtSnUvWWlTNTBwdVF0dXNjMHZFOHZ1T0tNb2s0WnZjaGhlUjUyTFdZam9mcz0iLDEyNjg6InNoYTI1Ni13UWs3OVc3SUl1RHcwWHVsbDhUUldJdjg4STg4RXRXTEs0VUpRMHR2bGNRPSIsMTI2OToic2hhMjU2LTRuRlBEZWVsNEJtUlIyK085UjR6TjRpbnpGTWhjSzgvOTNZTFZ2VzZJMUE9IiwxMjcwOiJzaGEyNTYtSmVHNlhsanp0OHpoOWYxZTlVdkkvNlZIVUVVTUVMM1gxOS80UUFqZncrRT0iLDEyNzE6InNoYTI1Ni1LNzJyS1hRNHlTeGF0ODJlWEx6OUp2Z09xT29CSURzdk1mSk5TZnNEWXhFPSIsMTI3Mjoic2hhMjU2LVJnY3phRXVCNUppR2VJMUtLNmJGajMzcGthTFBNbWZUYzJJQ2pqNmpQUDA9IiwxMjczOiJzaGEyNTYtUnJrUTdmSEhGZW5sc0JlWDREZG5zRFc5dEFhSXZpYVU3TjgrSjJYMThJQT0iLDEyNzY6InNoYTI1Ni1yTFhvRVNVVXppSFJESmhwUlFXQ3FtVmlROFFpSjQ2NFJFY1dWM3ZOb1g4PSIsMTI3Nzoic2hhMjU2LWdKMVloSzFRUml0YlpsMngvTzAzNXc5ZU16MGNQTjN0UzV1dE5tTUttdE09IiwxMjc4OiJzaGEyNTYtU1FtbTdxMm9hc0ptWi9lL0NWemVxazZjdGE3NG5uWUlXUDRWeFpKS0kyQT0iLDEyNzk6InNoYTI1Ni1peVEyMjRpcVppdlorNjg2cURmRlZrQzBuNVpFenQvQW8vcmkxMG4wZGMwPSIsMTI4MDoic2hhMjU2LTJ1S3lGaW5JaEtJWHlBZEQyT2Y1aWhYZlBSbnBCbUFJSEZZVlFIVm10cXM9IiwxMjgxOiJzaGEyNTYtUmpCZ3NIQ0x4Wk9iTEtqSENFK293VXl1WWpGSEF4dUQzWFlKOWJoTmVCMD0iLDEyODI6InNoYTI1Ni1jczFoSmE0OEFXdVZyTnpEZTVxK3pxelZMUEJWbVJUSjRWUmNmQUNDOG5vPSIsMTI4Mzoic2hhMjU2LTcvSEhSanlCcWlWMlpCWVk3c0VwSUd0L0ZZTHZUKzR6UkRhMTlZekcwQ2M9IiwxMjg0OiJzaGEyNTYtTG55MTdIWk9MdVJodC9MWEhrWWkvN0lzMGlpNkgwdVh3U0tzaWtwMkRZcz0iLDEyODY6InNoYTI1Ni1ldmZxZjlkb2t6amZ4ZVFWRGhRUC84SCtlVlg0anVLMXpzQjRmaVdiS2FjPSIsMTI4Nzoic2hhMjU2LVZFRVdvZlpXVWIwbHZWUGkyYlRveUlMOER5RFJuTVNTU3JKRStpQU1ONUE9IiwxMjg4OiJzaGEyNTYtUFJNTkIxQzJyMmxRdlVjV1hhc3J0MGhGYmtndDNDOHF6VTJGK1RIdjNEZz0iLDEyODk6InNoYTI1Ni0zQTh2V1NzOTl2d0xqYTk2blJjUlZVQWZwVHhqRlBaclp0MnFCbHlCUkIwPSIsMTI5MDoic2hhMjU2LUlWT3BzMkNWbUd0R0p0R2NyTnIraVlqR0gyUitzL3FycTcwWkxrMXFMcGc9IiwxMjkxOiJzaGEyNTYtcWlzUGU3UXF3UGpmbWlZN2IwblYvVk8rczltMUJ2Z3IzSHBsNmk4TkJYOD0iLDEyOTI6InNoYTI1Ni1Gbk1TVGk3MVcwT3ZjQXBCQjJCaGNwQzh0M3hxMUJZMFVOcWI5YmNxblVJPSIsMTI5Mzoic2hhMjU2LXRIaWF6ejZkYlg2Sm9PcURhajlUNDBFWnM2bXRHbGJaY0JsYUFUOVIzMGM9IiwxMjk0OiJzaGEyNTYtckQvZE4wclh5bDZIb3BINkMwbmNUZFZESjB5RGhtR0R4RHNZRVkvRmxjRT0iLDEyOTU6InNoYTI1Ni1MK1ljV1lzSy9tMGplM28xbUlUaEZPY3M1ZlZ3eWVkajdZcm9KTHBiRExJPSIsMTI5Njoic2hhMjU2LXMvclJFOUtYYkJVenE0NWovVk9NTGxCaGZuUGEzK29VUUpYa3FJZ1BCMU09IiwxMjk3OiJzaGEyNTYtbDNoUEJhYVgzM3pVRlNidWpkcGgrOUtXdEZzME1kWm9WWE5CazZIZ0NVOD0iLDEyOTg6InNoYTI1Ni0zOEFBTGE1NDJVUEFWUmlCMkR0dk5sTUxnNXg1UndUSGh1dWFDZFBQaUNjPSIsMTI5OToic2hhMjU2LUtGYTUycENXMkVROXdjTDMzRk1NNVVpQWZnVnN6OG1kbnBiZGVySVQ1Z0U9IiwxMzAwOiJzaGEyNTYtVjF3V0VKY1hPdkJNdWdmMXNrYmdDSU52elFHLzNDMkpYdHJVczN0NHpyRT0iLDEzMDE6InNoYTI1Ni1LUkFoUmI1QUVpT2piM3NmMWZtNkFvOEs2bjJzUml3RXErcW9raWJuYXlNPSIsMTMwMjoic2hhMjU2LTJCRGtCVkpXYlhpK0ZBTklvbWVmMGREc0FsRjAvOVR6ZTlVTHJ5aFdkNjQ9IiwxMzAzOiJzaGEyNTYtVkpwcmMxTjJoY0ltL3lRQnE1bG9qZVVHTFZIcnk5NTdVTFdHTU5CN1dwST0iLDEzMDQ6InNoYTI1Ni1JTnZyNkdUNlNBSUNPbFJFNm9nRTRZczdXSFZyUWNDd3h3K2VLVmRGMlZVPSIsMTMwNToic2hhMjU2LWFTSFF2Vy9jc0w4WFEySm1HdnlMR3RyYU9iVm1MSEh4MTdjSUxGQzFKeVE9IiwxMzA2OiJzaGEyNTYtZGxrU0llZStIS0tzb29pT1QzaGVpRXN0b2RmYzMyT2htbkhqbjBhV3lxRT0iLDEzMDc6InNoYTI1Ni1NeUliRkZBblQwZTBaY2N1MEppZU5lSVhPQ1Q0ZzVENnlqSmgzdDB1RkRnPSIsMTMwODoic2hhMjU2LWd5dnMzcWx0L3JlTCtSdFk5RG44dWNad0JKd0RhNSt4TE50U3FSUjdNTXM9IiwxMzA5OiJzaGEyNTYtcjNJSTZNL1Rwd3paaDBoa2FaZUE5SFhReFY1UWIvdEI1c3FvUFhETG5ydz0iLDEzMTA6InNoYTI1Ni1RbkJLbVFPREN0RzdtMXNlK2MzRTNmUm5FMUtZT3dBbFV6bXV4VWRrK3IwPSIsMTMxMToic2hhMjU2LXVvOUpTSkNrVWoyYmRmMlRmQVkrQlEyU0o5VTRlQ0NZdTlpM2dRSG5Sanc9IiwxMzEyOiJzaGEyNTYtSjRVVlpwKzVIRHRVQW1NZ1lqWTZxcXZKcC9KTEZFQnhhN29SQXlJMDA2TT0iLDEzMTM6InNoYTI1Ni02RlkyK0pHcjZIdzVxOHY1TUhHVklRcGRJbEljZ3poc1RZSnJTekcxQUdFPSIsMTMxNDoic2hhMjU2LTgxY2NGK2FXVnlBeHhDeUVyK0JFODBuWjN3MCtHT2dlY0NJT0M5bEJIQjg9IiwxMzE1OiJzaGEyNTYtY3pEZTdQbUE1a3BGK2VIbG0zU3Q1Sk9uWnZkZnR6bm5hYWdyeUs2bEVSYz0iLDEzMTY6InNoYTI1Ni1Tb1V4M0xaZ1MrWFhVVytaL05BMThqN1FTSnRNUmVUR0tDdVpMei9GeUVBPSIsMTMxNzoic2hhMjU2LXlnaCttMTFidnNFUkwzN1pxbm50YWZGWThoeUtsclFiWFdVL25DN3ZOWk09IiwxMzE4OiJzaGEyNTYtMTJ2NmhrR3RuUXRsamh3eFJSdWRzcW50bCtzTzdqNCtKV2M4NzF0Y1Y2bz0iLDEzMTk6InNoYTI1Ni0vSzFKbXN2citpbXdGcnlwS3lRZGJyNGl6SXdaaTd3bVJUeFI1V0dZY3JNPSIsMTMyMDoic2hhMjU2LXUwbmkzZzNzemZTMWt6TWd3TXl5Wm9iN2czWkl5U2FTYUtHM0dhZWZSOFk9IiwxMzIxOiJzaGEyNTYtWGhqZHhqSTl6c2hXb25tNk9KM0FINzhpZGVoMHBONVFvZDlVL1FWaVZXTT0iLDEzMjI6InNoYTI1Ni05WUZsbVBtL053aVp3OGdUVWx0emNQVVVoLzZPajAvK01HOXMvak95a3hFPSIsMTMyMzoic2hhMjU2LVBFY0Npb3RrVlEyT2s3L1pvTVk0bVZIeERsVHRDYmZ4TmhFQXBnNFBDSTQ9IiwxMzI0OiJzaGEyNTYtaTRYQnFHOXpOd1kzenBBTm8rN1lBYmNYTG9zK0tqWWZORlIrZ21UZHB5dz0iLDEzMjU6InNoYTI1Ni1oZGUrQXhGaEhvTzA1RU5QT3YzYlNQL01PT3F1bTdGUVN4TGM4a3ZKVUF3PSIsMTMyNjoic2hhMjU2LUZIZ3lqcllQUkU2ajJpdmQvVk9QUkpSYmRtbG5PaURqYUFML3UvdjdOeUk9IiwxMzI3OiJzaGEyNTYtZHMyNHUwNk9zUHdJSVBWSjlYWGJ1MXNpaXJGUjA2dTVFMHpjbzZhalkyST0iLDEzMjg6InNoYTI1Ni1PMWpjejBGYUYyK1FaWlYyQ0RQM3loSXBSa0x1elhGNGxPa21DSEVaVjBBPSIsMTMyOToic2hhMjU2LVdUcmlVOUFoMVJZYXhOeEVhU0JFcWJFOWNrcmh2ckJEOUxvUlVLa0JRaVU9IiwxMzMwOiJzaGEyNTYtL2U3K28wbExPRHNncGdyNzJWQkh1T3p2bHpXMjUvZnR6cTQzeFU4aStpaz0iLDEzMzE6InNoYTI1Ni15bG1nRTZReHJJR09pRDZBZ3NKaVZUS1Q4cDR6LzlqNWVzL1JHOG5qZ1hjPSIsMTMzMjoic2hhMjU2LVlqdlE3UCtiOXlCTEcxUTVlSVliR05VaUpIa2xKWDgwaEdzeDVraXR3Tjg9IiwxMzM0OiJzaGEyNTYtRFBZTHhvYVgyNHJxVUhhc0oyay9qZEt6U0Ixak1ZOUkvOFk1ekxPWE94UT0iLDEzMzU6InNoYTI1Ni1lTklvVDhjL3NBYmMvYllyTHBhM1VaaHMxZkIzMGRJcUszRHZNOE9mbDlFPSIsMTMzNjoic2hhMjU2LXdhWlpUVXdLemVRbldhVzZQRkFaclBsa3BNY3RTQkV4ODF2S3grUy9QNjA9IiwxMzM3OiJzaGEyNTYtTWVsMzZrYVFOSER3V2ViUWM3V1FJa3dKNFh1SE1WMTZ5RzJQUzVMa05Hbz0iLDEzMzg6InNoYTI1Ni1PZHppdlUxVm9HRUUxbWVuK2ttR0l3aXAybzc3RndlMkFxNGJXRE8ycW5NPSIsMTMzOToic2hhMjU2LWlHWVJhem0xSURZc1cwaUpLVG5ZZ2J6bWU5TjZPVmVMVGVjd2tRTW5lK0k9IiwxMzQwOiJzaGEyNTYtMEVaMDlncStTUGF3VFpuL0YwTVZ4Y1k3bWhYSUVZRjh0TnZKNVVCdDRNaz0iLDEzNDE6InNoYTI1Ni1rL1VpSkcvWUk4NmtWdFdiMVBsZXVmZHpoMDFMTDhPWVh5MUhJeGRxVlJvPSIsMTM0Mjoic2hhMjU2LTczSFNrdXZweW5QaWhkTkdldWJvVmlPN2tjRDhRM2hSVk9PcVREME9JU2M9IiwxMzQzOiJzaGEyNTYtMXlZVVVtWHBmNyt4cFhQTUlDTmRQUnZ1VDdJZGxXN1AzMUc0QjBnbjJvcz0iLDEzNDQ6InNoYTI1Ni05NWZCMXJ3Q0VYZUNOUVFkZ1FRSjVML1pHL251MnQxWVpmcE4vTU91N0pNPSIsMTM0NToic2hhMjU2LWNOVTRsaXN6ZTRXMVVEMWR3YXB4Uk5EUzZwVGtTR25WNytvRzVSNDZOWUE9IiwxMzQ2OiJzaGEyNTYtc1ovaG5XTFh6MU9TTTZicHE5UmE3UFRISHlLVEJsUVhndVZpNG9kN1JpST0iLDEzNDc6InNoYTI1Ni1adWcxcFV2cnZEdFloOVdUYXhKWVEwUElMYjRHQzcxMStxVWtSS2pWYmU4PSIsMTM0ODoic2hhMjU2LThmNS9zeUo2U0trS3ZiOFdLbTZLWVlYWnIrdm1COE81eXdDSnN4OE1keTg9IiwxMzQ5OiJzaGEyNTYtUlYvRTc3STdvcnIrWlU1LzloSk0vbzZnRmdzcXNwMU10ZnZkbFhGaENDaz0iLDEzNTA6InNoYTI1Ni1pN0JlQ0pYT2d0aFMrR3JML2h2ODdJcnhFZmd2UUtmVHE3NVE1RnBOUGRjPSIsMTM1MToic2hhMjU2LU5rckluU2w1RHN1WkUydHJhTlhpejFSaGZIN3V0OTdOVVk4a28xaS9LOEU9IiwxMzUyOiJzaGEyNTYtMDRrd1poRDAybkhyMkdzL2l5VFBLeFdMQ3I2K3FkN3I4TkN1MDZzUlFFTT0iLDEzNTM6InNoYTI1Ni0yblE0cFBPOEM4Y3lZaS92WDI5K2pZWThQTHhGVVFIWVpuN3RNTFJYQWhBPSIsMTM1NDoic2hhMjU2LUsxbDU4UjdLTXpnVHZwdStGckJMYXVSdFMvbnNaS0pGZkxBNHVoWjlkV2s9IiwxMzU1OiJzaGEyNTYtZFdncUpiUlkzeUdKZWljODBia1YwOFYxblo1WUhYdVdMSTBLRDFrYm5VQT0iLDEzNTY6InNoYTI1Ni0zYkxVeVVKVzh3RWNoZm91eUJmTVp6d2IrL1pWM3JnSE1NaktzUW93ZXBBPSIsMTM1Nzoic2hhMjU2LTNBYmhBN1Yxa3U2K2s5Y1liYzk4M3dpcGY4L3VlNjZUbi92K0dMTkJ2NEE9IiwxMzU4OiJzaGEyNTYtTk9yVGkzRmMwRXlHOW9EM2VHZ3JkUlVqMXNGbVZpMEQ1TWJqSUw3VHFxWT0iLDEzNTk6InNoYTI1Ni13NUtDY2czL2p1RjVSUi9YQ0s1c2pUbXR2NUJYL2grb3d2VWVyMDBvRnMwPSIsMTM2MDoic2hhMjU2LTI5RWkza1I2TVVwOG1UNjFhbm9LaDFXT2NSV1N5Nm5rK05uQzJPb1NwVkU9IiwxMzYxOiJzaGEyNTYtOFE4OTJLQUltVEZ1ZzVZM2lsQ0oweTQzUWc3MHZJZ3RxRm9BMnJLVXh5MD0iLDEzNjI6InNoYTI1Ni15SWdWdjk1a1BzNzNTRmIxbk1sSnM1eWdKeDhFMHpsK1MrUUZVam0zTWRZPSIsMTM2Mzoic2hhMjU2LWczdG5jWU1SSzdTUmVIUlR2djhSSnI0TlV6WkJpQ0N4U1hvMXRoTmFzMmc9IiwxMzY0OiJzaGEyNTYtdk1URXpKN0Z2VW1LbXJNbjl6TE1tRjA0QnU3RFNyZWJDdTVXWGY0dlMvcz0iLDEzNjU6InNoYTI1Ni1WeEsrQkl1NUZTS2w2OWNBNVhWLzQ3NnN3SnhNQVRYeUoyVkF2YW1GMjV3PSIsMTM2Njoic2hhMjU2LWNZWlNlMDBQV25ObzM3cm5ZZTJzWWhrdThHRWo2Tk4zSG1WMytxVFkyYjA9IiwxMzY3OiJzaGEyNTYtMVZFbW1TV2IyMGJtZ2M5MncwUERiQ3NMM2ZlYWJPMjBPNkpyYi9WczY3bz0iLDEzNjg6InNoYTI1Ni12dnBWbVVpbnBIWFROcWdvTk5UVnNIV214TXdTS2owd3liQ1p2ZHBrdWk4PSIsMTM2OToic2hhMjU2LW5zcUhlMjAyRU5HRU9SZFN2R252Q1o4dEhTRW5aS2trcWhtbGxnUWprRnM9IiwxMzcwOiJzaGEyNTYtSHVsREZFRzdPTVhiY3lWT0NCbDU5bWZhL0dnZzBsWlpmSkVobG9KbHZ3bz0iLDEzNzE6InNoYTI1Ni11U3NPaTJZd2dYeEp0cGU0ZGFFWk5RQmlQNkhTUG5jeEtFWW9TNUZOM293PSIsMTM3Mjoic2hhMjU2LU4yelFmNk0vTHV6enYyZktSRSt6NmtxaDBUNEhsdFhUVmFmQTRlcCs2ekU9IiwxMzczOiJzaGEyNTYtQ2M1b0ZudnhNUTNVRm1ObDhUZVJoWFlndCt3QTdDQUJHdnRXS05HTWlQWT0iLDEzNzQ6InNoYTI1Ni1sNFRYNmFwZUFDa1hwVkxYU2hxZEh5VWE2ci9sakkxalFmNWpDVVhldWQ4PSIsMTM3NToic2hhMjU2LUpxR0FiNUJxZGc1S1h4WDVFZXRJczRwWU5Ib3lqT1U1L2IxcmM2Q3A5bmc9IiwxMzc2OiJzaGEyNTYtdkhxanB1YjNwYStnZEhNVUtJL2FNSG5YbWE4L0RyZXRjaDBmTUxCRXNlbz0iLDEzNzc6InNoYTI1Ni13ckN0WFNLQS8xcDJnbFJCL1h1OUE3Y0R1Wm0rU2xreU5RT0NKN3p2UXhzPSIsMTM3ODoic2hhMjU2LStIZmgxanRhQ3dqNU1BKzVMTEtOYW0wd2RFOEd6VXRMNUU3NUxNcm5qVmM9IiwxMzc5OiJzaGEyNTYtMG45OEFvemlueE9Ua095Q3lNZjNSRjc0L3V1a0pHOEloajBtSEVrT0VuRT0iLDEzODA6InNoYTI1Ni1qdTA4dlB6aHdrZklvdCtWSU1UN1g1M2h2MDNyY0JiQVU2NzVFLy9KbVlBPSIsMTM4MToic2hhMjU2LU1IbVpSV2EwUGpMQTdzdzkycDRPdFpNY1VjRFdHRCtMR28zSjJ4OE5TbXM9IiwxMzgyOiJzaGEyNTYtYk9RdjJScCswdHhicHIvbS84S2ljTmFpM2pSeE13UUVtZjlWQ005VVpkMD0iLDEzODM6InNoYTI1Ni1qU2o5dkdIclc5S0pQdGthbG5JSkd2OHFKcFh1SzZFb0Q0VUFNTXkzekNBPSIsMTM4NDoic2hhMjU2LVdzQUkrZG56YU9zbTJldXUzNVdDSCszSUNJL0Q2WWxxSEtiY2JUTldPWE09IiwxMzg1OiJzaGEyNTYtY1BXMk1EUmZSQmpCdFZtL2Q1MVFwVUVsdzIyZjM1WDdNL3lpSiszRHdOUT0iLDEzODY6InNoYTI1Ni1OMExoZXVzMWg3L050aEVEUVh4bXZoY2xQdFN6ODdhYlVIRXg1NzE3Q2hzPSIsMTM4Nzoic2hhMjU2LTViVGIwb201V3czd2VKQm1qU0hNMEpnV01PNGtxK1NwbStVQjJITk5EbjA9IiwxMzg4OiJzaGEyNTYtYVdjRkh3MGZBaXlFWmttUEZhTlRqeWZXWlBxSk52T3VtSkYweXo3RGhRQT0iLDEzODk6InNoYTI1Ni1icGNhL0xnNFl0MUdyM3ZWSncvQmlFT1Uva2xDNm9zNVM5dWdrTnBtYjJ3PSIsMTM5MDoic2hhMjU2LURIVzBwTjFUcCtCVUtXQ2RoSFpjTytRTTVuZGRwOEUwbWNhUkNMaW56c2M9IiwxMzkxOiJzaGEyNTYtRXQ0UVRQUVlDZEtCbW1kNTF0WDU2UWhMU0lZbDRGZDk2SEZ6ZStkNXFNND0iLDEzOTI6InNoYTI1Ni1wclJpeTZZWmM5aDNaeWdXZWxBY1dTRm1QYy9FREFsLytNMTkzVkFyeXljPSIsMTM5Mzoic2hhMjU2LWc2UHBnR0xRelV4djJ1RmdOQmNhRE91UzRJaUFwZVJzNzhPbElOdHJYbW89IiwxMzk0OiJzaGEyNTYtcFlsYkdHalZkWjBwY1N6WGRHeW9hUzhFcENZWncwQnd3VEtqMDgxbzBkUT0iLDEzOTU6InNoYTI1Ni1ySzZ2TGlsU2laYkYzRzR1NDdkOHRyN3hrdEVCSXJFeWhES2hVMHdWZ3cwPSIsMTM5Njoic2hhMjU2LXowUEZMLzdWTVJTTWJkVzN2cTBpbTNBQVhXbkhLS3pEM1VMbHFLc25oWW89IiwxMzk3OiJzaGEyNTYtbUtRUGNwNkUxb0FoNk9nTTlsei9JbTFEQkRGS1VOWWI2c0JkekdPelJ6OD0iLDEzOTg6InNoYTI1Ni1CL09jU1RHVElxQ2M2UXVWZU1UaVRrblhuc0RXUEp6Q2NRazVNRk91NzI0PSIsMTM5OToic2hhMjU2LThTOTJGTHppUnN2VEVGMkhreVdqUzg4TE9Cc3FJWFlKNUxoc3orUTBvK289IiwxNDAwOiJzaGEyNTYtYndGVGV3cC93dWUvNzducjUrUVU1enZvQldUaWp4emZVSExMN2wvcVlUMD0iLDE0MDE6InNoYTI1Ni1pMmM5Uzh3MXpZbDJ2dlNGUDZtTjN5QTFNbW5ZZGN3VndZQURxWFh1MTdBPSIsMTQwMjoic2hhMjU2LWhUd2NPbHMrazluZlNMOEhnVGl1N2FkcjZKRGdBODVTWmZpQklWZFBydDA9IiwxNDAzOiJzaGEyNTYtOVNXSGQ0SGJFRTRGZ3pJSUhJN2tycWFEblM1aGxqWmhEbEFrV2N3SGY2RT0iLDE0MDQ6InNoYTI1Ni1YME5ROS9RT3E4QlVZd1J0bXdnM3FtNW9TMngzTSswTWJnOU1qNC95eDIwPSIsMTQwNToic2hhMjU2LWhSWFRtTWJTQkNDOHFWVEgrOVhVZUZJcVY4QnQrY1hETFJ2cVJXU05vWTA9IiwxNDA2OiJzaGEyNTYtUjA1UTFFYm03cnlCL2xENlAyL3ZLVUNaTDlGNkdDb25JeHd0cm5tak4xbz0iLDE0MDc6InNoYTI1Ni1POWlVNC9kSjNoWmUzSW9RMXBmZExCNmxVUEROSW9KTzk5THFkTm41T24wPSIsMTQwODoic2hhMjU2LXNMY1BwV1BVSGQ0ME9vQ3JUcWVCRkp3UTlVRnlKYk9hZ0JPVmxIVUZkWGc9IiwxNDA5OiJzaGEyNTYtNi9ZWkNVYndnaC9JZnJoMGYvdUxxWTQ5MkxDS2U5b0lZMlM4eFd1dWJnQT0iLDE0MTA6InNoYTI1Ni1PZ0FTem9jcWNMb1hSMUdPcHNYYUthZDI1QmtGdWp4Y0g4NGlCaGY4S1lzPSIsMTQxMToic2hhMjU2LUhsQy9la1l2UjJLWFNYWjdBWnc2RVBPcktsUjF3bllmZWtpbmtMcGNXN1k9IiwxNDEyOiJzaGEyNTYtZ3Zibis1QzdiVE1NaXlCZXd0dkZJU1JCb09BWVdOaURWVmpMODdJRys5UT0iLDE0MTM6InNoYTI1Ni1HYmNWOHpacC9Na1BKWEZOWGhSNjZvME9pSlpSc0NGb3NiT0s2ZG5Nb1l3PSIsMTQxNDoic2hhMjU2LVArUExmMURpRml1MHVVcTBueUo5YThSbjNtSGI4cjNYbFloT2w0T2RPbWs9IiwxNDE1OiJzaGEyNTYtMURETm5rOUtjTkJsZFpqWU85L3Z6aXZSbWhaQmk5OUZRcUxIMVpTaHBHOD0iLDE0MTY6InNoYTI1Ni1DRWhPektUWHZwRlhmdTFwL2hsWjhNZlAwNHdiMlhDd1l2cnhiZytQbzA0PSIsMTQxNzoic2hhMjU2LUM2K2tGbk1TNVFtSzhmUXUwS1hzS1pHOUFHTnpOU2kzRC8xRmQ4VXl3UWc9IiwxNDE4OiJzaGEyNTYtL0MrUzR3SEl6QkdrSmhTMTVKNlVyRkkzQXVXR3dCMU03aEVsT1haYU1VQT0iLDE0MTk6InNoYTI1Ni1UUVdDSWJhNEkzTWhKMDFHUnZLNmpUL0F4SjVGNCtNMVZ5RDJlVERFWVpvPSIsMTQyMDoic2hhMjU2LTRLL1ZvVEJxWmt5Q3JIdmRYeTNwN0o4ZkNKZ0o2YmFXaC8ya2pOQ1lIdEE9IiwxNDIxOiJzaGEyNTYtckVnT2VwYlk1emE1blA3REhxeEVlYTlIanJjNGl5aXlqQXZDRktXRnRLWT0iLDE0MjI6InNoYTI1Ni1GTkpUWW9pVG9nQW94ampES21VSnE2N1IzZGtTS3B3M0lNMjBham5BUHJVPSIsMTQyMzoic2hhMjU2LThaVHhnUjJUb2JUTk9mMGhBS3hDc01vY3ZGTXZmWDg0Z21NYktUc3JMUnc9IiwxNDI0OiJzaGEyNTYtWkVRNXB0eThvUmVYVzlkdXViV0JYNU54QVJ6eXV3WU1QbXU4U244eE1vaz0iLDE0MjU6InNoYTI1Ni1DbzJvbzZYY2huZGpTTHArL0xuaTRnSGlNd1MyWTRwTitYcTY0VVVrai9jPSIsMTQyNjoic2hhMjU2LU5QeXlBTW8zVFI5c1M4OElsWUdSSE5GUDFZNWI0VUNVeFZLWm05Wk9KMVk9IiwxNDI3OiJzaGEyNTYtR2pDMTEyZG81N1cvTEZLRXNmeE45WnlETnhMa3RzTEg3UVdZUE4xRGZBND0iLDE0Mjg6InNoYTI1Ni0xbkV4OHBtekRQOG1aT1Q5cWZtM1h5YlVzVG1VR3BndUFqNEx4aHhLMmlZPSIsMTQyOToic2hhMjU2LWJjUWc1Kzh2Y0NlVVlkQm55L0oraE9EOVg0TVBzTS9aODIxZUhUUTNWSVE9IiwxNDMwOiJzaGEyNTYtT2tDWVZveHVXK3VqMDFPSTVsZkNuVHFSM2ppaGFTQTlXWDNnM21qMytNST0iLDE0MzE6InNoYTI1Ni1qeDUzOUpTTzNwRnQ5ZHExQnA2anN2RTllQkxqQzJpbjJHUGF3a0p1NDRzPSIsMTQzMjoic2hhMjU2LXZjQkV1QUNjemd1VFhpZjdCam1FenVEQXMwK2MyN093NkE1Skd0L2c5VU09IiwxNDMzOiJzaGEyNTYtSXFmWW9uR0RvMWRxamE0WVd5MWtpS1NsaDI3MWc4eWpmc0RzbUdBemoyND0iLDE0MzQ6InNoYTI1Ni1aY0ZVMElwWXNVTms0L1FhQnkzQlVoUDQvYURZQXI5YzlJUTNUK3djQVhzPSIsMTQzNToic2hhMjU2LXJqZ0FET2NKSWVUeFJIMFcvWkU3ZTQ5SDVINHJGMjZKWUtyaUN1WFhGOHc9IiwxNDM2OiJzaGEyNTYtb0pCakk0S25GN2ZVRDJDd2VPNlFDNkM4aXFEWWg2U3dKVTNTWUJQNFVBOD0iLDE0Mzc6InNoYTI1Ni1wUzk1dEhKd3hFMU9wVzVrTFo2ek9sc0w4V25uR0FUV3YrZHV3V3lGelVrPSIsMTQzODoic2hhMjU2LVpiMVVJQ0ZrVWhZYTY3UDlNWWx2Zi9UUUJYY0IxZFBQTVpxQ3g1YnhkLzA9IiwxNDM5OiJzaGEyNTYteUd5bVExVjgwM1d3TTYxeEh4M0liVXVLWDQ5WGozbDZTbnFoWUozK3pkaz0iLDE0NDA6InNoYTI1Ni05U1FrbXlRY21Uc0pvVmpmdGRiTVdTOEF1eHBnRWw2YWZXZktVdFVvYjFZPSIsMTQ0MToic2hhMjU2LWhiRDd5VHdHNEdIM1daejB6cUJCT041TXlYSjlod2w4QXE4cWtVSU54Yms9IiwxNDQyOiJzaGEyNTYtS2FMNmlZOHZvQTE5cWx4dmZFamdTQUpPMjkrNUt1Z1E5R0ZwdjgxYzJEcz0iLDE0NDM6InNoYTI1Ni1JSFJaYVlET2M5RXVITzg3NGRHLzZZVnJiMUtGSnd3NVFjeDJYTUdFdjdZPSIsMTQ0NDoic2hhMjU2LUlQNDVvTWRjK1hNeXo4TzNPUWRhWFFOejRoS1lZb3BWUkdxSjhsTzJ6UmM9IiwxNDQ1OiJzaGEyNTYtaGo5L1JVQllvQlBEMHlTZGJWS2c3eDBodGRZMkhMK1pVdDErWXhnMk14UT0iLDE0NDY6InNoYTI1Ni1CbmFKTUs2Y1phT3hiV3VSM2J0WHVkZG1aL3ZKYkNRQmkwejZpK1ZvZk1RPSIsMTQ0Nzoic2hhMjU2LUxteE0xYXlOYnhWRGRGYVc2Vk5YUGpSYUZpYnJXSkdNb09oN1FPVC9oVU09IiwxNDQ4OiJzaGEyNTYtcWtMV29iREtxZmxxTGVHSnZ4WkdqVTQ4QlpSUFNYbklKRWN0NWRhcFQ5Zz0iLDE0NDk6InNoYTI1Ni1LYkszSFRwY2gyQjVTRnFBYm0rbkVyZVl1MTNNTHZKUVlock1MSnlyYWUwPSIsMTQ1MDoic2hhMjU2LW8wSTFjaGtzT2pacXh5NDFYSmpjc0hmTEFnTGpOYytPWmIrZEgrVkx1VW89IiwxNDUxOiJzaGEyNTYtK2Jaa2kzcXArTzFNMXVDQS9Ta2toemdOSHBpSmZDcWI0dE16NmlURnMwRT0iLDE0NTI6InNoYTI1Ni1HNzRqMmltdFpmZ0J0YnhFR1lRd0NKblhBWXNxdzJqYmRzejJDL1grOEdNPSIsMTQ1Mzoic2hhMjU2LUR2V3VlTkNMak5RKytQcXZPMXZubzltaDFOQlpUdGk2dU12TDBuZ3BJYlE9IiwxNDU0OiJzaGEyNTYtd2tiaFpQWTY5V2FjUXhGbUZxV2FyVzJzaVN5cEZXajdhZFlUSG01alU2Yz0iLDE0NTU6InNoYTI1Ni1heTM0cXFyKzBBMTExZU5UdXN4bDZ5NitxbTBxcWNJS2NkT3JkY0VWT21RPSIsMTQ1Njoic2hhMjU2LXlRZno5bmx4MTNtNmd3SGF4d2VXdndTcHF4MzVwZW8zZk1tdnJ3ckZSMVk9IiwxNDU3OiJzaGEyNTYtOGVOMS8zNmM2OWRwaStBUFZvM2Q3aFR5WHdMWlBNai94M2piV1p0MkRLbz0iLDE0NTg6InNoYTI1Ni1UUy95ZHUyUkhaU0p1WG5tZ2s2dFc1YXBoR0JyZHlsWHFTRG5RajBpd0NvPSIsMTQ1OToic2hhMjU2LUUxYnY2MGhZNjJrRUgreXh5akJLUkJwNVZlb00vQTMzMXBockdQS3FBVmM9IiwxNDYwOiJzaGEyNTYtckd4UlBBT2NrZE9WV08yWmZzWGVCdk85N1lJVEFlQlQrMjVsV0JSNWIyVT0iLDE0NjE6InNoYTI1Ni00UW1kRWxTRHNCMzlycUpjcXRGMklhYW9oWUx3enVWTVIxQmpPbzhOYStRPSIsMTQ2Mjoic2hhMjU2LW44NGNqbm85SE16TGIyM1RCdEQ0L2ErTCthZXF5MU1rM3JWbjFQK1hoOTA9IiwxNDYzOiJzaGEyNTYtTlBXZG90cW5oREdxbHIvNEpxTlhoeVk4MXVidHJRQ3AwKzlUeGRjN0MvTT0iLDE0NjQ6InNoYTI1Ni1oRnF5QjZVUVBSUnZISUNLSGIwL1R3QkprbmIrK2dPdTNQYUNpK0xNdEpnPSIsMTQ2NToic2hhMjU2LVlnQlRiOHhkNUp1T0sxUlFFSHlWT2ttWXhhT1ZmbElKbnFJOEZHVmhPSm89IiwxNDY2OiJzaGEyNTYtYmxIeWVPR2lvaXFHQm55Z1FyaTQ3SlpDUjlhaHl0V0dKaW8rSTNld3F3TT0iLDE0Njc6InNoYTI1Ni0rNDQ4VEJuN0FPZUczUXhmV1dYYVR2Z1ZpSFh3RUd1YUlEOEdycW1jUkd3PSIsMTQ2ODoic2hhMjU2LTVFc1RoQjdaWC9zYTlYUjBSREJCOFZaM0p5cGQrY2tIb21NVWtPY1o0VVk9IiwxNDY5OiJzaGEyNTYtdGt1ZE9GQWpqNGUzY0NoRWJ5eVpjdHN5RE5Hb1lWYzZId1VWRUhmWnl2ND0iLDE0NzA6InNoYTI1Ni1JVnB6TlRUQm1Wd3lLaUJNNXliMGJzM1l2SFpPL0ZpTnN2RFIvOUdRcG9vPSIsMTQ3MToic2hhMjU2LWRSOTFCcVN5SEFoY05zVDNPdTU3ajUyMDBjYzFrQm52VUZ0enNaNXpnVjQ9IiwxNDcyOiJzaGEyNTYtdXI3WXQxOTc3WnVES2h0ZGJJSnVsQUVCTlJFcS90bzVZUi9mdnF1U2F2RT0iLDE0NzM6InNoYTI1Ni1rRC9mS0tZbHJqNGYwcHVua01WYmRNSVI3cTViemtxRjFTeEljSTdQbFlnPSIsMTQ3NDoic2hhMjU2LStuL2hlbS8xOUpzZkxZWUM1SE1zTUp4SDBnZytQakZvVmdqdHpxSDJRSWs9IiwxNDc1OiJzaGEyNTYtemFGR2xVbHgwclpHdEtFTkhOQ1EzUDlGSTFINzQ3c0F5VWVFRDdHOGo1bz0iLDE0NzY6InNoYTI1Ni1MYjl1blFUWXJvV2lueDhrbWF4UWNBZytJMm02YUoyUEw0Y21tQ2ZwZlRnPSIsMTQ3Nzoic2hhMjU2LUhsRnFxSlQ1dFA0Mkt5dllnUnNQZWx1aHJrUHFqc2hyWUttQzdKVW5nRFk9IiwxNDc4OiJzaGEyNTYtUkQyOVpSSHJ4WHpBbTlKSHBRazF5QjNRemw0RUFRS3pTUUNpanhpV0ZWND0iLDE0Nzk6InNoYTI1Ni02M0h1Ri8zSEY4cDQ3dVpaS1BVUlpjKzNzOG1rU2JpeHJUbG5WU21BK2M0PSIsMTQ4MDoic2hhMjU2LXVtZWFlb0g4Z3hZQ2diWXBJa2lXTlZFYlcxa1dUbG9DTFo2b3F1VVhlTUU9IiwxNDgxOiJzaGEyNTYtcDBwZTEwYTRISkw4bGpWKzdXUTE0dUJDZEZNbEM0WUNzZm1CZ2hCNGQ3UT0iLDE0ODI6InNoYTI1Ni01NGZBbmViS0kvaGZCRGZWQUw5RDJjOTJLU3ZXd1Q0WkxZdUxlV3ZFVmNjPSIsMTQ4Mzoic2hhMjU2LXFBYWtzaThJMXNhbzdtanFWb0ZIRmFKWXBoa1BDTGtrbkJZNE9nTFJ3M009IiwxNDg0OiJzaGEyNTYteFJQb2hIWXNUaEtkaVdjR29JSWhESUJSem1Kd25qNWw5MkQ0ZmVQa0NQbz0iLDE0ODU6InNoYTI1Ni11SlFCMmlKQ2I2bHJ2S08rUXN1WmFIK3FpTjE2aVYxT0VuK24zcHBlT0hVPSIsMTQ4Njoic2hhMjU2LVYwdlVkanowdGFlU3hySmJsdE5teDEvWExhdnlFRXFLVzVPNTZod2x0cms9IiwxNDg3OiJzaGEyNTYtOVpsUElDN3NTRUFZVkZ6VXd6NkNGTDhWR05OaFhpNWgxUFgzcXJzd2Q0ND0iLDE0ODg6InNoYTI1Ni16VG1Ud0JqM0tWNGNvTDlqUWlJc0NlK2plem5DbnA3STdpcWhNV1B2VkI0PSIsMTQ4OToic2hhMjU2LTRGa0N0ckR2aWt0N0tOcG1iYVFXVFd3Qnp3WlRTMUhqd1R5bjFlSktoMEE9IiwxNDkwOiJzaGEyNTYtaGdXU3NRUU1iNVBsZnFoa3VOd2hFL0NwUGJVcGZqSGRoZHJHMGlIdW5QYz0iLDE0OTE6InNoYTI1Ni1pZkZVS2twTkJrMVFCbkZ2VDdKQTZoY3h4eEcxL1F2QjZ1M3UvNmFzR3lRPSIsMTQ5Mjoic2hhMjU2LXpFTStVcGlMRjJDU3FXY2R3aFU1NGNuZ0RqK0g2TTVlZ2c4YVl3YjRmQjQ9IiwxNDkzOiJzaGEyNTYtS3ZhYVdvenJVRWZLcmNmRDRpK0NtRGF0Mml1aXJaZEdLdFU1ZGJZQ0Jadz0iLDE0OTQ6InNoYTI1Ni1OUXpQeTBqazVVL2l1eGowaGVPZnlyekI0M3pDM3dsdkxRWkFuS003SDdjPSIsMTQ5NToic2hhMjU2LVd5SjNPZXIyaXpUZ0hva2RPZ1JtSi9VTlpxMkdOaUxEaDFydHpsRXFZMjQ9IiwxNDk2OiJzaGEyNTYtNjJXSkJtTDZmMDRZZlJvNU1uUkI4SXU5eXZBSi9jeFdpODlxNE5Qb044cz0iLDE0OTc6InNoYTI1Ni1VMGo0VlV4ZmhrbTZmWWxUa2tPSVdHUktmTUVoMVFBY3lTS25GUmR4KzZ3PSIsMTQ5ODoic2hhMjU2LWZORDIxck5ob1kzVGdZa2tvUDBLY0cwWkJGczJyTGUrQzFNQ2Y0VmFXLzA9IiwxNDk5OiJzaGEyNTYtYXY4S0RVcm9KRGtUQlFUQy9aeGJCeVpTKzVuZy8yVzQ2bDNwMFozMmZhUT0iLDE1MDA6InNoYTI1Ni1HWmRVeFVTVnhxb3FiYWRsbEFrU1UxRDUvRjVxSHlwQ2NUbnJCZGdDc0lNPSIsMTUwMToic2hhMjU2LVVMd1pZSjUvSXJuRi9sODJjcGJrQ0oxclNNTkFDVmNzYmN5TEhBVU16MGs9IiwxNTAyOiJzaGEyNTYtcDMxcGFhdjFjd2ZqM2dma3Rya0ZDc3FZeTQrKzNaV2hlK2RUN2M4Ritkbz0iLDE1MDM6InNoYTI1Ni1XdDN5TkluTzFHMVdvRWZrZERkTnJLbU9XR0ZyeGcwMHBjVDBydFBPV0ZrPSIsMTUwNDoic2hhMjU2LVVVekVPa3I2U1ZaSkRQcXRIaHgxYm9iSjN3WnREUFpUUWFDMWxna2t1Zkk9IiwxNTA1OiJzaGEyNTYtRko3YTR1eURPZmdXZmp5Q0svbmdGbHBBcmY2OXlvcmhjVnEyN3F4b2Q0VT0iLDE1MDY6InNoYTI1Ni1rQmxXcEhUeWhmMEtoanBXQlZ0R3d4Vi9NQ1RUb2ZBTm1ma01ybENUY29FPSIsMTUwNzoic2hhMjU2LVRKYzZyUVV1enF4clp3V0JhVnV2QmZ1b3dwTjZzNjFYVHM0UXQyWHRPM2s9IiwxNTA4OiJzaGEyNTYtOWNEcXg0ZkIwbzBOdUk2eGtwNFB4RmJqZmg1SjFSZWdqeWtQWTJnbERYZz0iLDE1MDk6InNoYTI1Ni1DZXd3K2JSYldJSG5NcUdrb2Jxclk2bkVhUDhzSmhvYVBKV09rQnk5eVowPSIsMTUxMDoic2hhMjU2LWtUZ2ticmZFU1lrTU0rWm5maGRpYTB0K0p0blBKWkxobjExTWltcmpvVW89IiwxNTExOiJzaGEyNTYtK2xOajVBYzJxSXhUQ2tZTG1uT05xU2JLRmRRSUY0K05SektIc1gvaCs4bz0iLDE1MTI6InNoYTI1Ni1Zczh3WXNmRHA1UUg2eVNPU0NwMURTU3E4NjJ0c1laMDEydkY5a21wVlZVPSIsMTUxMzoic2hhMjU2LTNtYTl4dXhTa1E2QVk4UWljMnZiZWZGVS84cUtKcXN4MXlINWx3TFF5clk9IiwxNTE0OiJzaGEyNTYtaEZGR1ZmbkRtWFZrMFdWU2xqaTNhS0RWS1ZrZTlkRTE5NW1udFprcFlIUT0iLDE1MTU6InNoYTI1Ni1HaG5Ma3Z3cGcrSnduZWE0Tkg3clhLSysya05LRDZmaUF5ZTl1MUNXSnZzPSIsMTUxNjoic2hhMjU2LUlCRnFmczFONzR3eVR0U2p2elZ5NFN4akE2eUpJYmpMb1ZQSXI3dHRnb2s9IiwxNTE3OiJzaGEyNTYtU3ZlSTlYaURCWHVZN3VrM3haK3U5dldGZWJGWHVSQktvY0RMNTFxZzJVWT0iLDE1MTg6InNoYTI1Ni1EMVU3M0lyN2ZmS0dBN0FoNm1LQ1h1cklUL0RHYWZIUnJ6WmJFTTdhTTFnPSIsMTUxOToic2hhMjU2LS9VOUxVQlJ6SmxvNUZkSU8wQ1BCSC9OMjZlNk9FVUsxd0lFZGtsOG9sWVE9IiwxNTIwOiJzaGEyNTYtSjVlSUw1aUg0NEtEQTRXSWVleWwvRVJ0UmtHbEFzVzdWOVlrZ1JQcElFZz0iLDE1MjE6InNoYTI1Ni1DbURhVkJEZ2luQ01aaGxtbnNQWXU4bzlwbzRCTFdCUThBZ25zeEo0SUQ0PSIsMTUyMjoic2hhMjU2LUttK0pJVHpDYmZsWU5pNmp0Y2RmMmJWUEtxd1YyWkZNUE02SG9oSk5vZVk9IiwxNTIzOiJzaGEyNTYtZUd6UzJBeFp3dGxHcXRmUnFBVFdXdWdsQ0VMSzBFcXA5SUUyaUNKeW04RT0iLDE1MjQ6InNoYTI1Ni1kRlBYb3FwYWFBN0tOUG1tcmo4LzBueXpmOUprbFNGYTlpTWhERE1BbUhJPSIsMTUyNToic2hhMjU2LWpaUGVDWDlqYklBVFMxUy9adFp5c2V5WWlHNTRBUjZtZDNERy9PVzEyQzg9IiwxNTI2OiJzaGEyNTYtVWd4N2NIVVl4S3J1L1FDRFN2OEgrRTdxV0hZb0FmbXVkaXBZbnduNUpJdz0iLDE1Mjc6InNoYTI1Ni1rVEE5Z3RzRUNpcWtFWk84cXVZOENVNk8vQXkxRm5UYnFVOG5WZzBXQkV3PSIsMTUyODoic2hhMjU2LTZuWE1HNWtFN3JZRjVwcEFYSkRjTE5kV0NFelJwK01PR0E3U2x4UUlWZlU9IiwxNTI5OiJzaGEyNTYtSm56a004T2w1YkI2LzZUQnJBQTVYM0NLcWdWaUIrdkMvSHhOaFhYdVJzdz0iLDE1MzA6InNoYTI1Ni11M3Vqc3JkREwwMFY5ZExrSGVaT3M2K3NLcE00YXd0a3ZmUnZHSHpsVUVRPSIsMTUzMToic2hhMjU2LUFkSFppNXQzRWtNUWJMSVZBd281c2JGRGphVjROalNDdG9kVnFLWDQ1U1E9IiwxNTMyOiJzaGEyNTYtcVBrVGhFbkFvS2xoSWV3RWd1d1FSY1JSN1Y0aHluWjd0TytDN2xLNDAyMD0iLDE1MzM6InNoYTI1Ni1INHRHV3VwM3dsVVpDeUxCdktMRFpRWkpyMjAwcU1HTFQ1UWtzVWZ5Y0xjPSIsMTUzNDoic2hhMjU2LTdrSXpxRDhJbDJQM0hjSnNPSG95d0RralhxUGNNNFd4L3NiVnh1V1RlNU09IiwxNTM1OiJzaGEyNTYtMFFYVU1DZ2UwWXBFb0tUT09pZWJTY3UvNWNvaCttRTZKdXM4OC9sK2lCYz0iLDE1MzY6InNoYTI1Ni1YOWVMSDZIUkhEck01RU5IL1pkMk03WkZQd1d5K0J1QTI4Q3pqUHB2VTg0PSIsMTUzNzoic2hhMjU2LVdNQkkxM3FGTDlEaGhESzBVaWZlWmRYOWxpZTI1T3lGODI2L2V5YzhSdTQ9IiwxNTM4OiJzaGEyNTYtN0tHcjZJWUVTMjdNL0V2eVVza2ZDdlJ0VTBQOHJhVFpubFZXS09lMC9TND0iLDE1Mzk6InNoYTI1Ni1yN0U5UER4WldsSmQ5WjhCNTRRQWVWZDlwNWdudFArYi9LMmlUSWhOQmxVPSIsMTU0MDoic2hhMjU2LUdqbERmUDhFR3l5NE0rSU9rQ0Nrck0wVlhoVnF1YjZrWDR3VGlZUHBKNWs9IiwxNTQxOiJzaGEyNTYtUEpwOURoOWp0VjFCOGU2dzZBZ3hOZmo2cDdzbUp5dFNSaHZGWlNpU09LWT0iLDE1NDI6InNoYTI1Ni14UkRRYkdNL1luTzVQdldFZDJjWnhCSGUyYVRQSHVkb1hiOW1XSW5RQjI4PSIsMTU0Mzoic2hhMjU2LXl6SDdoOXRqWktQdDFrUnVLMDZvZEh6RmsrTDc1aGdNVGp4eVVlN1VvcXc9IiwxNTQ0OiJzaGEyNTYtSGVHQXdKNjRyWDhHUnpKZmV1cGJhcE1FcVovTkg4WUhwL2Rsd3VPRkxQaz0iLDE1NDU6InNoYTI1Ni1xK0xaZ3hDNUlvTy8zSnkvWWZmTEJVTy9aRnorL1h2bnlsQ0V6bnp6MDVJPSIsMTU0Njoic2hhMjU2LUQyY3ZpbWZzdFBLSUhtbkVmWkExb1oya0dOczZCRzRmWHUvaXRGN2h1M1U9IiwxNTQ3OiJzaGEyNTYtWFAxaDN1TzA5VElaWC9ERkd4N3dtbTA5Mkhrb2FyY205OFV4T3RXbVN5WT0iLDE1NDg6InNoYTI1Ni0xaThYZlplZWJKTmk5dWpUUkUxcys1TWlJbEtOdWNwZ3ZkcEkwdmprUE1zPSIsMTU0OToic2hhMjU2LVZPZ3l5dVg0Q2RGZDdOemdKcitXWmtDZ0hRN0g1bm1RL1JSWkpBTEJRZU09IiwxNTUwOiJzaGEyNTYtTklDVXRmS3ZFMHpnN0dIbnpLMGxuNmM0WlpWeVJ1b2JmWFV0ejcwYjFiND0iLDE1NTE6InNoYTI1Ni0xME5RWEEwTGw5R1lLcm9EK053QmF2NkpRZFBzc0RwSFNsbjA0T3grSy9nPSIsMTU1Mjoic2hhMjU2LUdvL29yUmFaOGt5MGJuWVcwQW42Skh6UkR2a2dNM1JWVzJjQ1hFSHBKYVE9IiwxNTUzOiJzaGEyNTYtRFlZb1FkVmVKdVdUdnRpQVBEMWxCaUk3MldYTTlieFVlQWwyaDNGa0k1MD0iLDE1NTQ6InNoYTI1Ni1Db3plajNlcDVKd240Ym5YSU5IbGhEMlZEUmQ4VkFiQWNuYXJYbU1pcEV3PSIsMTU1NToic2hhMjU2LXZMelFoZzUwN0duOHpxRlQrVVA3M2ZhVDNvaEt5SUlpNUwrL3NMVnVpZVE9IiwxNTU2OiJzaGEyNTYtUnk4RTVHRWYybWx4RkJWNEhJVFRIbWVlYTByNEd2RlFVd2dWcW5pZEJFUT0iLDE1NTc6InNoYTI1Ni1TRFVic2txYTBCb2pEbmJWZ0tIMjRqY20rekQzRGRodCt0U0FhQmM4djc4PSIsMTU1ODoic2hhMjU2LVJKbGNvdHFsam10Tlh6K2JKTDFWc1ZBak1mSzY2cndsSG1FK1FlTWY2bVE9IiwxNTU5OiJzaGEyNTYtTmhUa3ZvQzVabTNpZjhHZXhtampWS2R6OGhtcFVvZ1pRZWcwdEJINzJVQT0iLDE1NjA6InNoYTI1Ni1VRlFUUWpLZjBBUGxKQjUzUk5OT2I2YkcwRnE1a2ZWWXpaL1FWYi9NU3ZzPSIsMTU2MToic2hhMjU2LVZTWHVPbWZETUpVbU14NTJJaFExbEhXSXRLYVY3dFhUYnVqcmxOR1NGMGs9IiwxNTYyOiJzaGEyNTYtWWtoRTBNWHJqVjF5b2pjSjZDeHhGemQyUnFFckZySjc0ZGtwSTRXbzJvWT0iLDE1NjM6InNoYTI1Ni01MHp5dGtBaVhwMWlFS29EOWF2aEptKzhXbW1FcVBHaDg1bkkxUU9adC9FPSIsMTU2NDoic2hhMjU2LXFuYWZoT1Q3OWRvRG0rNGFoRVhVbzJiY0RaeStFUmpiOFUwR01OSnRKMms9IiwxNTY1OiJzaGEyNTYtVjlYSE0zLzE2OFB1a3RHSGVoRWxOUWtMRWZqSGFtTC8vYVl0eVpMWC9qZz0iLDE1NjY6InNoYTI1Ni1iU2dIbVgvYjVsYmlMek5IYk5Gd2RvN000UmtpTkxFNUR6aW9rMk5uVnhrPSIsMTU2Nzoic2hhMjU2LVhhR25GYUliRFg5VTQrckdsd2VudENRZlNCVU03TUcrRlp6a3FxWGswdGc9IiwxNTY4OiJzaGEyNTYtWCs0czQ4NXk0b09aeXpOUmJDdmt5Sk52b21FT0o4WUFoRTdYUlhjeGVKZz0iLDE1Njk6InNoYTI1Ni1WVU5jenIyM25wVTFlZnRrcmNYMk00ZVBhMlJCK0U4RUVvZGRZcUYvNUtFPSIsMTU3MDoic2hhMjU2LXJKTjZ0NXpZaU9pNmgvTmRJRGtMblFEZU1pb0UxVGZyNjg4QVV2VXE1OVU9IiwxNTcxOiJzaGEyNTYtaWhVQWhoNE5JdW1IcWRYK0VKZ1BkV2FEa3F2MnlQMEpQWFR1VlkxV1p1VT0iLDE1NzI6InNoYTI1Ni11SzNhS2MvQytJRGUzWk85M0NESmhTREozQW9tdjVMZlJBLzBwWHVnV2VFPSIsMTU3Mzoic2hhMjU2LUZSenM1VlB1QmlWKzdQTDRVWDQzMi9tQlVLc2dObEQ3Uzd0c0FXZ1JTbXM9IiwxNTc0OiJzaGEyNTYtWUJRd05LbjhhQ2x4WUZDc3VMKzJGYnYrbXRJZlZRMTB3MUozWVFvTFgwST0iLDE1NzU6InNoYTI1Ni1JbDFKNEZ4bEMrU0hhQ3NraHM3WWR2U3ZVQiszOWttdktDcUU5QWpPRG5JPSIsMTU3Njoic2hhMjU2LTVHQ1hxNmsvMDdJL1FyaUltc3JrdmVqdXJvYmhha1daQVpyaW5LanhTYUU9IiwxNTc3OiJzaGEyNTYtQVpvc3RaZ0I2VklraU5ZNE5oQnJhUGNzSkQzY2RDalR5U3pBRWhhbkFDYz0iLDE1Nzg6InNoYTI1Ni1BWDhqRmlHWTNneGIyQnRiMUxCdy85d3dib01ZT05oWXBSWFNZeHZlQUdNPSIsMTU3OToic2hhMjU2LWlOcHdEdVk3cGhKaW1pOWVramkwYXZUNUxuOUVxemt6YkVLR1JWaFJueW89IiwxNTgwOiJzaGEyNTYtd2ZxRWNXL3F2TUlnWkNvL3FpTitHYnJTMWtwd21jVFhGSDE0TitlUHkwdz0iLDE1ODE6InNoYTI1Ni1QQkVYSDdOSUVVZCsrNGsxazFYWDFDeC9xdGl3NDBTNVhOWllMUERTOWxnPSIsMTU4Mjoic2hhMjU2LU53S1BnMUdmKzR6YnpNWmZJTU4zRjJwL1NLZm1jejJ1SjV5NUp4WWZ5WWs9IiwxNTgzOiJzaGEyNTYtTmlaTmU5MnYvSktWbjAvNW9UYzZpeHpDWW1sdlF5eENMcUNLa1ZnK0VnTT0iLDE1ODQ6InNoYTI1Ni1Rb1RINFhzZzJVZ2VSRmlSTGVNaXNKVXQ1NjRxYllWVzJKZmlBeDlmT01FPSIsMTU4NToic2hhMjU2LTBiU3VBOERFNEdjL0FzaHdseVhGdFBrOTFjQm9teXhtZnZQVmE5QU5hZlk9IiwxNTg2OiJzaGEyNTYtMDNiTHdDRVQ2MkF5azYwUTNDaGVWZ3AzOW9GMzNPTWErZjlsNUNmOCs4Zz0iLDE1ODc6InNoYTI1Ni1zN3h3d093R1ZHYUFrWjRscWsxREFrSENBTDNTellxM0w5WE51bnRMMzRJPSIsMTU4ODoic2hhMjU2LVIrcVZvV1dnaVdoQXlNS3ZzVDRQZnhQOC9yQjR5akx5VXpjZlZDYnlMRjg9IiwxNTg5OiJzaGEyNTYtYy9nbTVBTDJwWURHZ0N4SFlZQ2VaTUZWUkhsejJ2STFBOHhCZVRhaWM5Zz0iLDE1OTA6InNoYTI1Ni1id085bzdkR2JnOVR6TmhEbVZZWU84SlYwQ283WDQxOUkrWFJyZC8yclZjPSIsMTU5MToic2hhMjU2LXVBaGJ6V0pGRG5XdEc2bzNNbGxENFdnVGx1S283ck9uKzQrbnlET3RWZ0U9IiwxNTkyOiJzaGEyNTYtNFkxeTVmSVNFWDRsbGZjMU9DNzJMMHdDYlNXWkpOMHlINzNROWpWcmZoST0iLDE1OTM6InNoYTI1Ni1RU2VBUzhiamVvaVZIUjJ3dldXQVVyUVQ4by9lcmVWanhCOFdwaWxteWdjPSIsMTU5NDoic2hhMjU2LXZSbW13dXZCcXRJdVIxb3AzanNQR2IrUXcxb3dOOU1Pd2psdUtZb3cvZHc9IiwxNTk1OiJzaGEyNTYtNGUxSkR1TXZBQndZekNrdDBYaGx1TStxS3dza0N3dGtRcVpQdnFGbW5uQT0iLDE1OTY6InNoYTI1Ni1ZMEpMZGdvblRFVFhQcndGcHFRdVgxT1YzNU93cFBOM0dPZ1RZTE9aSFpRPSIsMTU5Nzoic2hhMjU2LVI1Qnk0NGlQM0dUQVk5N1BQUTFJc3o3aVIvQTRWUFg5em1pMjZKbThwZk09IiwxNTk4OiJzaGEyNTYtZHZWazhhaHNucmN0WnpPTEIrV1pZdmdMSVk4WGlCSkNaUFpmR01LajFqdz0iLDE1OTk6InNoYTI1Ni1wdTNJMjVNdEJRYmJ1WThsRmJEclRQZ1haYjNuRUVTVEVGbVhpZWF5RG5BPSIsMTYwMDoic2hhMjU2LStPdnR3ZVp4UHd3dmhFNzM0SXprUFBBL25hREN6OFU4Ylo3ekx0Q0lMRlU9IiwxNjAxOiJzaGEyNTYtVy8zRmZNUEhhNkx3dldpM3FoNW5xM21pdmVVaURVMHVtNE1VeDBhd2lFMD0iLDE2MDI6InNoYTI1Ni1iZmgrTnZwSmoxZG5nTmMrU3NKVE5lb2tQZXhBUnVSdVVjVEdMdVpEM3RJPSIsMTYwMzoic2hhMjU2LVFsVUNXN1oyS2J5bTdjcUhYQmlHTEJMaFdOOE5nTzBNQWVlRGFLcFhqaVE9IiwxNjA0OiJzaGEyNTYtOHJIL2RFdHFJZnJzaTdLTXc3V0dTRExjTjh5WkovYTlJRUZCSnQ3aGNlTT0iLDE2MDU6InNoYTI1Ni1MczRaNUV3RXV4WW42bHRraW5JMWhKa1hFSmhpaTltZFVhbWVUZVVQNzZBPSIsMTYwNjoic2hhMjU2LVN1dkcwWmE4Qm9oa0tGNFVyMjJraGZqSk8zS2tWZWxVM1BkeTRHTGQ0dHM9IiwxNjA3OiJzaGEyNTYtdkUxYVlJYlo0MXplNkJGN3l0SXVnOG5qQWZ1MTZiNEFUajdTMUlvSjMyWT0iLDE2MDg6InNoYTI1Ni02djVFUGpvR2JjQ2tGc0IzZnRaQ2JCWXpabm1GaHVDV2xjaW9SVUdoc0M0PSIsMTYwOToic2hhMjU2LXJ0MFhvU2pBaXZ6bzVueEd6RkhiTytMdUdxcGJXN1BMOWtnN0hPYS9HY0E9IiwxNjEwOiJzaGEyNTYtbVp3Y3RzS3JKcXAzR01KdEFrdlh5MEpYZHdvUHpZOXZISXRPZXNVRUlCdz0iLDE2MTE6InNoYTI1Ni1rMSs2b3pjYnMxWkVjUnNGajduT0twcXpYU05MY0RTaG93blU0aklWOW1rPSIsMTYxMjoic2hhMjU2LWttNk9LMkllc3hCdXI1YWFLL0tLdzNIWnpJbkRSS09OVlVZQ0Z0ZkdrZDA9IiwxNjEzOiJzaGEyNTYtd3Q3K05qREVhTjVFMmF4QUl4ZGQyaDlaRjAwb0RKaUdUSkV5VVV5QzBraz0iLDE2MTQ6InNoYTI1Ni1vbHhPRU1nYUs5bmY0V2IxT1dGdVplOVVyOTN0SmVDN0U1VHQ1SlhqcUVVPSIsMTYxNToic2hhMjU2LVVMN2x0NllTN1MvZFVUb0FEbGxPSFcvdjY0MUNZazhnckkxTk1qb0thK1E9IiwxNjE2OiJzaGEyNTYtNThSUitNakZJbjBtZFVpOEJBSi9BOEVsZzFacUdHZk00ZWZWSFdBV1YwST0iLDE2MTc6InNoYTI1Ni1FbFlucnFoNTEvYmluVnBYZnNyM2tvdXl0ZFBXQXdpOHRTV2o1RWp3cndRPSIsMTYxODoic2hhMjU2LXZXVXB2bVc4UmQ5YUZDNmNCRGllY2dDR2k0M1ZPN0IwTGc0d2xlakNIWGM9IiwxNjE5OiJzaGEyNTYtamZ0NlNhTGl3N0d3aU0rSG1mdDlwbkhYK2xTSkNVT0sreEZiTFRUaEVjYz0iLDE2MjA6InNoYTI1Ni1IeU01NnUvVjBkUDNaa2JlTjhieEdoOGMwVDZoYUdPTmI1VGxIOENpaW0wPSIsMTYyMToic2hhMjU2LU9tb1pBcXBzaE9SZFNveVF5NzZNK1JJT3dMOXRLK2tTU2pZOUlpR0FwL1E9IiwxNjIyOiJzaGEyNTYtVC9mSTNMZFpHOE5laU9YRDlEcTc1cHNXcUhkdE5Na3dOME5FbThnL3JkQT0iLDE2MjM6InNoYTI1Ni04dm9qNlFkZ2NYdTZHMU9oam1vZWpZcEVpZTBiZmpnbnpTSVNadDhvUUlvPSIsMTYyNDoic2hhMjU2LThJTDlIdWlUYXpVUjlzczI5OGFZUXIzbjc4L2szNUlWamRQa2RrWkp3TU09IiwxNjI1OiJzaGEyNTYtdktsMWJ5VXkrMHJkNlprTGRzeGpxRC92MkVXS1NnMWwrRHczK2lOeWIzRT0iLDE2MjY6InNoYTI1Ni1zQ2ZvNTJwdjJGNHV6MzV1R0ptZWRpSWhTdG50aVhLcWdlVThxOW1hZ0cwPSIsMTYyNzoic2hhMjU2LWZUQXc0NUxlcGQ3ekVOaThWNGZiR3VqSU5OVVZEQlptVzVpaHM0Y1F5M2s9IiwxNjI4OiJzaGEyNTYtV0J5STgzYmJqZVVZZWFyZHBzcGEvMjc2OXZJQm8rNzBTSldyQnphR2Y0Yz0iLDE2Mjk6InNoYTI1Ni1USkp2K2IvTWQ2b2FGZ2dtbjM1UE51OWRDUHFoVStDWS95M3dIejB5NUs0PSIsMTYzMDoic2hhMjU2LTlBcTJxblYvV3kvVmZiaVFZNElNK0l3bmZ5THk2bnJIdVVaYjliWm5TRXM9IiwxNjMxOiJzaGEyNTYtQWh2alB2ZEhiRFN0bm9UWXoxdVFHT3NlRENrdHM5cEhqVTNjVjQvN3c1dz0iLDE2MzI6InNoYTI1Ni10Zm5haGw0a3NPRXJSZU9lbmdHUjhDUkhOR213OWZ2TmJjWEFhcG1uSThVPSIsMTYzMzoic2hhMjU2LWhkVkdqUHRYeUVpNzZsYy9RWWZrZlBmcGQwMVVEbmJHVGdYWHJVSXR4WnM9IiwxNjM0OiJzaGEyNTYtd2taM1dWMmxsVWYwaGZMSFZJUFlaUEx6a2FMNFBOdUhmS2NyTWg0eDZZcz0iLDE2MzU6InNoYTI1Ni1QaTB1ekM2YXp5bFFGRGZVb1U2TXRIZCtoUE5HM1VBY0tXTTdLR0l1ellFPSIsMTYzNjoic2hhMjU2LU1ocHJhbzZTbGUzZjZzdEFTMWVMcCtSYkR0aEwyNE9Ra3hsT1Z4YTk0TGs9IiwxNjM3OiJzaGEyNTYtRXg3UWM1U2srSkZJTVdFYkJDWmRka1JZWEpwM21SdE5BVXZEa2RyTTJGST0iLDE2Mzg6InNoYTI1Ni05RUovRlQzdG42V0FpMzhsMmFHOUdtZy9zeHBjb0Z2OTVXQzFndXRsd2dRPSIsMTYzOToic2hhMjU2LTRYNlpSTGVlbm5lTjZmbjNVWVhHM21Sa0lDMDVIU2Y3WER6dFV6WkpHRG89IiwxNjQwOiJzaGEyNTYtT1J3VWE2bjdod0dCQk1STlZKdFU5VnA1ZDhGUVoxV2NUMUlZaU14U1JaVT0iLDE2NDE6InNoYTI1Ni1abzdxOWZ2TEU2WElsZ0hvSDJkQytqdE1EZEdDcFJ6MVZwUW4rZmZVZGdRPSIsMTY0Mjoic2hhMjU2LXpyQnc4d2RSVXRNcUNRTzduV1RwZ0Q5RVd3U1lsYU12Rzg0RGo0WmVHdGs9IiwxNjQzOiJzaGEyNTYtaC93aWV2SUovcU1HaUhXZXoraUhQRzVKajNnOHVNakFncUhuK0V6Vmcrdz0iLDE2NDQ6InNoYTI1Ni1udTBKRW1EOERuSVBQMmlNRWVGbm4xNkJ2bzl6QTVFUXNSR0xaMmlsMUgwPSIsMTY0NToic2hhMjU2LVJaYVEzeWZBVDliYU85U3lEWEdLMjBTYmg3Wmt3SmZMOGI0MzltVGFJVVE9IiwxNjQ2OiJzaGEyNTYtVjdUZzd0bXdBOUhncUExMENnV2pNWjhWbjZBaWkrMDNnVngwODFzYWlWRT0iLDE2NDc6InNoYTI1Ni1jWjN2K2ZMOFRHcGltK2xob285c0dCYjROcjJFWWYrNHAweVVTcWh3eVNFPSIsMTY0ODoic2hhMjU2LTBhejZTQk9sUDhyRURjU1RxKy9LdENGUjN5UnJmUE9yRkMvRnlXVVczaVk9IiwxNjQ5OiJzaGEyNTYtSTIzcDE3cUZ0eGVEQVh5Z01xdmxicGpGUC9kTVVvVSttQkZZQXRYNmFhQT0iLDE2NTA6InNoYTI1Ni1MTWdub25ScnBvTlQ5ckY4UVpkZ0ZlcS95NVozRncyVzVqOVl5ME9xcmdjPSIsMTY1MToic2hhMjU2LWQ3WUtXQnFsbklkbmFvcDZRM2RNbUUyYWY1djA0Z1duQXZnbGcvZUVMVWc9IiwxNjUyOiJzaGEyNTYtMUVJQW9BeStHTnJna3lqbVJPdldTRWRkOW5naUNGYmMvdnBpUGswOHVZWT0iLDE2NTM6InNoYTI1Ni03R3Z0SFNPKzF6NmdVcEpXQnpHZ1NkdHRvRjVRSm9XSnN0bE1WdkRSZE40PSIsMTY1NDoic2hhMjU2LXZNamsxaTIxU2VYbWMrNTRxSUdDTXZhOWdpWm1INS9NRUNqeG9nYjIvdjA9IiwxNjU1OiJzaGEyNTYtOHprS1VGWU5LcUhkWk5xVjlaY2dLZmpXN3BnaWgvRTBveDB6NHErcElTST0iLDE2NTY6InNoYTI1Ni1qRGljMTFmNHFWNDZ6MEU4emZHbEF0aEJDeno1ZEcxaTlLaGthei83TmF3PSIsMTY1Nzoic2hhMjU2LVlVa0JXY0NqZWgyWlM5WUlLQUxpTzd5SHZsdTF2d05ReEZyQ0lXK0hMOUk9IiwxNjU4OiJzaGEyNTYtUVRLSXlkU2hFWEcrRXViaURTUXE1OTBTLzF2YjU3eXBxc1lXNUl0MzVHND0iLDE2NTk6InNoYTI1Ni1UdHdQbHJNYnRrcVU1VTh0VHQ1RlpJTXZCdmFGMHB2dnBzVzAwRFhHTmlvPSIsMTY2MDoic2hhMjU2LVVNemVPVk9OemhmK1hWZ3JwOEJMT2xRQ3dOSWZhZTFQRFEwME1nUFY3ZlU9IiwxNjYxOiJzaGEyNTYtUFVTSGZMcGtHdEU2ZXcyNGJQOWg1Y0w1RWtKL2s1MitsY0xQQ0ZsOFd1WT0iLDE2NjI6InNoYTI1Ni16VC8rUGkvaXhZd1dkU041YnVEWGJ4TU83QWhhN3F6OERxU0YxSjhYK3NjPSIsMTY2Mzoic2hhMjU2LXdsVnh4UlFUNG9kZzdpU1AxUFZLa3NOVFRVcTg1UDdxK3lXa0psOVVQbHc9IiwxNjY0OiJzaGEyNTYtUVJoQ0NsWWQ2TnUvdEIrUmxUTDlFR2tockQxeStzRktJQlR6RkRxNDNmOD0iLDE2NjU6InNoYTI1Ni1ZcG1ja3pDVGpzaVhlaUxmTmR6UlhWdkc3aXhkY0gwMUZVU1U1eEl2Q2RnPSIsMTY2Njoic2hhMjU2LTJELzhMNDY1cEt1ZFJHa1VMT1pwYkE3bEZiYWFsZ3RrcTc2RU5MRmxPVkU9IiwxNjY3OiJzaGEyNTYteXNuSkJRTm15a0x2cGczZGZWaGh5ZGxlYlVMdXhTb3o5bjBESUZ6cm1Ccz0iLDE2Njg6InNoYTI1Ni1BNVZMOFlpRXdTUm9EeXJ2QVYrZEV5R3lXSHczWjBWZWN0TlZ6dEJkM3ZBPSIsMTY2OToic2hhMjU2LWp1TGRnSXMwcHVtN2VRY0p0ejBDSDdwQmxPeTVrUG5vUzhCZjlWMDFXN3M9IiwxNjcwOiJzaGEyNTYtL0RRZXRyTXNTMzlZeDNNemluMFNzSkYrVHlta1hHVmgzSlA4bVhtNnVEdz0iLDE2NzE6InNoYTI1Ni1EY1UxNWwvZDFYSC9FWkNTajhuTlQwOW91UGEycnd2NXhNc1RGMEFHVllnPSIsMTY3Mjoic2hhMjU2LW9NRGQ2UWR0UnhaWlQxUk10M1pCOTBScVdJZ1hkRTJuZW1EcXNQZ2Z1REU9IiwxNjczOiJzaGEyNTYtSkQrR2pyb1VrTUlmb1p6aFM0bXVtb3dycGVJeHRFZ1NtRHAxdmVENGVDWT0iLDE2NzQ6InNoYTI1Ni1mMkZ4TTdxVFZJY0pGV0JUU0NDTzM3WElIdXdkVzZDell4clpkZmU5VGNnPSIsMTY3NToic2hhMjU2LXUwTVdJc2RzajRaRXNtU3pJUnRMY2VKQ3pWREZsZlE2UTFpMFh6WWpUUzQ9IiwxNjc2OiJzaGEyNTYteG9zVHk5Mm9jN0duUS9KWUlCVi9oeG9oVUNxS0Y0Q040SENZZ1NIRFpmaz0iLDE2Nzc6InNoYTI1Ni1xSVNBL3h4R1VES1VJT0kyRjh0enBLNERBUU1JREFGcDNUbU1BSU5UdFRrPSIsMTY3ODoic2hhMjU2LVNMQlBkQTlwKzYxOGtHL2oxNkdHRHpCM0FnSVJnaitlN0FaelZBdGVIR2s9IiwxNjc5OiJzaGEyNTYtWnU4OTJ5YTFrY2NOdWdHYkUrYmJ6c01tMER3Tmp2MUNSSnIxdGlvSUlSND0iLDE2ODA6InNoYTI1Ni13R0Q0OFJFKzBJSUJzbjAxSUdMOHk2TEJwSy9Kd3FMaTdaSWJLTnpTL2ZnPSIsMTY4MToic2hhMjU2LWZmM21tMjFaUUwxYUZMNmk5WThjNUFtVmVkek9FNWlCUEpJOWY2MjhaMmM9IiwxNjgyOiJzaGEyNTYtWXhCeVNmWjZabnlLcUJnblhuTStTUVFaQ2ZhMGhKeUZnR2dmZ1QrSXp5cz0iLDE2ODM6InNoYTI1Ni15bWFzcFB6UnNFTmRrMDhjNVBuTmJTY2tmQXNYS3ltczJMM2ZWM0xEcm9jPSIsMTY4NDoic2hhMjU2LXdmZE5UeHNzQkJxNE90WFQxVml5UlcyNmVqRlJQbmVDNCszUVZpZ1E2dFE9IiwxNjg1OiJzaGEyNTYtTkRpaDZpa216THgyUWZVNnNVMVdkT3V1dmtzY3R5MWcwdVJMSTRFS1dVMD0iLDE2ODY6InNoYTI1Ni1OZ1VKTEpHdFRZN3hFSFY0NTRCTXZ5N2pWMzVCSFdmS3cvb0Z5OUhTNjR3PSIsMTY4Nzoic2hhMjU2LXo5T3BxbTNTcVJDZG5kZ2pxdkxWcHYyaUFvbjFtblBKak9uaUg5a3d5U0E9IiwxNjg4OiJzaGEyNTYtQ0pZZU5LNkFDZWNUaHk4VWJPaHBQUmFSVW9MODJsdng5OWtWWS9INTRpbz0iLDE2ODk6InNoYTI1Ni1EVDJ4QmNSQld4MTFaS21GYUZDNEhHM3lzbGZUWVJrYTQwWklLQjFCd3BFPSIsMTY5MDoic2hhMjU2LXEwOGJTWW5mVjZ1S3lCMXJDaGloK2V0cndSUmM1UGlPQ2ovYjgwbERLczg9IiwxNjkxOiJzaGEyNTYtZk5SNTFvZHozTzV4YzN1RGhGdVRseElHeThTbEdsd1RhZ3BKMEQyL2luST0iLDE2OTI6InNoYTI1Ni0xajhJZlJuZHBKM3RrUFhxdVdwK3lEdkQwK0hYSHl1MDJ5MDZ0cWE0eHNFPSIsMTY5Mzoic2hhMjU2LWZoSkJHZHZvWG1CTHFaWVZSbnVWUGJyU3NPRDdQNEVnZDZTTldqbHBmRkk9IiwxNjk0OiJzaGEyNTYtWDNXOE5vUnBwT1FjQTZ1ckloYzA2NVdzVERpcC9wd09zM2trYys3VFJvZz0iLDE2OTU6InNoYTI1Ni0wZEx0SElGUHpPZGtiMExPL3FIR09sQ0kyQVdvcTRDTElMaXE0alVSWDlZPSIsMTY5Njoic2hhMjU2LVpkZnVGWWhtaER4WUVEdFF4dDU1OFRoOUpLM2pXQTZwNHJibEpNVk40R3c9IiwxNjk3OiJzaGEyNTYtaVg3elFwNFdHaUNiSFdaYVhuRnFldUdBUGl4dXllbkM0OTJTTk9SdTMrOD0iLDE2OTg6InNoYTI1Ni03Y1pEbmtrU2FFL0dGR2o1LzQrL1hpeU9CcUZCVDhJdjFDNjN0bVh2L21jPSIsMTY5OToic2hhMjU2LStsYVVlbnhaZTdjRkM0d3d2d3UwUWtNblNCN2Y4UUdnVnJJZlpSVWxTMzQ9IiwxNzAwOiJzaGEyNTYtOWh3SDRzYXV2SjhqVHZzUWhYUzl3S0Q5Q2t4d1I4Z3BZOVdCUkRvWWRDaz0iLDE3MDE6InNoYTI1Ni1HVWJHM3VRMWtwdUkvVE1Ha25lZkJtQXVPZ09iMjlSS3lMdmZmVXVhc3JZPSIsMTcwMjoic2hhMjU2LWcyNFdaVXJVeEc4Q2lrWnFTRUZWL0dvaEdTOWZrbHQwbmx4TTYwQmI3T289IiwxNzAzOiJzaGEyNTYtMndKY0RySnQvbWtMRWd3NnJCc1U3dHFRUUgva2FIa2lVcncwWTMzc3RjVT0iLDE3MDQ6InNoYTI1Ni0zd3kyZGxPLy9WdVJzTnNyRVJLMkVmcXVoOHBqeFM4L3o5MEIxcndxUEF3PSIsMTcwNToic2hhMjU2LVZ4dTQ3UFJWL0JwRFZTZFliUXVDZWN6Wk0xSU1KNjlRSk9BWEtud2V4Y3M9IiwxNzA2OiJzaGEyNTYtMGk3VEV5Y3pmeWxiTXlXWWFYa0Q3LzlWTmM4Z1RUUC8vRnNRSlBSMzhjOD0iLDE3MDc6InNoYTI1Ni10Vk43K3dmak01TUc2VmtyQ1J1RVA1UTZOUzRqdTk1eThJUGhtNkpDcVN3PSIsMTcwODoic2hhMjU2LUtPWlMwNSt3elhUNkZkU1ZVUUFKRHdPNE1JYzhpN0lyNnlVVGxFUERyeHM9IiwxNzA5OiJzaGEyNTYteUluOEpYaVNLTTIwd3FLN0lWN3dxc2I4K3ZoVnllMkwwZ3RNb0w3SjlxST0iLDE3MTA6InNoYTI1Ni1IOUlMNllxU1hlMlgrVVdHa01aN3FidzdXREZZWXNCaUNqZ2VydTZ5cnFvPSIsMTcxMToic2hhMjU2LS9wckRhcy9xbEYxQlpjcjQ4bnZzK0FBT1dVb0tLOEZiZ3ZEa2YxODQvdzQ9IiwxNzEyOiJzaGEyNTYtNUErZDB5ZFg0blNLWXNoUXNnMzlkcVpJTG5nTEFLdnJZU0RCM1ladXM4WT0iLDE3MTM6InNoYTI1Ni1FTFBUQzdLLzJQZmlSdzJXNHlyNkx1cldxa3RudnBEbVZBaVEzZjhaNkY4PSIsMTcxNDoic2hhMjU2LW92bkZqcHNQdm9iNXJKTDdJRll5a0U2UGF5WGovUkpxaWpSOXdIMHlsVWc9IiwxNzE1OiJzaGEyNTYteE92ay9TcHNmTlYybWZCMi9ncmpzazRUUVRtUmY0bHlMVkxwQmZDU1F0dz0iLDE3MTY6InNoYTI1Ni1lbUlYeVhYS0hJM21CVkN5cEIzTzZPSStLVU56YzczVGIxbjFEWjNkOWhjPSIsMTcxNzoic2hhMjU2LXhxL1F4OHdOMWZPYmdwdmhqS2o4VlEvMkhDdUZBNHZQMlRxak1tT1c2ODQ9IiwxNzE4OiJzaGEyNTYtUlJJSjNsRTBaOXlmRlAwbWxES1VjSmFhdXYxNDhBMldpVTNTTHZWbXRtVT0iLDE3MTk6InNoYTI1Ni11cUZyb0RDc1A5Znd5S3RkK0tWclRPNWY2T004ZVZsNDJGb21MbnN6S25RPSIsMTcyMDoic2hhMjU2LXpjTTdHK0I3RWRIcG14ZU9JNVNHWjFGelJmVzlsZmhLUm1iSExtM2FFbTA9IiwxNzIxOiJzaGEyNTYtK1pSbjZ3akM5Tzh2OEVuMStad0FoTjR2eVM1OUl6ZkI4bUhLeENuc2t5ST0iLDE3MjI6InNoYTI1Ni0vbjRtNG9TQmdCREdSWTFBUUhiUTRRLzgzbXFDb0kvY0hBZG9xb0NsWUg4PSIsMTcyMzoic2hhMjU2LU5qSVJCUm42WWJDeWNMU1p1RDhaOHlPbTZFNzlHWitBMjVoYmxpUUtHdms9IiwxNzI0OiJzaGEyNTYtc2l2S01TL3ZOeVpoVUdMNWQyK0hEcVhzaGhhWEhDd01HazhmSE9jeEZWTT0iLDE3MjU6InNoYTI1Ni1lUjJXd3lTUjZNNmtqaWF3c2NDeTAzMUdOR3FzWDZuMDFkVVd4NTNoM3R3PSIsMTcyNjoic2hhMjU2LUZOOWdhYVQwVy9sT2lqUVpjTkF0SFBRVWJaa0hzcXlsWUlHdkxEa1Y0eGs9IiwxNzI3OiJzaGEyNTYtb01mZlhJb004bSsyNUY0Mkt2OWZmVjQydzIydWwyMlkrUVp4c3VXbVhEUT0iLDE3Mjg6InNoYTI1Ni1Xb3E0ckdIOXo5czJiVlR3a1FsWkVyNjZXN29vS1RNQ2YwZUg1bnZ6dlowPSIsMTcyOToic2hhMjU2LVhUSWJXN0ptWnE1b3cya2FVU0pOdk9PcjB4ZjFBKzJkOXBrNVhYZVpqNFk9IiwxNzMwOiJzaGEyNTYtalBab00rUUhaQ2JsbXJTcS9aTHVsRHEvQlQ0TjZjRjhrUUg1MUdPb1lpTT0iLDE3MzE6InNoYTI1Ni0yWXptQk1TQk40dFBtOFFBTDhRSHVjQlB5dXYvcUlkTFhabWlRRHA4dGJrPSIsMTczMjoic2hhMjU2LW50YklQWmlyZi9rR0ExQU9OczMrYlVoSU1KdWpHc29Kd1VaMi81YTRpVTQ9IiwxNzMzOiJzaGEyNTYtdnRXZDNzYW1WM1lCZG9DQnVaTDZsbnN1ZXFkSGExSUMxZmQ0Mko4eEFJTT0iLDE3MzQ6InNoYTI1Ni1IQ2trTUI3REFuSWZoaUZ3K2kwN2N4RERzQTArcHNBeHhST2lrbFlyMENVPSIsMTczNToic2hhMjU2LXEwak1kME1MWkJTcHljdjVvR1Joa2ExL3R1QXF5MnZMSk1rc2M1bGlUZHc9IiwxNzM2OiJzaGEyNTYtc2gwc1g1MGFNSHpGZ3hWUUhTcVptazZDdzJZNFE1bFRuQnR5MG9RSGZFUT0iLDE3Mzc6InNoYTI1Ni1JUFpGUWtEYWlGQkJwRk9ydmk5VnljalE3MnhYQjhoNTNva3RKQ0xtazhVPSIsMTczODoic2hhMjU2LWpMcDNZcnRzT2lyRE1KWUVlTG5neTVxc044bVFNS2pQUFo0VmlwSCtHSm89IiwxNzM5OiJzaGEyNTYtK2xKMUNURmE0M1pPR1ZocHNWVzltV1JWUVRSVmd5aHE1UHd2SEgyUEJ0QT0iLDE3NDA6InNoYTI1Ni15cVh2ZFVtcXYzY1IzeUhjQk5nWFVFY0pwVFdmS0I2QnkzMXUybVhvQXhvPSIsMTc0MToic2hhMjU2LVNYaUIwUnpleG5aZk4zcGtqZmk3NjZkSDg3ek9TdXp1dHVUVTFCT3NzNGM9IiwxNzQyOiJzaGEyNTYtSi9rc3R1a3ZtekNjNDZxRmVhZE15UzFNUk1kSURoMUEvK0xyZWFjWFMyTT0iLDE3NDM6InNoYTI1Ni1BRmc1bEhiMTVVU3czYnFoeHEyckdKZWFUN1BQeGFmNUx4dENIWC9CUVRNPSIsMTc0NDoic2hhMjU2LVhTN0lQcm5ZOG1DMDBmWnJ5RW5BaGREdzBLWXZPT1B3OGx1WmVyL2tlY009IiwxNzQ1OiJzaGEyNTYtYzNUUzZJeVB2aGczWlQzUjZyM0gzRytpL0RaVjFoMThIazN1QmcxZmN4bz0iLDE3NDY6InNoYTI1Ni1nZXlhamo0dHpyd0F4Wm1lMDNZclpDRitvWmR5ZGl2bWNtTFFzVFZrZ3RnPSIsMTc0Nzoic2hhMjU2LS9wMmwrV3JMT0NGZ2FuZTZLVER3YXdHcVE2OUtlK0dmcFp2TlNlczc5WUk9IiwxNzQ4OiJzaGEyNTYtbE1ndWZvdEwwa2dFY25mTUdOK1owZkgrQUF4QXRORStqZjdNRUhOQ1pUZz0iLDE3NDk6InNoYTI1Ni0rL2dleC83R1lHcDhHaEZVOE9haWVYZDk3YjFJNWplSFBDcG9rL0lyZWp3PSIsMTc1MDoic2hhMjU2LUxkL2pwYlIvbFQ3ckJqMDd6UFkydHgxYU9aRDM1aUpHT1VYRktjT3YxaGs9IiwxNzUxOiJzaGEyNTYtNmRHWmV6ZU9SWEdSVThPcVBHVloyY2lpazVmSUl6aEthcVBCdjZqQjZZST0iLDE3NTI6InNoYTI1Ni1CUEt4Zit2aWhtUC9IZ3lxMnJNYUF3SXlhRjV1WWJNbHVYa28zcGZMc0FZPSIsMTc1Mzoic2hhMjU2LUthQmZXM2YzTE5FcFRjTmpXTnZDTVliM0ZvdmhTc2RJNm85MlNWZVZRNEE9IiwxNzU0OiJzaGEyNTYtWW5KWk8yMUErY1dHTm5JOGF3eDM0THpyaEU0ZlBkV3hJSVdUck1WeXBmZz0iLDE3NTU6InNoYTI1Ni1UUWE3TmZhQUxHRzhXWEpTTnZ5cE11ZlUreVdLTisxYTJEc2tUckZWWWZZPSIsMTc1Njoic2hhMjU2LTVFMzNSenFNYWVxdnE2TEFlQ2pMYmM2MURSQmJFK2ZSbDl4ZUVBUHR6b0E9IiwxNzU3OiJzaGEyNTYtays5ME1LejJ2bFdWaDd1ZU1yZmh4dmlaT2tBSkRNenVUQmZPaHJoSlR5ST0iLDE3NTg6InNoYTI1Ni1jeGZzaHhGc3lsVkdJZUpDdFBEM1A1NGNVdDE1OFdQdE9YR0NyV25DMHU0PSIsMTc1OToic2hhMjU2LTR1MytCOHRlMTVST0FTcFBmZnQvakhvamp2cUpFanJKVFl5REJTZndaUjA9IiwxNzYwOiJzaGEyNTYtYzRsdlY1K1ZwVHh5WkQyYm5kUUNMMnZkalp6cjcvM3ZXZlptZWp6WG5YRT0iLDE3NjE6InNoYTI1Ni0xbVZ2VTVEU2txU002ODRoQ3h0TkVTb1ZoVnpOcHhUM2cxeXVnNDhCKzVjPSIsMTc2Mjoic2hhMjU2LXNtV3E0VEtLSCswd0M1NTEyZk9iVjZnWHRaRFJwUmdTMzc3UXd4bGZ3cUU9IiwxNzYzOiJzaGEyNTYtRVphTWJka2JOaGdlL1h2TnlKVlBOM3lWbGRqSTNGRTZ5ZGszNGo3Y3psND0iLDE3NjQ6InNoYTI1Ni1FdlR4K0FORXZSNHFpL0Q1ckhFR0VUQ2NzSlowQ3o4NmZvTFhSMkFFa3RBPSIsMTc2NToic2hhMjU2LXU1ajBqWUs4RjZrZHJQKzMrUW8zcXM2ZUg2WWxGcXJFMllxVllqNmtTZm89IiwxNzY2OiJzaGEyNTYtczdiTXBxdGI0eTRhUWwzSWpEQXBMbGxmbEdkbG1kWDU5STN2eisycjBpOD0iLDE3Njc6InNoYTI1Ni1jVFhXckNaa0dUT2lueXBkK1JGZk4rMlRzTVU3UE0zcEx2ZUpPbkF5L0JVPSIsMTc2ODoic2hhMjU2LUJkdjJmeXJ5RXZwM3dKS1JZV0xlZnNFQmlQcndPL1VzYytqbGV5U1ZsSms9IiwxNzY5OiJzaGEyNTYtcE83RTFmaDVBdXNyYUpXbU1UYloxaWpQU3d2ZFpuMEN2d01Cem1lV0FVST0iLDE3NzA6InNoYTI1Ni0wUEdheVFaNTdwOHlCWXV6M1FKaGdnY0lhWHlGRmk4S1ZGdEtZTVRuRis4PSIsMTc3MToic2hhMjU2LWs0YUZaQTR0M0lERHJ3SC9tV2FmbEhkU2JzWVhsT292RnV2QmdIMG9IbWM9IiwxNzcyOiJzaGEyNTYtcmxuTk4xVXFENDVVUjhhbVBKNkhiTy8vdnF0azVnSnRNL2ZkUnplSmxRND0iLDE3NzM6InNoYTI1Ni1IMldFZ0Z6bVg0dUdjZWdPVlc5RzdpMjFwV2R6am1WTHRURUdhdlpjM0ZRPSIsMTc3NDoic2hhMjU2LXVWNFNLTzBzTHYzM01VRGpiNVh1V1JlS1VWd2tWN1dPaWRkWXFteFh4QTA9IiwxNzc1OiJzaGEyNTYtY1JmTkRUWldVeHpUUFI5c25NSE1sRnd5Y3ZuMHEzKzZFSUpFOGthVXBQRT0iLDE3NzY6InNoYTI1Ni0vb3ovQXpMM1pkOWFOM0ZZYVVPdisvNzJZR0h2cjVsNWN3bElnT1hNT2E4PSIsMTc3Nzoic2hhMjU2LVV4d2RTeEx6SkdVdks0V0Q2MFJWNXZ3eFFCT0llQWRyYWxaR0p0ZnRSYTA9IiwxNzc4OiJzaGEyNTYtRTlidlF0YWZpYjJzRE5LSjVXL0lzRUZiTTZaUWpRNmdiQVhGRG1lRmloZz0iLDE3Nzk6InNoYTI1Ni14V0hxREtXenZFQWEvcUJFekNyWXduSVB0b0sySEZjSWYzNnNoQk53aVFBPSIsMTc4MDoic2hhMjU2LUlGWjkxSU5XeUVxRStDdFJFVU1sT2lXQ055elBVMVJySE1BckpsdDl0UGs9IiwxNzgxOiJzaGEyNTYtZXdObzJWMHNuOHpJWWtDZHVWMVFSdk83VndRWkZHUThEcG1JVk1MeFRtTT0iLDE3ODI6InNoYTI1Ni1IWFEvMTB3dFJNUW8wcjNXVFNZb3E1YWo0RmF2S3cvOHZzUEhvZTQzQlZVPSIsMTc4Mzoic2hhMjU2LTU0RzZxMVpmV2E5YjgyRUhZSjFGbzgyWmk4L0VaWDFmVzdqM1UwZTFDZ009IiwxNzg0OiJzaGEyNTYtWWVNeXJKblp4Yk9ncHorNjRQZ0hPdUVBQWlMWVBKZnVmeDJZWllMV1B1cz0iLDE3ODU6InNoYTI1Ni1iZjg3MkpISUNOYlc1L3d0Nkc4MUFBNEcxblp5OFN5SFRmTCtQR1Q3WDFjPSIsMTc4Njoic2hhMjU2LTR3OGs0UUMvSStoMG5WU3VabkFDWElNdmR3aVdET2R1TTRucTg2NG12blk9IiwxNzg3OiJzaGEyNTYtbWRUVkNFLytkSEFEWWNqTVJIdkIvYmpsYk0yNUI3NUduZzlVbTgzNHVCVT0iLDE3ODg6InNoYTI1Ni1MOWsxRGlXUVN2dnM1VWtaUkp5M2trQTFNVFBnbHA1NUFwOXYvNzdyUkEwPSIsMTc4OToic2hhMjU2LVRWWk9WUEdNbnJzc1B0R1FpMUpBOGExVkg0dE42ejhZR2dPRHlaMjZyekE9IiwxNzkwOiJzaGEyNTYtcjFHdmpFVG9SOUlLTDVqUnBxanV4VHRZZE1jODZZMjVlS0pwRXl4NXhUTT0iLDE3OTE6InNoYTI1Ni0vQzMzeS9lNk9hVU13a3RGMlR3alFCTm9FcjFXWVU4endRVGM3eUZQWW04PSIsMTc5Mjoic2hhMjU2LVFKeTlCZ1BaK1ljYWdaWVZJbTgxUzU2UGpkL3dicWRWTUFGMlE3TU4xV1U9IiwxNzkzOiJzaGEyNTYtZkl5OXVJUlY1bEJLQWdhVTRPaGlsU3M2THJHcG5DbXorZGp0V2dLaDZVZz0iLDE3OTQ6InNoYTI1Ni1SUDFwTVozNzB0VTc1U1BTbGdJcnNVVURvZUIrQXY4ZTdVQ0VPNFRGcGlJPSIsMTc5NToic2hhMjU2LTExT1dKdUFWdk5VNThEakZEaVI2YmNXN1Npbjl2cExrV0FiYXAwQTdEdm89IiwxNzk2OiJzaGEyNTYtQkFVUWR5ZnQzU3YvaUJkOTZqa20xMG9sL2FRZm9MSzM2STBjUHRqOHhkQT0iLDE3OTc6InNoYTI1Ni1Xa2tJeU9YK3lQVEJUTjNsZVF3NTE0b0k4VnFRQ0JGN3lGS0FSNkdRekJNPSIsMTc5ODoic2hhMjU2LWl6UFh3amhkNE1MMlZ4ZWVSdTN4YTdFaEtKVWVPK2ljYkE0MGc5REZWWUU9IiwxNzk5OiJzaGEyNTYtSk8xdERnakJpL0lXcjBoWDNjOW5aY2h0NmhVMXN4b1FiNkNaOU51VFpkMD0iLDE4MDA6InNoYTI1Ni1TY1ZEVXh4Ulc4dTM5U3U1aEtmOEpyb1owQXcvQ0ZmY1ptbzNBbnFXdUxJPSIsMTgwMToic2hhMjU2LXN3MEFuajZxclFiSXlLQndUUVhUWCs4ZURsK2Z5Y01lbFQ2aDRvaTBNd1E9IiwxODAyOiJzaGEyNTYtVmtrTFFkWE5aYTBzRll1aFlJNW0wVG1wcnl5bjdmUCtXVmRLeW9WUHJEcz0iLDE4MDM6InNoYTI1Ni1LdEhBZGM3L0NPS2ZRb1VYQkxFbHBYZ2Mrc1M1R1NQOVBoSTNKTDdCSW80PSIsMTgwNDoic2hhMjU2LXRjdXZlUlRYcFRkZGdVQS9KeDZlWC9pbFJjdzZHSkZocDg2OUtqdVpnMlk9IiwxODA1OiJzaGEyNTYtV2NuTjlMQXgvZTY0Mlo2L2c4UWdDZFloWEYwaUtVVGJFSlA2UzB5L1lTVT0iLDE4MDY6InNoYTI1Ni1MVlFFajhLQUpoeWpqcUdodDQvekxGZ3l3NWpVMXBwd3BIWGlDdFR5RTlrPSIsMTgwNzoic2hhMjU2LUNkOURZZWRXNmNSRDltL282K1N5STJSYXFqS3phQmlWNGRBRERFSGRVTEE9IiwxODA4OiJzaGEyNTYteklZUkFKTzd4cWcvNVFEbUlMYm5iYkZ0Z3B6dUkwdlRFbkpiWmRvQ2xBcz0iLDE4MDk6InNoYTI1Ni1TMmZxN0MvN0pjUFljM1k5MG9PbHpINElzZGxXeGt3MDkvQXBTSkEzNTdZPSIsMTgxMDoic2hhMjU2LUpiZXQwL2tXeUVWbWdHbFBNVkRuMEovblVBTTcvNGZXZ0Uwc2FFUW5JZW89IiwxODExOiJzaGEyNTYteVpXY0U5ak9BVlVIYWlHbUx3dWFoM2ZxeEM0aTdjRktDSTZ3MGQ3UlJ0VT0iLDE4MTI6InNoYTI1Ni1JQ1FrQjZLUk84K09UOHRkQTZIcmlKK0pBdDlpcnN3ZDlySkVObDdGUWJZPSIsMTgxMzoic2hhMjU2LVN2U20vcXJKM0RySWViakJVZTNhb2FMUU1BSmFxbTh5Y29YWFp0Y3BnNFk9IiwxODE0OiJzaGEyNTYtdzRmZTYrVlJrWVZ4SlZWRFlLSHVzYU1tNDRPTGNqSkpiNEhQY0F3WVRsVT0iLDE4MTU6InNoYTI1Ni1uZ0IyNFRXQUtCcEdXTm9MUVJWN24zZUdDaWNDMThjeTNVcnVONWYyMWtjPSIsMTgxNjoic2hhMjU2LTBVeHFFTkxGZnhzZkhNT2ZpdmRiSFhkejZ1bkxmdXRDVnV5THBPb3lyRTg9IiwxODE3OiJzaGEyNTYtLzNVaEJQakRVVGZWQ1F0STJpWHJqYWs3V0ZPTTkxRWVXU1RQUWtNY0lhaz0iLDE4MTg6InNoYTI1Ni16WDhPZnFxelo5RmdkOURHd0hibk9UVGl6bDFmZlVlTFJDZm9FcEprZEpBPSIsMTgxOToic2hhMjU2LUtsbEtlTURIZFVldll6bGhJdXBzRHpLbmtmY3N3V09HcEc5a3BkQmp4d2c9IiwxODIwOiJzaGEyNTYtK1FrcFNIMEFMbnhraitUYnNtQ2FlT01nTU92R0gzcTR6YTBJSFVKK3o3bz0iLDE4MjE6InNoYTI1Ni1CWTBtNkN2SWhGRGZSbUhZY3cwL1pnZXRuSUh2aFdPVUR0RjQwUlBlcGVjPSIsMTgyMjoic2hhMjU2LVlBQlFBOUQxT3dJVEUxblRqTW8rR2l5eEV2MEc2dThoalQyK3VZcnVScTQ9IiwxODIzOiJzaGEyNTYtMFpXVFJYYVk1cEU3U3d6L2JDcTBlYjdJSDZ3QWdqdi9XRS94NVhSMjdDWT0iLDE4MjQ6InNoYTI1Ni03dHZsL2lqUGIzNWhYSFpRWDczSVJYcXJvRzFOM1hZQm9uamF6dzljSTJjPSIsMTgyNToic2hhMjU2LWpESTNDcm5COHI1U3BvbWQvRWlzWXVjN2xMZzg5TWhFbTlpWk04RGxkcnc9IiwxODI2OiJzaGEyNTYtZmtZRlM3VzRDMjdQbENHQ2V1UTFWSFNsWXBGNm1WbWFySXR1cHNhL1RPcz0iLDE4Mjc6InNoYTI1Ni1sQitwZHBoRXdubTZKeExHRE00T0MrSkFONXh6b2IwM0xoZ1NFNTMwR1BrPSIsMTgyODoic2hhMjU2LWtHSnVPQnM1b2xGWk1XMzA3VDVTTCtFeGViaHRZcldCS3N2OVh5OUJaSXM9IiwxODI5OiJzaGEyNTYtaFRHanN1ZVJ4VWxENDEySGF1YkRzQ3pRazcvYnhxSDhuNTE5ZmJRcUliaz0iLDE4MzA6InNoYTI1Ni0xREFaZmd1K2NralNMalFveUFWN2VGOXBtZnBBRGtWSmE1TkYwd1JjSDYwPSIsMTgzMToic2hhMjU2LThUOG1RRkxsdVNUS0ZpUWVXaFZIcHJSRWdONHZMMHplS0Ivalh4MnZFcFk9IiwxODMyOiJzaGEyNTYtWU5WWUdTTzNnRWFZUklEYyt3TXl1Z0dmUHVNMXljU0hlUmNKbE1Wd05XND0iLDE4MzM6InNoYTI1Ni1zVFIvRXpyV0tUWGRiN2hrUzEyTmZUNGpUclRUSUdaekpVZDdVRUhMRDRzPSIsMTgzNDoic2hhMjU2LVJjMXdGZUdaZysxUk5hVnNXTnYxMURoaW5rbmxoVTMxZU16Q3ZQMjR0UXc9IiwxODM1OiJzaGEyNTYtS09TRTBZd25TZUJTK1Vidld1ZkxUZzBWZkZ5c1hPNlMzcDhwRURabEJDQT0iLDE4MzY6InNoYTI1Ni1SK2praHpKMVB5bWJDZm4waWdvbk5Va1hNUi9EYXBvbUZiZ0ZGaW9BMHJvPSIsMTgzNzoic2hhMjU2LUl2Q001ajROc3o0M3R5M0tBa2wrSkRCY2ppMndnYWlFcWJSUzlUZ2dIV1U9IiwxODM4OiJzaGEyNTYtSjhpc2xZMDF0NFJlbStNRUU3UjIvSG8zRGlXc0h6RDRhZm9IeGsvdi9zMD0iLDE4Mzk6InNoYTI1Ni15ZEZCeTRrNkVqR3hrRnA1Zm5EMVZ4WWJoYUdYRlJlajdRSUNPMFFvWlRrPSIsMTg0MDoic2hhMjU2LTlkQUlMNHpXdm50RnViUTc1MXBSWVdUL3ZYMUxvbkowa04zZTZNNHBORkE9IiwxODQxOiJzaGEyNTYtZkZzbVFycFNoTGhEVnY3YmxyTENGTjNNY3h4ZVR2bnhUVU91VDZPWWZEcz0iLDE4NDI6InNoYTI1Ni1FbTVXZlowMWJkb3VWU09ZL3gvc0tidmZXR1B6UlFMaXdRSGRydFhZSlcwPSIsMTg0Mzoic2hhMjU2LXBDUUIrdVZHZWJDdzRtNE01blVBVmJib1JEa1ZKcmt2alk3MWxSNGprYnM9IiwxODQ0OiJzaGEyNTYtbmdDdy9WaTlYNEFEa25QdFo1eGh3VVVzK2dud3pEaDNQK0N5dlpaaFFBMD0iLDE4NDU6InNoYTI1Ni1OYm1qWnRMbGZPK3ozRW16OVFjdnBqMmx0SWNWZ3pWM21WVWpsbGxkNTVrPSIsMTg0Njoic2hhMjU2LTNvMHJLQVhhblFZb2tERVhERlp1d2NwKzBYcE9lWTEzYSt2WmxSUmJrVkU9IiwxODQ3OiJzaGEyNTYtdkYzSCtDeWxsTXJkblpIc0hmZGxKZFlYUFp0blFFd3pVU0JVY3NUMjV3cz0iLDE4NDg6InNoYTI1Ni1RYlhYL3BBRExCaldnaVB4M3ZnUVIyVFhkckdKYXNIYWpkUUlkclpXdDBJPSIsMTg0OToic2hhMjU2LVFuc1Bhb0NwcGdzd292eW5yL3JrTUtJcXVZcTJXUUdyaUJ6RWg4VEJ5TmM9IiwxODUwOiJzaGEyNTYtNU9TbmNLSkpWZzYydVhab3RxTEVGcDNnQko1d2lQb0t4SnV1TW53WXlhZz0iLDE4NTE6InNoYTI1Ni1tT2NRREhqaWxjN0UrNDd0YzJnNkhQR1ZhdTFEa1lFZjdtam1BNXc2OEVZPSIsMTg1Mjoic2hhMjU2LXRMZnRWNDJreEErWGU0OGJrenVXL1lOMkZnZDVVMVkzZ3dHaE9EWlY1WXM9IiwxODUzOiJzaGEyNTYtbVF6bmhWT0xKRCs2VXhKU3R5aEh1UVhnZlRBZDk3eThrWG1Uc2hINHo1OD0iLDE4NTQ6InNoYTI1Ni1hUkRsTWtZZGE4YkU4M2RGWGdjN0VRMXZyc0dNbnQyK1VFem5VSEhqTDFNPSIsMTg1NToic2hhMjU2LVR4b0ZPTVNwYXpNS0dKa0xCakFodlJueGd4Q0tQTXdaUWdXc3ZMK0w3Rk09IiwxODU2OiJzaGEyNTYtZU5lbGlUbEdjUWVpZ0tqNlUwLytkOWR6dWlyYnl0VUFTaE1VWFFOcWFhdz0iLDE4NTc6InNoYTI1Ni02VWlBbFNhUUZtVzRrSHlrU2RPNkNkUG9yVjRYUjBZbzFSYzdMZjRhaCtnPSIsMTg1ODoic2hhMjU2LWhveTNROEM3SUVaQncwaWtIWXA2RHpaWER4MjJEVi9URElNQ1dzTlpXOGs9IiwxODU5OiJzaGEyNTYtNU1ES0h1Sjk0UlAvclpXLzZzaGZaWktBUGtCN04rcnUvVXJHb1IxOUhYZz0iLDE4NjA6InNoYTI1Ni1qZ3JhanRMcVFZMXFxZlpvZktVNWNub1VkSUp0ZFdjdlBrcURtS0hrcUlNPSIsMTg2MToic2hhMjU2LW84Z1JQTm9ESTNwODRXUFl1cDc3MnlBNGp3VTM4aGc3UVBSVDZQaW1qVVE9IiwxODYyOiJzaGEyNTYtcENzSXBCYkVmdmJENFMwa0xVNU9wc1c3enErZHpzMXV6aEhvZzlvNUUyQT0iLDE4NjM6InNoYTI1Ni10S2thd0Y2TzdWays0aEdVaGowcmpDU2t3UmppR3UxNTdRbllvbXJWdGZzPSIsMTg2NDoic2hhMjU2LSt5aVA5N3lmcWFFcG8zSGE0WEdhSTZOd2Z1MmJPaXpUS0lqUUNMZ3JYYUE9IiwxODY1OiJzaGEyNTYtWm9PM1JkZ2sreXpkYXFsMmFUZkJCYyt0cHNYcThFVE5lZU1vbUVDUmJxVT0iLDE4NjY6InNoYTI1Ni10UTNYMkNWZ0FNN0VwSkUzUEJXSDBPSXUwOGlVMkthTk5jd0d6VUdSMDRzPSIsMTg2Nzoic2hhMjU2LUR1VmZqYWtnZ2pkRE9UTlVCYmM1ekV4Qk9CZXVLYzM5c3UwTlY3dk9pVUE9IiwxODY4OiJzaGEyNTYtMmk1SDV2RFJIQ21GMzk0ZFFSNG9TMU9oSWtMUCtYdFozeS83YjhPdXNBbz0iLDE4Njk6InNoYTI1Ni01Z2pUcXlnaHJHeXpKZHJKTzdkejhvVkpPNEttWkZNS3FWMHpBdGlXMC9JPSIsMTg3MDoic2hhMjU2LTNwM0hJVnhCdVJIVXdjMVlCVVUwWWNIdXJiNGlKaTliZTY0MWE2TUd0eEU9IiwxODcxOiJzaGEyNTYteTU2V2c4RVBRU3BBYXJjbTFhaUFwWCtCNitCTEJTeGZwYjltenNsejQ0WT0iLDE4NzI6InNoYTI1Ni1zRWgxMjZzNmUyL0I3Zmk3OFVXNUFEM3B5L2tya1V1ak00UFhyWU9WeEhrPSIsMTg3Mzoic2hhMjU2LUFHYWFPbU9hQUVuRHNTckpFYmlSYlpXbC9YZ3BqbTEyQUpJMEZka21oWFE9IiwxODc0OiJzaGEyNTYtN0ZVdHpNc2ZaeUh2VEwvNkpNaDAybm9pSDMyTkwzaWtmcVl6b1FKdWwzWT0iLDE4NzU6InNoYTI1Ni14MzdCOTNvUkh5Ulp0V2RWVFUvYnV5c3lCeHdlYjBDQlFxMzc4L2pxdTFNPSIsMTg3Njoic2hhMjU2LVYrQmdpeDhqVHRvVUEvNUFHS0pFa09oREhPNFYyS0RkZHE1VXByYXZ5OUk9IiwxODc3OiJzaGEyNTYtZGtJNTc5c05mZksydUVSazRMSTNDd3U0dUt2VTI1dkYrVDdWVmVpdUs0Zz0iLDE4Nzg6InNoYTI1Ni0wRmY3dzFxTGtpeHhXOVpva0VPcEtmVDJNamJPT0NGcDMwT3RnbzFvV0VVPSIsMTg3OToic2hhMjU2LUhHWXBlVUJmam94a2hxSkJhUmt3Y1Q0SXNjZmY2WlpjWVJnZXBSYlJQREU9IiwxODgwOiJzaGEyNTYtQ250aVVNNDhzWXBRaE9YKytmeEdSalVJb215WFczWUUxV2tORHZaV3M4OD0iLDE4ODE6InNoYTI1Ni03SzFtQjNlM0sveGNyanZVaUdReFVqR3FYejJ4Mk03eCs3T1p0cDlJMXRnPSIsMTg4Mjoic2hhMjU2LTZueENXODd2ZTllRndkS1ZQb2VBRE5vK1R3NVN5eldLbENhWGgvbVRUUVk9IiwxODgzOiJzaGEyNTYtVG1wQWwrdVV2OC9ON2dtQVlrd3dWc0ZUNGFxT1lkOE9yakIrSjlGeEpMTT0iLDE4ODQ6InNoYTI1Ni1jelJSbk15d1pvMVJIcDJDYkNBbXR1eSsxdXNGcWttalQ0Tmp3T29RQWM4PSIsMTg4NToic2hhMjU2LXdZbE5hR3FFc3hkelY4bXdlSWVreG5wUHVkU1RxRVpuVEc5ZjFiajl0c1k9IiwxODg2OiJzaGEyNTYtRUplR0dlNHY2VzQ3eWI4d0VjTVRwMTc4b0RvaDVGb1BrQ1NSRU1KcXAxZz0iLDE4ODc6InNoYTI1Ni1uV1Jvb2dwZm9NY3dBOFZDdE1YTU5yZWFTd2xlMERiQldmaGFhb2J6ajE0PSIsMTg4ODoic2hhMjU2LUViTTQrcFVud0lGbXh0c1haZ1RxZmpoZzJwK1krY0VmVnRraEw5K1pvdTg9IiwxODg5OiJzaGEyNTYtV3hzSkVuNVFZTTlDV0lCY0F0YS8zeGxXeVVoUjhsRGhrTThxOGxsR28vaz0iLDE4OTA6InNoYTI1Ni1wTGFqSWhMMzlJdjd6SG5oN3h3UzVXZ1BrTndKV2NNMW4zYjY5ZWZvZmhVPSIsMTg5MToic2hhMjU2LS9PaXpoaTEzS2hUQi80OGh0L2swdTJ0bHhnRERnaVVkNEJhaWZ2NzFzOXc9IiwxODkyOiJzaGEyNTYtTUptRGttUjZEWitYWXlSV1NBMEtLREFJSnowT0tqNGJCTXZXMGI3QXkvYz0iLDE4OTM6InNoYTI1Ni05UEQ5bm1YakJ5UW9ZYVV2U090dE1JK0FzSERubWNub3Y2TkYvQnFSL1J3PSIsMTg5NDoic2hhMjU2LVhqamNSdHZ4YVN5UmVIUlZhZzFVWHhIWWJUOGNMdk5WaVpjOHFSeWYvemc9IiwxODk1OiJzaGEyNTYtQlB4MDZ6V3c1N3BTT0wwQ3lwdzNORlZ3QTNjU2E0ejZmbWJ3RU55Z3ZMdz0iLDE4OTY6InNoYTI1Ni1sZzIwOEVkc25iTG1GZ0FRallhWW1UaEJ3cTUwNEs3WStBRzg4ZkRPT1BBPSIsMTg5Nzoic2hhMjU2LWcwaGhPaktDQXhwSzl4N3NLZzBJUXRPS2tiUm1EbGFNMGlrMlhPcWlwK2M9IiwxODk4OiJzaGEyNTYtK1g0TnVmcXB2NmdTbjczbi9DRU9XclFSbXc0VG5keWVYQXdLOUhxZTYyOD0iLDE4OTk6InNoYTI1Ni1EamN1dEFsNlpWUUZ0VFVCV2NEdENqd21POWlNYmRqakxOSkgrM3pQKzY0PSIsMTkwMDoic2hhMjU2LVZ2UWs2b1dTZ2tGcCtkcE9qajlhdUx3Yy9QUXVERmVJK3NZc0pTZFRJV3c9IiwxOTAxOiJzaGEyNTYtL0J2MzNwWXpETEZHbmVyb1M4VTl5eG51bG50Z0lxTVZnRnRwQjdQM1puND0iLDE5MDI6InNoYTI1Ni1MeDNTSEswRFBtd3k0SHNoMmVERlV3R0lTQ3Q2dVZYeXpNUDNFaU5oSTRrPSIsMTkwMzoic2hhMjU2LS9rem5kanA4OW4yUzJjTTVaWWwyTk9xTjd2Rk03R0pWYTNvOXpIbmszRGM9IiwxOTA0OiJzaGEyNTYtQmIrVTNHT1NYM09rV3N1bTBoUlp2TVY3aVdzK05kTHM1THEvc3JZR3VVdz0iLDE5MDU6InNoYTI1Ni0vY3NCOUdZU0lGWWhidEhQeFUxTjFWa0d0QkdOcnVydkJ1alJsMnhhMHdZPSIsMTkwNjoic2hhMjU2LTVTemlicVYxRFZQbDlVazU2Z2RzaXhPSklIU3l2V1dhM2N0RVJEWXAxZFE9IiwxOTA3OiJzaGEyNTYtWHVpay9QenBEaU1xTkpacllYY2drczRMWHc1V1RtTm5yOFYrUzJmSTFzND0iLDE5MDg6InNoYTI1Ni1wS1dNeUtEQWJheDN4MjZOdnpYdjMzZjBrZEd2UU1vL2FZYkxWNkxxT25zPSIsMTkwOToic2hhMjU2LWw3Nmd4QVRnZUN3OTU2U0R2Q1lpeDluTnZwTWZyVmgyaG1wMmhJaFZ6SE09IiwxOTEwOiJzaGEyNTYtM29QdmF6VU9hWnh6SkdLK1J2QjI4ZEs1d1duczNhRzV4Q3JYaExpTDJaYz0iLDE5MTE6InNoYTI1Ni1IVG5EUE9MM2pJZzZsaWxOTFpQcFd5UCttN2I3QjRJUGF2T3VUL043NGQ0PSIsMTkxMjoic2hhMjU2LWh5TDJwQ0UxNXhIY2hDTUNMdFVXWkZXVWtncnVBWm1NY0lFL0crNytyRkE9IiwxOTEzOiJzaGEyNTYtajZaNCsrWFN5eksxSFZLV3RadDhvWVZPbTBOVDVjOEZnbkcvQmdRbWhzaz0iLDE5MTQ6InNoYTI1Ni1MaDdvVHBFRGt6OGIyUU1qcFdEVzZNZGE2YS9Pb3ZJNkdkLzNseUdpNUdjPSIsMTkxNToic2hhMjU2LXNsTkVzRE13dnl6OGtLU1BsdVV5VldnMm9ONkNTV1VWVjF5SU9IZWswZGs9IiwxOTE2OiJzaGEyNTYtWnBlR1Z3QnBaalpMN2xibUVJUHIwWnJIWkhxZHREbmtueUE3UnZiWVZNZz0iLDE5MTc6InNoYTI1Ni0wSTJOeHFld3R2cy8vanNSUVBkczNpUy9yd2RLaHNyLzdpc1h3K0FmY3Z3PSIsMTkxODoic2hhMjU2LVVlZWNCQWNoS2RRT0xMdzF1RC9jWUtobXZaamhlV1h1WmRPSlVjK3VKOFk9IiwxOTE5OiJzaGEyNTYtQnlUUVhoY3gwNEhaQzFkc0pNSHpGU2RpdWJGMC9ldDc3V3pMTDhJMjNyZz0iLDE5MjA6InNoYTI1Ni1RTUs2K20xOE5BNXVGZVZqekhiOVBSRFZLcHRBSWhHRTU2akRydkJvZjlFPSIsMTkyMToic2hhMjU2LXk1RDFYMWR4a3NoZFJYN3g1SWQ0OW9vQWQyU3hHRVg1WGRhUHFYOG5iTmM9IiwxOTIyOiJzaGEyNTYtUFB0dnRlU0F0RVF3dWNBUENTdHNsWTdXaTJncHROcUg5em03NVk4VHYvOD0iLDE5MjM6InNoYTI1Ni1jaUhzQVBIdGdJeVI0enA1WnlCMkUwTitzU1lnZXkydFE2dC9jMUN6bTZvPSIsMTkyNDoic2hhMjU2LU84bkxqSGFWaC9uY2JrVkhSTEFVdkVDa3hLTTZ5NlRUYVBIMytQRHF6aFE9IiwxOTI1OiJzaGEyNTYtVVRjRHZDQit6eVdiOXI2dkxXS01wbzBEUEdtTzNabVFuRndHUjhxL2dsYz0iLDE5MjY6InNoYTI1Ni1HcXhCMFo2ejVxYUpyUG56OGxPT1YzM3hTSk5kKzhoOGc0cHg0MDN3VFI4PSIsMTkyNzoic2hhMjU2LWlBUXlsSWhUeGdhWlNIVS9yT2tTOUhVbDNjUytzU2oyZTIwQlFiZUE1NUU9IiwxOTI4OiJzaGEyNTYtZXlhcHdNTHhjSFZ4ZGlzR2pYWG9BTUpTV3FTQUZpWE85KzNjSHdkSkhhST0iLDE5Mjk6InNoYTI1Ni16RFMvdUt2MFdsd1J1bzgrcHlzaG1HZ09IR0N3UDl1QlhtbzJiUHlWVU84PSIsMTkzMDoic2hhMjU2LWdBUWthRzNYdExpQ29BK09tSUp4TGFGTWdpTGFJTTA3bzMwZ0ZuNGlXeGs9IiwxOTMxOiJzaGEyNTYtc01XRlF1QTAwT1pxRitUb3RVdjBtcDBiekUzTmlQd0poelpOUmZUMDQycz0iLDE5MzI6InNoYTI1Ni1iODViRkJDY1V6cFQ1MWVhUFpoeHZwSU80MVlrYXV3STk3M2UzWkFLYlFvPSIsMTkzMzoic2hhMjU2LWFNNCtDN3NaMXZQSTd6T0JNcmFlK0I2ZjRELzNJWlppTFBzNml3Vy84RWs9IiwxOTM0OiJzaGEyNTYtdS9DdXExcjJ1cnEyUkkwbWFYQUdoMzNNQ0pXbFFJRy9ud081aTBiWDhTTT0iLDE5MzU6InNoYTI1Ni1xSnZQQjlOSE1EaXpWY1lKMmhFSzFPMFMyeVpocWVrL3ZLMHg5cXV1cnlrPSIsMTkzNjoic2hhMjU2LVJ2YlZDYVI5RHhOckMyNFpJaDJtNytuamFoYm5kK3ptZGdCYXZmYytnNVU9IiwxOTM3OiJzaGEyNTYtNnFEYXVDWFpDV2Y2N3B1R05Fem1qREQwZVQrTk1GR3JaamFNNStmSmZkUT0iLDE5Mzg6InNoYTI1Ni1zRG1VdGpQOUJKUFhuNTZ6aTYrUGpKdFM2d3gvYU43NGZQM0hTREZyUFVJPSIsMTkzOToic2hhMjU2LVo3ZVB1TmdXazZtYm04ajU0OXMyT0l0dnNueC8vRFgrSE5LNGwzeGtjaEE9IiwxOTQwOiJzaGEyNTYtRmd5Ri83Z1ZmZEtxKzMxN284SWJ5VmVaY29WV1g4LzNSWnNtbTRjVEx3Zz0iLDE5NDE6InNoYTI1Ni1odkNMZ1NUWlZkc3FyMlN1cWYwa0VBZzViQ1RaVHdVcksrdU5wVTZKMHhnPSIsMTk0Mjoic2hhMjU2LXJtVWJNR2tacDhveGgyNW5TdTV1M2syU1l1dm1rRldqNzZDdTBDOVhydHc9IiwxOTQzOiJzaGEyNTYtTVcxcXphK0pjTVVuMmx4MWxHcllCY0RsaStRL3FlQ1JzdmhaWTMwdFlXdz0iLDE5NDQ6InNoYTI1Ni15ZHlXQUVrNXFOVXFhWkRwMEZiN0Rjc3QwU3FZcy85cHJHOGhLMHB0TEpBPSIsMTk0NToic2hhMjU2LS9uZ2VEOExqNCtFQUlaeWFNK2RFcUduN1I3ZzdadFE2TFpNN3RhU3lGSWc9IiwxOTQ2OiJzaGEyNTYtWjRPSUJvWnZ5K05ONVJJNjBub2dkdEg1K3JUZG5reE00enA2QmZ3a0RqTT0iLDE5NDc6InNoYTI1Ni03Vy9sSWc1MHVsNk1nWHc4bkl5Zml5ZjdWRHplVG0zcUlLc0s5Mnk0a05vPSIsMTk0ODoic2hhMjU2LUg0ZC9wR0lwWEVubGpJbXR1RW9neDBjaXJ5YkFtTmcxcUdSOG9aMDZ5bkk9IiwxOTQ5OiJzaGEyNTYtdWlUYW9takxqalQ3TG5ZZERZb0l6a2hGT1ZVWDNrV0ozejFqTEtmWnBDQT0iLDE5NTA6InNoYTI1Ni1yUHF2MkJtWDNuOXZNWFNHN1dUR3dzL3I5dzlQVGY1cVRpTUN2eHBROWV3PSIsMTk1MToic2hhMjU2LXBab3BKYk5mSmVzR2V6Tyt2bmpOeWlFdE9KVWs1ZVlhSlMvSnZyNTVmczA9IiwxOTUyOiJzaGEyNTYtOTZnc0JVSFAxdHpBc1dOWURCNm1FcUFkRXBRV0dFaExKT0RXYUh3L1FIQT0iLDE5NTM6InNoYTI1Ni16ZG9CRUZpYm82THpOZ0lmQ1hiUGNQZktWTVU0UU1YajNwMU12aEFBSEljPSIsMTk1NDoic2hhMjU2LTBjVjVyTHZhRUJjL00rRmYzYXgvRVkyRW5uNEFSQk4yd08ySkhpUFlhMnc9IiwxOTU1OiJzaGEyNTYtZkxDRndHQlp0TEVlTjQvSld0VU9LNElZRDlOa1hiNkYranpqcVM5VEliTT0iLDE5NTY6InNoYTI1Ni01R1UrSlFzM3V1TnhiU0svMEJMMEJrQ0E4YmVITG5YMkU3ZnRtV3BMNEE0PSIsMTk1Nzoic2hhMjU2LTZIZU9TN1pNRHoyMzNyZlMzTEFqNjROZnZaSkE3ZkpGRjQ2QnlMTUNVV0E9IiwxOTU4OiJzaGEyNTYtYSs3ZUNiNm5vMzc5bWtFbU5kOWdiNGtvdkJYaTdwQXlsRjVmV1VZalpyND0iLDE5NTk6InNoYTI1Ni1NK0N1Sjk4OXRvTWRzOW1TYkhjZHJJNDkvNzQ2Y2RwM0FOaTBUeDNJUllRPSIsMTk2MDoic2hhMjU2LWk2bTJEM3ppTFIvSzd0SU05Q2lMbkozdSsvMnAwSFRZQXVsbTg4OURvdlE9IiwxOTYxOiJzaGEyNTYtSWd6Yzl2aHNKZy9aMy85L0tuYStUbUZiUHh2clc2cUtJREsvUTJ5TUVWOD0iLDE5NjI6InNoYTI1Ni15VG9RcDk5RjBGS3VJNUI0QitrcHFFblJZNU43eklwYnIyaVF6Q0lsWlo0PSIsMTk2Mzoic2hhMjU2LTNiQUxkQmE4dURaY29RZSs2Q3IzLzdwSzhTQjlNa1g0MnhUMCswSFlsR2c9IiwxOTY0OiJzaGEyNTYtVC9WQkMwVEd6Mkc2eWxWV2N3c1hjdVFOcXZaV3FUbitBQk4zUjZXdUJIbz0iLDE5NjU6InNoYTI1Ni1OamRuZWhFdm90dXZkOVZBdFFaTllnS3RHQU5YY09FTW1ySmN6Q0RpWkw0PSIsMTk2Njoic2hhMjU2LWxHN1NKWmUwZjhEMmxzL0ZBRDUvRGQ2aUdsbVBmTG5ickc3QjVId25rRzg9IiwxOTY3OiJzaGEyNTYtY3lORlVlcG52NVdvRGtSWnR2TlZrcEZkUCtTbDV0Q2VtWmsrclcvQVJIRT0iLDE5Njg6InNoYTI1Ni1kbTdBTHhERURsRTk2UXNUTVhIMXJFdnNORVdMVFFoSlNNT2QwbUJPM3RFPSIsMTk2OToic2hhMjU2LW9icmlQeVZ3c2E3SlU0Vis2NVEvYkZOb05JV0dHWjA0eis0ekxwdnp4NU09IiwxOTcwOiJzaGEyNTYtQmcySnFITUx3cUFSK2dnVnlESHNtQnRXSm1GaTZGTHVWNU4rREVlSzVjcz0iLDE5NzE6InNoYTI1Ni1SeEcvQUQ5bnZSNDJTTGZ2MDlMM1NOWWRPQ1Aya3lDTW5EdStxZTlVTlVBPSIsMTk3Mjoic2hhMjU2LXBQKzAyUjl3QlNndGRGNm5MUVpXQStPdEc0bGZPc3hWS1B3SEZLYlNzcGs9IiwxOTczOiJzaGEyNTYtdzVjMDhtZG83d3RaNm9nSnU1cjNTZzZQbEEyWk5WOUFpZFZRamlrbUNtND0iLDE5NzQ6InNoYTI1Ni02N2tZOGlTTjFFUlNiQkxmL1U4Qk4zWS9NVWljZVUwMk1xTFJtYW5sWVNJPSIsMTk3NToic2hhMjU2LXpwQ1FtRGhoOUVjNDk1OWg1Qm5MdnJIdzJISlhVVFNYUWtIdUFSSzgxMGc9IiwxOTc2OiJzaGEyNTYtcHNpRUgwMlU0RlFKQUxtdklZcTI5QVcxdWNEbUZsM3FNWmEvL3RSZFhwUT0iLDE5Nzc6InNoYTI1Ni1INmthbWVWd21TVVNHZEFSaWdYL0JpS0FWQ2JwSVBOTWcvbDlHT3QvTEU0PSIsMTk3ODoic2hhMjU2LStncXQ3eU1SNGY4Qnl6Zzl5VmhWSmZRT0VSMG1ZdUsrRGR6bUN4WkFQWkE9IiwxOTc5OiJzaGEyNTYtb2lJamc0UXZ3R2FSNHVERCtBN2JwbFRrU1NQQ3MwaDk5U1dZZHFXdG1Daz0iLDE5ODA6InNoYTI1Ni1seWVJMjdVVVRoV1p1SlRhSnlZRllkUUp5Sms4VUdHRVozand1UHczTzBrPSIsMTk4MToic2hhMjU2LUtaTys3VzRUeEJWUlJsakNnZ1dnV2lwcGlFYkU2SUdUTTNXRmxGN1NzQlk9IiwxOTgyOiJzaGEyNTYtdU9MeXA4WDRQVDlvKzhOMExWSUtjWk03eFVVc3gyVW9WTEFjRzk4dVhkdz0iLDE5ODM6InNoYTI1Ni1ocVhITkkvQWVyL0JKRjJFaVgrMnZ5L2MySktFb0MyMjhwWnNJTEVrby9VPSIsMTk4NDoic2hhMjU2LXMwaXo0MXZVU1pHV1dkajdQYmlNcWFuaHh4Y00yYnlkcjJaSXQ0OHM4YTg9IiwxOTg1OiJzaGEyNTYtWmtHTDd4MC9NV2VBaTZEaE9wV0pHNDFrZkEyZFR0V2Q1M0hLVGpJeE5yST0iLDE5ODY6InNoYTI1Ni0zSUJQSkpVRE5XZUNFQ25GZzJ1NFFMVmxhSjRmTW04K2NSS2E2TmRuQ0FFPSIsMTk4Nzoic2hhMjU2LWJzMmJuN1haWXdDUnJCQmJJZDF2UWsvNnFXSmhPN29LaXJEK0Y2ZVBLcW89IiwxOTg4OiJzaGEyNTYtUDVLVStld05wVVJnUWVmV1owRWVIcTlpVEVOcm5sajRBcytTSjVKZmZxND0iLDE5ODk6InNoYTI1Ni1LK253ajFrbTV6aVNoakhVWVlyNGJtcEo5SW9iWWc2dEpqck00M0oxRklvPSIsMTk5MDoic2hhMjU2LVNualo4WFkrYjRiOFJHMTlybWk2ZHVaUFQzWEIzV0JiRmc1SDhGZ0wvaUU9IiwxOTkxOiJzaGEyNTYtcGRYTDNJR2thQTcxSnhoeHFzS0pSMnJaMXpuTUtTTW1YWXdkZzhGNG1kUT0iLDE5OTI6InNoYTI1Ni1qZFpOSkcyZE9yOXZBbmttN2ZFZnA2NFdNWEVUaG1mZndQcmYwYUJESjRjPSIsMTk5Mzoic2hhMjU2LWFHcWdTY3B1OFpraEE4Z3RkakhadVg4ZXM0Ym9US3RTQ3NLTEdSbmFwWGs9IiwxOTk0OiJzaGEyNTYtQk9RcmhIcVhPamJsNTFnZU5PMXFrSzJPZjJUV1E4Y1NaOEdRNXRhZ3NSMD0iLDE5OTU6InNoYTI1Ni1tWFdobk40a2ZOaTliUlc1VkZsTTVuU1RXMlAzOEM5RnMrYjV3cm12STgwPSIsMTk5Njoic2hhMjU2LTh1OUNrNWt2ckpzMklidEt6WmlIOVQ1aXZBUE1lcWE5TDhKZmpScFVOc2c9IiwxOTk3OiJzaGEyNTYtbGd4M3k4cSswOW1QOUZPNVVwN1J2bWx2NDRZTzVOSzZMTStQcVhDM0IrZz0iLDE5OTg6InNoYTI1Ni1VNkw5SUpCS01abDVFaTVxaXpQMTlvVkkwTi9KQVV2dklQS05Yak1mZzEwPSIsMTk5OToic2hhMjU2LW42dkQxdlo5UzRhVmR0YUQ1eXpVUmRFaG5FckRlYi95Mnhnd2ZyV1FLOXM9IiwyZTM6InNoYTI1Ni1TQ2RkOXBmbEpiTzVJZHRxWjE2K01XR29ETlhEd2NySTIxZTRKZlVqSVRvPSIsMjAwMToic2hhMjU2LWRHRzh3ZEU4TytHMHdHeXNNcEtxWDNWZUIyNkVZY01mYnplY2l0TitHZHc9IiwyMDAyOiJzaGEyNTYtdlZzVG5GWVlIQ293ZCtyMllyN21mbTMzVkNvNzM3RE56SldrVWsyZW9PND0iLDIwMDM6InNoYTI1Ni1Ta2hSczB6R2hNTDJWOWZ4Umo0NWxWZjE4NTB2VUoyamFkVGl0NVlOaStnPSIsMjAwNDoic2hhMjU2LXlKUFBDUEhmM1Iwc0FqVUdnTER0TGh4bGRxdTJlYzNPQncxRkRaVHJPWVk9IiwyMDA1OiJzaGEyNTYtSGNoUDR3QTBYRkt1eVY3UTJ0OHpGekZ5NzlvT1VYU0hGWkJOVXFvZmZNZz0iLDIwMDY6InNoYTI1Ni04b3JQUXY5cnYrWmtqQWpRZzIrUUlzZ09Vd252MWczbWhuMytwMi9XTzl3PSIsMjAwNzoic2hhMjU2LTUwUVQzeHZONlc5MFEyeHVENWZEdXA2YXM0eE9TRmFldXU4Qy9BTzBPZG89IiwyMDA4OiJzaGEyNTYtSzMyOUhUTng0K3FFYU5jWGczSy9Ja084MXQzVUJGSlFFOGs2ZEtmL3FHQT0iLDIwMDk6InNoYTI1Ni1NMmhUYWJhVkowK3ZYelpnMWhmRUdtT1VscDRIS2R5QitzbkRXa1BUVFZJPSIsMjAxMDoic2hhMjU2LU5nSm93bXlKVkc3eC91RngxRmNCbkE2S1NIL2Q5Wjd2T1lDNm81QVhoRUk9IiwyMDExOiJzaGEyNTYtY0VIUDJUSXdiOEtEWW1LWW5UL1EzamQ4Wm1OaGxQT2VmdVRaT1ptVVA0RT0iLDIwMTM6InNoYTI1Ni1aeEtNU0lRMDdqbGhXaHdzTHlXNDJBYUNGa0Y3cnpuU3lPQXg0MWZxOEJZPSIsMjAxNDoic2hhMjU2LWI5c09sUVpPcW9yUm1XVEVpR1dqcUxaNG9rWElvVUdGbjFRSzJMVlZMZmc9IiwyMDE1OiJzaGEyNTYtSUthUWRLUUFWY0JFNk5hR2YxM25SbENaSWFBMW5tM0lVY21aNzRWWjhFWT0iLDIwMTY6InNoYTI1Ni10a3FtQXpwYlRSb24xbVZXQ09XTEhEcVhOU2poa0N0L2ZRWWFIaWRBZTI0PSIsMjAxNzoic2hhMjU2LXZZdC90SGtVdTcxdHBJRm5HUHI2aCtDcWlhekFXVHJ4TXhUTHlicTZzQW89IiwyMDE4OiJzaGEyNTYtN2ZROEoxbHJYRDJsZXhTZU9nOWdDNmw1SnZ1WTNjM1o0UmJseFd2ZnpMaz0iLDIwMTk6InNoYTI1Ni1tUU45UjAzbkVPRG0rWDNOZ0FTMzAwb2RmRG92Q1FDd3BRNkZTSnZUdzFNPSIsMjAyMDoic2hhMjU2LTBIdWNJbk45ZUowVnN2QXpydUxnYTJ3SytmVTNub1dIdTZMWCtqWWdvUk09IiwyMDIxOiJzaGEyNTYtOFhUUGtyTm9aWFl0dDN0K3lxVDN6TlhzQVcvSElDTi81NVpQMkU5OXpqVT0iLDIwMjI6InNoYTI1Ni14TTluMzJOSmVwMGN0Z0l4dnYrUEM0cHAxWDBLcFA2UVZaZE4rNTllcTZRPSIsMjAyMzoic2hhMjU2LXNjbjI0bXo5azl4T2hSY0RiZ3lGOUJtS3EwalZYQ2R0ZzloQjV5cGQ1dzA9IiwyMDI0OiJzaGEyNTYtVzN0RXlKVEczU1NZTXVSTTVURWZxdmZoNStYd1g5NnJlcDVBWkdXNFNsYz0iLDIwMjU6InNoYTI1Ni1lZmgrUmJSRWRrMlpsdzlaOVI0aXAza3ExOThhNUhYSjRFMzI5V1FPWlhBPSIsMjAyNjoic2hhMjU2LUVNZnZYeDhDSXVld2ttU0hPbVlBRTFHbXN1RFlDZHdZTUtQUmVHK1JCRFk9IiwyMDI3OiJzaGEyNTYtSlRFTDBrdkhyY0tYdDRodFU1T29KS24rOG9IdzFvV2ZTUjhlYk1xUmk4QT0iLDIwMjg6InNoYTI1Ni1hQzgwUTdkbEZuaGJtRTI0R3hlYlI0eFdCdTQ4SVM4c2haTmJHanhvZW1nPSIsMjAyOToic2hhMjU2LWJ6NCt5SWdTRWRiYVZBdks1dW1oZDJwMGRJS3FiVGxRQnk2WEttV24rR0U9IiwyMDMwOiJzaGEyNTYtbWdNbk1rcnUzajNBWlJEK1huajltdWd2ODYzY1djTWp5VUxpeGN2UGtSdz0iLDIwMzE6InNoYTI1Ni1XazhwWk56U0lXUndQZVNkeDRyZGMxTUVKTnpuMktvOWJFSU1CZGRyQmlrPSIsMjAzMjoic2hhMjU2LXlFM0huMzN5SjBvY0MyL2thaXVJbFlGd1VuQndmTHBWYWJaWm91Snc5eGM9IiwyMDMzOiJzaGEyNTYtbGFiTUlPYzAvQ3FMb29EbXZ5OEpyU2xTYllFZ0s0ZUdNa2IxVXlwbDFwND0iLDIwMzQ6InNoYTI1Ni1nUXhLZHhVZTdoWWxVeWtINWY2UjhuNCszMVRwcWlXMVE5ek83anVzNFdZPSIsMjAzNToic2hhMjU2LXJNUENESHF2bGh2S0krMXp6VGc3bUV5Zm9yMDBJTXo4anZIN0dMbk5lVkE9IiwyMDM2OiJzaGEyNTYtRlZTY3A2QmNybW9qbnE5RUVsSVZSS0UzRjR6QXBYalk0ekhrUnZSS2YzOD0iLDIwMzc6InNoYTI1Ni05ZU1YMmtrMkJMQi9BVUNzZVpFRHFJT2d6L0loYXpwQjVCK2ZqSUlkVGd3PSIsMjAzODoic2hhMjU2LUd4M0tmS25RL2k3cW5WODhqSmd3ZSs3d25QeDNiVUs4cGg0S3VVcWtpaWs9IiwyMDM5OiJzaGEyNTYtQjRlWkgyeHJhZjZkZlVvMm5hcDduYlJROW9wTjBsK0RpNzUzNUNQQ21RRT0iLDIwNDA6InNoYTI1Ni0ycTFXOWxvVitWZ2ZnL1p0dDBpOGJPdEhLMVFrRnBHWVM0MzFGRlNsUXE4PSIsMjA0MToic2hhMjU2LTl3UkUwQTFmTGpJYVhZWnRFSTdiT0dlRXBYRDJjNVBzZWx2S2pKK09FUXM9IiwyMDQyOiJzaGEyNTYtb05XZExOWXlKVVhYeE1ydjVHb3ZTaE1SM0EzNnU5dHEwVS9id1lZajdXbz0iLDIwNDM6InNoYTI1Ni1haVVnQ1hZMkxWVjI2R2xsa083RHREU3YzRzBHMHhWT1hXYTZCUXdPVERvPSIsMjA0NDoic2hhMjU2LVJxRXhlTm1Va2ZYVWU2OGtNekt1SEJySm9Xc2w4RkgvMmc3bU9mdVZZL1k9IiwyMDQ1OiJzaGEyNTYtSmo2NjBQaHFRUmFFL2xOeHkxYjc0bTJEbTJOODhITHJKY2ltdFdaWVhXaz0iLDIwNDY6InNoYTI1Ni1qN3EreUZJQjQvZUppc2ZWaUhyb2tjd2dOQjZMMXZNdktTVFlZWXZGUkMwPSIsMjA0Nzoic2hhMjU2LXc4OUtXN0lLMWJ3dzZTNnpkbVpzdlc5RTMwUDdJd0diTnQrN2YweEtDbEk9IiwyMDQ4OiJzaGEyNTYtZWZiTUdyS3QvclRPTXhTblZ5V3NNdGd6Mi9KV3lQNm1BUXZYRmpNanAxMD0iLDIwNDk6InNoYTI1Ni02azJyUE94dkJEQ3lRNHJWVHp2WDVMcUhQSUJ6bFRaZGVVWFVIc0EvYzRrPSIsMjA1MDoic2hhMjU2LUxwRzg3R1drcWkyYUZoTldSVXBtNVpVdEVja052UHExNDA1NjkwNy9naW89IiwyMDUxOiJzaGEyNTYtNzQ1WmVsWVlsOVhTMVVVdXNYV1phYmNXNVNRdVYzV0VaNktZYkxQenJrRT0iLDIwNTI6InNoYTI1Ni0rTlBSaFJocFNUckpxZmgvVlI3R09LOGFZVEpOUUlUZW5CUTRua3pkVkUwPSIsMjA1Mzoic2hhMjU2LW4yNjZ3TXpEMnZNVUtSMytBUi9ObXVNZDJoMzk1YUtneWx2YXBucHdBMGc9IiwyMDU0OiJzaGEyNTYtQmRXb252d09zQTAzeEFRTStWT1Ezc1NQaERheHVrMi8veUM1OHVjU3Bocz0iLDIwNTU6InNoYTI1Ni1DYlVDWkd5VGsyakp2RmNSYmM0eVFydU1VMStrK0xZN0lndUxGOHJxV0RBPSIsMjA1Njoic2hhMjU2LVFtRUc0YVE0aXN1cmlnV04vVTZVNitxZmk2cTk5dTAzSEVVekgyRkhSems9IiwyMDU3OiJzaGEyNTYtYXFSSHlYNm4vUS8yUnkvREFzbTF2bFcxTzRMZW50T081Tk9ybDJ0YnNZZz0iLDIwNTg6InNoYTI1Ni1vekc3NHdXckNVN1Y5YXFPTXRCSEZIMVBnT1hDc0xrQnFWQ0pLNWs3Z29rPSIsMjA1OToic2hhMjU2LXRlV3VTR1BBSldIblIyV3ZzNUhiK0hxZUhYNDcyVGZkSkYrRHNDSTB4cm89IiwyMDYwOiJzaGEyNTYtRytVN0l1d2xmU1ZFczlMTXF0ZXpXMllueWtGa0loVXBhUy9EdXNMKzZKOD0iLDIwNjE6InNoYTI1Ni1vRUI0VU9zU3hQWnZmaGdpZDNkclpvMHdWamZibjdkOTBhNUlJV0dTN1BBPSIsMjA2Mjoic2hhMjU2LVVkQ3NpeGUxNmU5RmtPQ1ZHdlZ3TXJRVTMyNnVnblVIZCs2bFgvSml5RU09IiwyMDYzOiJzaGEyNTYtV2tCQWZMVkhjdmVUMWR0TjN5WGZvNzdZbXZBZXdoODI4b1g0QW9TSm1HST0iLDIwNjQ6InNoYTI1Ni1XTncydjRzdVVpbkFrTUN2clN3YXhSaWN3Wjk4Wlk1OXBTaG1VRW5ZQXZzPSIsMjA2NToic2hhMjU2LVpWV1VsM3NmSFB6eTg2TXR2NkpZRTFWelNHOG1nRm9QQTJTeE8xZzJEWUk9IiwyMDY2OiJzaGEyNTYtbldPWjgzWGVhV21lcERJOWh5L004SCtXN05BYjBWdHFPRnZVTjBWckVkST0iLDIwNjc6InNoYTI1Ni1mUzZKQU9pU2dmMGM0OFMzd0JReFVwbVZ3djVXd09XSDFFekk2YllNMEk0PSIsMjA2ODoic2hhMjU2LVRuU1ZIcTY2bWY4ZndBWXY0aXJXVzlmcTVPQ3FCZG5iajcwSmhVUGsyYjA9IiwyMDY5OiJzaGEyNTYtaXpTMUlmcTl3M2FRQzhmN3lhQzJINzJseGc4WlJDZVN1VWg1M0pHdkdUWT0iLDIwNzA6InNoYTI1Ni12azZTK2l0T0d1aW5TdFc0VTVXZm1rU3pXamI0OWJENDBNMWMvbzB2YzlVPSIsMjA3MToic2hhMjU2LTYrVWRTUE9vb2RKd0xrMkZGNDVyTzhRRGpGR2hSQVl5cGNTaU9hRmo2aDg9IiwyMDcyOiJzaGEyNTYtL0tlK0lGRU5wUkwzYnhNZG1xeXR4VXIyaldZVmJlaVNuSnZwTlRVUGQ0az0iLDIwNzM6InNoYTI1Ni12S0lOY3pSeG1TZHdWeDFtVlFpRm15RVJZQ29IKytHSUVGWUR4d0ZYOG0wPSIsMjA3NDoic2hhMjU2LUY3MTRsZWQyejE3aWZHOEdxR2lIWDl5QkhJWDlpeC85Y0Joc0Q3LytBVDQ9IiwyMDc1OiJzaGEyNTYtRCs4MmRRdTlra1R4b0xpVGVGd1BvN0k2U2htZi91c3ZWT0JIQUh6dlJiMD0iLDIwNzY6InNoYTI1Ni1lT1o5TVdXODVvYXVoSmdCL0UwSFUwRXIyVzIwWnIzTnZ4dks5QVU5bkswPSIsMjA3Nzoic2hhMjU2LXZaOG5pMnh0anFkWkYyb1pmT3JlcVV6WDBtSmc1dEc1UlIwQnBBRXBkd3c9IiwyMDc4OiJzaGEyNTYtMEJIQVZZRXRXeUJta05wTzVQZUFaL09MQWtoRzhWV1VlOHFiY2t5OEl6ST0iLDIwNzk6InNoYTI1Ni02T2xVSmxBVVFiTC9YSkhpSWE4RXhZRnVncms4YmJzanZiUU90SG8zbHRjPSIsMjA4MDoic2hhMjU2LXdya1M4ajQyd1hNNHo3MHZFSUZRZFpzM3pFNzhaNjZieFdqTzdkNzBaejA9IiwyMDgxOiJzaGEyNTYtdEZTb013YmY0dkJVVFpaVmd5dHdIcG8rNnJ3Ri8rYTJ3elRNM0xxRmpPST0iLDIwODI6InNoYTI1Ni1ydmNoTXRQUmdJeWt4L2MvY1QrSktNUzhTSmU4bTVMb0FHM1lMVitUSXhzPSIsMjA4Mzoic2hhMjU2LUhxR29GRjM3cnVvQTk5di84OXBvYzI3Q0hoLzhabnQwUDRoS2p5OWhIWGs9IiwyMDg0OiJzaGEyNTYtWGp1UnY0ZHR0eXMyVEVUZUo4T1ZxenZRc285cXN4RkxtUnZFa2xDZDRSST0iLDIwODU6InNoYTI1Ni12d2lMdkRkSHFVWmdmUmNldWNmZnMrZXVhUkZFYTBIeElwb0ZQSGpJR05NPSIsMjA4Njoic2hhMjU2LUozcWRVazFHUzlnQ0RHQzllanpObmZnanhBbDVjbmZiaWNTQlI4YUFnWjQ9IiwyMDg3OiJzaGEyNTYteHdpeklGZnRPYzI5NlVtei8zNzA0SzJIVEgwSzhpVzF5VGlMTERaS2NNUT0iLDIwODg6InNoYTI1Ni10OXZRbDlNZ1FubFVZYk96ZlJ1Uzd2ZXhWWFJZWDJIK0ZwQXF4VSttTFk4PSIsMjA4OToic2hhMjU2LWY1Y3NhVzFYaHo3Um90MG02Y1MvL1UxQUpBRHoxTUs4VHJFTUxxYWp5RUE9IiwyMDkwOiJzaGEyNTYtaFdwVjUvT1lXZTVUaTVkNTVtSGQ2cUFIT3FGUkpQTGxVYmp1YlRtc2xMRT0iLDIwOTE6InNoYTI1Ni1qdzFURGhQbSs2Y3crTjJadUdreVY5RGtCZFlNdm9mUmFpOG11VmVlNGo0PSIsMjA5Mjoic2hhMjU2LWQ4R1NkWWh3cGdITmFWVmQxVXUrSWw0ak92OGVUOThYNEdQQmhscE15UWc9IiwyMDkzOiJzaGEyNTYtT0RWVGUvWGNjZmxSR0tGOU53VklGUjlobkxoN3ZoUlI1NFpoYlBVWk5FND0iLDIwOTQ6InNoYTI1Ni1sVlV5RGlnVEVWcGFnODY1TlA1cW5kdjVGMnFjQjFrUWZOcUVDTXNFTmZjPSIsMjA5NToic2hhMjU2LWJHenFvYWhwTVFSYzVHejBBT09JbEl3ZHRFY0ZxdmtIRVdFM1p3bWY1Nlk9IiwyMDk2OiJzaGEyNTYteU1wck4zcFV1Z0VWSEFkZE1WMFpOMi8vMjFDa282RHJoVXJHQzIwNy82ND0iLDIwOTc6InNoYTI1Ni01VkdJMG9oREdjSXh3UjI5QUZDK1V6VGs0VmZ3VzVrdUtwUzJlYkZrRmFnPSIsMjA5ODoic2hhMjU2LVRMSXBJTlRsVktGNk9XVDRHbDA0MUtWTlBmbnpNWEZmVVR2eWRydlpTd1k9IiwyMDk5OiJzaGEyNTYtcUxwYURuT2FqWk1qVWxVTGdJdmt4V1UwbDQ5TWNJSnlXNlljZU9mbHE2cz0iLDIxMDA6InNoYTI1Ni1zOEJ6T0pnZWI0TVRwdDgxek5BaGJUZTRDZ25FRFp4Q2dCSlpPa3JCeVo0PSIsMjEwMToic2hhMjU2LTJSVlRJQ04wako3ZXp1V2lXdUFYL2FlN1d0WUZBRHBNWnZXb0NZL3dOMjg9IiwyMTAyOiJzaGEyNTYtUG4vdzJ3NnhQN05saVBGL3FFVDl5NTlXSXNGbnI2SEk3b0dydlU5K2RzND0iLDIxMDM6InNoYTI1Ni1HZlFHd2x1aWo2MHpiU1IzZXBZMFo5VWF5QXNjVUFWaVNLVXZVam5LaDhZPSIsMjEwNDoic2hhMjU2LU9jNXBjakNMUmJMNTEyOXNvUG53RkgyRFhBeG85dkNMQThsM0Z3S1lkYkE9IiwyMTA1OiJzaGEyNTYtOUpiclBqODFWMjZKUUtDcTdheENXZGthaHpSc09taCsxZzNpTnBRZVg5MD0iLDIxMDY6InNoYTI1Ni1lZTVTZ1hMbzkwUjhvR2lOUmZuaEtqL2o0K2dGYjZiMEpqQmltUFF4OU13PSIsMjEwNzoic2hhMjU2LXp0V2kvb3JpcXJmaGwwUzlDNjlvYkdnQTFCSE1ueTZqbFhVbUh0WlpVejQ9IiwyMTA4OiJzaGEyNTYtK1RaNjBSOVJueFdYTGRkbHNrSHM2dE93RU9mUGRZbnlmVjhQOWxJRFZncz0iLDIxMDk6InNoYTI1Ni15K040SjRZNzlibDloSy9tVzBEMDV5eFh6WVhFSDR6dlNoMTFhU2RCNHpNPSIsMjExMDoic2hhMjU2LVlaNUtFZzNUdDNsSHBJcHVMMjRsWHVyaFp1clVGTzgvam1iNUo3elJhTzA9IiwyMTExOiJzaGEyNTYtVFFrZVA3U2F3dDVkZERRTTlPS2wwVlYvRml6MXlraEU4eUJHZ2ozSXF2RT0iLDIxMTI6InNoYTI1Ni1MTnFKUGV2VzBRMjlLa240MXVDdDRSclBxaEVuN1ZDczJqQjBIcVhHZlFvPSIsMjExMzoic2hhMjU2LWRGRHdRdXp6YkRxSlZkZUtKK2FNNnQxbkhqWUhBSkNFRDNDTjNTeU1mbVk9IiwyMTE0OiJzaGEyNTYtQlNVdU9sbXBuc3lrd29HbkI4UWJxa0NCMytuSTRSMzJ6L2E5bFczTkdQdz0iLDIxMTU6InNoYTI1Ni1SV2tPeFJwdnVWUUZjRlhZT01oSEtUek41bzRYa2crWVpsZ0lHaTlSOUNjPSIsMjExNjoic2hhMjU2LUdUV1JOUHpQclBxTy9LdW51Sit3am5WYVIxRTlUOHRyNG5RVEIwblZmNXc9IiwyMTE3OiJzaGEyNTYtcklLYlAvYXFzN0ZCTDRWRUtxY1dwYVhBK3ppeTh6TXFndld1dStNdnRNaz0ifTtmdW5jdGlvbiBjKHQpe2lmKG5bdF0pcmV0dXJuIG5bdF0uZXhwb3J0czt2YXIgcj1uW3RdPXtpOnQsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVt0XS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxjKSxyLmw9ITAsci5leHBvcnRzfWMuZT1mdW5jdGlvbihlKXt2YXIgdD1bXTsiQUcwOCIhPT0oZG9jdW1lbnQucXVlcnlTZWxlY3RvcigibWV0YVtuYW1lPSdlbnZpcm9ubWVudCddIikmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbbmFtZT0nZW52aXJvbm1lbnQnXSIpLmdldEF0dHJpYnV0ZSgiY29udGVudCIpKSYmIkFHMDkiIT09KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbbmFtZT0nZW52aXJvbm1lbnQnXSIpJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJtZXRhW25hbWU9J2Vudmlyb25tZW50J10iKS5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKSkmJmlbZV0mJnQucHVzaChzZWxmLl9sb2NTdHJpbmdzLmFkZExvY3N0cmluZ0Fzc2V0KCIuLi9yZXNvdXJjZXMvbG9jYWxlL1tsb2NhbGVdL293YS5bbmFtZV0uanNvbiIucmVwbGFjZSgvXFtuYW1lXF0vZyxpW2VdKSkpO3ZhciBuPWFbZV07aWYoMCE9PW4paWYobil0LnB1c2goblsyXSk7ZWxzZXt2YXIgcj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuPWFbZV09W3Qscl19KSk7dC5wdXNoKG5bMl09cik7dmFyIG8sbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtsLmNoYXJzZXQ9InV0Zi04IixsLnRpbWVvdXQ9MTIwLGMubmMmJmwuc2V0QXR0cmlidXRlKCJub25jZSIsYy5uYyksbC5zcmM9cyhlKSwwIT09bC5zcmMuaW5kZXhPZih3aW5kb3cubG9jYXRpb24ub3JpZ2luKyIvIikmJihsLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiKTt2YXIgZj1uZXcgRXJyb3I7bz1mdW5jdGlvbih0KXtsLm9uZXJyb3I9bC5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoaCk7dmFyIG49YVtlXTtpZigwIT09bil7aWYobil7dmFyIHI9dCYmKCJsb2FkIj09PXQudHlwZT8ibWlzc2luZyI6dC50eXBlKSxvPXQmJnQudGFyZ2V0JiZ0LnRhcmdldC5zcmM7Zi5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC5cbigiK3IrIjogIitvKyIpIixmLm5hbWU9IkNodW5rTG9hZEVycm9yIixmLnR5cGU9cixmLnJlcXVlc3Q9byxuWzFdKGYpfWFbZV09dm9pZCAwfX07dmFyIGg9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtvKHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6bH0pfSksMTJlNCk7bC5vbmVycm9yPWwub25sb2FkPW8sbC5pbnRlZ3JpdHk9dVtlXSxsLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIFByb21pc2UuYWxsKHQpfSxjLm09ZSxjLmM9bixjLmQ9ZnVuY3Rpb24oZSx0LG4pe2MubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LGMucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxjLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPWMoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoYy5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciByIGluIGUpYy5kKG4scixmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLHIpKTtyZXR1cm4gbn0sYy5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBjLmQodCwiYSIsdCksdH0sYy5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxjLnA9IiIsYy5vZT1mdW5jdGlvbihlKXt0aHJvdyBlfSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmJvb3RzdHJhcE9wdGlvbnMmJndpbmRvdy5ib290c3RyYXBPcHRpb25zLnNjcmlwdEJhc2VVcmwmJihjLnA9d2luZG93LmJvb3RzdHJhcE9wdGlvbnMuc2NyaXB0QmFzZVVybCk7dmFyIGw9d2luZG93LiR3aj13aW5kb3cuJHdqfHxbXSxmPWwucHVzaC5iaW5kKGwpO2wucHVzaD10LGw9bC5zbGljZSgpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXQobFtoXSk7dmFyIGQ9ZjtyZXR1cm4gYyhjLnM9MjEzOCl9KHswOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oNDI1KX0sMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxuLmQodCwiX19leHRlbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiX19hc3NpZ24iLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJfX3Jlc3QiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJfX2RlY29yYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiX19wYXJhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsIl9fbWV0YWRhdGEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJfX2F3YWl0ZXIiLChmdW5jdGlvbigpe3JldHVybiBsfSkpLG4uZCh0LCJfX2dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsIl9fY3JlYXRlQmluZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsIl9fZXhwb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSksbi5kKHQsIl9fdmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiX19yZWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiX19zcHJlYWQiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJfX3NwcmVhZEFycmF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsIl9fc3ByZWFkQXJyYXkiLChmdW5jdGlvbigpe3JldHVybiBtfSkpLG4uZCh0LCJfX2F3YWl0IiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKSxuLmQodCwiX19hc3luY0dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKHQsIl9fYXN5bmNEZWxlZ2F0b3IiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZCh0LCJfX2FzeW5jVmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gan0pKSxuLmQodCwiX19tYWtlVGVtcGxhdGVPYmplY3QiLChmdW5jdGlvbigpe3JldHVybiBFfSkpLG4uZCh0LCJfX2ltcG9ydFN0YXIiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLG4uZCh0LCJfX2ltcG9ydERlZmF1bHQiLChmdW5jdGlvbigpe3JldHVybiBrfSkpLG4uZCh0LCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gSX0pKSxuLmQodCwiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSk7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KClBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQpwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSApSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULApJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgpQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwp2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9O2Z1bmN0aW9uIG8oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4oaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGEoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aCxhPWk8Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSkobz1lW3NdKSYmKGE9KGk8Mz9vKGEpOmk+Mz9vKHQsbixhKTpvKHQsbikpfHxhKTtyZXR1cm4gaT4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGEpLGF9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3QobixyLGUpfX1mdW5jdGlvbiBjKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYShlKXt0cnl7dShyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e3Uoci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gdShlKXt2YXIgdDtlLmRvbmU/byhlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX11KChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gZihlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIHMoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihpKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2E7KXRyeXtpZihuPTEsciYmKG89MiZpWzBdP3IucmV0dXJuOmlbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixpWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihpPVsyJmlbMF0sby52YWx1ZV0pLGlbMF0pe2Nhc2UgMDpjYXNlIDE6bz1pO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTppWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1pWzFdLGk9WzBdO2NvbnRpbnVlO2Nhc2UgNzppPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1hLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1pWzBdfHwyPT09aVswXSkpe2E9MDtjb250aW51ZX1pZigzPT09aVswXSYmKCFvfHxpWzFdPm9bMF0mJmlbMV08b1szXSkpe2EubGFiZWw9aVsxXTticmVha31pZig2PT09aVswXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1pO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goaSk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWk9dC5jYWxsKGUsYSl9Y2F0Y2goZSl7aT1bNixlXSxyPTB9ZmluYWxseXtuPW89MH1pZig1JmlbMF0pdGhyb3cgaVsxXTtyZXR1cm57dmFsdWU6aVswXT9pWzFdOnZvaWQgMCxkb25lOiEwfX0oW2ksc10pfX19dmFyIGg9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19O2Z1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG4gaW4gZSkiZGVmYXVsdCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8aCh0LGUsbil9ZnVuY3Rpb24gcChlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX07dGhyb3cgbmV3IFR5cGVFcnJvcih0PyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX1mdW5jdGlvbiB2KGUsdCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIGIoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZT1lLmNvbmNhdCh2KGFyZ3VtZW50c1t0XSkpO3JldHVybiBlfWZ1bmN0aW9uIHkoKXtmb3IodmFyIGU9MCx0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgcj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PG47dCsrKWZvcih2YXIgaT1hcmd1bWVudHNbdF0sYT0wLHM9aS5sZW5ndGg7YTxzO2ErKyxvKyspcltvXT1pW2FdO3JldHVybiByfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7bjxyO24rKyxvKyspZVtvXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBnPyh0aGlzLnY9ZSx0aGlzKTpuZXcgZyhlKX1mdW5jdGlvbiBPKGUsdCxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIHIsbz1uLmFwcGx5KGUsdHx8W10pLGk9W107cmV0dXJuIHI9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIikscltTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBhKGUpe29bZV0mJihyW2VdPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXtpLnB1c2goW2UsdCxuLHJdKT4xfHxzKGUsdCl9KSl9KX1mdW5jdGlvbiBzKGUsdCl7dHJ5eyhuPW9bZV0odCkpLnZhbHVlIGluc3RhbmNlb2YgZz9Qcm9taXNlLnJlc29sdmUobi52YWx1ZS52KS50aGVuKHUsYyk6bChpWzBdWzJdLG4pfWNhdGNoKGUpe2woaVswXVszXSxlKX12YXIgbn1mdW5jdGlvbiB1KGUpe3MoIm5leHQiLGUpfWZ1bmN0aW9uIGMoZSl7cygidGhyb3ciLGUpfWZ1bmN0aW9uIGwoZSx0KXtlKHQpLGkuc2hpZnQoKSxpLmxlbmd0aCYmcyhpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiB3KGUpe3ZhciB0LG47cmV0dXJuIHQ9e30scigibmV4dCIpLHIoInRocm93IiwoZnVuY3Rpb24oZSl7dGhyb3cgZX0pKSxyKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiByKHIsbyl7dFtyXT1lW3JdP2Z1bmN0aW9uKHQpe3JldHVybihuPSFuKT97dmFsdWU6ZyhlW3JdKHQpKSxkb25lOiJyZXR1cm4iPT09cn06bz9vKHQpOnR9Om99fWZ1bmN0aW9uIGooZSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciB0LG49ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKGUpOihlPXAoZSksdD17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0KTtmdW5jdGlvbiByKG4pe3Rbbl09ZVtuXSYmZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyhmdW5jdGlvbihlLHQsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24odCl7ZSh7dmFsdWU6dCxkb25lOm59KX0pLHQpfSkocixvLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBFKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX12YXIgUz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH07ZnVuY3Rpb24gQShlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSkiZGVmYXVsdCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmaCh0LGUsbik7cmV0dXJuIFModCxlKSx0fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIEkoZSx0KXtpZighdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0LmdldChlKX1mdW5jdGlvbiBUKGUsdCxuKXtpZighdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0LnNldChlLG4pLG59fSwxMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7bGV0IHQ9dm9pZCAwO2NvbnN0IG49bygpO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0ubmFtZT09ZSl7dD1uW3JdLmNvbnRlbnQ7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gbygpe3ZhciBlO3JldHVybiBudWxsIT09KGU9bnVsbD09aT92b2lkIDA6aSgpKSYmdm9pZCAwIT09ZT9lOkFycmF5LmZyb20od2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIikpfWxldCBpPXZvaWQgMDtmdW5jdGlvbiBhKGUpe2k9ZX1jb25zdCBzPVsiVW5rbm93biIsIldXIiwiRG9nZm9vZCIsIlNJUCIsIkJsYWNrRm9yZXN0IiwiRE9OTVQiLCJNU0lUIiwiR2FsbGF0aW4iLCJTREZWMiIsIlBEVCIsIlRERiIsIklUQVIiXSx1PVsiVW5rbm93biIsIkFHMDgiLCJBRzA5IiwiQmxhY2tGb3Jlc3QiLCJESVRBUiIsIkRvRCIsIkRvZ2Zvb2QiLCJHYWxsYXRpbiIsIkdDQ01vZGVyYXRlIiwiR2NjSGlnaCIsIkdvdkNsb3VkIiwiSVRBUiIsIlByb2QiXTtmdW5jdGlvbiBjKCl7Y29uc3QgZT0ocigicGh5c2ljYWxSaW5nIil8fCIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBzLmZpbHRlcih0PT50LnRvTG93ZXJDYXNlKCk9PT1lKVswXXx8IlVua25vd24ifWZ1bmN0aW9uIGwoKXtjb25zdCBlPShyKCJlbnZpcm9ubWVudCIpfHwiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gdS5maWx0ZXIodD0+dC50b0xvd2VyQ2FzZSgpPT09ZSlbMF18fCJVbmtub3duIn1mdW5jdGlvbiBmKCl7Y29uc3QgZT1jKCk7cmV0dXJuIkRvZ2Zvb2QiPT1lfHwiU0RGVjIiPT1lfHwiRG9nZm9vZCI9PWwoKX1mdW5jdGlvbiBoKCl7Y29uc3QgZT1sKCk7cmV0dXJuIkFHMDgiPT1lfHwiQUcwOSI9PWV9bGV0IGQ7ZnVuY3Rpb24gcChlKXtyZXR1cm4gdigpLmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gdigpe2lmKCFkKXtjb25zdCBlPXIoImJvb3RGbGlnaHRzIik7ZD1lP2Uuc3BsaXQoIiwiKTpbXX1yZXR1cm4gZH1mdW5jdGlvbiBiKGU9IiIpe2lmKGUmJmUuaW5kZXhPZigiLyIpPi0xKXJldHVybiBlK3l9Y29uc3QgeT0iQ29sbGVjdG9yLzMuMC8iO2Z1bmN0aW9uIG0oKXtyZXR1cm4gYihyKCJhcmlhVXJsIikpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gYihyKCJjb21wYWN0QXJpYVVybCIpKX1uLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKHQsImoiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZCh0LCJrIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBtfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKX0sMTAwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oNjUpO2Z1bmN0aW9uIG8oZSx0LG4pe3JldHVybiByLmwuaW1wb3J0QW5kRXhlY3V0ZShlLHQsbil9fSwxMDI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQ/bmF2aWdhdG9yLnVzZXJBZ2VudDoiIn1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDEwMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTcpO2NvbnN0IG89e30saT0ibG9jYWxlcyI7ZnVuY3Rpb24gYShlLHQsbil7biYmT2JqZWN0KHIuaCkoaSk7bGV0IGE9b1tlXTtyZXR1cm4gYT9uJiZPYmplY3Qoci5mKShpKTooT2JqZWN0KHIuYikoImxjX3MiLHR8fCJ3cCIpLGE9YXN5bmMgZnVuY3Rpb24oZSl7bGV0IHQ9dm9pZCAwO3RyeXt0PWF3YWl0IGZldGNoKGUpfWNhdGNoKHQpe3ModCxlLCEwLDApfWNvbnN0IG49dC5zdGF0dXM7MjAwIT1uJiZzKG51bGwsZSwhMSxuKTt0cnl7cmV0dXJuIGF3YWl0IHQuanNvbigpfWNhdGNoKHQpe3ModCxlLCExKX1yZXR1cm4gbnVsbH0oZSksbiYmYS50aGVuKCgpPT57T2JqZWN0KHIuZikoaSl9KSx0JiYob1tlXT1hLGEuY2F0Y2goKCk9PntkZWxldGUgb1tlXX0pKSksYX1mdW5jdGlvbiBzKGUsdCxuLHIpe2NvbnN0IG89bmV3IEVycm9yKCJGYWlsZWQgdG8gbG9hZCBsb2NhbGl6ZWQgc3RyaW5ncyIpO3Rocm93IG8uZGlhZ25vc3RpY0luZm89SlNPTi5zdHJpbmdpZnkoe3VybDp0LHN0YXR1czpyLGlubmVyRXJyb3I6bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlfSksby5yZXF1ZXN0PXQsbiYmKG8ubmV0d29ya0Vycm9yPSEwKSxvLmh0dHBTdGF0dXM9cixvfXZhciB1PW4oMTEpLGM9bigyKTtjb25zdCBsPSJPd2FQcmVsb2FkU3RyaW5ncyI7bGV0IGY9W107ZnVuY3Rpb24gaChlKXt2YXIgdDt0cnl7Y29uc3Qgbj1PYmplY3QodS5hKSh3aW5kb3csT2JqZWN0KGMubSkoKStsKTtpZihuKXtjb25zdCByPUpTT04ucGFyc2Uobik7aWYoKG51bGw9PT0odD1yWzBdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmRleE9mKE9iamVjdChjLnUpKCkpKT4tMSlmb3IoY29uc3QgdCBvZiByKWEodCxlKX19Y2F0Y2goZSl7fX1mdW5jdGlvbiBkKGUpe2YmJmYucHVzaChlKX1mdW5jdGlvbiBwKCl7T2JqZWN0KHUuZSkod2luZG93LE9iamVjdChjLm0pKCkrbCxKU09OLnN0cmluZ2lmeShmKSksZj12b2lkIDB9bi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBkfSkpfSwxMDY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksZnVuY3Rpb24oZSl7ZS5NYWlsPSJNYWlsIixlLkNhbGVuZGFyPSJDYWxlbmRhciIsZS5QZW9wbGU9IlBlb3BsZSIsZS5GaWxlc0h1Yj0iRmlsZXNIdWIiLGUuVGFza3M9IlRhc2tzIixlLkV2ZW50aWZ5PSJFdmVudGlmeSIsZS5QdWJsaXNoZWRDYWxlbmRhcj0iUHVibGlzaGVkQ2FsZW5kYXIiLGUuTWFpbERlZXBMaW5rPSJNYWlsRGVlcExpbmsiLGUuT3JnRXhwbG9yZXI9Ik9yZ0V4cGxvcmVyIixlLkFwcEhvc3Q9IkFwcEhvc3QiLGUuQ2FsZW5kYXJEZWVwTGluaz0iQ2FsZW5kYXJEZWVwTGluayJ9KHJ8fChyPXt9KSl9LDEwNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBzfSkpO2xldCByPSExO2Z1bmN0aW9uIG8oKXtyZXR1cm4gcn1mdW5jdGlvbiBpKGUpe3I9ZX1sZXQgYT0hMTtmdW5jdGlvbiBzKGUpe2E9ZX19LDEwODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDIpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIE9iamVjdChyLmEpKCJHZXRCcG9zU2hlbGxJbmZvTmF2QmFyRGF0YSIse30sZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gT2JqZWN0KHIuYSkoIkdldEJwb3NTaGVsbEluZm9OYXZCYXJEYXRhRm9yQm9va2luZ3MiLHt9LGUpfXZhciBhPW4oMTAwKTtsZXQgcyx1O2Z1bmN0aW9uIGMoZSx0LG4pe2lmKCFzKXtzPSgiQm9va2luZ3MiPT09dD9pOm8pKHthdXRoTmVlZGVkT25VbkF1dGhvcml6ZWQ6IW59KS50aGVuKHQ9PihPYmplY3QoYS5hKSgiZ2V0QnBvc05hdkJhckRhdGFBc3luYyIse293YV8xOmUsb3dhXzI6IkZldGNoIHN1Y2NlZWRlZCJ9LHtyaW5nOiJEb2dmb29kIn0pLHU9dCkpLmNhdGNoKHQ9PihzPXZvaWQgMCxPYmplY3QoYS5hKSgiZ2V0QnBvc05hdkJhckRhdGFBc3luYyIse293YV8xOmUsb3dhXzI6IkZldGNoIGZhaWx1cmUiLG93YV8zOnQubWVzc2FnZSsiIC0gIit0LnN0YWNrfSx7cmluZzoiRG9nZm9vZCJ9KSx1PW51bGwpKX1yZXR1cm4gc31mdW5jdGlvbiBsKCl7cmV0dXJuIHN9ZnVuY3Rpb24gZigpe3JldHVybiB1fW4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBmfSkpfSwxMDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubG93PTAsdGhpcy5oaWdoPTAsdGhpcy5sb3c9cGFyc2VJbnQoZSwxMCksdGhpcy5sb3c8MCYmKHRoaXMuaGlnaD0tMSl9cmV0dXJuIGUucHJvdG90eXBlLkVxdWFscz1mdW5jdGlvbih0KXt2YXIgbj1uZXcgZSh0KTtyZXR1cm4gdGhpcy5sb3c9PT1uLmxvdyYmdGhpcy5oaWdoPT09bi5oaWdofSxlfSgpO3QuSW50NjQ9cjt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5sb3c9MCx0aGlzLmhpZ2g9MCx0aGlzLmxvdz1wYXJzZUludChlLDEwKX1yZXR1cm4gZS5wcm90b3R5cGUuRXF1YWxzPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBlKHQpO3JldHVybiB0aGlzLmxvdz09PW4ubG93JiZ0aGlzLmhpZ2g9PT1uLmhpZ2h9LGV9KCk7dC5VSW50NjQ9bzt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuVG9CeXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlRvVUludDgoZSl9LGUuVG9JbnQxNj1mdW5jdGlvbihlKXtyZXR1cm4gMzI3NjcmZXwoMzI3NjgmZSk8PDE2Pj4xNn0sZS5Ub0ludDMyPWZ1bmN0aW9uKGUpe3JldHVybiAyMTQ3NDgzNjQ3JmV8MjE0NzQ4MzY0OCZlfSxlLlRvVUludDg9ZnVuY3Rpb24oZSl7cmV0dXJuIDI1NSZlfSxlLlRvVUludDMyPWZ1bmN0aW9uKGUpe3JldHVybiA0Mjk0OTY3Mjk1JmV9LGV9KCk7dC5OdW1iZXI9aX0sMTE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEyKTtmdW5jdGlvbiBvKGUsdCxuKXtpZih1KGUpKXRyeXtlLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsbil9Y2F0Y2goZSl7fX1mdW5jdGlvbiBpKGUsdCl7dmFyIG47dHJ5e2lmKHUoZSkpcmV0dXJuIGUubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7e2NvbnN0IGU9T2JqZWN0KHIuYSkoKTtyZXR1cm4gbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXRJdGVtKHQpfX1jYXRjaChlKXtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYShlLHQpe2lmKHUoZSkpcmV0dXJuIGUubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBudWxsIT09aShlLHQpfWZ1bmN0aW9uIHUoZSl7dHJ5e3JldHVybiBlJiYhIWUubG9jYWxTdG9yYWdlfWNhdGNoKGUpe3JldHVybiExfX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBvfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiB1fSkpfSwxMTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjshZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5FcnJvcj0xXT0iRXJyb3IiLGVbZS5EZWJ1Z0Vycm9yPTJdPSJEZWJ1Z0Vycm9yIixlW2UuV2FybmluZz0zXT0iV2FybmluZyIsZVtlLkluZm89NF09IkluZm8iLGVbZS5WZXJib3NlPTVdPSJWZXJib3NlIn0ocnx8KHI9e30pKSx0LmE9cn0sMTExOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJoIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwibSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsIm4iLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBofSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSksbi5kKHQsImoiLChmdW5jdGlvbigpe3JldHVybiB2fSkpLG4uZCh0LCJsIiwoZnVuY3Rpb24oKXtyZXR1cm4gYn0pKSxuLmQodCwiayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsIm8iLChmdW5jdGlvbigpe3JldHVybiBtfSkpLG4uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKTt2YXIgcj1uKDQpLG89bigxMDcpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5hfSkpO2NvbnN0IGk9bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxNyksbi5lKDkxMCldKS50aGVuKG4uYmluZChudWxsLDQ4MikpKSxhPW5ldyByLmEoaSxlPT5lLmdldEF1dGhUb2tlbkZyb21NZXRhT3NIdWIpLHM9bmV3IHIuYShpLGU9PmUuZ2V0T3dhQXV0aFRva2VuRnJvbU1ldGFPc0h1YiksdT1uZXcgci5hKGksZT0+ZS5vcGVuQ2FsZW5kYXJJdGVtKSxjPShuZXcgci5hKGksZT0+ZS5jb21wb3NlTWVldGluZyksbmV3IHIuYShpLGU9PmUub3Blbk1haWxJdGVtKSksbD1uZXcgci5hKGksZT0+ZS5jb21wb3NlTWFpbCksZj1uZXcgci5hKGksZT0+ZS5leGVjdXRlRGVlcExpbmspLGg9bmV3IHIuYShpLGU9PmUuZ2V0Q29udGV4dCksZD1uZXcgci5hKGksZT0+ZS5jaGVja0NhbGVuZGFyQ2FwYWJpbGl0eSkscD1uZXcgci5hKGksZT0+ZS5jaGVja01haWxDYXBhYmlsaXR5KSx2PW5ldyByLmEoaSxlPT5lLmlzRGFya1RoZW1lKSxiPShuZXcgci5hKGksZT0+ZS5yZWdpc3RlckhhbmRsZXJzKSxuZXcgci5hKGksZT0+ZS5qb2luVGVhbXNNZWV0aW5nKSxuZXcgci5hKGksZT0+ZS5tb2RhbE9wZW5lZCksbmV3IHIuYShpLGU9PmUuc3VibWl0VGFzayksbmV3IHIuYShpLGU9PmUubm90aWZ5U3VjY2VzcykpLHk9bmV3IHIuYShpLGU9PmUubm90aWZ5QXBwTG9hZGVkKSxtPShuZXcgci5hKGksZT0+ZS5uYXZpZ2F0ZVRvVmlldyksbmV3IHIuYShpLGU9PmUuc2VuZFBMVERhdGFQb2ludCksbmV3IHIuYShpLGU9PmUucmVnaXN0ZXJJc0RhcmtUaGVtZU9uQ2hhbmdlSGFuZGxlcikpLGc9bmV3IHIuYShpLGU9PmUuaW5pdGlhbGl6ZU1ldGFPc0NhcGFiaWxpdGllcyl9LDExMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDA5KSxvPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaT1yLmF8fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dC5hPWl9LDExNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkzKSxvPW4oMzkpLGk9bigzMSk7ZnVuY3Rpb24gYShlKXtjb25zdHticm93c2VyVmVyc2lvbjp0fT1PYmplY3Qoby5hKSgpO2lmKGUubGVuZ3RoPnQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWlmKHRbbl0hPT1lW25dKXJldHVybiB0W25dPmVbbl07cmV0dXJuITB9bi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiByLmp9KSksbi5kKHQsInAiLChmdW5jdGlvbigpe3JldHVybiByLm19KSksbi5kKHQsImsiLChmdW5jdGlvbigpe3JldHVybiByLml9KSksbi5kKHQsIm8iLChmdW5jdGlvbigpe3JldHVybiByLmx9KSksbi5kKHQsIm4iLChmdW5jdGlvbigpe3JldHVybiByLmt9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiByLmd9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiByLmF9KSksbi5kKHQsImoiLChmdW5jdGlvbigpe3JldHVybiByLmh9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiByLmJ9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiByLmR9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiByLmN9KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiByLmZ9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiByLmV9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvLmF9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpLmF9KSksbi5kKHQsIm0iLChmdW5jdGlvbigpe3JldHVybiBhfSkpfSwxMTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJigib2JqZWN0Ij09dHx8ImZ1bmN0aW9uIj09dCl9fSwxMTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO2xldCByPXt9O2Z1bmN0aW9uIG8oZSl7cj1lfWZ1bmN0aW9uIGkoKXtyZXR1cm4gcn19LDExOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9bigxMSk7Y29uc3Qgbz0iTG9naWNhbFJpbmciO2xldCBpO2Z1bmN0aW9uIGEoZSl7aT1lLE9iamVjdChyLmUpKHNlbGYsbyxlKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGl8fChpPU9iamVjdChyLmEpKHNlbGYsbykpLGl9fSwxMjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2NsYXNzIHJ7Z2V0IGxvY2F0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn1nZXQgaW5uZXJIZWlnaHQoKXtyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0fWdldCBpbm5lcldpZHRoKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRofWdldCBuYXRpdmVIb3N0KCl7cmV0dXJuIHdpbmRvdy5uYXRpdmVIb3N0fWdldCBtZXRhdGFncygpe3JldHVybiBBcnJheS5mcm9tKHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWV0YSIpKX1nZXQgZG9jdW1lbnQoKXtyZXR1cm4gd2luZG93LmRvY3VtZW50fWdldCBpc1B3YSgpe3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSkiKS5tYXRjaGVzfWdldCBjb29raWUoKXtyZXR1cm4gd2luZG93LmRvY3VtZW50LmNvb2tpZX1nZXQgbG9jYWxTdG9yYWdlKCl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2V9fWxldCBvO2Z1bmN0aW9uIGkoKXtyZXR1cm4gb3x8InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fChvPW5ldyByKSxvfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX0sMTIwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oMiksbz1uKDEwKSxpPW4oMTIxKSxhPW4oMTE0KSxzPW4oNTYpLHU9big1KTtmdW5jdGlvbiBjKGUsdCl7Y29uc3Qgbj1PYmplY3QoYS5hKSgpLGM9T2JqZWN0KGEuYikoKSxsPXtBcHBOYW1lOk9iamVjdChyLm0pKCksVXNlckFnZW50OndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LEV4cGxpY2l0TG9nb246T2JqZWN0KGkuYSkod2luZG93KSxQdWlkOk9iamVjdChzLmMpKCksVGVuYW50R3VpZDpPYmplY3Qocy5kKSgpLE1CWEd1aWQ6T2JqZWN0KHMuYSkoKSxJc1ByZW1pdW06T2JqZWN0KHMuYikoKSxDbGllbnRJZDpPYmplY3Qoci50KSgpLFJlZlVybDpPYmplY3Qoci5JKSgpLENsaWVudFZlcnNpb246T2JqZWN0KHIudSkoKSxCRVNlcnZlcjoobnVsbD09dD92b2lkIDA6dC5lYmUpfHxPYmplY3Qoci5uKSgpLEZFU2VydmVyOihudWxsPT10P3ZvaWQgMDp0LmVmZSl8fE9iamVjdChyLnopKCksVGhyb3VnaEVkZ2U6T2JqZWN0KHIuTikoKSxTZXJ2aWNlVmVyc2lvbjpPYmplY3Qoci5MKSgpLERhZzpPYmplY3Qoci53KSgpLEZvcmVzdDpPYmplY3Qoci55KSgpLERlcGxveVJpbmc6T2JqZWN0KHIuRCkoKSwiU2Vzc2lvbi5JZCI6T2JqZWN0KHIuTSkoKSxQaHlzaWNhbFJpbmc6T2JqZWN0KG8uZykoKSxWYXJpYW50RW52Ok9iamVjdChvLmgpKCksQnJvd3Nlck5hbWU6bi5icm93c2VyLEhvc3Q6T2JqZWN0KHIuQikoKSxCcm93c2VyVmVyc2lvbjpuLmJyb3dzZXJWZXJzaW9uLnRvU3RyaW5nKCksT3NOYW1lOmMub3MsT3NWZXJzaW9uOmMub3NWZXJzaW9uLFJldHJ5U3RyYXRlZ3k6T2JqZWN0KHUuYykoImJPIiksSXNDb25zdW1lcjpPYmplY3Qocy5lKSgpLExheW91dDpPYmplY3Qoci5DKSgpfTtyZXR1cm4gdCYmKGwuRXJyb3JUeXBlPXQuZXQsbC5FcnJvclNvdXJjZT10LmVzcmMsbC5FcnJvcj10LmVycixsLkV4dHJhRXJyb3JJbmZvPU9iamVjdChyLlQpKHQuZXN0YWNrKSxsLlN0YXR1c0NvZGU9dC5zdCxsLlJlcXVlc3RJZD10LnJlcWlkKSx7bmFtZTplLHByb3BlcnRpZXM6bH19fSwxMjE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7Y29uc3Qgcj0vXC9bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1wuW2Etel17Mix9XC8vO2Z1bmN0aW9uIG8oZSl7dmFyIHQ7cmV0dXJuISEobnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUubG9jYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhyZWYpJiZyLnRlc3QoZS5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCkpfX0sMTIyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oMTIxKSxvPW4oNDYpO2NvbnN0IGk9ezA6Im5ldHdvcmsiLDQwMToiYXV0aCIsNDQwOiJhdXRoIn0sYT1bIkV4cGlyZWRCdWlsZCIsIlBvaXNvbmVkQnVpbGQiXSxzPVsiT3dhSW52YWxpZFRpbWV6b25lRXhjZXB0aW9uIiwiT3dhSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiIsIk93YUludmFsaWRVc2VyTGFuZ3VhZ2VFeGNlcHRpb24iXSx1PVsiQWNjZXNzRGVuaWVkRXhjZXB0aW9uIiwiTWFpbGJveFVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiT3dhRXhwbGljaXRMb2dvbkV4Y2VwdGlvbiIsIk93YUFET2JqZWN0Tm90Rm91bmRFeGNlcHRpb24iXTtmdW5jdGlvbiBjKGUsdCxuKXtjb25zdCBjPXQuZXJyO2lmKE9iamVjdChvLmYpKHMsYykpcmV0dXJuImxhbmd0eiI7aWYoT2JqZWN0KG8uZykoYykpcmV0dXJuInRocm90dGxlIjtpZihPYmplY3Qoby5hKShjKSlyZXR1cm4iY29uZmlndXJhdGlvbiI7aWYoT2JqZWN0KG8uYykoYyl8fGUmJk9iamVjdChvLmUpKGUuc3RhY2spfHx3aW5kb3cub3dhQmFja2ZpbGxlZEVycm9ycyYmd2luZG93Lm93YUJhY2tmaWxsZWRFcnJvcnMuZmlsdGVyKGU9Pk9iamVjdChvLmMpKGVbMF0pKS5sZW5ndGg+MClyZXR1cm4ibWVtb3J5IjtpZihlKXtjb25zdCB0PWUucmVzcG9uc2U7aWYoKG51bGw9PXQ/dm9pZCAwOnQudXJsKSYmdC51cmwudG9Mb3dlckNhc2UoKS5pbmRleE9mKCIvYXV0aC9lcnJvcmZlLmFzcHgiKT4tMSlyZXR1cm4iZXJyb3JmZSI7aWYoZS5yZXF1ZXN0KXJldHVybiJjZG5FcnJvciJ9Y29uc3QgbD10LmVzcmM7aWYobCYmYS5pbmRleE9mKGwpPi0xKXJldHVybiBsO2NvbnN0IGY9dC5zdDtyZXR1cm4iSW5pdExvYyI9PWwmJjAhPWY/ImZhaWwiOk9iamVjdChyLmEpKHdpbmRvdykmJk9iamVjdChvLmYpKHUsYyk/ImFjY2Vzc0RlbmllZCI6T2JqZWN0KG8uaCkoYyl8fDUwMz09Zj8idHJhbnNpZW50IjpPYmplY3Qoby5kKShjLGUpPyJuZXR3b3JrIjppW2ZdfHwiZmFpbCJ9fSwxMjM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSk7Y29uc3Qgcj0xZTR9LDEyNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSksbz1uKDEyMyksaT1uKDQ0KSxhPW4oMTIwKSxzPW4oMzMpLHU9bigxOTApLGM9big3MiksbD1uKDcxKTthc3luYyBmdW5jdGlvbiBmKCl7dHJ5e2xldCBlPWF3YWl0IE9iamVjdCh1LmEpKCk7Y29uc3QgdD1lLmhlYWRlcnMuZ2V0KCJYLU9XQS1FcnJvciIpO2lmKHQpdGhyb3cgbmV3IEVycm9yKHQpO2lmKGUuc3RhdHVzPj00MDApdGhyb3cgT2JqZWN0KGwuYSkoZSk7YXdhaXQgaS5hKGgoImxhbmdwb3N0X3N1Y2Nlc3MiKSl9Y2F0Y2goZSl7Y29uc3QgdD1PYmplY3Qocy5hKShlLCJMYW5nUG9zdCIsd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLGUuc3RhdHVzKTthd2FpdCBpLmEoaCgibGFuZ3Bvc3RfZXJyb3IiLE9iamVjdChjLmEpKHQpKSl9fWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtPYmplY3QoYS5hKShlLHQpXSl9dmFyIGQ9bigxMyk7ZnVuY3Rpb24gcChlLHQsbil7Y29uc3QgaT1PYmplY3Qoci5jKSgiYk8iKTtpZih2b2lkIDAhPT1pJiYiNCIhPT1pKXJldHVybiBudWxsO2lmKG4mJiJTdGFydHVwRGF0YSI9PXQpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UibGFuZ3R6IjpyZXR1cm57c3RyYXRlZ3k6IjEiLHdhaXRGb3I6ZigpfTtjYXNlImF1dGgiOnJldHVybiBPYmplY3QoZC5hKSgpLmdldEF1dGhUb2tlbiYmIW4/e3N0cmF0ZWd5OiIxIn06bnVsbDtjYXNlInRocm90dGxlIjpjYXNlImVycm9yZmUiOmNhc2UiYWNjZXNzRGVuaWVkIjpjYXNlImNvbmZpZ3VyYXRpb24iOnJldHVybiBudWxsO2Nhc2UiRXhwaXJlZEJ1aWxkIjpjYXNlIlBvaXNvbmVkQnVpbGQiOnJldHVybiI0Ij09PWk/bnVsbDp7c3RyYXRlZ3k6IjQifTtjYXNlInRyYW5zaWVudCI6cmV0dXJue3N0cmF0ZWd5OiIxIix0aW1lb3V0Om8uYX07ZGVmYXVsdDpyZXR1cm57c3RyYXRlZ3k6IkluaXRMb2MiPT10PyIyIjoiMSJ9fX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSl9LDEyNTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiYoblt0XT1yKX0pKX0pKSxufW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sMTI1NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOCksbz1uKDQ3MyksaT0obigxOSksbigyNDcpKTtmdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj0wO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKG4sbyl7dC5jYWxsKHRoaXMsbixvLGUpJiYoZVtyKytdPW4pfSksbiksZS5sZW5ndGg9cixlfXZhciBzPW4oOTApLHU9bigzMTMpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKTt2YXIgYz17a2luZDoiRmllbGQiLG5hbWU6e2tpbmQ6Ik5hbWUiLHZhbHVlOiJfX3R5cGVuYW1lIn19O2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gdC5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIkZyYWdtZW50U3ByZWFkIj09PXQua2luZCYmZShuW3QubmFtZS52YWx1ZV0sbil9KSl9KE9iamVjdChpLmYpKGUpfHxPYmplY3QoaS5jKShlKSxPYmplY3QodS5hKShPYmplY3QoaS5kKShlKSkpP251bGw6ZX1mdW5jdGlvbiBmKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lJiZlLm5hbWU9PT10Lm5hbWUudmFsdWV8fGUudGVzdCYmZS50ZXN0KHQpfSkpfX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPVtdLHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPVtdLGg9bChPYmplY3Qoby5jKSh0LHtWYXJpYWJsZTp7ZW50ZXI6ZnVuY3Rpb24oZSx0LHIpeyJWYXJpYWJsZURlZmluaXRpb24iIT09ci5raW5kJiYobltlLm5hbWUudmFsdWVdPSEwKX19LEZpZWxkOntlbnRlcjpmdW5jdGlvbih0KXtpZihlJiZ0LmRpcmVjdGl2ZXMmJihlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbW92ZX0pKSYmdC5kaXJlY3RpdmVzJiZ0LmRpcmVjdGl2ZXMuc29tZShmKGUpKSkpcmV0dXJuIHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXsiVmFyaWFibGUiPT09ZS52YWx1ZS5raW5kJiZpLnB1c2goe25hbWU6ZS52YWx1ZS5uYW1lLnZhbHVlfSl9KSksdC5zZWxlY3Rpb25TZXQmJmZ1bmN0aW9uIGUodCl7dmFyIG49W107cmV0dXJuIHQuc2VsZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXsoT2JqZWN0KHMuZCkodCl8fE9iamVjdChzLmUpKHQpKSYmdC5zZWxlY3Rpb25TZXQ/ZSh0LnNlbGVjdGlvblNldCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ucHVzaChlKX0pKToiRnJhZ21lbnRTcHJlYWQiPT09dC5raW5kJiZuLnB1c2godCl9KSksbn0odC5zZWxlY3Rpb25TZXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2MucHVzaCh7bmFtZTplLm5hbWUudmFsdWV9KX0pKSxudWxsfX0sRnJhZ21lbnRTcHJlYWQ6e2VudGVyOmZ1bmN0aW9uKGUpe3VbZS5uYW1lLnZhbHVlXT0hMH19LERpcmVjdGl2ZTp7ZW50ZXI6ZnVuY3Rpb24odCl7aWYoZihlKSh0KSlyZXR1cm4gbnVsbH19fSkpO3JldHVybiBoJiZhKGksKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5uYW1lJiYhbltlLm5hbWVdfSkpLmxlbmd0aCYmKGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsdWUmJiJWYXJpYWJsZSI9PT10LnZhbHVlLmtpbmQmJnQudmFsdWUubmFtZSYmKGUubmFtZT09PXQudmFsdWUubmFtZS52YWx1ZXx8ZS50ZXN0JiZlLnRlc3QodCkpfSkpfX0oZSk7cmV0dXJuIGwoT2JqZWN0KG8uYykodCx7T3BlcmF0aW9uRGVmaW5pdGlvbjp7ZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHQpLHt2YXJpYWJsZURlZmluaXRpb25zOnQudmFyaWFibGVEZWZpbml0aW9ucz90LnZhcmlhYmxlRGVmaW5pdGlvbnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC52YXJpYWJsZS5uYW1lLnZhbHVlfSkpfSkpOltdfSl9fSxGaWVsZDp7ZW50ZXI6ZnVuY3Rpb24odCl7aWYoZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW1vdmV9KSkpe3ZhciByPTA7aWYodC5hcmd1bWVudHMmJnQuYXJndW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24oZSkmJihyKz0xKX0pKSwxPT09cilyZXR1cm4gbnVsbH19fSxBcmd1bWVudDp7ZW50ZXI6ZnVuY3Rpb24oZSl7aWYobihlKSlyZXR1cm4gbnVsbH19fSkpfShpLGgpKSxoJiZhKGMsKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5uYW1lJiYhdVtlLm5hbWVdfSkpLmxlbmd0aCYmKGg9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe2lmKGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXQubmFtZS52YWx1ZX0pKSlyZXR1cm4gbnVsbH1yZXR1cm4gbChPYmplY3Qoby5jKSh0LHtGcmFnbWVudFNwcmVhZDp7ZW50ZXI6bn0sRnJhZ21lbnREZWZpbml0aW9uOntlbnRlcjpufX0pKX0oYyxoKSksaH1mdW5jdGlvbiBkKGUpe3JldHVybiBPYmplY3Qoby5jKShPYmplY3QoaS5hKShlKSx7U2VsZWN0aW9uU2V0OntlbnRlcjpmdW5jdGlvbihlLHQsbil7aWYoIW58fCJPcGVyYXRpb25EZWZpbml0aW9uIiE9PW4ua2luZCl7dmFyIG89ZS5zZWxlY3Rpb25zO2lmKG8paWYoIW8uc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChzLmQpKGUpJiYoIl9fdHlwZW5hbWUiPT09ZS5uYW1lLnZhbHVlfHwwPT09ZS5uYW1lLnZhbHVlLmxhc3RJbmRleE9mKCJfXyIsMCkpfSkpKXt2YXIgaT1uO2lmKCEoT2JqZWN0KHMuZCkoaSkmJmkuZGlyZWN0aXZlcyYmaS5kaXJlY3RpdmVzLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJleHBvcnQiPT09ZS5uYW1lLnZhbHVlfSkpKSlyZXR1cm4gT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sZSkse3NlbGVjdGlvbnM6T2JqZWN0KHIuZikobyxbY10pfSl9fX19fSl9ZC5hZGRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWN9O3ZhciBwPXt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PSJjb25uZWN0aW9uIj09PWUubmFtZS52YWx1ZTtyZXR1cm4gdCYmKCFlLmFyZ3VtZW50c3x8ZS5hcmd1bWVudHMuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuImtleSI9PT1lLm5hbWUudmFsdWV9KSkpLHR9fTtmdW5jdGlvbiB2KGUpe3JldHVybiBoKFtwXSxPYmplY3QoaS5hKShlKSl9ZnVuY3Rpb24gYihlKXtyZXR1cm4icXVlcnkiPT09T2JqZWN0KGkuZSkoZSkub3BlcmF0aW9uP2U6T2JqZWN0KG8uYykoZSx7T3BlcmF0aW9uRGVmaW5pdGlvbjp7ZW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUpLHtvcGVyYXRpb246InF1ZXJ5In0pfX19KX1mdW5jdGlvbiB5KGUpe09iamVjdChpLmEpKGUpO3ZhciB0PWgoW3t0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiJjbGllbnQiPT09ZS5uYW1lLnZhbHVlfSxyZW1vdmU6ITB9XSxlKTtyZXR1cm4gdCYmKHQ9T2JqZWN0KG8uYykodCx7RnJhZ21lbnREZWZpbml0aW9uOntlbnRlcjpmdW5jdGlvbihlKXtpZihlLnNlbGVjdGlvblNldCYmZS5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucy5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChzLmQpKGUpJiYiX190eXBlbmFtZSI9PT1lLm5hbWUudmFsdWV9KSkpcmV0dXJuIG51bGx9fX0pKSx0fX0sMTI4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiBsfSkpO3ZhciByPW4oMTEwKSxvPW4oMzUwKTtjb25zdCBpPVtdO2Z1bmN0aW9uIGEoZSl7aS5wdXNoKGUpfWZ1bmN0aW9uIHMoZSx0LG4pe2kuZm9yRWFjaChyPT57cihlLHQsbil9KX1mdW5jdGlvbiB1KGUsdCl7ZihyLmEuRGVidWdFcnJvcixlLHQpfWZ1bmN0aW9uIGMoZSx0KXtmKHIuYS5FcnJvcixlLHQpfWZ1bmN0aW9uIGwoZSx0KXtpZihmKHIuYS5FcnJvcixlLHQpLCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoZSk7dGhyb3cgZXx8bmV3IEVycm9yKCJVbmtub3duRXJyb3IiKX1mdW5jdGlvbiBmKGUsdCxuKXt2YXIgcjtsZXQgaSxhOyJzdHJpbmciPT10eXBlb2YgdD8oYT10LGk9T2JqZWN0KG8uYSkobil8fG5ldyBFcnJvcih0KSk6KGk9dHx8bmV3IEVycm9yKCJVbmtub3duRXJyb3IiKSxhPWkubWVzc2FnZSksKG51bGw9PT0ocj1pLmVycm9yKXx8dm9pZCAwPT09cj92b2lkIDA6ci5tZXNzYWdlKSYmaS5lcnJvci5zdGFjayYmKGE9aS5lcnJvci5tZXNzYWdlLGkuc3RhY2s9aS5lcnJvci5zdGFjayxpLm5hbWU9aS5lcnJvci5uYW1lKSxpLmNvbXBvbmVudD9hPSJDT01QT05FTlQgRVJST1I6ICIraS5tZXNzYWdlOmkuc2NyaXB0RXZhbCYmKGE9IkVWQUwgRVJST1I6ICIraS5tZXNzYWdlKSxzKGF8fCIiLGUsaSl9dC5iPXtpbmZvOmZ1bmN0aW9uKGUpe3MoZSxyLmEuSW5mbyl9LHdhcm46ZnVuY3Rpb24oZSl7cyhlLHIuYS5XYXJuaW5nKX0sdmVyYm9zZTpmdW5jdGlvbihlKXtzKGUsci5hLlZlcmJvc2UpfX19LDEzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTtjb25zdCByPXtiYXNlVXJsOiIvb3dhIixpc0ZlYXR1cmVFbmFibGVkOigpPT4hMSxwcmVmZXRjaFRhc2tRdWV1ZTpuZXcobigxNzEpLmEpKHt0YXNrUXVhbnRhOi0xfSksdGltZW91dE1TOjllNCxkaXNhYmxlQWxsUmVxdWVzdHM6ITF9O2xldCBvPXI7ZnVuY3Rpb24gaShlKXtvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSxlKX1mdW5jdGlvbiBhKCl7cmV0dXJuIG99fSwxMzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTYpLG89MztmdW5jdGlvbiBpKCl7ZS5fX3NhdGNoZWxHbG9iYWxDb250ZXh0PXtzY2hlbWFWZXJzaW9uOm8scm9vdFN0b3JlOnIub2JzZXJ2YWJsZS5tYXAoe30pLG5leHRBY3Rpb25JZDowLHN1YnNjcmlwdGlvbnM6e30sZGlzcGF0Y2hXaXRoTWlkZGxld2FyZTpudWxsLGN1cnJlbnRNdXRhdG9yOm51bGwsbGVnYWN5SW5EaXNwYXRjaDowLGxlZ2FjeURpc3BhdGNoV2l0aE1pZGRsZXdhcmU6bnVsbCxsZWdhY3lUZXN0TW9kZTohMX19ZnVuY3Rpb24gYSgpe2lmKG8hPWUuX19zYXRjaGVsR2xvYmFsQ29udGV4dC5zY2hlbWFWZXJzaW9uKXRocm93IG5ldyBFcnJvcigiRGV0ZWN0ZWQgaW5jb21wYXRpYmxlIFNhdGNoZWxKUyB2ZXJzaW9ucyBsb2FkZWQuIil9dC5fX3Jlc2V0R2xvYmFsQ29udGV4dD1pLHQuZW5zdXJlR2xvYmFsQ29udGV4dFNjaGVtYVZlcnNpb249YSx0LmdldEdsb2JhbENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX3NhdGNoZWxHbG9iYWxDb250ZXh0fSxlLl9fc2F0Y2hlbEdsb2JhbENvbnRleHQ/YSgpOmkoKX0pLmNhbGwodGhpcyxuKDE0MSkpfSwxMzI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKTtsZXQgcixvPSExO2Z1bmN0aW9uIGkoZSx0KXtpZihvKXRocm93IG5ldyBFcnJvcigiQ2FsbHMgdG8gcHJlZmV0Y2goKSBtYXkgbm90IGJlIG5lc3RlZC4iKTt0cnl7bz0hMCxyPXQsZSgpfWZpbmFsbHl7bz0hMSxyPXZvaWQgMH19ZnVuY3Rpb24gYSgpe3JldHVybiBvfWZ1bmN0aW9uIHMoKXtyZXR1cm4gcn19LDEzNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCl9LG89QXJyYXkucHJvdG90eXBlLGk9by5mb3JFYWNoLGE9by5zbGljZSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPSEwKSx2b2lkIDA9PT10JiYodD1yKSx0aGlzLndlYWtuZXNzPWUsdGhpcy5tYWtlRGF0YT10fXJldHVybiBlLnByb3RvdHlwZS5sb29rdXA9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIHRoaXMubG9va3VwQXJyYXkoZSl9LGUucHJvdG90eXBlLmxvb2t1cEFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGkuY2FsbChlLChmdW5jdGlvbihlKXtyZXR1cm4gdD10LmdldENoaWxkVHJpZShlKX0pKSx0LmRhdGF8fCh0LmRhdGE9dGhpcy5tYWtlRGF0YShhLmNhbGwoZSkpKX0sZS5wcm90b3R5cGUuZ2V0Q2hpbGRUcmllPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMud2Vha25lc3MmJmZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOmlmKG51bGw9PT1lKWJyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiEwfXJldHVybiExfSh0KT90aGlzLndlYWt8fCh0aGlzLndlYWs9bmV3IFdlYWtNYXApOnRoaXMuc3Ryb25nfHwodGhpcy5zdHJvbmc9bmV3IE1hcCkscj1uLmdldCh0KTtyZXR1cm4gcnx8bi5zZXQodCxyPW5ldyBlKHRoaXMud2Vha25lc3MsdGhpcy5tYWtlRGF0YSkpLHJ9LGV9KCk7dmFyIHU9bigyMzEpO2Z1bmN0aW9uIGMoKXt9bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBQfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gQn0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIGwsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0xLzApLHZvaWQgMD09PXQmJih0PWMpLHRoaXMubWF4PWUsdGhpcy5kaXNwb3NlPXQsdGhpcy5tYXA9bmV3IE1hcCx0aGlzLm5ld2VzdD1udWxsLHRoaXMub2xkZXN0PW51bGx9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXROb2RlKGUpO3JldHVybiB0JiZ0LnZhbHVlfSxlLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWFwLmdldChlKTtpZih0JiZ0IT09dGhpcy5uZXdlc3Qpe3ZhciBuPXQub2xkZXIscj10Lm5ld2VyO3ImJihyLm9sZGVyPW4pLG4mJihuLm5ld2VyPXIpLHQub2xkZXI9dGhpcy5uZXdlc3QsdC5vbGRlci5uZXdlcj10LHQubmV3ZXI9bnVsbCx0aGlzLm5ld2VzdD10LHQ9PT10aGlzLm9sZGVzdCYmKHRoaXMub2xkZXN0PXIpfXJldHVybiB0fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldE5vZGUoZSk7cmV0dXJuIG4/bi52YWx1ZT10OihuPXtrZXk6ZSx2YWx1ZTp0LG5ld2VyOm51bGwsb2xkZXI6dGhpcy5uZXdlc3R9LHRoaXMubmV3ZXN0JiYodGhpcy5uZXdlc3QubmV3ZXI9biksdGhpcy5uZXdlc3Q9bix0aGlzLm9sZGVzdD10aGlzLm9sZGVzdHx8bix0aGlzLm1hcC5zZXQoZSxuKSxuLnZhbHVlKX0sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IoO3RoaXMub2xkZXN0JiZ0aGlzLm1hcC5zaXplPnRoaXMubWF4Oyl0aGlzLmRlbGV0ZSh0aGlzLm9sZGVzdC5rZXkpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXAuZ2V0KGUpO3JldHVybiEhdCYmKHQ9PT10aGlzLm5ld2VzdCYmKHRoaXMubmV3ZXN0PXQub2xkZXIpLHQ9PT10aGlzLm9sZGVzdCYmKHRoaXMub2xkZXN0PXQubmV3ZXIpLHQubmV3ZXImJih0Lm5ld2VyLm9sZGVyPXQub2xkZXIpLHQub2xkZXImJih0Lm9sZGVyLm5ld2VyPXQubmV3ZXIpLHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzLmRpc3Bvc2UodC52YWx1ZSxlKSwhMCl9LGV9KCksaD1uZXcgdS5hLGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXZvaWQgMD09PShsPUFycmF5LmZyb20pP2Z1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSl9KSksdH06bDtmdW5jdGlvbiB2KGUpe3ZhciB0PWUudW5zdWJzY3JpYmU7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihlLnVuc3Vic2NyaWJlPXZvaWQgMCx0KCkpfXZhciBiPVtdLHk9MTAwO2Z1bmN0aW9uIG0oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodHx8ImFzc2VydGlvbiBmYWlsdXJlIil9ZnVuY3Rpb24gZyhlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdmFsdWUiKTtjYXNlIDE6cmV0dXJuIGVbMF07Y2FzZSAyOnRocm93IGVbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmZuPXQsdGhpcy5wYXJlbnRzPW5ldyBTZXQsdGhpcy5jaGlsZFZhbHVlcz1uZXcgTWFwLHRoaXMuZGlydHlDaGlsZHJlbj1udWxsLHRoaXMuZGlydHk9ITAsdGhpcy5yZWNvbXB1dGluZz0hMSx0aGlzLnZhbHVlPVtdLHRoaXMuZGVwcz1udWxsLCsrZS5jb3VudH1yZXR1cm4gZS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe2lmKDE9PT10aGlzLnZhbHVlLmxlbmd0aCYmIUUodGhpcykpcmV0dXJuIHcodGhpcyksdGhpcy52YWx1ZVswXX0sZS5wcm90b3R5cGUucmVjb21wdXRlPWZ1bmN0aW9uKGUpe3JldHVybiBtKCF0aGlzLnJlY29tcHV0aW5nLCJhbHJlYWR5IHJlY29tcHV0aW5nIiksdyh0aGlzKSxFKHRoaXMpP2Z1bmN0aW9uKGUsdCl7QyhlKSxoLndpdGhWYWx1ZShlLGosW2UsdF0pLGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc3Vic2NyaWJlKXRyeXt2KGUpLGUudW5zdWJzY3JpYmU9ZS5zdWJzY3JpYmUuYXBwbHkobnVsbCx0KX1jYXRjaCh0KXtyZXR1cm4gZS5zZXREaXJ0eSgpLCExfXJldHVybiEwfShlLHQpJiZmdW5jdGlvbihlKXtpZihlLmRpcnR5PSExLEUoZSkpcmV0dXJuO0EoZSl9KGUpO3JldHVybiBnKGUudmFsdWUpfSh0aGlzLGUpOmcodGhpcy52YWx1ZSl9LGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eXx8KHRoaXMuZGlydHk9ITAsdGhpcy52YWx1ZS5sZW5ndGg9MCxTKHRoaXMpLHYodGhpcykpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnNldERpcnR5KCksQyh0aGlzKSxrKHRoaXMsKGZ1bmN0aW9uKHQsbil7dC5zZXREaXJ0eSgpLE0odCxlKX0pKX0sZS5wcm90b3R5cGUuZm9yZ2V0PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LGUucHJvdG90eXBlLmRlcGVuZE9uPWZ1bmN0aW9uKGUpe2UuYWRkKHRoaXMpLHRoaXMuZGVwc3x8KHRoaXMuZGVwcz1iLnBvcCgpfHxuZXcgU2V0KSx0aGlzLmRlcHMuYWRkKGUpfSxlLnByb3RvdHlwZS5mb3JnZXREZXBzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmRlcHMmJihwKHRoaXMuZGVwcykuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVsZXRlKGUpfSkpLHRoaXMuZGVwcy5jbGVhcigpLGIucHVzaCh0aGlzLmRlcHMpLHRoaXMuZGVwcz1udWxsKX0sZS5jb3VudD0wLGV9KCk7ZnVuY3Rpb24gdyhlKXt2YXIgdD1oLmdldFZhbHVlKCk7aWYodClyZXR1cm4gZS5wYXJlbnRzLmFkZCh0KSx0LmNoaWxkVmFsdWVzLmhhcyhlKXx8dC5jaGlsZFZhbHVlcy5zZXQoZSxbXSksRShlKT9JKHQsZSk6VCh0LGUpLHR9ZnVuY3Rpb24gaihlLHQpe2UucmVjb21wdXRpbmc9ITAsZS52YWx1ZS5sZW5ndGg9MDt0cnl7ZS52YWx1ZVswXT1lLmZuLmFwcGx5KG51bGwsdCl9Y2F0Y2godCl7ZS52YWx1ZVsxXT10fWUucmVjb21wdXRpbmc9ITF9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5kaXJ0eXx8ISghZS5kaXJ0eUNoaWxkcmVufHwhZS5kaXJ0eUNoaWxkcmVuLnNpemUpfWZ1bmN0aW9uIFMoZSl7ayhlLEkpfWZ1bmN0aW9uIEEoZSl7ayhlLFQpfWZ1bmN0aW9uIGsoZSx0KXt2YXIgbj1lLnBhcmVudHMuc2l6ZTtpZihuKWZvcih2YXIgcj1wKGUucGFyZW50cyksbz0wO288bjsrK28pdChyW29dLGUpfWZ1bmN0aW9uIEkoZSx0KXttKGUuY2hpbGRWYWx1ZXMuaGFzKHQpKSxtKEUodCkpO3ZhciBuPSFFKGUpO2lmKGUuZGlydHlDaGlsZHJlbil7aWYoZS5kaXJ0eUNoaWxkcmVuLmhhcyh0KSlyZXR1cm59ZWxzZSBlLmRpcnR5Q2hpbGRyZW49Yi5wb3AoKXx8bmV3IFNldDtlLmRpcnR5Q2hpbGRyZW4uYWRkKHQpLG4mJlMoZSl9ZnVuY3Rpb24gVChlLHQpe20oZS5jaGlsZFZhbHVlcy5oYXModCkpLG0oIUUodCkpO3ZhciBuLHIsbyxpPWUuY2hpbGRWYWx1ZXMuZ2V0KHQpOzA9PT1pLmxlbmd0aD9lLmNoaWxkVmFsdWVzLnNldCh0LHQudmFsdWUuc2xpY2UoMCkpOihuPWkscj10LnZhbHVlLChvPW4ubGVuZ3RoKT4wJiZvPT09ci5sZW5ndGgmJm5bby0xXT09PXJbby0xXXx8ZS5zZXREaXJ0eSgpKSx4KGUsdCksRShlKXx8QShlKX1mdW5jdGlvbiB4KGUsdCl7dmFyIG49ZS5kaXJ0eUNoaWxkcmVuO24mJihuLmRlbGV0ZSh0KSwwPT09bi5zaXplJiYoYi5sZW5ndGg8eSYmYi5wdXNoKG4pLGUuZGlydHlDaGlsZHJlbj1udWxsKSl9ZnVuY3Rpb24gQyhlKXtlLmNoaWxkVmFsdWVzLnNpemU+MCYmZS5jaGlsZFZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe00oZSxuKX0pKSxlLmZvcmdldERlcHMoKSxtKG51bGw9PT1lLmRpcnR5Q2hpbGRyZW4pfWZ1bmN0aW9uIE0oZSx0KXt0LnBhcmVudHMuZGVsZXRlKGUpLGUuY2hpbGRWYWx1ZXMuZGVsZXRlKHQpLHgoZSx0KX12YXIgUj17c2V0RGlydHk6ITAsZGlzcG9zZTohMCxmb3JnZXQ6ITB9O2Z1bmN0aW9uIFAoZSl7dmFyIHQ9bmV3IE1hcCxuPWUmJmUuc3Vic2NyaWJlO2Z1bmN0aW9uIHIoZSl7dmFyIHI9aC5nZXRWYWx1ZSgpO2lmKHIpe3ZhciBvPXQuZ2V0KGUpO298fHQuc2V0KGUsbz1uZXcgU2V0KSxyLmRlcGVuZE9uKG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYodihvKSxvLnVuc3Vic2NyaWJlPW4oZSkpfX1yZXR1cm4gci5kaXJ0eT1mdW5jdGlvbihlLG4pe3ZhciByPXQuZ2V0KGUpO2lmKHIpe3ZhciBvPW4mJmQuY2FsbChSLG4pP246InNldERpcnR5IjtwKHIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlW29dKCl9KSksdC5kZWxldGUoZSksdihyKX19LHJ9ZnVuY3Rpb24gTigpe3ZhciBlPW5ldyBzKCJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrTWFwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5sb29rdXBBcnJheShhcmd1bWVudHMpfX1OKCk7dmFyIEQ9bmV3IFNldDtmdW5jdGlvbiBCKGUsdCl7dm9pZCAwPT09dCYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIG49bmV3IGYodC5tYXh8fE1hdGgucG93KDIsMTYpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwb3NlKCl9KSkscj10LmtleUFyZ3Msbz10Lm1ha2VDYWNoZUtleXx8TigpLGk9ZnVuY3Rpb24oKXt2YXIgaT1vLmFwcGx5KG51bGwscj9yLmFwcGx5KG51bGwsYXJndW1lbnRzKTphcmd1bWVudHMpO2lmKHZvaWQgMD09PWkpcmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3ZhciBhPW4uZ2V0KGkpO2F8fChuLnNldChpLGE9bmV3IE8oZSkpLGEuc3Vic2NyaWJlPXQuc3Vic2NyaWJlLGEuZm9yZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVsZXRlKGkpfSk7dmFyIHM9YS5yZWNvbXB1dGUoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIG4uc2V0KGksYSksRC5hZGQobiksaC5oYXNWYWx1ZSgpfHwoRC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhbigpfSkpLEQuY2xlYXIoKSksc307ZnVuY3Rpb24gYShlKXt2YXIgdD1uLmdldChlKTt0JiZ0LnNldERpcnR5KCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1uLmdldChlKTtpZih0KXJldHVybiB0LnBlZWsoKX1mdW5jdGlvbiB1KGUpe3JldHVybiBuLmRlbGV0ZShlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5tYXAuc2l6ZX0sY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITF9KSxpLmRpcnR5S2V5PWEsaS5kaXJ0eT1mdW5jdGlvbigpe2Eoby5hcHBseShudWxsLGFyZ3VtZW50cykpfSxpLnBlZWtLZXk9cyxpLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gcyhvLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9LGkuZm9yZ2V0S2V5PXUsaS5mb3JnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdShvLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9LGkubWFrZUNhY2hlS2V5PW8saS5nZXRLZXk9cj9mdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KG51bGwsci5hcHBseShudWxsLGFyZ3VtZW50cykpfTpvLE9iamVjdC5mcmVlemUoaSl9fSwxMzg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9bigxMik7Y29uc3Qgbz0vKCVbMC05QS1aXXsyfSkrL2c7ZnVuY3Rpb24gaShlKXtjb25zdCB0PU9iamVjdChyLmEpKCkuY29va2llLG49dD90LnNwbGl0KCI7ICIpOltdO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCByPW5bdF0uc3BsaXQoIj0iKTtpZihyWzBdLnJlcGxhY2UobyxkZWNvZGVVUklDb21wb25lbnQpPT1lKXtsZXQgZT1yLnNsaWNlKDEpLmpvaW4oIj0iKTtyZXR1cm4nIic9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zbGljZSgxLC0xKSksZS5yZXBsYWNlKG8sZGVjb2RlVVJJQ29tcG9uZW50KX19fX0sMTQwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9QXJyYXkuaXNBcnJheTt0LmE9cn0sMTQxOmZ1bmN0aW9uKGUsdCl7dmFyIG47bj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtuPW58fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKGUpeyJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYobj13aW5kb3cpfWUuZXhwb3J0cz1ufSwxNDI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDQpLG89bigzNzQpO2Z1bmN0aW9uIGkoZSx0LG4pe3ZhciBpPW8uZGVmYXVsdCgpLHM9ZnVuY3Rpb24oKXtmb3IodmFyIG89W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspb1tzXT1hcmd1bWVudHNbc107dmFyIHU9dD90LmFwcGx5KG51bGwsbyk6e307aWYodS50eXBlKXRocm93IG5ldyBFcnJvcigiQWN0aW9uIGNyZWF0b3JzIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgdHlwZSBwcm9wZXJ0eS4iKTtyZXR1cm4gdS50eXBlPWUsYSh1LGkpLG4mJnIuZGlzcGF0Y2godSksdX07cmV0dXJuIGEocyxpKSxmdW5jdGlvbihlLHQpe2UuX19TQVRDSEVMSlNfQUNUSU9OX1RZUEU9dH0ocyxlKSxzfWZ1bmN0aW9uIGEoZSx0KXtlLl9fU0FUQ0hFTEpTX0FDVElPTl9JRD10fXQuYWN0aW9uQ3JlYXRvcj1mdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCwhMSl9LHQuYWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0LCEwKX0sdC5nZXRQcml2YXRlQWN0aW9uSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19TQVRDSEVMSlNfQUNUSU9OX0lEfSx0LmdldFByaXZhdGVBY3Rpb25UeXBlPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fU0FUQ0hFTEpTX0FDVElPTl9UWVBFfHwidW5rbm93biBhY3Rpb24ifX0sMTQzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKTt2YXIgcj1uKDgpLG89big4NDEpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoImdyYXBoUUxFcnJvcnMiKX12YXIgYT1mdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gT2JqZWN0KG8uYSkoZS5ncmFwaFFMRXJyb3JzKSYmZS5ncmFwaFFMRXJyb3JzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWU/ZS5tZXNzYWdlOiJFcnJvciBtZXNzYWdlIG5vdCBmb3VuZC4iO3QrPW4rIlxuIn0pKSxlLm5ldHdvcmtFcnJvciYmKHQrPWUubmV0d29ya0Vycm9yLm1lc3NhZ2UrIlxuIiksdD10LnJlcGxhY2UoL1xuJC8sIiIpfSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIHI9bi5ncmFwaFFMRXJyb3JzLG89bi5uZXR3b3JrRXJyb3IsaT1uLmVycm9yTWVzc2FnZSxzPW4uZXh0cmFJbmZvLHU9ZS5jYWxsKHRoaXMsaSl8fHRoaXM7cmV0dXJuIHUuZ3JhcGhRTEVycm9ycz1yfHxbXSx1Lm5ldHdvcmtFcnJvcj1vfHxudWxsLHUubWVzc2FnZT1pfHxhKHUpLHUuZXh0cmFJbmZvPXMsdS5fX3Byb3RvX189dC5wcm90b3R5cGUsdX1yZXR1cm4gT2JqZWN0KHIuYykodCxlKSx0fShFcnJvcil9LDE0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxvPW4oMTQyKSxpPW4oMTMxKTtmdW5jdGlvbiBhKGUpe3ZhciB0PW8uZ2V0UHJpdmF0ZUFjdGlvbklkKGUpLG49aS5nZXRHbG9iYWxDb250ZXh0KCkuc3Vic2NyaXB0aW9uc1t0XTtpZihuKXtmb3IodmFyIHI9W10sYT0wLHM9bjthPHMubGVuZ3RoO2ErKyl7dmFyIHU9KDAsc1thXSkoZSk7dSYmci5wdXNoKHUpfWlmKHIubGVuZ3RoKXJldHVybiAxPT1yLmxlbmd0aD9yWzBdOlByb21pc2UuYWxsKHIpfX10LnN1YnNjcmliZT1mdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0R2xvYmFsQ29udGV4dCgpLnN1YnNjcmlwdGlvbnM7bltlXXx8KG5bZV09W10pLG5bZV0ucHVzaCh0KX0sdC5kaXNwYXRjaD1mdW5jdGlvbihlKXt2YXIgdD1pLmdldEdsb2JhbENvbnRleHQoKS5jdXJyZW50TXV0YXRvcjtpZih0KXRocm93IG5ldyBFcnJvcigiTXV0YXRvciAoIit0KyIpIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9uICgiK2UudHlwZSsiKSIpO3ZhciBuPWkuZ2V0R2xvYmFsQ29udGV4dCgpLmRpc3BhdGNoV2l0aE1pZGRsZXdhcmV8fGE7ci50cmFuc2FjdGlvbihuLmJpbmQobnVsbCxlKSl9LHQuZmluYWxEaXNwYXRjaD1hfSwxNDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuRGlzdGluZ3Vpc2hlZE5hbWU9MV09IkRpc3Rpbmd1aXNoZWROYW1lIixlW2UuR2VuZXJpY0RhdGE9Ml09IkdlbmVyaWNEYXRhIixlW2UuSVBWNEFkZHJlc3M9M109IklQVjRBZGRyZXNzIixlW2UuSVB2NkFkZHJlc3M9NF09IklQdjZBZGRyZXNzIixlW2UuTWFpbFN1YmplY3Q9NV09Ik1haWxTdWJqZWN0IixlW2UuUGhvbmVOdW1iZXI9Nl09IlBob25lTnVtYmVyIixlW2UuUXVlcnlTdHJpbmc9N109IlF1ZXJ5U3RyaW5nIixlW2UuU2lwQWRkcmVzcz04XT0iU2lwQWRkcmVzcyIsZVtlLlNtdHBBZGRyZXNzPTldPSJTbXRwQWRkcmVzcyIsZVtlLklkZW50aXR5PTEwXT0iSWRlbnRpdHkiLGVbZS5Vcmk9MTFdPSJVcmkiLGVbZS5GcWRuPTEyXT0iRnFkbiIsZVtlLklQVjRBZGRyZXNzTGVnYWN5PTEzXT0iSVBWNEFkZHJlc3NMZWdhY3kifSh0LkFXVFBpaUtpbmR8fCh0LkFXVFBpaUtpbmQ9e30pKX0sMTQ2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oNTg2KTtmdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gbmV3IHIuYSgiU3ludGF4IEVycm9yOiAiLmNvbmNhdChuKSx2b2lkIDAsZSxbdF0pfX0sMTQ4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNTEpLG89bigyKSxpPW4oMTIpLGE9big1KTtmdW5jdGlvbiBzKCl7cmV0dXJuISFPYmplY3QoYS5mKSgiaG9zdEFwcCIsT2JqZWN0KGkuYSkoKS5sb2NhdGlvbikmJk9iamVjdChhLmMpKCJob3N0QXBwIikudG9Mb3dlckNhc2UoKT09by5ofW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5hfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5ifSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX0sMTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSk7dmFyIHI9T2JqZWN0LmZyZWV6ZSh7U09GOiI8U09GPiIsRU9GOiI8RU9GPiIsQkFORzoiISIsRE9MTEFSOiIkIixBTVA6IiYiLFBBUkVOX0w6IigiLFBBUkVOX1I6IikiLFNQUkVBRDoiLi4uIixDT0xPTjoiOiIsRVFVQUxTOiI9IixBVDoiQCIsQlJBQ0tFVF9MOiJbIixCUkFDS0VUX1I6Il0iLEJSQUNFX0w6InsiLFBJUEU6InwiLEJSQUNFX1I6In0iLE5BTUU6Ik5hbWUiLElOVDoiSW50IixGTE9BVDoiRmxvYXQiLFNUUklORzoiU3RyaW5nIixCTE9DS19TVFJJTkc6IkJsb2NrU3RyaW5nIixDT01NRU5UOiJDb21tZW50In0pfSwxNTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwOCk7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByLmF9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiByLmJ9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiByLmN9KSl9LDE1MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2xldCByO2Z1bmN0aW9uIG8oKXtpZighcil0aHJvdyBuZXcgRXJyb3IoIk9weEhvc3RBcGkgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iKTtyZXR1cm4gcn1mdW5jdGlvbiBpKCl7cmV0dXJuISFyfWZ1bmN0aW9uIGEoZSl7cj1lfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpfSwxNTM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIpO2NvbnN0IG89e3Nob3dPd2FCcmFuZGluZzp7ZGVmYXVsdDohMCxuYXRpdmU6ITF9LGluY2x1ZGVQYXJ0bmVySW4zU1JlcXVlc3Q6e2RlZmF1bHQ6ITF9LGxvYWRUaGVtZUZyb21Ib3N0QXBwOntkZWZhdWx0OiExLG9weDohMH0sbG9hZEN1bHR1cmVGcm9tSG9zdEFwcDp7ZGVmYXVsdDohMSxvcHg6ITB9LG9weERlZXBsaW5rOntkZWZhdWx0OiExLG9weDohMH0sYXV0aFJlZGlyZWN0T25TZXNzaW9uVGltZW91dDp7ZGVmYXVsdDohMCxuYXRpdmU6ITEsb3B4OiExfSxvcHhDb21wb25lbnRMaWZlY3ljbGU6e2RlZmF1bHQ6ITEsbmF0aXZlOiExLG9weDohMH0sbmF2aWdhdGVUb1ZpZXc6e2RlZmF1bHQ6ITEsb3B4OiEwfSxyZWFkaW5nUGFuZU1vZGFsOntkZWZhdWx0OiEwLHRlYW1zOiExfSxyZWFkaW5nUGFuZUhlYWRlclRpdGxlQW5kSm9pbkxpbms6e2RlZmF1bHQ6ITAsdGVhbXM6ITF9LGNvbXBvc2VGb3JtU2F2ZUNsb3NlSGFuZGxlcnM6e2RlZmF1bHQ6ITEsdGVhbXM6ITB9LG9weFNlcnZpY2VXb3JrZXI6e2RlZmF1bHQ6ITEsb3B4OiEwfSxyb3V0ZU9wdGlvbnNTdGF0aWNVcmw6e2RlZmF1bHQ6ITEsb3B4OiEwfSxzY2VuYXJpb0RhdGE6e2RlZmF1bHQ6ITEsb3B4OiEwfSx0ZWFtc0NoYW5uZWxPcHRpb25zOntkZWZhdWx0OiExLHRlYW1zOiEwfSxtYWNBMTF5OntkZWZhdWx0OiExLG1hY291dGxvb2s6ITB9LHRlYW1zQ2FsZW5kYXJQaWNrZXI6e2RlZmF1bHQ6ITEsdGVhbXM6ITB9LGpvaW5UZWFtc01lZXRpbmc6e2RlZmF1bHQ6ITEsaHViOiEwLG9weDohMH0sY2FsZW5kYXJQYW5lSGVhZGVyV2VhdGhlcjp7ZGVmYXVsdDohMCx0ZWFtczohMX0sdXNlM1NQZW9wbGVTdWdnZXN0aW9uczp7ZGVmYXVsdDohMCxtYWNvdXRsb29rOiExfSxkZWZhdWx0Q2FsZW5kYXJDb2xvcjp7ZGVmYXVsdDohMSxvcHg6ITB9LHJvb21BZGRlZEhhbmRsZXI6e2RlZmF1bHQ6ITEsb3B4OiEwfSxyb29tRmluZGVyRnJlZUJ1c3lTdHlsZXM6e2RlZmF1bHQ6ITEsbWFjb3V0bG9vazohMCxvdXRsb29rZGVza3RvcDohMH0sZGVmYXVsdFNlbGVjdENhbGVuZGFySXRlbVN2Zzp7ZGVmYXVsdDohMCxvcHg6ITF9LG9weEluYm94UnVsZXM6e2RlZmF1bHQ6ITEsb3B4OiEwfSxtb2R1bGVOYW1lRnJvbVdpbmRvdzp7ZGVmYXVsdDohMCxvcHg6ITF9LHNob3dBcmNoaXZlVW5yZWFkQ291bnQ6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxyaWJib25GZWVkYmFjazp7ZGVmYXVsdDohMSxodWI6ITB9LGNvbXBvc2VGcm9tOntkZWZhdWx0OiExLG9weDohMH0sZ3JvdXBEaXNjb3ZlckNsb3NlQnV0dG9uOntkZWZhdWx0OiExLG9weDohMH0sdXBkYXRlTW9kYWxQcm9wczp7ZGVmYXVsdDohMSxvcHg6ITB9LG1vZGFsT3BlbmVkSGFuZGxlcjp7ZGVmYXVsdDohMSxvcHg6ITB9LGZ1bGxzY3JlZW5Db21wb3NlRm9ybVBvcE91dDp7ZGVmYXVsdDohMSx0ZWFtczohMH0sZGVmYXVsdE91dGxvb2tUaGVtZUNvbG9yOntkZWZhdWx0OiEwLG9weDohMX0seWFtbWVyRGFpbHlEaWdlc3Q6e2RlZmF1bHQ6ITEsb3V0bG9va2Rlc2t0b3A6ITB9LHlhbW1lckRpcmVjdEZvbGxvd2VyOntkZWZhdWx0OiExLG91dGxvb2tkZXNrdG9wOiEwfSx5YW1tZXJEaXNjb3Zlcnk6e2RlZmF1bHQ6ITEsb3V0bG9va2Rlc2t0b3A6ITB9LHlhbW1lckhvc3RDbGllbnRUeXBlOntkZWZhdWx0OiExLG5hdGl2ZTohMCxvcHg6ITB9LGxpbmtDbGlja2VkOntkZWZhdWx0OiExLG91dGxvb2tkZXNrdG9wOiEwfSxzaG93TWluaW11bVRocmVlSW5zaWdodHM6e2RlZmF1bHQ6ITEsb3B4OiEwfSxncm91cENyZWF0ZWRIYW5kbGVyOntkZWZhdWx0OiExLG9weDohMH0sZ3JvdXBEZWxldGVkSGFuZGxlcjp7ZGVmYXVsdDohMSxvcHg6ITB9LHVwZGF0ZVNlYXJjaEFuc3dlck9uUXVlcnlDaGFuZ2U6e2RlZmF1bHQ6ITEsb3B4OiEwfSxpbnNpZ2h0c0NvdW50VXBkYXRlZEhhbmRsZXI6e2RlZmF1bHQ6ITEsb3B4OiEwfSxwcm9jZXNzTWVldGluZ0luc2lnaHRzSGFuZGxlcjp7ZGVmYXVsdDohMSxvcHg6ITB9LHByb2Nlc3NFbXB0eVlhbW1lclB1Ymxpc2hlcnNIYW5kbGVyOntkZWZhdWx0OiExLG9weDohMH0sZm9jdXNab25lQ2ljdWxhck5hdmlnYXRpb246e2RlZmF1bHQ6ITEsb3B4OiEwfSxjb21wb25lbnRUb2tlblByb3ZpZGVyOntkZWZhdWx0OiExLG9weDohMCxuYXRpdmU6ITAsaHViOiEwfSxoaWRlQ2FsZW5kYXJNb2R1bGVDb250ZW50OntkZWZhdWx0OiExLHRlYW1zOiEwfSxoaWRlQ2FsZW5kYXJMZWZ0TmF2OntkZWZhdWx0OiExLHRlYW1zaHViOiEwfSxoaWRlQXBwU3VpdGVIZWFkZXI6e2RlZmF1bHQ6ITEsaHViOiEwfSxtZXRhT1NUZXN0OntkZWZhdWx0OiExLGh1YjohMH0saGlkZU9mZmljZVJhaWw6e2RlZmF1bHQ6ITEsaHViOiEwfSxvcGVuTWFpbEluSHViOntkZWZhdWx0OiExLHdpbjMyb3V0bG9va2h1YjohMH0sb3BlbkNvbXBvc2VNYWlsSW5IdWI6e2RlZmF1bHQ6ITEsd2luMzJvdXRsb29raHViOiEwfSxmdWxsQ29tcG9zZUZvcm1Nb2RhbDp7ZGVmYXVsdDohMCx0ZWFtczohMX0scmVuZGVyQ2FsZW5kYXJIZWFkZXI6e2RlZmF1bHQ6ITAsdGVhbXM6ITF9LHdlZWtXZWF0aGVySWNvbjp7ZGVmYXVsdDohMCx0ZWFtczohMX0sc3VyZmFjZVBMVERhdGFQb2ludDp7ZGVmYXVsdDohMSx0ZWFtczohMH0sc2NoZWR1bGluZ0Fzc2lzdGFudDp7ZGVmYXVsdDohMCx0ZWFtczohMX0sY29tcG9zZUZvcm1IZWFkZXI6e2RlZmF1bHQ6ITAsdGVhbXM6ITF9LHNhdmVJbkZ1bGxDb21wb3NlOntkZWZhdWx0OiEwLHRlYW1zOiExfSxkaXNjYXJkSW5GdWxsQ29tcG9zZTp7ZGVmYXVsdDohMCx0ZWFtczohMX0sYWRkSW5zOntkZWZhdWx0OiEwLHRlYW1zOiExfSxzZXR0aW5nczp7ZGVmYXVsdDohMCx0ZWFtczohMX0sbXVsdGlBY2NvdW50czp7ZGVmYXVsdDohMCx0ZWFtczohMSxvdXRsb29rZGVza3RvcDohMSx3aWRnZXQ6ITEsbmF0aXZlOiExLGh1YjohMX0sYWNjb3VudFNldHRpbmdzSHg6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxuYXRpdmVEaWFnbm9zdGljczp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG5hdGl2ZVFzcDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG1vZHVsZVN3aXRjaDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LGRpYWdJbkFwcFN1cHBvcnQ6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxkaWFnRmVlZGJhY2tKczp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LGRpYWdGZWVkYmFja0VtYWlsR3JvdXA6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxkaWFnRmVlZGJhY2tOb0F0dGFjaFNSOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sZGlhZ0ZlYXR1cmVDcmV3OntkZWZhdWx0OiExLG5hdGl2ZTohMH0sZGlhZ1Rocm90dGxlRmVlZGJhY2tFbWFpbDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LGRpYWdUb2dnbGVGZWVkYmFjazp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG5ld091dGxvb2tUb2dnbGU6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxmb2xkZXJIaWVyYXJjaHlIeDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG1vbmFyY2hFcnJvck1lc3NhZ2U6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxub3RlRmVlZFNpZGVQYW5lbDp7ZGVmYXVsdDohMCxuYXRpdmU6ITF9LHdoYXRzTmV3OntkZWZhdWx0OiEwLG5hdGl2ZTohMX0sb3dhQnJhbmRpbmdDaGFybTp7ZGVmYXVsdDohMCxuYXRpdmU6ITF9LGFwcExhdW5jaGVyOntkZWZhdWx0OiEwLG5hdGl2ZTohMX0saW5jb3JyZWN0TmF0aXZlRW50cnlQb2ludDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG1ldGFPU0ZlZWRiYWNrOntkZWZhdWx0OiExLGh1YjohMH0sbW9uYXJjaEZlZWRiYWNrOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sbmF0aXZlOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sbmF0aXZlUmVzb2x2ZXJzOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sbWFuYWdlZFF1ZXJ5TGluazp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LHdyb25nSW5kZXg6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxvdXRsb29rU3VpdGVIZWFkZXJTdHJhdGVneTp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LHBhdXNlSW5ib3g6e2RlZmF1bHQ6ITAsbmF0aXZlOiExfSxoeFZlcnNpb25RdWVyeVN0cmluZ1BhcmFtOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sbmF0aXZlU2VydmljZVdvcmtlcjp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG5hdGl2ZUhvc3RBdHRhY2htZW50SGlqYWNrOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sdXNlTmF0aXZlQ29udmVyc2F0aW9uT3B0aW9uczp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LHJlYm9vdDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LGNhbGVuZGFyRm9sZGVySHg6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxza2lwQXdhaXRMcGNDb25maWc6e2RlZmF1bHQ6ITEsb3B4OiEwfSx3b3JrbG9hZFNjZW5hcmlvU2V0dGluZ3M6e2RlZmF1bHQ6ITAsb3B4OiExfSxyaWJib25EZWZhdWx0VG9TTFI6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxyaWJib25QZXJzaXN0RGVmYXVsdDp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LHVwZGF0ZUhvc3RBcHBJY29uOntkZWZhdWx0OiExLG5hdGl2ZTohMH0scHJvamVjdGlvbkN1c3RvbVRpdGxlYmFyOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sbW9uYXJjaERlbnNpdHk6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSx0b0RvTmV3VGFiOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sZmxvb2RnYXRlOntkZWZhdWx0OiEwLG9weDohMX0sbWVDb250cm9sQWNjb3VudFN3aXRjaGluZzp7ZGVmYXVsdDohMCxuYXRpdmU6ITF9LHNtaW1lRXh0ZW5zaW9uOntkZWZhdWx0OiEwLG5hdGl2ZTohMX0scGxhdGZvcm1BcHBTZGs6e2RlZmF1bHQ6ITEsaHViOiEwfSxyZXNvdXJjZVRva2VuRnJvbUhvc3Q6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwLG9weDohMH0sdXNlQmFzZVRoZW1lOntkZWZhdWx0OiExLHdpbjMyb3V0bG9va2h1YjohMCxodWI6ITF9LGFjY3Rtb25hY2NvdW50czp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LHNob3dPV0FNYWlsdG9CYW5uZXI6e2RlZmF1bHQ6ITAsbmF0aXZlOiExfSxjb3B5TGlua1VzaW5nQ2xpcGJvYXJkQXBpOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sb3V0bG9va0Rlc2t0b3BUb01vbmFyY2hQcmVmZXJlbmNlTWlncmF0aW9uOntkZWZhdWx0OiExLG5hdGl2ZTohMH0sZGlzYWJsZVNlcnZpY2VXb3JrZXI6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxuYXRpdmVNZXNzYWdpbmc6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwLHdpZGdldDohMH0sZGlzYWJsZUFwcE1vZHVsZUtleXM6e2RlZmF1bHQ6ITEsaHViOiEwfSxuYXRpdmVSZWFjdGlvbnM6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxwcm9tcHRSZWJvb3ROYXRpdmVIb3N0OntkZWZhdWx0OiExLG5hdGl2ZTohMH0sb3Blbk5ld0V2ZW50SW5OZXdXaW5kb3c6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwfSxjbXBMYXlvdXRSZWRlc2lnbjp7ZGVmYXVsdDohMSxuYXRpdmU6ITB9LG5hdGl2ZUZyaWVuZGx5S2V5Ym9hcmRpbmc6e2RlZmF1bHQ6ITEsbmF0aXZlOiEwLHdpbjMyb3V0bG9va2h1YjohMH19O3ZhciBpPW4oMTU1KSxhPW4oMTQ4KTtjb25zdCBzPWU9Pntjb25zdCB0PShlPT5vW2VdKShlKTtpZih0KXtpZihPYmplY3QoaS5hKSgpJiZyLmUgaW4gdClyZXR1cm4gdFtyLmVdO2lmKE9iamVjdChhLmIpKCkmJnIuaCBpbiB0KXJldHVybiB0W3IuaF07bGV0IGU9T2JqZWN0KHIuQSkoKTtpZihlJiZlIGluIHQpcmV0dXJuIHRbZV07aWYoZSYmKGU9PT1yLml8fGU9PT1yLmspJiZyLmIgaW4gdClyZXR1cm4gdFtyLmJdO2NvbnN0IG49T2JqZWN0KHIuRSkoKTtyZXR1cm4gbiYmbiBpbiB0P3Rbbl06biYmKG49PT1yLmd8fG49PT1yLmR8fG49PT1yLmN8fG49PT1yLmF8fG49PT1yLmh8fG49PT1yLmZ8fG49PT1yLmopJiYib3B4ImluIHQ/dC5vcHg6dC5kZWZhdWx0fXJldHVybiExfTtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9LDE1NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oMjYxKSxvPW4oMTEpLGk9bigxMTgpO2NvbnN0IGE9ImZlYXR1cmVPdmVycmlkZXMiO2Z1bmN0aW9uIHMoKXtjb25zdCBlPU9iamVjdChvLmEpKHNlbGYsYSk7cmV0dXJuIGU/T2JqZWN0KHIuYSkoZSk6e319ZnVuY3Rpb24gdSgpe09iamVjdChvLmQpKHNlbGYsYSl9ZnVuY3Rpb24gYyhlKXtjb25zdCB0PU9iamVjdChvLmEpKHNlbGYsYSk7bGV0IG49dD90LnNwbGl0KCIsIik6W107Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10Lm5hbWUudG9Mb3dlckNhc2UoKSxyPXQuaXNFbmFibGVkP2U6YC0ke2V9YCxvPU9iamVjdChpLmEpKClbZV0sYT10LmlzRW5hYmxlZD09PSFvLHM9bmV3IFJlZ0V4cChgXi0/JHtlfSRgLCJpIik7bj1uLmZpbHRlcihlPT4hcy50ZXN0KGUpKSxhJiZuLnB1c2gocil9T2JqZWN0KG8uZSkoc2VsZixhLG4uam9pbigiLCIpKX19LDE1NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTt2YXIgcj1uKDEyKTtmdW5jdGlvbiBvKCl7cmV0dXJuIE9iamVjdChyLmEpKCkubmF0aXZlSG9zdH19LDE1NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTc5KSxvPW4oMTMpLGk9bigxNjcpLGE9bigyKTtjb25zdCBzPTgyOGU1LHU9NmU0LGM9ImJhY2tncm91bmRhdXRoIjtsZXQgbD1udWxsLGY9bnVsbDthc3luYyBmdW5jdGlvbiBoKCl7bnVsbD09bCYmKE9iamVjdChhLlEpKCl8fG51bGwhPWYmJkRhdGUubm93KCktZjxzfHwoZj1EYXRlLm5vdygpLGw9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxsLnNldEF0dHJpYnV0ZSgiaWQiLGMpLGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsT2JqZWN0KGkuYSkoe30pLnRoZW4oZT0+ezA9PWUuUmVzdWx0Q29kZSYmbnVsbCE9ZS5BdXRoZW50aWNhdGlvblVybCYmIiIhPWUuQXV0aGVudGljYXRpb25Vcmw/KGwmJihzZWxmLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobCksc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixkLCExKSxsLnNyYz1lLkF1dGhlbnRpY2F0aW9uVXJsKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe251bGwhPWwmJnAoKX0pLHUpKTpsPW51bGx9KS5jYXRjaCgoZnVuY3Rpb24oZSl7bD1udWxsfSkpKSl9ZnVuY3Rpb24gZChlKXtlLm9yaWdpbj09d2luZG93LmxvY2F0aW9uLm9yaWdpbiYmZS5kYXRhJiZlLmRhdGEuc3BsaXQmJigiYmFja2dyb3VuZEF1dGhSZXNwb25zZSI9PWUuZGF0YS5zcGxpdCgiOiIpWzBdJiZwKCkpfWZ1bmN0aW9uIHAoKXtsJiYod2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobCksbD1udWxsLHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixkKSl9dmFyIHY9big5Nik7dmFyIGI9bigxODQpO2NvbnN0IHk9Ik5lZWRzQXV0aCI7YXN5bmMgZnVuY3Rpb24gbShlLHQsbixyKXtsZXQgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQpe3ZhciBuO2NvbnN0IHI9T2JqZWN0KG8uYSkoKTtpZig0MDE9PWUuc3RhdHVzfHw0NDA9PWUuc3RhdHVzKXtpZihmdW5jdGlvbihlKXtyZXR1cm4hZXx8IU9iamVjdCh2LmEpKGUpJiYhMSE9PWUuYXV0aE5lZWRlZE9uVW5BdXRob3JpemVkfSh0KSlyZXR1cm4gci5vbkF1dGhGYWlsZWQ/ci5vbkF1dGhGYWlsZWQoZS5oZWFkZXJzKTpPYmplY3QoYi5hKShlLmhlYWRlcnMpLGUuc291cmNlPXkseX1lbHNlIGlmKCFlLm9rKXJldHVybiA0MTI9PWUuc3RhdHVzJiZhd2FpdChudWxsPT09KG49ci5vbkhpcENoYWxsZW5nZU5lZWRlZCl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbChyLGUuaGVhZGVycykpPyhlLnNvdXJjZT15LHkpOmUuaGVhZGVycyYmZS5oZWFkZXJzLmdldCgieC1vd2EtZXJyb3IiKXx8ZS5zdGF0dXNUZXh0O3JldHVybiBudWxsfSh0LG4pO2lmKG4ucmV0dXJuRnVsbFJlc3BvbnNlT25TdWNjZXNzKXJldHVybiBpP1Byb21pc2UucmVqZWN0KHQpOlByb21pc2UucmVzb2x2ZSh0KTtpZihpKXtjb25zdCBuPWcoZSxpLHQscik7dGhyb3cgbi5yZXNwb25zZT10LG59cmV0dXJuIG51bGwhPXQuaGVhZGVycy5nZXQoIlgtT1dBLVNUTyIpJiZoKCksbi5yZXR1cm5SZXNwb25zZUhlYWRlcnM/UHJvbWlzZS5yZXNvbHZlKHQpOnQuanNvbigpLmNhdGNoKG49Pnt0aHJvdyBnKGUsbnVsbD09bj92b2lkIDA6bi5tZXNzYWdlLHQscil9KX1mdW5jdGlvbiBnKGUsdCxuLHIpe2NvbnN0IG89bmV3IEVycm9yKGAke2V9IGZhaWxlZDogJHt0fWApO3JldHVybiByJiYoby5kaWFnbm9zdGljSW5mbz1yKSxvLmZldGNoRXJyb3JUeXBlPXQ9PXk/IkF1dGhOZWVkZWQiOiJTZXJ2ZXJGYWlsdXJlIixvLmh0dHBTdGF0dXM9bi5zdGF0dXMsb312YXIgTz1uKDE4NSksdz1uKDk4KTtjb25zdCBqPSJYLU9XQS1BdHRlbXB0IjtmdW5jdGlvbiBFKGUsdCl7T2JqZWN0KHcuYikodCksdC5zZXQoaiwiIitlKX12YXIgUz1uKDE4MSksQT1uKDE4MCksaz1uKDE4NiksST1uKDk5KTtjb25zdCBUPTIwNDg7dmFyIHg9big5NyksQz1uKDY2KSxNPW4oNjApO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gQn0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSk7Y29uc3QgUj0yLFA9NWUzO2xldCBOPTA7Y29uc3QgRD17fTtmdW5jdGlvbiBCKGUpe2xldCB0PU4rKztyZXR1cm4gRFt0XT1lLCgpPT57ZGVsZXRlIERbdF19fWZ1bmN0aW9uIEwoZSx0LG4saSxzKXtjb25zdCB1PWFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1PYmplY3Qoby5hKSgpO2lmKHIucHJlcGFyZVJlcXVlc3RPcHRpb25zKXtjb25zdCB0PXIucHJlcGFyZVJlcXVlc3RPcHRpb25zKGUpO3QmJihlPXQudGhlbj9hd2FpdCB0OnQpfWNvbnN0IGk9YXdhaXQgT2JqZWN0KEEuYSkoZSkscz1pLmhlYWRlcnM7aWYobiYmcy5zZXQoIkFjdGlvbiIsbikscy5zZXQoIlgtT1dBLUNvcnJlbGF0aW9uSWQiLE9iamVjdChrLmEpKCkpLHMuc2V0KCJYLU9XQS1TZXNzaW9uSWQiLE9iamVjdChhLk0pKCkpLHQpe3MuYXBwZW5kKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Iik7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksbj1lbmNvZGVVUklDb21wb25lbnQoZSk7aS5ub0VtcHR5UG9zdHx8bi5sZW5ndGg+VD9pLmJvZHk9ZToocy5hcHBlbmQoIlgtT1dBLVVybFBvc3REYXRhIixuKSxpLmJvZHk9dm9pZCAwKX1pZighcy5oYXMoSS5hKSl7bGV0IGU9T2JqZWN0KEkuYikoKTtlJiZzLmFwcGVuZChJLmEsZSl9cmV0dXJuIGl9KGkscyxlKSxjPXQrIiZuPSIrT2JqZWN0KFMuYSkoKSxsPU9iamVjdChyLmEpKGMsdSksZj1PYmplY3Qua2V5cyhEKTtmb3IobGV0IHQ9MDt0PGYubGVuZ3RoO3QrKylEW2ZbdF1dKGwsZSxjLG4sdSk7cmV0dXJuIHUudGhlbihyPT57Y29uc3QgYT0obmV3IEVycm9yKS5zdGFjayx7cmV0cnlDb3VudDp1PVJ9PXI7cmV0dXJuIGwudGhlbigoYXN5bmMgZnVuY3Rpb24oYyl7dmFyIGwsZjtsZXQgaD0hMSxkPXQ7aWYoKChudWxsPT09KGw9bnVsbD09cj92b2lkIDA6ci5zaG91bGRSZXRyeSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuY2FsbChyLGMuc3RhdHVzKSl8fE9iamVjdChPLmEpKGMuc3RhdHVzKSkmJm48dSlpZihudWxsPT1yP3ZvaWQgMDpyLm9uQmVmb3JlUmV0cnkpe2NvbnN0IGU9YXdhaXQgci5vbkJlZm9yZVJldHJ5KGMpO2UmJihoPSEwLGUuZGVsYXkmJmF3YWl0IE9iamVjdChNLmEpKGUuZGVsYXkpLGUuZW5kcG9pbnQmJihkPWUuZW5kcG9pbnQpKX1lbHNlIGg9ITA7aWYoaCl7aWYoT2JqZWN0KHguYSkoYy5zdGF0dXMpJiYhT2JqZWN0KHYuYSkoaSkpe2NvbnN0IGU9T2JqZWN0KG8uYSkoKTtudWxsPT09KGY9ZS5vbkF1dGhGYWlsZWQpfHx2b2lkIDA9PT1mfHxmLmNhbGwoZSk7Y29uc3QgdD1hd2FpdCBlLmdldEF1dGhUb2tlbihjLmhlYWRlcnMsbnVsbD09aT92b2lkIDA6aS5zb3VyY2VJZCk7dD9yLmhlYWRlcnMuc2V0KEMuYSx0KTpyLmhlYWRlcnMuaGFzKEMuYSkmJnIuaGVhZGVycy5kZWxldGUoQy5hKX1yZXR1cm4gRSgrK24sci5oZWFkZXJzKSxMKGUsZCxuLHIscyl9cmV0dXJuIG0oZSxjLHIsYSl9KSwoZnVuY3Rpb24obyl7aWYoby5yZXRyaWFibGUmJm48dSlyZXR1cm4gbmV3IFByb21pc2UoKG8saSk9PntzZXRUaW1lb3V0KCgpPT57dHJ5e0UoKytuLHIuaGVhZGVycyksbyhMKGUsdCxuLHIscykpfWNhdGNoKHQpe3QubWVzc2FnZSYmKHQubWVzc2FnZT1lKyI6Iit0Lm1lc3NhZ2UpLGkodCl9fSxQKX0pO3Rocm93IG8ubmV0d29ya0Vycm9yPSEwLG99KSl9KX19LDE1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI7Ci8qIQogIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLgogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcwoqLyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07aWYocil7dmFyIGk9dHlwZW9mIHI7aWYoInN0cmluZyI9PT1pfHwibnVtYmVyIj09PWkpZS5wdXNoKHRoaXMmJnRoaXNbcl18fHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSllLnB1c2goby5hcHBseSh0aGlzLHIpKTtlbHNlIGlmKCJvYmplY3QiPT09aSlpZihyLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZylmb3IodmFyIGEgaW4gciluLmNhbGwocixhKSYmclthXSYmZS5wdXNoKHRoaXMmJnRoaXNbYV18fGEpO2Vsc2UgZS5wdXNoKHIudG9TdHJpbmcoKSl9fXJldHVybiBlLmpvaW4oIiAiKX1lLmV4cG9ydHM/KG8uZGVmYXVsdD1vLGUuZXhwb3J0cz1vKTp2b2lkIDA9PT0ocj1mdW5jdGlvbigpe3JldHVybiBvfS5hcHBseSh0LFtdKSl8fChlLmV4cG9ydHM9cil9KCl9LDE2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLGZ1bmN0aW9uKGUscil7bi5kKHQsIiRtb2J4IiwoZnVuY3Rpb24oKXtyZXR1cm4gVm59KSksbi5kKHQsIlJlYWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gZG59KSksbi5kKHQsInVudHJhY2tlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVufSkpLG4uZCh0LCJJRGVyaXZhdGlvblN0YXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gTnR9KSksbi5kKHQsImNyZWF0ZUF0b20iLChmdW5jdGlvbigpe3JldHVybiBYZX0pKSxuLmQodCwic3B5IiwoZnVuY3Rpb24oKXtyZXR1cm4gT30pKSxuLmQodCwiY29tcGFyZXIiLChmdW5jdGlvbigpe3JldHVybiBRfSkpLG4uZCh0LCJpc09ic2VydmFibGVPYmplY3QiLChmdW5jdGlvbigpe3JldHVybiBsZX0pKSxuLmQodCwiaXNCb3hlZE9ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiB0ZX0pKSxuLmQodCwiaXNPYnNlcnZhYmxlQXJyYXkiLChmdW5jdGlvbigpe3JldHVybiBkdH0pKSxuLmQodCwiT2JzZXJ2YWJsZU1hcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFlfSkpLG4uZCh0LCJpc09ic2VydmFibGVNYXAiLChmdW5jdGlvbigpe3JldHVybiB6ZX0pKSxuLmQodCwidHJhbnNhY3Rpb24iLChmdW5jdGlvbigpe3JldHVybiBRZX0pKSxuLmQodCwib2JzZXJ2YWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJlfSkpLG4uZCh0LCJjb21wdXRlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9lfSkpLG4uZCh0LCJpc09ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiBkZX0pKSxuLmQodCwiaXNPYnNlcnZhYmxlUHJvcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSkpLG4uZCh0LCJpc0NvbXB1dGVkIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmV9KSksbi5kKHQsImlzQ29tcHV0ZWRQcm9wIiwoZnVuY3Rpb24oKXtyZXR1cm4geWV9KSksbi5kKHQsImV4dGVuZE9ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiBqZX0pKSxuLmQodCwiZXh0ZW5kU2hhbGxvd09ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiB3ZX0pKSxuLmQodCwib2JzZXJ2ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdufSkpLG4uZCh0LCJpbnRlcmNlcHQiLChmdW5jdGlvbigpe3JldHVybiBqbn0pKSxuLmQodCwiYXV0b3J1biIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSksbi5kKHQsInJlYWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gR30pKSxuLmQodCwid2hlbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVufSkpLG4uZCh0LCJhY3Rpb24iLChmdW5jdGlvbigpe3JldHVybiBDfSkpLG4uZCh0LCJpc0FjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSksbi5kKHQsInJ1bkluQWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gTX0pKSxuLmQodCwia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFufSkpLG4uZCh0LCJ2YWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBrbn0pKSxuLmQodCwiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIElufSkpLG4uZCh0LCJzZXQiLChmdW5jdGlvbigpe3JldHVybiBUbn0pKSxuLmQodCwicmVtb3ZlIiwoZnVuY3Rpb24oKXtyZXR1cm4geG59KSksbi5kKHQsImhhcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIENufSkpLG4uZCh0LCJnZXQiLChmdW5jdGlvbigpe3JldHVybiBNbn0pKSxuLmQodCwiZGVjb3JhdGUiLChmdW5jdGlvbigpe3JldHVybiBSbn0pKSxuLmQodCwiY29uZmlndXJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gUG59KSksbi5kKHQsIm9uQmVjb21lT2JzZXJ2ZWQiLChmdW5jdGlvbigpe3JldHVybiBKZX0pKSxuLmQodCwib25CZWNvbWVVbm9ic2VydmVkIiwoZnVuY3Rpb24oKXtyZXR1cm4gWmV9KSksbi5kKHQsImZsb3ciLChmdW5jdGlvbigpe3JldHVybiBEbn0pKSxuLmQodCwidG9KUyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZufSkpLG4uZCh0LCJ0cmFjZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGhufSkpLG4uZCh0LCJnZXREZXBlbmRlbmN5VHJlZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFd0fSkpLG4uZCh0LCJnZXRPYnNlcnZlclRyZWUiLChmdW5jdGlvbigpe3JldHVybiB6dH0pKSxuLmQodCwiX3Jlc2V0R2xvYmFsU3RhdGUiLChmdW5jdGlvbigpe3JldHVybiBxdH0pKSxuLmQodCwiX2dldEdsb2JhbFN0YXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnR9KSksbi5kKHQsImdldERlYnVnTmFtZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSkpLG4uZCh0LCJnZXRBdG9tIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWV9KSksbi5kKHQsIl9nZXRBZG1pbmlzdHJhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtlfSkpLG4uZCh0LCJfYWxsb3dTdGF0ZUNoYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBFfSkpLG4uZCh0LCJfYWxsb3dTdGF0ZUNoYW5nZXNJbnNpZGVDb21wdXRlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSksbi5kKHQsImlzQXJyYXlMaWtlIiwoZnVuY3Rpb24oKXtyZXR1cm4geHR9KSksbi5kKHQsIl9pc0NvbXB1dGluZ0Rlcml2YXRpb24iLChmdW5jdGlvbigpe3JldHVybiBybn0pKSxuLmQodCwib25SZWFjdGlvbkVycm9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG59KSksbi5kKHQsIl9pbnRlcmNlcHRSZWFkcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFufSkpOwovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUKTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRApXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLApNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgoKU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KdmFyIG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9O2Z1bmN0aW9uIGkoZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW8oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfTtmdW5jdGlvbiBzKGUsdCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIHUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZT1lLmNvbmNhdChzKGFyZ3VtZW50c1t0XSkpO3JldHVybiBlfXZhciBjPXt9LGw9e307ZnVuY3Rpb24gZihlLHQpe3ZhciBuPXQ/YzpsO3JldHVybiBuW2VdfHwobltlXT17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6dCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKSx0aGlzW2VdfSxzZXQ6ZnVuY3Rpb24odCl7aCh0aGlzKSx0aGlzW2VdPXR9fSl9ZnVuY3Rpb24gaChlKXtpZighMCE9PWUuX19tb2J4RGlkUnVuTGF6eUluaXRpYWxpemVycyl7dmFyIHQ9ZS5fX21vYnhEZWNvcmF0b3JzO2lmKHQpZm9yKHZhciBuIGluIGt0KGUsIl9fbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnMiLCEwKSx0KXt2YXIgcj10W25dO3IucHJvcGVydHlDcmVhdG9yKGUsci5wcm9wLHIuZGVzY3JpcHRvcixyLmRlY29yYXRvclRhcmdldCxyLmRlY29yYXRvckFyZ3VtZW50cyl9fX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj1mdW5jdGlvbihyLG8saSxzKXtpZighMD09PXMpcmV0dXJuIHQocixvLGkscixuKSxudWxsO2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19tb2J4RGVjb3JhdG9ycyIpKXt2YXIgdT1yLl9fbW9ieERlY29yYXRvcnM7a3QociwiX19tb2J4RGVjb3JhdG9ycyIsYSh7fSx1KSl9cmV0dXJuIHIuX19tb2J4RGVjb3JhdG9yc1tvXT17cHJvcDpvLHByb3BlcnR5Q3JlYXRvcjp0LGRlc2NyaXB0b3I6aSxkZWNvcmF0b3JUYXJnZXQ6cixkZWNvcmF0b3JBcmd1bWVudHM6bn0sZihvLGUpfTtyZXR1cm4gcChhcmd1bWVudHMpPyhuPXZ0LHIuYXBwbHkobnVsbCxhcmd1bWVudHMpKToobj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHIpfX1mdW5jdGlvbiBwKGUpe3JldHVybigyPT09ZS5sZW5ndGh8fDM9PT1lLmxlbmd0aCkmJiJzdHJpbmciPT10eXBlb2YgZVsxXXx8ND09PWUubGVuZ3RoJiYhMD09PWVbM119ZnVuY3Rpb24gdigpe3JldHVybiEhUXQuc3B5TGlzdGVuZXJzLmxlbmd0aH1mdW5jdGlvbiBiKGUpe2lmKFF0LnNweUxpc3RlbmVycy5sZW5ndGgpZm9yKHZhciB0PVF0LnNweUxpc3RlbmVycyxuPTAscj10Lmxlbmd0aDtuPHI7bisrKXRbbl0oZSl9ZnVuY3Rpb24geShlKXtiKGEoe30sZSx7c3B5UmVwb3J0U3RhcnQ6ITB9KSl9dmFyIG09e3NweVJlcG9ydEVuZDohMH07ZnVuY3Rpb24gZyhlKXtiKGU/YSh7fSxlLHtzcHlSZXBvcnRFbmQ6ITB9KTptKX1mdW5jdGlvbiBPKGUpe3JldHVybiBRdC5zcHlMaXN0ZW5lcnMucHVzaChlKSxqdCgoZnVuY3Rpb24oKXtRdC5zcHlMaXN0ZW5lcnM9UXQuc3B5TGlzdGVuZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpfSkpfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBqKGUsdCx0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBuLmlzTW9ieEFjdGlvbj0hMCxufWZ1bmN0aW9uIGooZSx0LG4scil7dmFyIG89ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89digpJiYhIWUsaT0wO2lmKG8pe2k9RGF0ZS5ub3coKTt2YXIgYT1yJiZyLmxlbmd0aHx8MCxzPW5ldyBBcnJheShhKTtpZihhPjApZm9yKHZhciB1PTA7dTxhO3UrKylzW3VdPXJbdV07eSh7dHlwZToiYWN0aW9uIixuYW1lOmUsb2JqZWN0Om4sYXJndW1lbnRzOnN9KX12YXIgYz1jbigpO1p0KCk7dmFyIGw9UyghMCk7cmV0dXJue3ByZXZEZXJpdmF0aW9uOmMscHJldkFsbG93U3RhdGVDaGFuZ2VzOmwsbm90aWZ5U3B5Om8sc3RhcnRUaW1lOml9fShlLDAsbixyKTt0cnl7cmV0dXJuIHQuYXBwbHkobixyKX1maW5hbGx5eyFmdW5jdGlvbihlKXtBKGUucHJldkFsbG93U3RhdGVDaGFuZ2VzKSxfdCgpLGxuKGUucHJldkRlcml2YXRpb24pLGUubm90aWZ5U3B5JiZnKHt0aW1lOkRhdGUubm93KCktZS5zdGFydFRpbWV9KX0obyl9fWZ1bmN0aW9uIEUoZSx0KXt2YXIgbixyPVMoZSk7dHJ5e249dCgpfWZpbmFsbHl7QShyKX1yZXR1cm4gbn1mdW5jdGlvbiBTKGUpe3ZhciB0PVF0LmFsbG93U3RhdGVDaGFuZ2VzO3JldHVybiBRdC5hbGxvd1N0YXRlQ2hhbmdlcz1lLHR9ZnVuY3Rpb24gQShlKXtRdC5hbGxvd1N0YXRlQ2hhbmdlcz1lfWZ1bmN0aW9uIGsoZSl7dmFyIHQsbj1RdC5jb21wdXRhdGlvbkRlcHRoO1F0LmNvbXB1dGF0aW9uRGVwdGg9MDt0cnl7dD1lKCl9ZmluYWxseXtRdC5jb21wdXRhdGlvbkRlcHRoPW59cmV0dXJuIHR9ZnVuY3Rpb24gSSgpe2d0KCExKX1mdW5jdGlvbiBUKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7aWYocil7aWYoci52YWx1ZSlyZXR1cm57dmFsdWU6dyhlLHIudmFsdWUpLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfTt2YXIgbz1yLmluaXRpYWxpemVyO3JldHVybntlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxpbml0aWFsaXplcjpmdW5jdGlvbigpe3JldHVybiB3KGUsby5jYWxsKHRoaXMpKX19fXJldHVybiB4KGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24geChlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe30sc2V0OmZ1bmN0aW9uKHQpe2t0KHRoaXMsbixDKGUsdCkpfX0pfX12YXIgQz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlP3coZS5uYW1lfHwiPHVubmFtZWQgYWN0aW9uPiIsZSk6Mj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0P3coZSx0KToxPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBlP1QoZSk6ITAhPT1yP1QodCkuYXBwbHkobnVsbCxhcmd1bWVudHMpOnZvaWQoZVt0XT13KGUubmFtZXx8dCxuLnZhbHVlKSl9O2Z1bmN0aW9uIE0oZSx0KXtyZXR1cm4gaigic3RyaW5nIj09dHlwZW9mIGU/ZTplLm5hbWV8fCI8dW5uYW1lZCBhY3Rpb24+IiwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOnQsdGhpcyx2b2lkIDApfWZ1bmN0aW9uIFIoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiEwPT09ZS5pc01vYnhBY3Rpb259ZnVuY3Rpb24gUChlLHQsbil7a3QoZSx0LHcodCxuLmJpbmQoZSkpKX1DLmJvdW5kPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiEwPT09cj8oUChlLHQsbi52YWx1ZSksbnVsbCk6bj97Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAodGhpcyx0LG4udmFsdWV8fG4uaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSksdGhpc1t0XX0sc2V0Okl9OntlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxzZXQ6ZnVuY3Rpb24oZSl7UCh0aGlzLHQsZSl9LGdldDpmdW5jdGlvbigpe319fTt2YXIgTj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEQoZSx0KXtyZXR1cm4gQihlLHQpfWZ1bmN0aW9uIEIoZSx0LG4scil7aWYoZT09PXQpcmV0dXJuIDAhPT1lfHwxL2U9PTEvdDtpZihudWxsPT1lfHxudWxsPT10KXJldHVybiExO2lmKGUhPWUpcmV0dXJuIHQhPXQ7dmFyIG89dHlwZW9mIGU7cmV0dXJuKCJmdW5jdGlvbiI9PT1vfHwib2JqZWN0Ij09PW98fCJvYmplY3QiPT10eXBlb2YgdCkmJmZ1bmN0aW9uKGUsdCxuLHIpe2U9TChlKSx0PUwodCk7dmFyIG89Ti5jYWxsKGUpO2lmKG8hPT1OLmNhbGwodCkpcmV0dXJuITE7c3dpdGNoKG8pe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIiIrZT09IiIrdDtjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuK2UhPStlPyt0IT0rdDowPT0rZT8xLytlPT0xL3Q6K2U9PSt0O2Nhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rZT09K3Q7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudmFsdWVPZi5jYWxsKGUpPT09U3ltYm9sLnZhbHVlT2YuY2FsbCh0KX12YXIgaT0iW29iamVjdCBBcnJheV0iPT09bztpZighaSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuITE7dmFyIGE9ZS5jb25zdHJ1Y3RvcixzPXQuY29uc3RydWN0b3I7aWYoYSE9PXMmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEgaW5zdGFuY2VvZiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgcyYmcyBpbnN0YW5jZW9mIHMpJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQpcmV0dXJuITF9cj1yfHxbXTt2YXIgdT0obj1ufHxbXSkubGVuZ3RoO2Zvcig7dS0tOylpZihuW3VdPT09ZSlyZXR1cm4gclt1XT09PXQ7aWYobi5wdXNoKGUpLHIucHVzaCh0KSxpKXtpZigodT1lLmxlbmd0aCkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IoO3UtLTspaWYoIUIoZVt1XSx0W3VdLG4scikpcmV0dXJuITF9ZWxzZXt2YXIgYyxsPU9iamVjdC5rZXlzKGUpO2lmKHU9bC5sZW5ndGgsT2JqZWN0LmtleXModCkubGVuZ3RoIT09dSlyZXR1cm4hMTtmb3IoO3UtLTspaWYoYz1sW3VdLCFVKHQsYyl8fCFCKGVbY10sdFtjXSxuLHIpKXJldHVybiExfXJldHVybiBuLnBvcCgpLHIucG9wKCksITB9KGUsdCxuLHIpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGR0KGUpP2UucGVlaygpOkN0KGUpfHx6ZShlKT9NdChlLmVudHJpZXMoKSk6ZX1mdW5jdGlvbiBVKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gZT09PXR9dmFyIFE9e2lkZW50aXR5OkYsc3RydWN0dXJhbDpmdW5jdGlvbihlLHQpe3JldHVybiBEKGUsdCl9LGRlZmF1bHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiJudW1iZXIiPT10eXBlb2YgdCYmaXNOYU4oZSkmJmlzTmFOKHQpfShlLHQpfHxGKGUsdCl9fTtmdW5jdGlvbiBWKGUsdCl7dm9pZCAwPT09dCYmKHQ9YnQpO3ZhciBuLHI9dCYmdC5uYW1lfHxlLm5hbWV8fCJBdXRvcnVuQCIrbXQoKTtpZighdC5zY2hlZHVsZXImJiF0LmRlbGF5KW49bmV3IGRuKHIsKGZ1bmN0aW9uKCl7dGhpcy50cmFjayhhKX0pLHQub25FcnJvcik7ZWxzZXt2YXIgbz1XKHQpLGk9ITE7bj1uZXcgZG4ociwoZnVuY3Rpb24oKXtpfHwoaT0hMCxvKChmdW5jdGlvbigpe2k9ITEsbi5pc0Rpc3Bvc2VkfHxuLnRyYWNrKGEpfSkpKX0pLHQub25FcnJvcil9ZnVuY3Rpb24gYSgpe2Uobil9cmV0dXJuIG4uc2NoZWR1bGUoKSxuLmdldERpc3Bvc2VyKCl9dmFyIHE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX07ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZS5zY2hlZHVsZXI/ZS5zY2hlZHVsZXI6ZS5kZWxheT9mdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LGUuZGVsYXkpfTpxfWZ1bmN0aW9uIEcoZSx0LG4pe3ZvaWQgMD09PW4mJihuPWJ0KSwiYm9vbGVhbiI9PXR5cGVvZiBuJiYobj17ZmlyZUltbWVkaWF0ZWx5Om59LHd0KCJVc2luZyBmaXJlSW1tZWRpYXRlbHkgYXMgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gVXNlICd7IGZpcmVJbW1lZGlhdGVseTogdHJ1ZSB9JyBpbnN0ZWFkIikpO3ZhciByLG8saSxhPW4ubmFtZXx8IlJlYWN0aW9uQCIrbXQoKSxzPUMoYSxuLm9uRXJyb3I/KHI9bi5vbkVycm9yLG89dCxmdW5jdGlvbigpe3RyeXtyZXR1cm4gby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7ci5jYWxsKHRoaXMsZSl9fSk6dCksdT0hbi5zY2hlZHVsZXImJiFuLmRlbGF5LGM9VyhuKSxsPSEwLGY9ITEsaD1uLmNvbXBhcmVTdHJ1Y3R1cmFsP1Euc3RydWN0dXJhbDpuLmVxdWFsc3x8US5kZWZhdWx0LGQ9bmV3IGRuKGEsKGZ1bmN0aW9uKCl7bHx8dT9wKCk6Znx8KGY9ITAsYyhwKSl9KSxuLm9uRXJyb3IpO2Z1bmN0aW9uIHAoKXtpZihmPSExLCFkLmlzRGlzcG9zZWQpe3ZhciB0PSExO2QudHJhY2soKGZ1bmN0aW9uKCl7dmFyIG49ZShkKTt0PWx8fCFoKGksbiksaT1ufSkpLGwmJm4uZmlyZUltbWVkaWF0ZWx5JiZzKGksZCksbHx8ITAhPT10fHxzKGksZCksbCYmKGw9ITEpfX1yZXR1cm4gZC5zY2hlZHVsZSgpLGQuZ2V0RGlzcG9zZXIoKX12YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5kZXBlbmRlbmNpZXNTdGF0ZT1OdC5OT1RfVFJBQ0tJTkcsdGhpcy5vYnNlcnZpbmc9W10sdGhpcy5uZXdPYnNlcnZpbmc9bnVsbCx0aGlzLmlzQmVpbmdPYnNlcnZlZD0hMSx0aGlzLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb249ITEsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5vYnNlcnZlcnNJbmRleGVzPXt9LHRoaXMuZGlmZlZhbHVlPTAsdGhpcy5ydW5JZD0wLHRoaXMubGFzdEFjY2Vzc2VkQnk9MCx0aGlzLmxvd2VzdE9ic2VydmVyU3RhdGU9TnQuVVBfVE9fREFURSx0aGlzLnVuYm91bmREZXBzQ291bnQ9MCx0aGlzLl9fbWFwaWQ9IiMiK210KCksdGhpcy52YWx1ZT1uZXcgZW4obnVsbCksdGhpcy5pc0NvbXB1dGluZz0hMSx0aGlzLmlzUnVubmluZ1NldHRlcj0hMSx0aGlzLmlzVHJhY2luZz1EdC5OT05FLHRoaXMuZmlyc3RHZXQ9ITAsdGhpcy5kZXJpdmF0aW9uPWUuZ2V0LHRoaXMubmFtZT1lLm5hbWV8fCJDb21wdXRlZFZhbHVlQCIrbXQoKSxlLnNldCYmKHRoaXMuc2V0dGVyPXcodGhpcy5uYW1lKyItc2V0dGVyIixlLnNldCkpLHRoaXMuZXF1YWxzPWUuZXF1YWxzfHwoZS5jb21wYXJlU3RydWN0dXJhbHx8ZS5zdHJ1Y3Q/US5zdHJ1Y3R1cmFsOlEuZGVmYXVsdCksdGhpcy5zY29wZT1lLmNvbnRleHQsdGhpcy5yZXF1aXJlc1JlYWN0aW9uPSEhZS5yZXF1aXJlc1JlYWN0aW9uLHRoaXMua2VlcEFsaXZlPSEhZS5rZWVwQWxpdmV9cmV0dXJuIGUucHJvdG90eXBlLm9uQmVjb21lU3RhbGU9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSl7aWYoZS5sb3dlc3RPYnNlcnZlclN0YXRlIT09TnQuVVBfVE9fREFURSlyZXR1cm47ZS5sb3dlc3RPYnNlcnZlclN0YXRlPU50LlBPU1NJQkxZX1NUQUxFO3ZhciB0PWUub2JzZXJ2ZXJzLG49dC5sZW5ndGg7Zm9yKDtuLS07KXt2YXIgcj10W25dO3IuZGVwZW5kZW5jaWVzU3RhdGU9PT1OdC5VUF9UT19EQVRFJiYoci5kZXBlbmRlbmNpZXNTdGF0ZT1OdC5QT1NTSUJMWV9TVEFMRSxyLmlzVHJhY2luZyE9PUR0Lk5PTkUmJiR0KHIsZSksci5vbkJlY29tZVN0YWxlKCkpfX0odGhpcyl9LGUucHJvdG90eXBlLm9uQmVjb21lVW5vYnNlcnZlZD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25CZWNvbWVPYnNlcnZlZD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmtlZXBBbGl2ZSYmdGhpcy5maXJzdEdldCYmKHRoaXMuZmlyc3RHZXQ9ITEsVigoZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXQoKX0pKSksdGhpcy5pc0NvbXB1dGluZyYmZ3QoIkN5Y2xlIGRldGVjdGVkIGluIGNvbXB1dGF0aW9uICIrdGhpcy5uYW1lKyI6ICIrdGhpcy5kZXJpdmF0aW9uKSwwPT09UXQuaW5CYXRjaCYmMD09PXRoaXMub2JzZXJ2ZXJzLmxlbmd0aD9ubih0aGlzKSYmKHRoaXMud2FybkFib3V0VW50cmFja2VkUmVhZCgpLFp0KCksdGhpcy52YWx1ZT10aGlzLmNvbXB1dGVWYWx1ZSghMSksX3QoKSk6KFh0KHRoaXMpLG5uKHRoaXMpJiZ0aGlzLnRyYWNrQW5kQ29tcHV0ZSgpJiZmdW5jdGlvbihlKXtpZihlLmxvd2VzdE9ic2VydmVyU3RhdGU9PT1OdC5TVEFMRSlyZXR1cm47ZS5sb3dlc3RPYnNlcnZlclN0YXRlPU50LlNUQUxFO3ZhciB0PWUub2JzZXJ2ZXJzLG49dC5sZW5ndGg7Zm9yKDtuLS07KXt2YXIgcj10W25dO3IuZGVwZW5kZW5jaWVzU3RhdGU9PT1OdC5QT1NTSUJMWV9TVEFMRT9yLmRlcGVuZGVuY2llc1N0YXRlPU50LlNUQUxFOnIuZGVwZW5kZW5jaWVzU3RhdGU9PT1OdC5VUF9UT19EQVRFJiYoZS5sb3dlc3RPYnNlcnZlclN0YXRlPU50LlVQX1RPX0RBVEUpfX0odGhpcykpO3ZhciB0PXRoaXMudmFsdWU7aWYodG4odCkpdGhyb3cgdC5jYXVzZTtyZXR1cm4gdH0sZS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29tcHV0ZVZhbHVlKCExKTtpZih0bihlKSl0aHJvdyBlLmNhdXNlO3JldHVybiBlfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5zZXR0ZXIpe090KCF0aGlzLmlzUnVubmluZ1NldHRlciwiVGhlIHNldHRlciBvZiBjb21wdXRlZCB2YWx1ZSAnIit0aGlzLm5hbWUrIicgaXMgdHJ5aW5nIHRvIHVwZGF0ZSBpdHNlbGYuIERpZCB5b3UgaW50ZW5kIHRvIHVwZGF0ZSBhbiBfb2JzZXJ2YWJsZV8gdmFsdWUsIGluc3RlYWQgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5PyIpLHRoaXMuaXNSdW5uaW5nU2V0dGVyPSEwO3RyeXt0aGlzLnNldHRlci5jYWxsKHRoaXMuc2NvcGUsZSl9ZmluYWxseXt0aGlzLmlzUnVubmluZ1NldHRlcj0hMX19ZWxzZSBPdCghMSwhMSl9LGUucHJvdG90eXBlLnRyYWNrQW5kQ29tcHV0ZT1mdW5jdGlvbigpe3YoKSYmYih7b2JqZWN0OnRoaXMuc2NvcGUsdHlwZToiY29tcHV0ZSIsbmFtZTp0aGlzLm5hbWV9KTt2YXIgZT10aGlzLnZhbHVlLHQ9dGhpcy5kZXBlbmRlbmNpZXNTdGF0ZT09PU50Lk5PVF9UUkFDS0lORyxuPXRoaXMuY29tcHV0ZVZhbHVlKCEwKSxyPXR8fHRuKGUpfHx0bihuKXx8IXRoaXMuZXF1YWxzKGUsbik7cmV0dXJuIHImJih0aGlzLnZhbHVlPW4pLHJ9LGUucHJvdG90eXBlLmNvbXB1dGVWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLmlzQ29tcHV0aW5nPSEwLFF0LmNvbXB1dGF0aW9uRGVwdGgrKyxlKXQ9YW4odGhpcyx0aGlzLmRlcml2YXRpb24sdGhpcy5zY29wZSk7ZWxzZSBpZighMD09PVF0LmRpc2FibGVFcnJvckJvdW5kYXJpZXMpdD10aGlzLmRlcml2YXRpb24uY2FsbCh0aGlzLnNjb3BlKTtlbHNlIHRyeXt0PXRoaXMuZGVyaXZhdGlvbi5jYWxsKHRoaXMuc2NvcGUpfWNhdGNoKGUpe3Q9bmV3IGVuKGUpfXJldHVybiBRdC5jb21wdXRhdGlvbkRlcHRoLS0sdGhpcy5pc0NvbXB1dGluZz0hMSx0fSxlLnByb3RvdHlwZS5zdXNwZW5kPWZ1bmN0aW9uKCl7c24odGhpcyksdGhpcy52YWx1ZT12b2lkIDB9LGUucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ITAsbz12b2lkIDA7cmV0dXJuIFYoKGZ1bmN0aW9uKCl7dmFyIGk9bi5nZXQoKTtpZighcnx8dCl7dmFyIGE9Y24oKTtlKHt0eXBlOiJ1cGRhdGUiLG9iamVjdDpuLG5ld1ZhbHVlOmksb2xkVmFsdWU6b30pLGxuKGEpfXI9ITEsbz1pfSkpfSxlLnByb3RvdHlwZS53YXJuQWJvdXRVbnRyYWNrZWRSZWFkPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoKX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyJbIit0aGlzLmRlcml2YXRpb24udG9TdHJpbmcoKSsiXSJ9LGUucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gUHQodGhpcy5nZXQoKSl9LGV9KCk7ei5wcm90b3R5cGVbUnQoKV09ei5wcm90b3R5cGUudmFsdWVPZjt2YXIgWT1UdCgiQ29tcHV0ZWRWYWx1ZSIseik7ZnVuY3Rpb24gSyhlKXtyZXR1cm4gdm9pZCAwIT09ZS5pbnRlcmNlcHRvcnMmJmUuaW50ZXJjZXB0b3JzLmxlbmd0aD4wfWZ1bmN0aW9uIEgoZSx0KXt2YXIgbj1lLmludGVyY2VwdG9yc3x8KGUuaW50ZXJjZXB0b3JzPVtdKTtyZXR1cm4gbi5wdXNoKHQpLGp0KChmdW5jdGlvbigpe3ZhciBlPW4uaW5kZXhPZih0KTstMSE9PWUmJm4uc3BsaWNlKGUsMSl9KSl9ZnVuY3Rpb24gSihlLHQpe3ZhciBuPWNuKCk7dHJ5e3ZhciByPWUuaW50ZXJjZXB0b3JzO2lmKHIpZm9yKHZhciBvPTAsaT1yLmxlbmd0aDtvPGkmJihPdCghKHQ9cltvXSh0KSl8fHQudHlwZSwiSW50ZXJjZXB0IGhhbmRsZXJzIHNob3VsZCByZXR1cm4gbm90aGluZyBvciBhIGNoYW5nZSBvYmplY3QiKSx0KTtvKyspO3JldHVybiB0fWZpbmFsbHl7bG4obil9fWZ1bmN0aW9uIFooZSl7cmV0dXJuIHZvaWQgMCE9PWUuY2hhbmdlTGlzdGVuZXJzJiZlLmNoYW5nZUxpc3RlbmVycy5sZW5ndGg+MH1mdW5jdGlvbiBfKGUsdCl7dmFyIG49ZS5jaGFuZ2VMaXN0ZW5lcnN8fChlLmNoYW5nZUxpc3RlbmVycz1bXSk7cmV0dXJuIG4ucHVzaCh0KSxqdCgoZnVuY3Rpb24oKXt2YXIgZT1uLmluZGV4T2YodCk7LTEhPT1lJiZuLnNwbGljZShlLDEpfSkpfWZ1bmN0aW9uIFgoZSx0KXt2YXIgbj1jbigpLHI9ZS5jaGFuZ2VMaXN0ZW5lcnM7aWYocil7Zm9yKHZhciBvPTAsaT0ocj1yLnNsaWNlKCkpLmxlbmd0aDtvPGk7bysrKXJbb10odCk7bG4obil9fXZhciAkPXt9OyFmdW5jdGlvbigpe2lmKFdlKXJldHVybjtXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9IkF0b21AIittdCgpKSx0aGlzLm5hbWU9ZSx0aGlzLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb249ITEsdGhpcy5pc0JlaW5nT2JzZXJ2ZWQ9ITEsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5vYnNlcnZlcnNJbmRleGVzPXt9LHRoaXMuZGlmZlZhbHVlPTAsdGhpcy5sYXN0QWNjZXNzZWRCeT0wLHRoaXMubG93ZXN0T2JzZXJ2ZXJTdGF0ZT1OdC5OT1RfVFJBQ0tJTkd9cmV0dXJuIGUucHJvdG90eXBlLm9uQmVjb21lVW5vYnNlcnZlZD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25CZWNvbWVPYnNlcnZlZD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUucmVwb3J0T2JzZXJ2ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gWHQodGhpcyl9LGUucHJvdG90eXBlLnJlcG9ydENoYW5nZWQ9ZnVuY3Rpb24oKXtadCgpLGZ1bmN0aW9uKGUpe2lmKGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZT09PU50LlNUQUxFKXJldHVybjtlLmxvd2VzdE9ic2VydmVyU3RhdGU9TnQuU1RBTEU7dmFyIHQ9ZS5vYnNlcnZlcnMsbj10Lmxlbmd0aDtmb3IoO24tLTspe3ZhciByPXRbbl07ci5kZXBlbmRlbmNpZXNTdGF0ZT09PU50LlVQX1RPX0RBVEUmJihyLmlzVHJhY2luZyE9PUR0Lk5PTkUmJiR0KHIsZSksci5vbkJlY29tZVN0YWxlKCkpLHIuZGVwZW5kZW5jaWVzU3RhdGU9TnQuU1RBTEV9fSh0aGlzKSxfdCgpfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCksR2U9VHQoIkF0b20iLFdlKX0oKTt2YXIgZWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scixvKXt2b2lkIDA9PT1yJiYocj0iT2JzZXJ2YWJsZVZhbHVlQCIrbXQoKSksdm9pZCAwPT09byYmKG89ITApO3ZhciBpPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBpLmVuaGFuY2VyPW4saS5oYXNVbnJlcG9ydGVkQ2hhbmdlPSExLGkudmFsdWU9bih0LHZvaWQgMCxyKSxvJiZ2KCkmJmIoe3R5cGU6ImNyZWF0ZSIsbmFtZTppLm5hbWUsbmV3VmFsdWU6IiIraS52YWx1ZX0pLGl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5kZWhhbmNlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVoYW5jZXI/dGhpcy5kZWhhbmNlcihlKTplfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52YWx1ZTtpZigoZT10aGlzLnByZXBhcmVOZXdWYWx1ZShlKSkhPT0kKXt2YXIgbj12KCk7biYmeSh7dHlwZToidXBkYXRlIixuYW1lOnRoaXMubmFtZSxuZXdWYWx1ZTplLG9sZFZhbHVlOnR9KSx0aGlzLnNldE5ld1ZhbHVlKGUpLG4mJmcoKX19LHQucHJvdG90eXBlLnByZXBhcmVOZXdWYWx1ZT1mdW5jdGlvbihlKXtpZihvbih0aGlzKSxLKHRoaXMpKXt2YXIgdD1KKHRoaXMse29iamVjdDp0aGlzLHR5cGU6InVwZGF0ZSIsbmV3VmFsdWU6ZX0pO2lmKCF0KXJldHVybiAkO2U9dC5uZXdWYWx1ZX1yZXR1cm4gZT10aGlzLmVuaGFuY2VyKGUsdGhpcy52YWx1ZSx0aGlzLm5hbWUpLHRoaXMudmFsdWUhPT1lP2U6JH0sdC5wcm90b3R5cGUuc2V0TmV3VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52YWx1ZTt0aGlzLnZhbHVlPWUsdGhpcy5yZXBvcnRDaGFuZ2VkKCksWih0aGlzKSYmWCh0aGlzLHt0eXBlOiJ1cGRhdGUiLG9iamVjdDp0aGlzLG5ld1ZhbHVlOmUsb2xkVmFsdWU6dH0pfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBvcnRPYnNlcnZlZCgpLHRoaXMuZGVoYW5jZVZhbHVlKHRoaXMudmFsdWUpfSx0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEgodGhpcyxlKX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0JiZlKHtvYmplY3Q6dGhpcyx0eXBlOiJ1cGRhdGUiLG5ld1ZhbHVlOnRoaXMudmFsdWUsb2xkVmFsdWU6dm9pZCAwfSksXyh0aGlzLGUpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyJbIit0aGlzLnZhbHVlKyJdIn0sdC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiBQdCh0aGlzLmdldCgpKX0sdH0oV2UpO2VlLnByb3RvdHlwZVtSdCgpXT1lZS5wcm90b3R5cGUudmFsdWVPZjt2YXIgdGU9VHQoIk9ic2VydmFibGVWYWx1ZSIsZWUpLG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy50YXJnZXQ9ZSx0aGlzLm5hbWU9dCx0aGlzLmRlZmF1bHRFbmhhbmNlcj1uLHRoaXMudmFsdWVzPXt9fXJldHVybiBlLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy50YXJnZXQ9PT1lfHwodGhpcy5pbGxlZ2FsQWNjZXNzKGUsdCksdGhpcy52YWx1ZXNbdF0pKXJldHVybiB0aGlzLnZhbHVlc1t0XS5nZXQoKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMudGFyZ2V0O3IhPT1lJiZ0aGlzLmlsbGVnYWxBY2Nlc3MoZSx0KTt2YXIgbz10aGlzLnZhbHVlc1t0XTtpZihvIGluc3RhbmNlb2YgeilvLnNldChuKTtlbHNle2lmKEsodGhpcykpe2lmKCEodT1KKHRoaXMse3R5cGU6InVwZGF0ZSIsb2JqZWN0OnIsbmFtZTp0LG5ld1ZhbHVlOm59KSkpcmV0dXJuO249dS5uZXdWYWx1ZX1pZigobj1vLnByZXBhcmVOZXdWYWx1ZShuKSkhPT0kKXt2YXIgaT1aKHRoaXMpLHM9digpLHU9aXx8cz97dHlwZToidXBkYXRlIixvYmplY3Q6cixvbGRWYWx1ZTpvLnZhbHVlLG5hbWU6dCxuZXdWYWx1ZTpufTpudWxsO3MmJnkoYSh7fSx1LHtuYW1lOnRoaXMubmFtZSxrZXk6dH0pKSxvLnNldE5ld1ZhbHVlKG4pLGkmJlgodGhpcyx1KSxzJiZnKCl9fX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmFsdWVzW2VdKXt2YXIgdD10aGlzLnRhcmdldDtpZihLKHRoaXMpKWlmKCEoaT1KKHRoaXMse29iamVjdDp0LG5hbWU6ZSx0eXBlOiJyZW1vdmUifSkpKXJldHVybjt0cnl7WnQoKTt2YXIgbj1aKHRoaXMpLHI9digpLG89dGhpcy52YWx1ZXNbZV0uZ2V0KCk7dGhpcy5rZXlzJiZ0aGlzLmtleXMucmVtb3ZlKGUpLGRlbGV0ZSB0aGlzLnZhbHVlc1tlXSxkZWxldGUgdGhpcy50YXJnZXRbZV07dmFyIGk9bnx8cj97dHlwZToicmVtb3ZlIixvYmplY3Q6dCxvbGRWYWx1ZTpvLG5hbWU6ZX06bnVsbDtyJiZ5KGEoe30saSx7bmFtZTp0aGlzLm5hbWUsa2V5OmV9KSksbiYmWCh0aGlzLGkpLHImJmcoKX1maW5hbGx5e190KCl9fX0sZS5wcm90b3R5cGUuaWxsZWdhbEFjY2Vzcz1mdW5jdGlvbihlLHQpe30sZS5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZSl9LGUucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbihlKXtyZXR1cm4gSCh0aGlzLGUpfSxlLnByb3RvdHlwZS5nZXRLZXlzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dGhpcy5rZXlzJiYodGhpcy5rZXlzPW5ldyBzdChPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS52YWx1ZXNbdF1pbnN0YW5jZW9mIGVlfSkpLERlLCJrZXlzKCIrdGhpcy5uYW1lKyIpIiwhMCkpLHRoaXMua2V5cy5zbGljZSgpfSxlfSgpO2Z1bmN0aW9uIHJlKGUsdCxuKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwPT09biYmKG49TmUpO3ZhciByPWUuJG1vYng7cmV0dXJuIHJ8fChBdChlKXx8KHQ9KGUuY29uc3RydWN0b3IubmFtZXx8Ik9ic2VydmFibGVPYmplY3QiKSsiQCIrbXQoKSksdHx8KHQ9Ik9ic2VydmFibGVPYmplY3RAIittdCgpKSxJdChlLCIkbW9ieCIscj1uZXcgbmUoZSx0LG4pKSxyKX1mdW5jdGlvbiBvZShlLHQsbixyKXt2YXIgbz1yZShlKTtpZihLKG8pKXt2YXIgaT1KKG8se29iamVjdDplLG5hbWU6dCx0eXBlOiJhZGQiLG5ld1ZhbHVlOm59KTtpZighaSlyZXR1cm47bj1pLm5ld1ZhbHVlfW49KG8udmFsdWVzW3RdPW5ldyBlZShuLHIsby5uYW1lKyIuIit0LCExKSkudmFsdWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxmdW5jdGlvbihlKXtyZXR1cm4gYWVbZV18fChhZVtlXT17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vYngucmVhZCh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy4kbW9ieC53cml0ZSh0aGlzLGUsdCl9fSl9KHQpKSxvLmtleXMmJm8ua2V5cy5wdXNoKHQpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVooZSksaT12KCkscz1vfHxpP3t0eXBlOiJhZGQiLG9iamVjdDp0LG5hbWU6bixuZXdWYWx1ZTpyfTpudWxsO2kmJnkoYSh7fSxzLHtuYW1lOmUubmFtZSxrZXk6bn0pKTtvJiZYKGUscyk7aSYmZygpfShvLGUsdCxuKX1mdW5jdGlvbiBpZShlLHQsbil7dmFyIHI9cmUoZSk7bi5uYW1lPXIubmFtZSsiLiIrdCxuLmNvbnRleHQ9ZSxyLnZhbHVlc1t0XT1uZXcgeihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LGZ1bmN0aW9uKGUpe3JldHVybiBzZVtlXXx8KHNlW2VdPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWUodGhpcykucmVhZCh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24odCl7dWUodGhpcykud3JpdGUodGhpcyxlLHQpfX0pfSh0KSl9dmFyIGFlPU9iamVjdC5jcmVhdGUobnVsbCksc2U9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB1ZShlKXt2YXIgdD1lLiRtb2J4O3JldHVybiB0fHwoaChlKSxlLiRtb2J4KX12YXIgY2U9VHQoIk9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbiIsbmUpO2Z1bmN0aW9uIGxlKGUpe3JldHVybiEhU3QoZSkmJihoKGUpLGNlKGUuJG1vYngpKX1mdW5jdGlvbiBmZSh0KXt2YXIgbj1kKCEwLChmdW5jdGlvbihlLG4scixvLGkpe29lKGUsbixyP3IuaW5pdGlhbGl6ZXI/ci5pbml0aWFsaXplci5jYWxsKGUpOnIudmFsdWU6dm9pZCAwLHQpfSkpLHI9KHZvaWQgMCE9PWUmJmUuZW52LG4pO3JldHVybiByLmVuaGFuY2VyPXQscn1mdW5jdGlvbiBoZShlLHQpe2lmKG51bGw9PWUpcmV0dXJuITE7aWYodm9pZCAwIT09dCl7aWYobGUoZSkpe3ZhciBuPWUuJG1vYng7cmV0dXJuIG4udmFsdWVzJiYhIW4udmFsdWVzW3RdfXJldHVybiExfXJldHVybiBsZShlKXx8ISFlLiRtb2J4fHxHZShlKXx8Z24oZSl8fFkoZSl9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIDEhPT1hcmd1bWVudHMubGVuZ3RoJiZndCghMSksaGUoZSl9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/Z3QoITEpOmhlKGUsdCl9ZnVuY3Rpb24gdmUoZSx0KXtpZihudWxsPT1lKXJldHVybiExO2lmKHZvaWQgMCE9PXQpe2lmKCExPT09bGUoZSkpcmV0dXJuITE7aWYoIWUuJG1vYngudmFsdWVzW3RdKXJldHVybiExO3ZhciBuPVllKGUsdCk7cmV0dXJuIFkobil9cmV0dXJuIFkoZSl9ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT9ndCghMSk6dmUoZSl9ZnVuY3Rpb24geWUoZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/Z3QoITEpOnZlKGUsdCl9dmFyIG1lPWQoITEsKGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9bi5nZXQscz1uLnNldCx1PW9bMF18fHt9O2llKGUsdCxhKHtnZXQ6aSxzZXQ6c30sdSkpfSkpLGdlPW1lKHtlcXVhbHM6US5zdHJ1Y3R1cmFsfSksT2U9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJjE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBtZS5hcHBseShudWxsLGFyZ3VtZW50cyk7dmFyIHI9Im9iamVjdCI9PXR5cGVvZiB0P3Q6e307cmV0dXJuIHIuZ2V0PWUsci5zZXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyLnNldCxyLm5hbWU9ci5uYW1lfHxlLm5hbWV8fCIiLG5ldyB6KHIpfTtmdW5jdGlvbiB3ZShlLHQsbil7cmV0dXJuIHd0KCInZXh0ZW5kU2hhbGxvd09ic2VydmFibGUnIGlzIGRlcHJlY2F0ZWQsIHVzZSAnZXh0ZW5kT2JzZXJ2YWJsZSh0YXJnZXQsIHByb3BzLCB7IGRlZXA6IGZhbHNlIH0pJyBpbnN0ZWFkIiksamUoZSx0LG4sU2UpfWZ1bmN0aW9uIGplKGUsdCxuLHIpe3ZhciBvPShyPUFlKHIpKS5kZWZhdWx0RGVjb3JhdG9yfHwoITE9PT1yLmRlZXA/eGU6SWUpO2goZSkscmUoZSxyLm5hbWUsby5lbmhhbmNlciksWnQoKTt0cnl7Zm9yKHZhciBpIGluIHQpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTswO3ZhciBzPShuJiZpIGluIG4/bltpXTphLmdldD9tZTpvKShlLGksYSwhMCk7cyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxzKX19ZmluYWxseXtfdCgpfXJldHVybiBlfU9lLnN0cnVjdD1nZTt2YXIgRWU9e2RlZXA6ITAsbmFtZTp2b2lkIDAsZGVmYXVsdERlY29yYXRvcjp2b2lkIDB9LFNlPXtkZWVwOiExLG5hbWU6dm9pZCAwLGRlZmF1bHREZWNvcmF0b3I6dm9pZCAwfTtmdW5jdGlvbiBBZShlKXtyZXR1cm4gbnVsbD09ZT9FZToic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZSxkZWVwOiEwfTplfWZ1bmN0aW9uIGtlKGUpe3JldHVybiBlLmRlZmF1bHREZWNvcmF0b3I/ZS5kZWZhdWx0RGVjb3JhdG9yLmVuaGFuY2VyOiExPT09ZS5kZWVwP0RlOk5lfU9iamVjdC5mcmVlemUoRWUpLE9iamVjdC5mcmVlemUoU2UpO3ZhciBJZT1mZShOZSksVGU9ZmUoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOmxlKGUpfHxkdChlKXx8emUoZSk/ZTpBcnJheS5pc0FycmF5KGUpP1JlLmFycmF5KGUse25hbWU6bixkZWVwOiExfSk6QXQoZSk/UmUub2JqZWN0KGUsdm9pZCAwLHtuYW1lOm4sZGVlcDohMX0pOkN0KGUpP1JlLm1hcChlLHtuYW1lOm4sZGVlcDohMX0pOmd0KCExKX0pKSx4ZT1mZShEZSksQ2U9ZmUoKGZ1bmN0aW9uKGUsdCxuKXswO3JldHVybiBEKGUsdCk/dDplfSkpO3ZhciBNZT17Ym94OmZ1bmN0aW9uKGUsdCl7YXJndW1lbnRzLmxlbmd0aD4yJiZQZSgiYm94Iik7dmFyIG49QWUodCk7cmV0dXJuIG5ldyBlZShlLGtlKG4pLG4ubmFtZSl9LHNoYWxsb3dCb3g6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZQZSgic2hhbGxvd0JveCIpLHd0KCJvYnNlcnZhYmxlLnNoYWxsb3dCb3giLCJvYnNlcnZhYmxlLmJveCh2YWx1ZSwgeyBkZWVwOiBmYWxzZSB9KSIpLFJlLmJveChlLHtuYW1lOnQsZGVlcDohMX0pfSxhcnJheTpmdW5jdGlvbihlLHQpe2FyZ3VtZW50cy5sZW5ndGg+MiYmUGUoImFycmF5Iik7dmFyIG49QWUodCk7cmV0dXJuIG5ldyBzdChlLGtlKG4pLG4ubmFtZSl9LHNoYWxsb3dBcnJheTpmdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJlBlKCJzaGFsbG93QXJyYXkiKSx3dCgib2JzZXJ2YWJsZS5zaGFsbG93QXJyYXkiLCJvYnNlcnZhYmxlLmFycmF5KHZhbHVlcywgeyBkZWVwOiBmYWxzZSB9KSIpLFJlLmFycmF5KGUse25hbWU6dCxkZWVwOiExfSl9LG1hcDpmdW5jdGlvbihlLHQpe2FyZ3VtZW50cy5sZW5ndGg+MiYmUGUoIm1hcCIpO3ZhciBuPUFlKHQpO3JldHVybiBuZXcgcWUoZSxrZShuKSxuLm5hbWUpfSxzaGFsbG93TWFwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmUGUoInNoYWxsb3dNYXAiKSx3dCgib2JzZXJ2YWJsZS5zaGFsbG93TWFwIiwib2JzZXJ2YWJsZS5tYXAodmFsdWVzLCB7IGRlZXA6IGZhbHNlIH0pIiksUmUubWFwKGUse25hbWU6dCxkZWVwOiExfSl9LG9iamVjdDpmdW5jdGlvbihlLHQsbil7InN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMV0mJlBlKCJvYmplY3QiKTt2YXIgcj1BZShuKTtyZXR1cm4gamUoe30sZSx0LHIpfSxzaGFsbG93T2JqZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMV0mJlBlKCJzaGFsbG93T2JqZWN0Iiksd3QoIm9ic2VydmFibGUuc2hhbGxvd09iamVjdCIsIm9ic2VydmFibGUub2JqZWN0KHZhbHVlcywge30sIHsgZGVlcDogZmFsc2UgfSkiKSxSZS5vYmplY3QoZSx7fSx7bmFtZTp0LGRlZXA6ITF9KX0scmVmOnhlLHNoYWxsb3c6VGUsZGVlcDpJZSxzdHJ1Y3Q6Q2V9LFJlPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlyZXR1cm4gSWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGRlKGUpKXJldHVybiBlO3ZhciByPUF0KGUpP1JlLm9iamVjdChlLHQsbik6QXJyYXkuaXNBcnJheShlKT9SZS5hcnJheShlLHQpOkN0KGUpP1JlLm1hcChlLHQpOmU7aWYociE9PWUpcmV0dXJuIHI7Z3QoITEpfTtmdW5jdGlvbiBQZShlKXtndCgiRXhwZWN0ZWQgb25lIG9yIHR3byBhcmd1bWVudHMgdG8gb2JzZXJ2YWJsZS4iK2UrIi4gRGlkIHlvdSBhY2NpZGVudGFsbHkgdHJ5IHRvIHVzZSBvYnNlcnZhYmxlLiIrZSsiIGFzIGRlY29yYXRvcj8iKX1mdW5jdGlvbiBOZShlLHQsbil7cmV0dXJuIGRlKGUpP2U6QXJyYXkuaXNBcnJheShlKT9SZS5hcnJheShlLHtuYW1lOm59KTpBdChlKT9SZS5vYmplY3QoZSx2b2lkIDAse25hbWU6bn0pOkN0KGUpP1JlLm1hcChlLHtuYW1lOm59KTplfWZ1bmN0aW9uIERlKGUpe3JldHVybiBlfWZ1bmN0aW9uIEJlKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yfHwiQEBpdGVyYXRvciJ9ZnVuY3Rpb24gTGUoZSx0KXtJdChlLEJlKCksdCl9ZnVuY3Rpb24gVWUoZSl7cmV0dXJuIGVbQmUoKV09RmUsZX1mdW5jdGlvbiBGZSgpe3JldHVybiB0aGlzfWZ1bmN0aW9uIFFlKGUsdCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSxadCgpO3RyeXtyZXR1cm4gZS5hcHBseSh0KX1maW5hbGx5e190KCl9fU9iamVjdC5rZXlzKE1lKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gUmVbZV09TWVbZV19KSk7dmFyIFZlPXt9LHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7aWYodm9pZCAwPT09dCYmKHQ9TmUpLHZvaWQgMD09PW4mJihuPSJPYnNlcnZhYmxlTWFwQCIrbXQoKSksdGhpcy5lbmhhbmNlcj10LHRoaXMubmFtZT1uLHRoaXMuJG1vYng9VmUsdGhpcy5fa2V5cz1uZXcgc3Qodm9pZCAwLERlLHRoaXMubmFtZSsiLmtleXMoKSIsITApLCJmdW5jdGlvbiIhPXR5cGVvZiBNYXApdGhyb3cgbmV3IEVycm9yKCJtb2J4Lm1hcCByZXF1aXJlcyBNYXAgcG9seWZpbGwgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuIENoZWNrIGJhYmVsLXBvbHlmaWxsIG9yIGNvcmUtanMvZXM2L21hcC5qcyIpO3RoaXMuX2RhdGE9bmV3IE1hcCx0aGlzLl9oYXNNYXA9bmV3IE1hcCx0aGlzLm1lcmdlKGUpfXJldHVybiBlLnByb3RvdHlwZS5faGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhLmhhcyhlKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNNYXAuaGFzKGUpP3RoaXMuX2hhc01hcC5nZXQoZSkuZ2V0KCk6dGhpcy5fdXBkYXRlSGFzTWFwRW50cnkoZSwhMSkuZ2V0KCl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2hhcyhlKTtpZihLKHRoaXMpKXt2YXIgcj1KKHRoaXMse3R5cGU6bj8idXBkYXRlIjoiYWRkIixvYmplY3Q6dGhpcyxuZXdWYWx1ZTp0LG5hbWU6ZX0pO2lmKCFyKXJldHVybiB0aGlzO3Q9ci5uZXdWYWx1ZX1yZXR1cm4gbj90aGlzLl91cGRhdGVWYWx1ZShlLHQpOnRoaXMuX2FkZFZhbHVlKGUsdCksdGhpc30sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoSyh0aGlzKSYmIShvPUoodGhpcyx7dHlwZToiZGVsZXRlIixvYmplY3Q6dGhpcyxuYW1lOmV9KSkpcmV0dXJuITE7aWYodGhpcy5faGFzKGUpKXt2YXIgbj12KCkscj1aKHRoaXMpLG89cnx8bj97dHlwZToiZGVsZXRlIixvYmplY3Q6dGhpcyxvbGRWYWx1ZTp0aGlzLl9kYXRhLmdldChlKS52YWx1ZSxuYW1lOmV9Om51bGw7cmV0dXJuIG4mJnkoYSh7fSxvLHtuYW1lOnRoaXMubmFtZSxrZXk6ZX0pKSxRZSgoZnVuY3Rpb24oKXt0Ll9rZXlzLnJlbW92ZShlKSx0Ll91cGRhdGVIYXNNYXBFbnRyeShlLCExKSx0Ll9kYXRhLmdldChlKS5zZXROZXdWYWx1ZSh2b2lkIDApLHQuX2RhdGEuZGVsZXRlKGUpfSkpLHImJlgodGhpcyxvKSxuJiZnKCksITB9cmV0dXJuITF9LGUucHJvdG90eXBlLl91cGRhdGVIYXNNYXBFbnRyeT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2hhc01hcC5nZXQoZSk7cmV0dXJuIG4/bi5zZXROZXdWYWx1ZSh0KToobj1uZXcgZWUodCxEZSx0aGlzLm5hbWUrIi4iK2UrIj8iLCExKSx0aGlzLl9oYXNNYXAuc2V0KGUsbikpLG59LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2RhdGEuZ2V0KGUpO2lmKCh0PW4ucHJlcGFyZU5ld1ZhbHVlKHQpKSE9PSQpe3ZhciByPXYoKSxvPVoodGhpcyksaT1vfHxyP3t0eXBlOiJ1cGRhdGUiLG9iamVjdDp0aGlzLG9sZFZhbHVlOm4udmFsdWUsbmFtZTplLG5ld1ZhbHVlOnR9Om51bGw7ciYmeShhKHt9LGkse25hbWU6dGhpcy5uYW1lLGtleTplfSkpLG4uc2V0TmV3VmFsdWUodCksbyYmWCh0aGlzLGkpLHImJmcoKX19LGUucHJvdG90eXBlLl9hZGRWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7UWUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IGVlKHQsbi5lbmhhbmNlcixuLm5hbWUrIi4iK2UsITEpO24uX2RhdGEuc2V0KGUsciksdD1yLnZhbHVlLG4uX3VwZGF0ZUhhc01hcEVudHJ5KGUsITApLG4uX2tleXMucHVzaChlKX0pKTt2YXIgcj12KCksbz1aKHRoaXMpLGk9b3x8cj97dHlwZToiYWRkIixvYmplY3Q6dGhpcyxuYW1lOmUsbmV3VmFsdWU6dH06bnVsbDtyJiZ5KGEoe30saSx7bmFtZTp0aGlzLm5hbWUsa2V5OmV9KSksbyYmWCh0aGlzLGkpLHImJmcoKX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLmRlaGFuY2VWYWx1ZSh0aGlzLl9kYXRhLmdldChlKS5nZXQoKSk6dGhpcy5kZWhhbmNlVmFsdWUodm9pZCAwKX0sZS5wcm90b3R5cGUuZGVoYW5jZVZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLmRlaGFuY2VyP3RoaXMuZGVoYW5jZXIoZSk6ZX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlzW0JlKCldKCl9LGUucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0wO3JldHVybiBVZSh7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0PGUuX2tleXMubGVuZ3RoP3t2YWx1ZTplLmdldChlLl9rZXlzW3QrK10pLGRvbmU6ITF9Ont2YWx1ZTp2b2lkIDAsZG9uZTohMH19fSl9LGUucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9MDtyZXR1cm4gVWUoe25leHQ6ZnVuY3Rpb24oKXtpZih0PGUuX2tleXMubGVuZ3RoKXt2YXIgbj1lLl9rZXlzW3QrK107cmV0dXJue3ZhbHVlOltuLGUuZ2V0KG4pXSxkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fSl9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuX2tleXMuZm9yRWFjaCgoZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0LG4uZ2V0KHIpLHIsbil9KSl9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHplKGUpJiYoZT1lLnRvSlMoKSksUWUoKGZ1bmN0aW9uKCl7QXQoZSk/T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQuc2V0KG4sZVtuXSl9KSk6QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXMoZSwyKSxyPW5bMF0sbz1uWzFdO3JldHVybiB0LnNldChyLG8pfSkpOkN0KGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5zZXQobixlKX0pKTpudWxsIT1lJiZndCgiQ2Fubm90IGluaXRpYWxpemUgbWFwIGZyb20gIitlKX0pKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7UWUoKGZ1bmN0aW9uKCl7dW4oKGZ1bmN0aW9uKCl7ZS5fa2V5cy5zbGljZSgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlbGV0ZSh0KX0pKX0pKX0pKX0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBRZSgoZnVuY3Rpb24oKXt2YXIgbixyPUF0KG49ZSk/T2JqZWN0LmtleXMobik6QXJyYXkuaXNBcnJheShuKT9uLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSwxKVswXX0pKTpDdChuKXx8emUobik/TXQobi5rZXlzKCkpOmd0KCJDYW5ub3QgZ2V0IGtleXMgZnJvbSAnIituKyInIik7dC5fa2V5cy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09ci5pbmRleE9mKGUpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0LmRlbGV0ZShlKX0pKSx0Lm1lcmdlKGUpfSkpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1BPSk89ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIHRoaXMuX2tleXMuZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHRbIiIrbl09ZS5nZXQobil9KSksdH0sZS5wcm90b3R5cGUudG9KUz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1uZXcgTWFwO3JldHVybiB0aGlzLl9rZXlzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiB0LnNldChuLGUuZ2V0KG4pKX0pKSx0fSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1BPSk8oKX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLm5hbWUrIlt7ICIrdGhpcy5fa2V5cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KyI6ICIrZS5nZXQodCl9KSkuam9pbigiLCAiKSsiIH1dIn0sZS5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZSl9LGUucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbihlKXtyZXR1cm4gSCh0aGlzLGUpfSxlfSgpO0xlKHFlLnByb3RvdHlwZSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9KSksSXQocWUucHJvdG90eXBlLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sP1N5bWJvbC50b1N0cmluZ1RhZzoiQEB0b1N0cmluZ1RhZyIsIk1hcCIpO3ZhciBXZSxHZSx6ZT1UdCgiT2JzZXJ2YWJsZU1hcCIscWUpO2Z1bmN0aW9uIFllKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7aWYoZHQoZSkpcmV0dXJuIHZvaWQgMCE9PXQmJmd0KCExKSxlLiRtb2J4LmF0b207aWYoemUoZSkpe3ZhciBuPWU7cmV0dXJuIHZvaWQgMD09PXQ/WWUobi5fa2V5cyk6KChyPW4uX2RhdGEuZ2V0KHQpfHxuLl9oYXNNYXAuZ2V0KHQpKXx8Z3QoITEpLHIpfXZhciByO2lmKGgoZSksdCYmIWUuJG1vYngmJmVbdF0sbGUoZSkpcmV0dXJuIHQ/KChyPWUuJG1vYngudmFsdWVzW3RdKXx8Z3QoITEpLHIpOmd0KCExKTtpZihHZShlKXx8WShlKXx8Z24oZSkpcmV0dXJuIGV9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZSYmZ24oZS4kbW9ieCkpcmV0dXJuIGUuJG1vYng7cmV0dXJuIGd0KCExKX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiBlfHxndCgiRXhwZWN0aW5nIHNvbWUgb2JqZWN0Iiksdm9pZCAwIT09dD9LZShZZShlLHQpKTpHZShlKXx8WShlKXx8Z24oZSk/ZTp6ZShlKT9lOihoKGUpLGUuJG1vYng/ZS4kbW9ieDp2b2lkIGd0KCExKSl9ZnVuY3Rpb24gSGUoZSx0KXtyZXR1cm4odm9pZCAwIT09dD9ZZShlLHQpOmxlKGUpfHx6ZShlKT9LZShlKTpZZShlKSkubmFtZX1mdW5jdGlvbiBKZShlLHQsbil7cmV0dXJuIF9lKCJvbkJlY29tZU9ic2VydmVkIixlLHQsbil9ZnVuY3Rpb24gWmUoZSx0LG4pe3JldHVybiBfZSgib25CZWNvbWVVbm9ic2VydmVkIixlLHQsbil9ZnVuY3Rpb24gX2UoZSx0LG4scil7dmFyIG89InN0cmluZyI9PXR5cGVvZiBuP1llKHQsbik6WWUodCksaT0ic3RyaW5nIj09dHlwZW9mIG4/cjpuLGE9b1tlXTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYT9ndCghMSk6KG9bZV09ZnVuY3Rpb24oKXthLmNhbGwodGhpcyksaS5jYWxsKHRoaXMpfSxmdW5jdGlvbigpe29bZV09YX0pfWZ1bmN0aW9uIFhlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1FdCksdm9pZCAwPT09biYmKG49RXQpO3ZhciByPW5ldyBXZShlKTtyZXR1cm4gSmUocix0KSxaZShyLG4pLHJ9dmFyICRlLGV0LHR0LG50LHJ0PSgkZT0hMSxldD17fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQsIjAiLHtzZXQ6ZnVuY3Rpb24oKXskZT0hMH19KSxPYmplY3QuY3JlYXRlKGV0KVswXT0xLCExPT09JGUpLG90PTAsaXQ9ZnVuY3Rpb24oKXt9O3R0PWl0LG50PUFycmF5LnByb3RvdHlwZSx2b2lkIDAhPT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LnByb3RvdHlwZSxudCk6dm9pZCAwIT09dHQucHJvdG90eXBlLl9fcHJvdG9fXz90dC5wcm90b3R5cGUuX19wcm90b19fPW50OnR0LnByb3RvdHlwZT1udCxPYmplY3QuaXNGcm96ZW4oQXJyYXkpJiZbImNvbnN0cnVjdG9yIiwicHVzaCIsInNoaWZ0IiwiY29uY2F0IiwicG9wIiwidW5zaGlmdCIsInJlcGxhY2UiLCJmaW5kIiwiZmluZEluZGV4Iiwic3BsaWNlIiwicmV2ZXJzZSIsInNvcnQiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQucHJvdG90eXBlLGUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpBcnJheS5wcm90b3R5cGVbZV19KX0pKTt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuYXJyYXk9bix0aGlzLm93bmVkPXIsdGhpcy52YWx1ZXM9W10sdGhpcy5sYXN0S25vd25MZW5ndGg9MCx0aGlzLmF0b209bmV3IFdlKGV8fCJPYnNlcnZhYmxlQXJyYXlAIittdCgpKSx0aGlzLmVuaGFuY2VyPWZ1bmN0aW9uKG4scil7cmV0dXJuIHQobixyLGUrIlsuLl0iKX19cmV0dXJuIGUucHJvdG90eXBlLmRlaGFuY2VWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWhhbmNlcj90aGlzLmRlaGFuY2VyKGUpOmV9LGUucHJvdG90eXBlLmRlaGFuY2VWYWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGVoYW5jZXImJnRoaXMudmFsdWVzLmxlbmd0aD4wP2UubWFwKHRoaXMuZGVoYW5jZXIpOmV9LGUucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbihlKXtyZXR1cm4gSCh0aGlzLGUpfSxlLnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0JiZlKHtvYmplY3Q6dGhpcy5hcnJheSx0eXBlOiJzcGxpY2UiLGluZGV4OjAsYWRkZWQ6dGhpcy52YWx1ZXMuc2xpY2UoKSxhZGRlZENvdW50OnRoaXMudmFsdWVzLmxlbmd0aCxyZW1vdmVkOltdLHJlbW92ZWRDb3VudDowfSksXyh0aGlzLGUpfSxlLnByb3RvdHlwZS5nZXRBcnJheUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF0b20ucmVwb3J0T2JzZXJ2ZWQoKSx0aGlzLnZhbHVlcy5sZW5ndGh9LGUucHJvdG90eXBlLnNldEFycmF5TGVuZ3RoPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwKXRocm93IG5ldyBFcnJvcigiW21vYnguYXJyYXldIE91dCBvZiByYW5nZTogIitlKTt2YXIgdD10aGlzLnZhbHVlcy5sZW5ndGg7aWYoZSE9PXQpaWYoZT50KXtmb3IodmFyIG49bmV3IEFycmF5KGUtdCkscj0wO3I8ZS10O3IrKyluW3JdPXZvaWQgMDt0aGlzLnNwbGljZVdpdGhBcnJheSh0LDAsbil9ZWxzZSB0aGlzLnNwbGljZVdpdGhBcnJheShlLHQtZSl9LGUucHJvdG90eXBlLnVwZGF0ZUFycmF5TGVuZ3RoPWZ1bmN0aW9uKGUsdCl7aWYoZSE9PXRoaXMubGFzdEtub3duTGVuZ3RoKXRocm93IG5ldyBFcnJvcigiW21vYnhdIE1vZGlmaWNhdGlvbiBleGNlcHRpb246IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgYW4gb2JzZXJ2YWJsZSBhcnJheSB3YXMgY2hhbmdlZC4gRGlkIHlvdSB1c2UgcGVlaygpIHRvIGNoYW5nZSBpdD8iKTt0aGlzLmxhc3RLbm93bkxlbmd0aCs9dCx0PjAmJmUrdCsxPm90JiZmdChlK3QrMSl9LGUucHJvdG90eXBlLnNwbGljZVdpdGhBcnJheT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztvbih0aGlzLmF0b20pO3ZhciBvPXRoaXMudmFsdWVzLmxlbmd0aDtpZih2b2lkIDA9PT1lP2U9MDplPm8/ZT1vOmU8MCYmKGU9TWF0aC5tYXgoMCxvK2UpKSx0PTE9PT1hcmd1bWVudHMubGVuZ3RoP28tZTpudWxsPT10PzA6TWF0aC5tYXgoMCxNYXRoLm1pbih0LG8tZSkpLHZvaWQgMD09PW4mJihuPXZ0KSxLKHRoaXMpKXt2YXIgaT1KKHRoaXMse29iamVjdDp0aGlzLmFycmF5LHR5cGU6InNwbGljZSIsaW5kZXg6ZSxyZW1vdmVkQ291bnQ6dCxhZGRlZDpufSk7aWYoIWkpcmV0dXJuIHZ0O3Q9aS5yZW1vdmVkQ291bnQsbj1pLmFkZGVkfXZhciBhPShuPTA9PT1uLmxlbmd0aD9uOm4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbmhhbmNlcihlLHZvaWQgMCl9KSkpLmxlbmd0aC10O3RoaXMudXBkYXRlQXJyYXlMZW5ndGgobyxhKTt2YXIgcz10aGlzLnNwbGljZUl0ZW1zSW50b1ZhbHVlcyhlLHQsbik7cmV0dXJuIDA9PT10JiYwPT09bi5sZW5ndGh8fHRoaXMubm90aWZ5QXJyYXlTcGxpY2UoZSxuLHMpLHRoaXMuZGVoYW5jZVZhbHVlcyhzKX0sZS5wcm90b3R5cGUuc3BsaWNlSXRlbXNJbnRvVmFsdWVzPWZ1bmN0aW9uKGUsdCxuKXtpZihuLmxlbmd0aDwxZTQpcmV0dXJuKHI9dGhpcy52YWx1ZXMpLnNwbGljZS5hcHBseShyLHUoW2UsdF0sbikpO3ZhciByLG89dGhpcy52YWx1ZXMuc2xpY2UoZSxlK3QpO3JldHVybiB0aGlzLnZhbHVlcz10aGlzLnZhbHVlcy5zbGljZSgwLGUpLmNvbmNhdChuLHRoaXMudmFsdWVzLnNsaWNlKGUrdCkpLG99LGUucHJvdG90eXBlLm5vdGlmeUFycmF5Q2hpbGRVcGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSF0aGlzLm93bmVkJiZ2KCksbz1aKHRoaXMpLGk9b3x8cj97b2JqZWN0OnRoaXMuYXJyYXksdHlwZToidXBkYXRlIixpbmRleDplLG5ld1ZhbHVlOnQsb2xkVmFsdWU6bn06bnVsbDtyJiZ5KGEoe30saSx7bmFtZTp0aGlzLmF0b20ubmFtZX0pKSx0aGlzLmF0b20ucmVwb3J0Q2hhbmdlZCgpLG8mJlgodGhpcyxpKSxyJiZnKCl9LGUucHJvdG90eXBlLm5vdGlmeUFycmF5U3BsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hdGhpcy5vd25lZCYmdigpLG89Wih0aGlzKSxpPW98fHI/e29iamVjdDp0aGlzLmFycmF5LHR5cGU6InNwbGljZSIsaW5kZXg6ZSxyZW1vdmVkOm4sYWRkZWQ6dCxyZW1vdmVkQ291bnQ6bi5sZW5ndGgsYWRkZWRDb3VudDp0Lmxlbmd0aH06bnVsbDtyJiZ5KGEoe30saSx7bmFtZTp0aGlzLmF0b20ubmFtZX0pKSx0aGlzLmF0b20ucmVwb3J0Q2hhbmdlZCgpLG8mJlgodGhpcyxpKSxyJiZnKCl9LGV9KCksc3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scixvKXt2b2lkIDA9PT1yJiYocj0iT2JzZXJ2YWJsZUFycmF5QCIrbXQoKSksdm9pZCAwPT09byYmKG89ITEpO3ZhciBpPWUuY2FsbCh0aGlzKXx8dGhpcyxhPW5ldyBhdChyLG4saSxvKTtpZihJdChpLCIkbW9ieCIsYSksdCYmdC5sZW5ndGgpe3ZhciBzPVMoITApO2kuc3BsaWNlV2l0aEFycmF5KDAsMCx0KSxBKHMpfXJldHVybiBydCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEuYXJyYXksIjAiLHV0KSxpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRtb2J4LmludGVyY2VwdChlKX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdGhpcy4kbW9ieC5vYnNlcnZlKGUsdCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3BsaWNlKDApfSx0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIHRoaXMuJG1vYnguYXRvbS5yZXBvcnRPYnNlcnZlZCgpLEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcy5wZWVrKCksZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBkdChlKT9lLnBlZWsoKTplfSkpKX0sdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kbW9ieC5zcGxpY2VXaXRoQXJyYXkoMCx0aGlzLiRtb2J4LnZhbHVlcy5sZW5ndGgsZSl9LHQucHJvdG90eXBlLnRvSlM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGljZSgpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0pTKCl9LHQucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbW9ieC5hdG9tLnJlcG9ydE9ic2VydmVkKCksdGhpcy4kbW9ieC5kZWhhbmNlVmFsdWVzKHRoaXMuJG1vYngudmFsdWVzKX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49MCksMz09PWFyZ3VtZW50cy5sZW5ndGgmJnd0KCJUaGUgYXJyYXkuZmluZCBmcm9tSW5kZXggYXJndW1lbnQgdG8gZmluZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYW55bW9yZSBpbiB0aGUgbmV4dCBtYWpvciIpO3ZhciByPXRoaXMuZmluZEluZGV4LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4tMT09PXI/dm9pZCAwOnRoaXMuZ2V0KHIpfSx0LnByb3RvdHlwZS5maW5kSW5kZXg9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPTApLDM9PT1hcmd1bWVudHMubGVuZ3RoJiZ3dCgiVGhlIGFycmF5LmZpbmRJbmRleCBmcm9tSW5kZXggYXJndW1lbnQgdG8gZmluZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYW55bW9yZSBpbiB0aGUgbmV4dCBtYWpvciIpO2Zvcih2YXIgcj10aGlzLnBlZWsoKSxvPXIubGVuZ3RoLGk9bjtpPG87aSsrKWlmKGUuY2FsbCh0LHJbaV0saSx0aGlzKSlyZXR1cm4gaTtyZXR1cm4tMX0sdC5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm5bXTtjYXNlIDE6cmV0dXJuIHRoaXMuJG1vYnguc3BsaWNlV2l0aEFycmF5KGUpO2Nhc2UgMjpyZXR1cm4gdGhpcy4kbW9ieC5zcGxpY2VXaXRoQXJyYXkoZSx0KX1yZXR1cm4gdGhpcy4kbW9ieC5zcGxpY2VXaXRoQXJyYXkoZSx0LG4pfSx0LnByb3RvdHlwZS5zcGxpY2VXaXRoQXJyYXk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLiRtb2J4LnNwbGljZVdpdGhBcnJheShlLHQsbil9LHQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49dGhpcy4kbW9ieDtyZXR1cm4gbi5zcGxpY2VXaXRoQXJyYXkobi52YWx1ZXMubGVuZ3RoLDAsZSksbi52YWx1ZXMubGVuZ3RofSx0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcGxpY2UoTWF0aC5tYXgodGhpcy4kbW9ieC52YWx1ZXMubGVuZ3RoLTEsMCksMSlbMF19LHQucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3BsaWNlKDAsMSlbMF19LHQucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49dGhpcy4kbW9ieDtyZXR1cm4gbi5zcGxpY2VXaXRoQXJyYXkoMCwwLGUpLG4udmFsdWVzLmxlbmd0aH0sdC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2xpY2UoKTtyZXR1cm4gZS5yZXZlcnNlLmFwcGx5KGUsYXJndW1lbnRzKX0sdC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNsaWNlKCk7cmV0dXJuIHQuc29ydC5hcHBseSh0LGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRtb2J4LmRlaGFuY2VWYWx1ZXModGhpcy4kbW9ieC52YWx1ZXMpLmluZGV4T2YoZSk7cmV0dXJuIHQ+LTEmJih0aGlzLnNwbGljZSh0LDEpLCEwKX0sdC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiW21vYnguYXJyYXldIEluZGV4IG91dCBvZiBib3VuZHM6ICIrZSsiIGlzIG5lZ2F0aXZlIik7dmFyIHQ9dGhpcy4kbW9ieC52YWx1ZXMubGVuZ3RoO2lmKGU+PXQpdGhyb3cgbmV3IEVycm9yKCJbbW9ieC5hcnJheV0gSW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgaXMgbm90IHNtYWxsZXIgdGhhbiAiK3QpfWlmKHd0KCJvYnNlcnZhYmxlQXJyYXkubW92ZSBpcyBkZXByZWNhdGVkLCB1c2UgLnNsaWNlKCkgJiAucmVwbGFjZSgpIGluc3RlYWQiKSxuLmNhbGwodGhpcyxlKSxuLmNhbGwodGhpcyx0KSxlIT09dCl7dmFyIHIsbz10aGlzLiRtb2J4LnZhbHVlcztyPWU8dD91KG8uc2xpY2UoMCxlKSxvLnNsaWNlKGUrMSx0KzEpLFtvW2VdXSxvLnNsaWNlKHQrMSkpOnUoby5zbGljZSgwLHQpLFtvW2VdXSxvLnNsaWNlKHQsZSksby5zbGljZShlKzEpKSx0aGlzLnJlcGxhY2Uocil9fSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kbW9ieDtpZih0JiZlPHQudmFsdWVzLmxlbmd0aClyZXR1cm4gdC5hdG9tLnJlcG9ydE9ic2VydmVkKCksdC5kZWhhbmNlVmFsdWUodC52YWx1ZXNbZV0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRtb2J4LHI9bi52YWx1ZXM7aWYoZTxyLmxlbmd0aCl7b24obi5hdG9tKTt2YXIgbz1yW2VdO2lmKEsobikpe3ZhciBpPUoobix7dHlwZToidXBkYXRlIixvYmplY3Q6dGhpcyxpbmRleDplLG5ld1ZhbHVlOnR9KTtpZighaSlyZXR1cm47dD1pLm5ld1ZhbHVlfSh0PW4uZW5oYW5jZXIodCxvKSkhPT1vJiYocltlXT10LG4ubm90aWZ5QXJyYXlDaGlsZFVwZGF0ZShlLHQsbykpfWVsc2V7aWYoZSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiW21vYnguYXJyYXldIEluZGV4IG91dCBvZiBib3VuZHMsICIrZSsiIGlzIGxhcmdlciB0aGFuICIrci5sZW5ndGgpO24uc3BsaWNlV2l0aEFycmF5KGUsMCxbdF0pfX0sdH0oaXQpO0xlKHN0LnByb3RvdHlwZSwoZnVuY3Rpb24oKXt0aGlzLiRtb2J4LmF0b20ucmVwb3J0T2JzZXJ2ZWQoKTt2YXIgZT10aGlzLHQ9MDtyZXR1cm4gVWUoe25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdDxlLmxlbmd0aD97dmFsdWU6ZVt0KytdLGRvbmU6ITF9Ontkb25lOiEwLHZhbHVlOnZvaWQgMH19fSl9KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0LnByb3RvdHlwZSwibGVuZ3RoIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vYnguZ2V0QXJyYXlMZW5ndGgoKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuJG1vYnguc2V0QXJyYXlMZW5ndGgoZSl9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYma3Qoc3QucHJvdG90eXBlLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sP1N5bWJvbC50b1N0cmluZ1RhZzoiQEB0b1N0cmluZ1RhZyIsIkFycmF5IiksWyJldmVyeSIsImZpbHRlciIsImZvckVhY2giLCJpbmRleE9mIiwiam9pbiIsImxhc3RJbmRleE9mIiwibWFwIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiLCJzbGljZSIsInNvbWUiLCJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9QXJyYXkucHJvdG90eXBlW2VdO090KCJmdW5jdGlvbiI9PXR5cGVvZiB0LCJCYXNlIGZ1bmN0aW9uIG5vdCBkZWZpbmVkIG9uIEFycmF5IHByb3RvdHlwZTogJyIrZSsiJyIpLGt0KHN0LnByb3RvdHlwZSxlLChmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMucGVlaygpLGFyZ3VtZW50cyl9KSl9KSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylrdChlLHRbbl0sZVt0W25dXSl9KHN0LnByb3RvdHlwZSxbImNvbnN0cnVjdG9yIiwiaW50ZXJjZXB0Iiwib2JzZXJ2ZSIsImNsZWFyIiwiY29uY2F0IiwiZ2V0IiwicmVwbGFjZSIsInRvSlMiLCJ0b0pTT04iLCJwZWVrIiwiZmluZCIsImZpbmRJbmRleCIsInNwbGljZSIsInNwbGljZVdpdGhBcnJheSIsInB1c2giLCJwb3AiLCJzZXQiLCJzaGlmdCIsInVuc2hpZnQiLCJyZXZlcnNlIiwic29ydCIsInJlbW92ZSIsIm1vdmUiLCJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIl0pO3ZhciB1dD1jdCgwKTtmdW5jdGlvbiBjdChlKXtyZXR1cm57ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KGUpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5zZXQoZSx0KX19fWZ1bmN0aW9uIGx0KGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzdC5wcm90b3R5cGUsIiIrZSxjdChlKSl9ZnVuY3Rpb24gZnQoZSl7Zm9yKHZhciB0PW90O3Q8ZTt0KyspbHQodCk7b3Q9ZX1mdCgxZTMpO3ZhciBodD1UdCgiT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24iLGF0KTtmdW5jdGlvbiBkdChlKXtyZXR1cm4gU3QoZSkmJmh0KGUuJG1vYngpfXZhciBwdD0iQW4gaW52YXJpYW50IGZhaWxlZCwgaG93ZXZlciB0aGUgZXJyb3IgaXMgb2JmdXNjYXRlZCBiZWNhdXNlIHRoaXMgaXMgYW4gcHJvZHVjdGlvbiBidWlsZC4iLHZ0PVtdO09iamVjdC5mcmVlemUodnQpO3ZhciBidD17fTtmdW5jdGlvbiB5dCgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpyfWZ1bmN0aW9uIG10KCl7cmV0dXJuKytRdC5tb2J4R3VpZH1mdW5jdGlvbiBndChlKXt0aHJvdyBPdCghMSxlKSwiWCJ9ZnVuY3Rpb24gT3QoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlttb2J4XSAiKyh0fHxwdCkpfU9iamVjdC5mcmVlemUoYnQpO2Z1bmN0aW9uIHd0KGUsdCl7cmV0dXJuITF9ZnVuY3Rpb24ganQoZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIXQpcmV0dXJuIHQ9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXZhciBFdD1mdW5jdGlvbigpe307ZnVuY3Rpb24gU3QoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gQXQoZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH1mdW5jdGlvbiBrdChlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6bn0pfWZ1bmN0aW9uIEl0KGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpufSl9ZnVuY3Rpb24gVHQoZSx0KXt2YXIgbj0iaXNNb2JYIitlO3JldHVybiB0LnByb3RvdHlwZVtuXT0hMCxmdW5jdGlvbihlKXtyZXR1cm4gU3QoZSkmJiEwPT09ZVtuXX19ZnVuY3Rpb24geHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fGR0KGUpfWZ1bmN0aW9uIEN0KGUpe3JldHVybiB2b2lkIDAhPT15dCgpLk1hcCYmZSBpbnN0YW5jZW9mIHl0KCkuTWFwfWZ1bmN0aW9uIE10KGUpe2Zvcih2YXIgdD1bXTs7KXt2YXIgbj1lLm5leHQoKTtpZihuLmRvbmUpYnJlYWs7dC5wdXNoKG4udmFsdWUpfXJldHVybiB0fWZ1bmN0aW9uIFJ0KCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvUHJpbWl0aXZlfHwiQEB0b1ByaW1pdGl2ZSJ9ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIG51bGw9PT1lP251bGw6Im9iamVjdCI9PXR5cGVvZiBlPyIiK2U6ZX12YXIgTnQsRHQsQnQ9WyJtb2J4R3VpZCIsInNweUxpc3RlbmVycyIsImVuZm9yY2VBY3Rpb25zIiwiY29tcHV0ZWRSZXF1aXJlc1JlYWN0aW9uIiwiZGlzYWJsZUVycm9yQm91bmRhcmllcyIsInJ1bklkIl0sTHQ9ZnVuY3Rpb24oKXt0aGlzLnZlcnNpb249NSx0aGlzLnRyYWNraW5nRGVyaXZhdGlvbj1udWxsLHRoaXMuY29tcHV0YXRpb25EZXB0aD0wLHRoaXMucnVuSWQ9MCx0aGlzLm1vYnhHdWlkPTAsdGhpcy5pbkJhdGNoPTAsdGhpcy5wZW5kaW5nVW5vYnNlcnZhdGlvbnM9W10sdGhpcy5wZW5kaW5nUmVhY3Rpb25zPVtdLHRoaXMuaXNSdW5uaW5nUmVhY3Rpb25zPSExLHRoaXMuYWxsb3dTdGF0ZUNoYW5nZXM9ITAsdGhpcy5lbmZvcmNlQWN0aW9ucz0hMSx0aGlzLnNweUxpc3RlbmVycz1bXSx0aGlzLmdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycz1bXSx0aGlzLmNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbj0hMSx0aGlzLmRpc2FibGVFcnJvckJvdW5kYXJpZXM9ITF9LFV0PSEwLEZ0PSExLFF0PWZ1bmN0aW9uKCl7dmFyIGU9eXQoKTtyZXR1cm4gZS5fX21vYnhJbnN0YW5jZUNvdW50PjAmJiFlLl9fbW9ieEdsb2JhbHMmJihVdD0hMSksZS5fX21vYnhHbG9iYWxzJiZlLl9fbW9ieEdsb2JhbHMudmVyc2lvbiE9PShuZXcgTHQpLnZlcnNpb24mJihVdD0hMSksVXQ/ZS5fX21vYnhHbG9iYWxzPyhlLl9fbW9ieEluc3RhbmNlQ291bnQrPTEsZS5fX21vYnhHbG9iYWxzKTooZS5fX21vYnhJbnN0YW5jZUNvdW50PTEsZS5fX21vYnhHbG9iYWxzPW5ldyBMdCk6KHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7RnR8fGd0KCJUaGVyZSBhcmUgbXVsdGlwbGUsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBNb2JYIGFjdGl2ZS4gTWFrZSBzdXJlIE1vYlggaXMgbG9hZGVkIG9ubHkgb25jZSBvciB1c2UgYGNvbmZpZ3VyZSh7IGlzb2xhdGVHbG9iYWxTdGF0ZTogdHJ1ZSB9KWAiKX0pLDEpLG5ldyBMdCl9KCk7ZnVuY3Rpb24gVnQoKXtyZXR1cm4gUXR9ZnVuY3Rpb24gcXQoKXt2YXIgZT1uZXcgTHQ7Zm9yKHZhciB0IGluIGUpLTE9PT1CdC5pbmRleE9mKHQpJiYoUXRbdF09ZVt0XSk7UXQuYWxsb3dTdGF0ZUNoYW5nZXM9IVF0LmVuZm9yY2VBY3Rpb25zfWZ1bmN0aW9uIFd0KGUsdCl7cmV0dXJuIEd0KFllKGUsdCkpfWZ1bmN0aW9uIEd0KGUpe3ZhciB0LG4scj17bmFtZTplLm5hbWV9O3JldHVybiBlLm9ic2VydmluZyYmZS5vYnNlcnZpbmcubGVuZ3RoPjAmJihyLmRlcGVuZGVuY2llcz0odD1lLm9ic2VydmluZyxuPVtdLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7LTE9PT1uLmluZGV4T2YoZSkmJm4ucHVzaChlKX0pKSxuKS5tYXAoR3QpKSxyfWZ1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIFl0KFllKGUsdCkpfWZ1bmN0aW9uIFl0KGUpe3ZhciB0PXtuYW1lOmUubmFtZX07cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm9ic2VydmVycyYmZS5vYnNlcnZlcnMubGVuZ3RoPjB9KGUpJiYodC5vYnNlcnZlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2JzZXJ2ZXJzfShlKS5tYXAoWXQpKSx0fWZ1bmN0aW9uIEt0KGUsdCl7dmFyIG49ZS5vYnNlcnZlcnMubGVuZ3RoO24mJihlLm9ic2VydmVyc0luZGV4ZXNbdC5fX21hcGlkXT1uKSxlLm9ic2VydmVyc1tuXT10LGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZT50LmRlcGVuZGVuY2llc1N0YXRlJiYoZS5sb3dlc3RPYnNlcnZlclN0YXRlPXQuZGVwZW5kZW5jaWVzU3RhdGUpfWZ1bmN0aW9uIEh0KGUsdCl7aWYoMT09PWUub2JzZXJ2ZXJzLmxlbmd0aCllLm9ic2VydmVycy5sZW5ndGg9MCxKdChlKTtlbHNle3ZhciBuPWUub2JzZXJ2ZXJzLHI9ZS5vYnNlcnZlcnNJbmRleGVzLG89bi5wb3AoKTtpZihvIT09dCl7dmFyIGk9clt0Ll9fbWFwaWRdfHwwO2k/cltvLl9fbWFwaWRdPWk6ZGVsZXRlIHJbby5fX21hcGlkXSxuW2ldPW99ZGVsZXRlIHJbdC5fX21hcGlkXX19ZnVuY3Rpb24gSnQoZSl7ITE9PT1lLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb24mJihlLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb249ITAsUXQucGVuZGluZ1Vub2JzZXJ2YXRpb25zLnB1c2goZSkpfWZ1bmN0aW9uIFp0KCl7UXQuaW5CYXRjaCsrfWZ1bmN0aW9uIF90KCl7aWYoMD09LS1RdC5pbkJhdGNoKXt5bigpO2Zvcih2YXIgZT1RdC5wZW5kaW5nVW5vYnNlcnZhdGlvbnMsdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO24uaXNQZW5kaW5nVW5vYnNlcnZhdGlvbj0hMSwwPT09bi5vYnNlcnZlcnMubGVuZ3RoJiYobi5pc0JlaW5nT2JzZXJ2ZWQmJihuLmlzQmVpbmdPYnNlcnZlZD0hMSxuLm9uQmVjb21lVW5vYnNlcnZlZCgpKSxuIGluc3RhbmNlb2YgeiYmbi5zdXNwZW5kKCkpfVF0LnBlbmRpbmdVbm9ic2VydmF0aW9ucz1bXX19ZnVuY3Rpb24gWHQoZSl7dmFyIHQ9UXQudHJhY2tpbmdEZXJpdmF0aW9uO3JldHVybiBudWxsIT09dD8odC5ydW5JZCE9PWUubGFzdEFjY2Vzc2VkQnkmJihlLmxhc3RBY2Nlc3NlZEJ5PXQucnVuSWQsdC5uZXdPYnNlcnZpbmdbdC51bmJvdW5kRGVwc0NvdW50KytdPWUsZS5pc0JlaW5nT2JzZXJ2ZWR8fChlLmlzQmVpbmdPYnNlcnZlZD0hMCxlLm9uQmVjb21lT2JzZXJ2ZWQoKSkpLCEwKTooMD09PWUub2JzZXJ2ZXJzLmxlbmd0aCYmUXQuaW5CYXRjaD4wJiZKdChlKSwhMSl9ZnVuY3Rpb24gJHQoZSx0KXtpZihlLmlzVHJhY2luZz09PUR0LkJSRUFLKXt2YXIgbj1bXTshZnVuY3Rpb24gZSh0LG4scil7aWYobi5sZW5ndGg+PTFlMylyZXR1cm4gdm9pZCBuLnB1c2goIihhbmQgbWFueSBtb3JlKSIpO24ucHVzaCgiIituZXcgQXJyYXkocikuam9pbigiXHQiKSt0Lm5hbWUpLHQuZGVwZW5kZW5jaWVzJiZ0LmRlcGVuZGVuY2llcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZSh0LG4scisxKX0pKX0oV3QoZSksbiwxKSxuZXcgRnVuY3Rpb24oImRlYnVnZ2VyO1xuLypcblRyYWNpbmcgJyIrZS5uYW1lKyInXG5cbllvdSBhcmUgZW50ZXJpbmcgdGhpcyBicmVhayBwb2ludCBiZWNhdXNlIGRlcml2YXRpb24gJyIrZS5uYW1lKyInIGlzIGJlaW5nIHRyYWNlZCBhbmQgJyIrdC5uYW1lKyInIGlzIG5vdyBmb3JjaW5nIGl0IHRvIHVwZGF0ZS5cbkp1c3QgZm9sbG93IHRoZSBzdGFja3RyYWNlIHlvdSBzaG91bGQgbm93IHNlZSBpbiB0aGUgZGV2dG9vbHMgdG8gc2VlIHByZWNpc2VseSB3aGF0IHBpZWNlIG9mIHlvdXIgY29kZSBpcyBjYXVzaW5nIHRoaXMgdXBkYXRlXG5UaGUgc3RhY2tmcmFtZSB5b3UgYXJlIGxvb2tpbmcgZm9yIGlzIGF0IGxlYXN0IH42LTggc3RhY2stZnJhbWVzIHVwLlxuXG4iKyhlIGluc3RhbmNlb2Ygej9lLmRlcml2YXRpb24udG9TdHJpbmcoKToiIikrIlxuXG5UaGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGRlcml2YXRpb24gYXJlOlxuXG4iK24uam9pbigiXG4iKSsiXG4qL1xuICAgICIpKCl9fSFmdW5jdGlvbihlKXtlW2UuTk9UX1RSQUNLSU5HPS0xXT0iTk9UX1RSQUNLSU5HIixlW2UuVVBfVE9fREFURT0wXT0iVVBfVE9fREFURSIsZVtlLlBPU1NJQkxZX1NUQUxFPTFdPSJQT1NTSUJMWV9TVEFMRSIsZVtlLlNUQUxFPTJdPSJTVEFMRSJ9KE50fHwoTnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT0iTk9ORSIsZVtlLkxPRz0xXT0iTE9HIixlW2UuQlJFQUs9Ml09IkJSRUFLIn0oRHR8fChEdD17fSkpO3ZhciBlbj1mdW5jdGlvbihlKXt0aGlzLmNhdXNlPWV9O2Z1bmN0aW9uIHRuKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZW59ZnVuY3Rpb24gbm4oZSl7c3dpdGNoKGUuZGVwZW5kZW5jaWVzU3RhdGUpe2Nhc2UgTnQuVVBfVE9fREFURTpyZXR1cm4hMTtjYXNlIE50Lk5PVF9UUkFDS0lORzpjYXNlIE50LlNUQUxFOnJldHVybiEwO2Nhc2UgTnQuUE9TU0lCTFlfU1RBTEU6Zm9yKHZhciB0PWNuKCksbj1lLm9ic2VydmluZyxyPW4ubGVuZ3RoLG89MDtvPHI7bysrKXt2YXIgaT1uW29dO2lmKFkoaSkpe2lmKFF0LmRpc2FibGVFcnJvckJvdW5kYXJpZXMpaS5nZXQoKTtlbHNlIHRyeXtpLmdldCgpfWNhdGNoKGUpe3JldHVybiBsbih0KSwhMH1pZihlLmRlcGVuZGVuY2llc1N0YXRlPT09TnQuU1RBTEUpcmV0dXJuIGxuKHQpLCEwfX1yZXR1cm4gZm4oZSksbG4odCksITF9fWZ1bmN0aW9uIHJuKCl7cmV0dXJuIG51bGwhPT1RdC50cmFja2luZ0Rlcml2YXRpb259ZnVuY3Rpb24gb24oZSl7dmFyIHQ9ZS5vYnNlcnZlcnMubGVuZ3RoPjA7UXQuY29tcHV0YXRpb25EZXB0aD4wJiZ0JiZndCghMSksUXQuYWxsb3dTdGF0ZUNoYW5nZXN8fCF0JiYic3RyaWN0IiE9PVF0LmVuZm9yY2VBY3Rpb25zfHxndCghMSl9ZnVuY3Rpb24gYW4oZSx0LG4pe2ZuKGUpLGUubmV3T2JzZXJ2aW5nPW5ldyBBcnJheShlLm9ic2VydmluZy5sZW5ndGgrMTAwKSxlLnVuYm91bmREZXBzQ291bnQ9MCxlLnJ1bklkPSsrUXQucnVuSWQ7dmFyIHIsbz1RdC50cmFja2luZ0Rlcml2YXRpb247aWYoUXQudHJhY2tpbmdEZXJpdmF0aW9uPWUsITA9PT1RdC5kaXNhYmxlRXJyb3JCb3VuZGFyaWVzKXI9dC5jYWxsKG4pO2Vsc2UgdHJ5e3I9dC5jYWxsKG4pfWNhdGNoKGUpe3I9bmV3IGVuKGUpfXJldHVybiBRdC50cmFja2luZ0Rlcml2YXRpb249byxmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5vYnNlcnZpbmcsbj1lLm9ic2VydmluZz1lLm5ld09ic2VydmluZyxyPU50LlVQX1RPX0RBVEUsbz0wLGk9ZS51bmJvdW5kRGVwc0NvdW50LGE9MDthPGk7YSsrKXswPT09KHM9blthXSkuZGlmZlZhbHVlJiYocy5kaWZmVmFsdWU9MSxvIT09YSYmKG5bb109cyksbysrKSxzLmRlcGVuZGVuY2llc1N0YXRlPnImJihyPXMuZGVwZW5kZW5jaWVzU3RhdGUpfW4ubGVuZ3RoPW8sZS5uZXdPYnNlcnZpbmc9bnVsbCxpPXQubGVuZ3RoO2Zvcig7aS0tOyl7MD09PShzPXRbaV0pLmRpZmZWYWx1ZSYmSHQocyxlKSxzLmRpZmZWYWx1ZT0wfWZvcig7by0tOyl7dmFyIHM7MT09PShzPW5bb10pLmRpZmZWYWx1ZSYmKHMuZGlmZlZhbHVlPTAsS3QocyxlKSl9ciE9PU50LlVQX1RPX0RBVEUmJihlLmRlcGVuZGVuY2llc1N0YXRlPXIsZS5vbkJlY29tZVN0YWxlKCkpfShlKSxyfWZ1bmN0aW9uIHNuKGUpe3ZhciB0PWUub2JzZXJ2aW5nO2Uub2JzZXJ2aW5nPVtdO2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KUh0KHRbbl0sZSk7ZS5kZXBlbmRlbmNpZXNTdGF0ZT1OdC5OT1RfVFJBQ0tJTkd9ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9Y24oKSxuPWUoKTtyZXR1cm4gbG4odCksbn1mdW5jdGlvbiBjbigpe3ZhciBlPVF0LnRyYWNraW5nRGVyaXZhdGlvbjtyZXR1cm4gUXQudHJhY2tpbmdEZXJpdmF0aW9uPW51bGwsZX1mdW5jdGlvbiBsbihlKXtRdC50cmFja2luZ0Rlcml2YXRpb249ZX1mdW5jdGlvbiBmbihlKXtpZihlLmRlcGVuZGVuY2llc1N0YXRlIT09TnQuVVBfVE9fREFURSl7ZS5kZXBlbmRlbmNpZXNTdGF0ZT1OdC5VUF9UT19EQVRFO2Zvcih2YXIgdD1lLm9ic2VydmluZyxuPXQubGVuZ3RoO24tLTspdFtuXS5sb3dlc3RPYnNlcnZlclN0YXRlPU50LlVQX1RPX0RBVEV9fWZ1bmN0aW9uIGhuKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciBuPSExOyJib29sZWFuIj09dHlwZW9mIGVbZS5sZW5ndGgtMV0mJihuPWUucG9wKCkpO3ZhciByPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBRdC50cmFja2luZ0Rlcml2YXRpb247Y2FzZSAxOnJldHVybiBZZShlWzBdKTtjYXNlIDI6cmV0dXJuIFllKGVbMF0sZVsxXSl9fShlKTtpZighcilyZXR1cm4gZ3QoITEpO3IuaXNUcmFjaW5nLER0Lk5PTkUsci5pc1RyYWNpbmc9bj9EdC5CUkVBSzpEdC5MT0d9dmFyIGRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09ZSYmKGU9IlJlYWN0aW9uQCIrbXQoKSksdGhpcy5uYW1lPWUsdGhpcy5vbkludmFsaWRhdGU9dCx0aGlzLmVycm9ySGFuZGxlcj1uLHRoaXMub2JzZXJ2aW5nPVtdLHRoaXMubmV3T2JzZXJ2aW5nPVtdLHRoaXMuZGVwZW5kZW5jaWVzU3RhdGU9TnQuTk9UX1RSQUNLSU5HLHRoaXMuZGlmZlZhbHVlPTAsdGhpcy5ydW5JZD0wLHRoaXMudW5ib3VuZERlcHNDb3VudD0wLHRoaXMuX19tYXBpZD0iIyIrbXQoKSx0aGlzLmlzRGlzcG9zZWQ9ITEsdGhpcy5faXNTY2hlZHVsZWQ9ITEsdGhpcy5faXNUcmFja1BlbmRpbmc9ITEsdGhpcy5faXNSdW5uaW5nPSExLHRoaXMuaXNUcmFjaW5nPUR0Lk5PTkV9cmV0dXJuIGUucHJvdG90eXBlLm9uQmVjb21lU3RhbGU9ZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlKCl9LGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKCl7dGhpcy5faXNTY2hlZHVsZWR8fCh0aGlzLl9pc1NjaGVkdWxlZD0hMCxRdC5wZW5kaW5nUmVhY3Rpb25zLnB1c2godGhpcykseW4oKSl9LGUucHJvdG90eXBlLmlzU2NoZWR1bGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU2NoZWR1bGVkfSxlLnByb3RvdHlwZS5ydW5SZWFjdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRGlzcG9zZWQpe2lmKFp0KCksdGhpcy5faXNTY2hlZHVsZWQ9ITEsbm4odGhpcykpe3RoaXMuX2lzVHJhY2tQZW5kaW5nPSEwO3RyeXt0aGlzLm9uSW52YWxpZGF0ZSgpLHRoaXMuX2lzVHJhY2tQZW5kaW5nJiZ2KCkmJmIoe25hbWU6dGhpcy5uYW1lLHR5cGU6InNjaGVkdWxlZC1yZWFjdGlvbiJ9KX1jYXRjaChlKXt0aGlzLnJlcG9ydEV4Y2VwdGlvbkluRGVyaXZhdGlvbihlKX19X3QoKX19LGUucHJvdG90eXBlLnRyYWNrPWZ1bmN0aW9uKGUpe1p0KCk7dmFyIHQsbj12KCk7biYmKHQ9RGF0ZS5ub3coKSx5KHtuYW1lOnRoaXMubmFtZSx0eXBlOiJyZWFjdGlvbiJ9KSksdGhpcy5faXNSdW5uaW5nPSEwO3ZhciByPWFuKHRoaXMsZSx2b2lkIDApO3RoaXMuX2lzUnVubmluZz0hMSx0aGlzLl9pc1RyYWNrUGVuZGluZz0hMSx0aGlzLmlzRGlzcG9zZWQmJnNuKHRoaXMpLHRuKHIpJiZ0aGlzLnJlcG9ydEV4Y2VwdGlvbkluRGVyaXZhdGlvbihyLmNhdXNlKSxuJiZnKHt0aW1lOkRhdGUubm93KCktdH0pLF90KCl9LGUucHJvdG90eXBlLnJlcG9ydEV4Y2VwdGlvbkluRGVyaXZhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMuZXJyb3JIYW5kbGVyKXRoaXMuZXJyb3JIYW5kbGVyKGUsdGhpcyk7ZWxzZXtpZihRdC5kaXNhYmxlRXJyb3JCb3VuZGFyaWVzKXRocm93IGU7dmFyIG49Ilttb2J4XSBFbmNvdW50ZXJlZCBhbiB1bmNhdWdodCBleGNlcHRpb24gdGhhdCB3YXMgdGhyb3duIGJ5IGEgcmVhY3Rpb24gb3Igb2JzZXJ2ZXIgY29tcG9uZW50LCBpbjogJyIrdGhpczt2KCkmJmIoe3R5cGU6ImVycm9yIixuYW1lOnRoaXMubmFtZSxtZXNzYWdlOm4sZXJyb3I6IiIrZX0pLFF0Lmdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycy5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gbihlLHQpfSkpfX0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaXNEaXNwb3NlZHx8KHRoaXMuaXNEaXNwb3NlZD0hMCx0aGlzLl9pc1J1bm5pbmd8fChadCgpLHNuKHRoaXMpLF90KCkpKX0sZS5wcm90b3R5cGUuZ2V0RGlzcG9zZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpc3Bvc2UuYmluZCh0aGlzKTtyZXR1cm4gZS4kbW9ieD10aGlzLGV9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlYWN0aW9uWyIrdGhpcy5uYW1lKyJdIn0sZS5wcm90b3R5cGUudHJhY2U9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpLGhuKHRoaXMsZSl9LGV9KCk7ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIFF0Lmdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycy5wdXNoKGUpLGZ1bmN0aW9uKCl7dmFyIHQ9UXQuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLmluZGV4T2YoZSk7dD49MCYmUXQuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLnNwbGljZSh0LDEpfX12YXIgdm49MTAwLGJuPWZ1bmN0aW9uKGUpe3JldHVybiBlKCl9O2Z1bmN0aW9uIHluKCl7UXQuaW5CYXRjaD4wfHxRdC5pc1J1bm5pbmdSZWFjdGlvbnN8fGJuKG1uKX1mdW5jdGlvbiBtbigpe1F0LmlzUnVubmluZ1JlYWN0aW9ucz0hMDtmb3IodmFyIGU9UXQucGVuZGluZ1JlYWN0aW9ucyx0PTA7ZS5sZW5ndGg+MDspeysrdD09PXZuJiZlLnNwbGljZSgwKTtmb3IodmFyIG49ZS5zcGxpY2UoMCkscj0wLG89bi5sZW5ndGg7cjxvO3IrKyluW3JdLnJ1blJlYWN0aW9uKCl9UXQuaXNSdW5uaW5nUmVhY3Rpb25zPSExfXZhciBnbj1UdCgiUmVhY3Rpb24iLGRuKTtmdW5jdGlvbiBPbihlKXt2YXIgdD1ibjtibj1mdW5jdGlvbihuKXtyZXR1cm4gZSgoZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pKX19ZnVuY3Rpb24gd24oZSx0LG4scil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEtlKGUsdCkub2JzZXJ2ZShuLHIpfShlLHQsbixyKTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEtlKGUpLm9ic2VydmUodCxuKX0oZSx0LG4pfWZ1bmN0aW9uIGpuKGUsdCxuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihlLHQsbil7cmV0dXJuIEtlKGUsdCkuaW50ZXJjZXB0KG4pfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS2UoZSkuaW50ZXJjZXB0KHQpfShlLHQpfWZ1bmN0aW9uIEVuKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGh8fHQmJiJvYmplY3QiPT10eXBlb2YgdD9mdW5jdGlvbihlLHQpezA7dmFyIG4scj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXt2YXIgaT1TbihlLHIsYSh7fSx0LHtvbkVycm9yOm99KSk7bj1mdW5jdGlvbigpe2koKSxvKCJXSEVOX0NBTkNFTExFRCIpfX0pKTtyZXR1cm4gci5jYW5jZWw9bixyfShlLHQpOlNuKGUsdCxufHx7fSl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByOyJudW1iZXIiPT10eXBlb2Ygbi50aW1lb3V0JiYocj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCFpLiRtb2J4LmlzRGlzcG9zZWQpe2koKTt2YXIgZT1uZXcgRXJyb3IoIldIRU5fVElNRU9VVCIpO2lmKCFuLm9uRXJyb3IpdGhyb3cgZTtuLm9uRXJyb3IoZSl9fSksbi50aW1lb3V0KSksbi5uYW1lPW4ubmFtZXx8IldoZW5AIittdCgpO3ZhciBvPXcobi5uYW1lKyItZWZmZWN0Iix0KSxpPVYoKGZ1bmN0aW9uKHQpe2UoKSYmKHQuZGlzcG9zZSgpLHImJmNsZWFyVGltZW91dChyKSxvKCkpfSksbik7cmV0dXJuIGl9ZnVuY3Rpb24gQW4oZSl7cmV0dXJuIGxlKGUpP2UuJG1vYnguZ2V0S2V5cygpOnplKGUpP2UuX2tleXMuc2xpY2UoKTpkdChlKT9lLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKTpndCghMSl9ZnVuY3Rpb24ga24oZSl7cmV0dXJuIGxlKGUpP0FuKGUpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSk6emUoZSk/QW4oZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5nZXQodCl9KSk6ZHQoZSk/ZS5zbGljZSgpOmd0KCExKX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gbGUoZSk/QW4oZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKTp6ZShlKT9BbihlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblt0LGUuZ2V0KHQpXX0pKTpkdChlKT9lLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdCxlXX0pKTpndCghMSl9ZnVuY3Rpb24gVG4oZSx0LG4pe2lmKDIhPT1hcmd1bWVudHMubGVuZ3RoKWlmKGxlKGUpKXt2YXIgcj1lLiRtb2J4O3IudmFsdWVzW3RdP3Iud3JpdGUoZSx0LG4pOm9lKGUsdCxuLHIuZGVmYXVsdEVuaGFuY2VyKX1lbHNlIGlmKHplKGUpKWUuc2V0KHQsbik7ZWxzZXtpZighZHQoZSkpcmV0dXJuIGd0KCExKTsibnVtYmVyIiE9dHlwZW9mIHQmJih0PXBhcnNlSW50KHQsMTApKSxPdCh0Pj0wLCJOb3QgYSB2YWxpZCBpbmRleDogJyIrdCsiJyIpLFp0KCksdD49ZS5sZW5ndGgmJihlLmxlbmd0aD10KzEpLGVbdF09bixfdCgpfWVsc2V7WnQoKTt2YXIgbz10O3RyeXtmb3IodmFyIGkgaW4gbylUbihlLGksb1tpXSl9ZmluYWxseXtfdCgpfX19ZnVuY3Rpb24geG4oZSx0KXtpZihsZShlKSllLiRtb2J4LnJlbW92ZSh0KTtlbHNlIGlmKHplKGUpKWUuZGVsZXRlKHQpO2Vsc2V7aWYoIWR0KGUpKXJldHVybiBndCghMSk7Im51bWJlciIhPXR5cGVvZiB0JiYodD1wYXJzZUludCh0LDEwKSksT3QodD49MCwiTm90IGEgdmFsaWQgaW5kZXg6ICciK3QrIiciKSxlLnNwbGljZSh0LDEpfX1mdW5jdGlvbiBDbihlLHQpe2lmKGxlKGUpKXt2YXIgbj1LZShlKTtyZXR1cm4gbi5nZXRLZXlzKCksISFuLnZhbHVlc1t0XX1yZXR1cm4gemUoZSk/ZS5oYXModCk6ZHQoZSk/dD49MCYmdDxlLmxlbmd0aDpndCghMSl9ZnVuY3Rpb24gTW4oZSx0KXtpZihDbihlLHQpKXJldHVybiBsZShlKT9lW3RdOnplKGUpP2UuZ2V0KHQpOmR0KGUpP2VbdF06Z3QoITEpfWZ1bmN0aW9uIFJuKGUsdCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5wcm90b3R5cGU6ZSxyPWZ1bmN0aW9uKGUpe3ZhciByPXRbZV07QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSksaT1yLnJlZHVjZSgoZnVuY3Rpb24odCxyKXtyZXR1cm4gcihuLGUsdCl9KSxvKTtpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLGkpfTtmb3IodmFyIG8gaW4gdClyKG8pO3JldHVybiBlfWZ1bmN0aW9uIFBuKGUpe3ZhciB0PWUuZW5mb3JjZUFjdGlvbnMsbj1lLmNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbixyPWUuZGlzYWJsZUVycm9yQm91bmRhcmllcyxvPWUuYXJyYXlCdWZmZXIsaT1lLnJlYWN0aW9uU2NoZWR1bGVyO2lmKHZvaWQgMCE9PXQpe3ZhciBhPXZvaWQgMDtzd2l0Y2godCl7Y2FzZSEwOmNhc2Uib2JzZXJ2ZWQiOmE9ITA7YnJlYWs7Y2FzZSExOmNhc2UibmV2ZXIiOmE9ITE7YnJlYWs7Y2FzZSJzdHJpY3QiOmNhc2UiYWx3YXlzIjphPSJzdHJpY3QiO2JyZWFrO2RlZmF1bHQ6ZmFpbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ2VuZm9yY2VBY3Rpb25zJzogJyIrdCsiJywgZXhwZWN0ZWQgJ25ldmVyJywgJ2Fsd2F5cycgb3IgJ29ic2VydmVkJyIpfVF0LmVuZm9yY2VBY3Rpb25zPWEsUXQuYWxsb3dTdGF0ZUNoYW5nZXM9ITAhPT1hJiYic3RyaWN0IiE9PWF9dm9pZCAwIT09biYmKFF0LmNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbj0hIW4pLCEwPT09ZS5pc29sYXRlR2xvYmFsU3RhdGUmJigoUXQucGVuZGluZ1JlYWN0aW9ucy5sZW5ndGh8fFF0LmluQmF0Y2h8fFF0LmlzUnVubmluZ1JlYWN0aW9ucykmJmd0KCJpc29sYXRlR2xvYmFsU3RhdGUgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgTW9iWCBpcyBydW5uaW5nIGFueSByZWFjdGlvbnMiKSxGdD0hMCxVdCYmKDA9PS0teXQoKS5fX21vYnhJbnN0YW5jZUNvdW50JiYoeXQoKS5fX21vYnhHbG9iYWxzPXZvaWQgMCksUXQ9bmV3IEx0KSksdm9pZCAwIT09ciYmKFF0LmRpc2FibGVFcnJvckJvdW5kYXJpZXM9ISFyKSwibnVtYmVyIj09dHlwZW9mIG8mJmZ0KG8pLGkmJk9uKGkpfXZhciBObj0wO2Z1bmN0aW9uIERuKGUpezEhPT1hcmd1bWVudHMubGVuZ3RoJiZndCgiRmxvdyBleHBlY3RzIG9uZSAxIGFyZ3VtZW50IGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBkZWNvcmF0b3IiKTt2YXIgdD1lLm5hbWV8fCI8dW5uYW1lZCBmbG93PiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj10aGlzLG89YXJndW1lbnRzLGk9KytObixhPUModCsiIC0gcnVuaWQ6ICIraSsiIC0gaW5pdCIsZSkuYXBwbHkocixvKSxzPXZvaWQgMCx1PW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBvPTA7ZnVuY3Rpb24gdShlKXt2YXIgbjtzPXZvaWQgMDt0cnl7bj1DKHQrIiAtIHJ1bmlkOiAiK2krIiAtIHlpZWxkICIrbysrLGEubmV4dCkuY2FsbChhLGUpfWNhdGNoKGUpe3JldHVybiByKGUpfWwobil9ZnVuY3Rpb24gYyhlKXt2YXIgbjtzPXZvaWQgMDt0cnl7bj1DKHQrIiAtIHJ1bmlkOiAiK2krIiAtIHlpZWxkICIrbysrLGEudGhyb3cpLmNhbGwoYSxlKX1jYXRjaChlKXtyZXR1cm4gcihlKX1sKG4pfWZ1bmN0aW9uIGwodCl7aWYoIXR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LnRoZW4pcmV0dXJuIHQuZG9uZT9lKHQudmFsdWUpOihzPVByb21pc2UucmVzb2x2ZSh0LnZhbHVlKSkudGhlbih1LGMpO3QudGhlbihsLHIpfW49cix1KHZvaWQgMCl9KSk7cmV0dXJuIHUuY2FuY2VsPUModCsiIC0gcnVuaWQ6ICIraSsiIC0gY2FuY2VsIiwoZnVuY3Rpb24oKXt0cnl7cyYmQm4ocyk7dmFyIGU9YS5yZXR1cm4oKSx0PVByb21pc2UucmVzb2x2ZShlLnZhbHVlKTt0LnRoZW4oRXQsRXQpLEJuKHQpLG4obmV3IEVycm9yKCJGTE9XX0NBTkNFTExFRCIpKX1jYXRjaChlKXtuKGUpfX0pKSx1fX1mdW5jdGlvbiBCbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5jYW5jZWwmJmUuY2FuY2VsKCl9dmFyIExuPXtkZXRlY3RDeWNsZXM6ITAsZXhwb3J0TWFwc0FzT2JqZWN0czohMCxyZWN1cnNlRXZlcnl0aGluZzohMX07ZnVuY3Rpb24gVW4oZSx0LG4scil7cmV0dXJuIHIuZGV0ZWN0Q3ljbGVzJiZlLnNldCh0LG4pLG59ZnVuY3Rpb24gRm4oZSx0KXt2YXIgbjtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYodD17ZGV0ZWN0Q3ljbGVzOnR9KSx0fHwodD1MbiksdC5kZXRlY3RDeWNsZXM9dm9pZCAwPT09dC5kZXRlY3RDeWNsZXM/ITA9PT10LnJlY3Vyc2VFdmVyeXRoaW5nOiEwPT09dC5kZXRlY3RDeWNsZXMsdC5kZXRlY3RDeWNsZXMmJihuPW5ldyBNYXApLGZ1bmN0aW9uIGUodCxuLHIpe2lmKCFuLnJlY3Vyc2VFdmVyeXRoaW5nJiYhZGUodCkpcmV0dXJuIHQ7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXJldHVybiB0O2lmKG51bGw9PT10KXJldHVybiBudWxsO2lmKHQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB0O2lmKHRlKHQpKXJldHVybiBlKHQuZ2V0KCksbixyKTtpZihkZSh0KSYmQW4odCksITA9PT1uLmRldGVjdEN5Y2xlcyYmbnVsbCE9PXQmJnIuaGFzKHQpKXJldHVybiByLmdldCh0KTtpZihkdCh0KXx8QXJyYXkuaXNBcnJheSh0KSl7dmFyIG89VW4ocix0LFtdLG4pLGk9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQsbixyKX0pKTtvLmxlbmd0aD1pLmxlbmd0aDtmb3IodmFyIGE9MCxzPWkubGVuZ3RoO2E8czthKyspb1thXT1pW2FdO3JldHVybiBvfWlmKHplKHQpfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1NYXAucHJvdG90eXBlKXtpZighMT09PW4uZXhwb3J0TWFwc0FzT2JqZWN0cyl7dmFyIHU9VW4ocix0LG5ldyBNYXAsbik7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt1LnNldChvLGUodCxuLHIpKX0pKSx1fXZhciBjPVVuKHIsdCx7fSxuKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG8pe2Nbb109ZSh0LG4scil9KSksY312YXIgbD1VbihyLHQse30sbik7Zm9yKHZhciBmIGluIHQpbFtmXT1lKHRbZl0sbixyKTtyZXR1cm4gbH0oZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCxuKXt2YXIgcjtpZih6ZShlKXx8ZHQoZSl8fHRlKGUpKXI9S2UoZSk7ZWxzZXtpZighbGUoZSkpcmV0dXJuIGd0KCExKTtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIGd0KCExKTtyPUtlKGUsdCl9cmV0dXJuIHZvaWQgMCE9PXIuZGVoYW5jZXI/Z3QoITEpOihyLmRlaGFuY2VyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bixmdW5jdGlvbigpe3IuZGVoYW5jZXI9dm9pZCAwfSl9Im9iamVjdCI9PXR5cGVvZiBfX01PQlhfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmX19NT0JYX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0TW9ieCh7c3B5Ok8sZXh0cmFzOntnZXREZWJ1Z05hbWU6SGV9fSk7dmFyIFZuPSIkbW9ieCJ9LmNhbGwodGhpcyxuKDM0NSksbigxNDEpKX0sMTY2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9fSwxNjc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIG47cmV0dXJuIHZvaWQgMD09PWV8fGUuX190eXBlfHwobj1lLGU9T2JqZWN0LmFzc2lnbih7X190eXBlOiJBdXRoZW50aWNhdGlvblVybFJlcXVlc3Q6I0V4Y2hhbmdlIn0sbikpLE9iamVjdChyLmEpKCJHZXRBdXRoZW50aWNhdGlvblVybCIsZSx0KX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSl9LDE2OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBzfSkpO3ZhciByLG89bigxOSk7IWZ1bmN0aW9uKGUpe2VbZS5RdWVyeT0wXT0iUXVlcnkiLGVbZS5NdXRhdGlvbj0xXT0iTXV0YXRpb24iLGVbZS5TdWJzY3JpcHRpb249Ml09IlN1YnNjcmlwdGlvbiJ9KHJ8fChyPXt9KSk7dmFyIGk9bmV3IE1hcDtmdW5jdGlvbiBhKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlIHIuUXVlcnk6dD0iUXVlcnkiO2JyZWFrO2Nhc2Ugci5NdXRhdGlvbjp0PSJNdXRhdGlvbiI7YnJlYWs7Y2FzZSByLlN1YnNjcmlwdGlvbjp0PSJTdWJzY3JpcHRpb24ifXJldHVybiB0fWZ1bmN0aW9uIHMoZSl7dmFyIHQsbixhPWkuZ2V0KGUpO2lmKGEpcmV0dXJuIGE7T2JqZWN0KG8uYikoISFlJiYhIWUua2luZCwzNCk7dmFyIHM9ZS5kZWZpbml0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJGcmFnbWVudERlZmluaXRpb24iPT09ZS5raW5kfSkpLHU9ZS5kZWZpbml0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZCYmInF1ZXJ5Ij09PWUub3BlcmF0aW9ufSkpLGM9ZS5kZWZpbml0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZCYmIm11dGF0aW9uIj09PWUub3BlcmF0aW9ufSkpLGw9ZS5kZWZpbml0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZCYmInN1YnNjcmlwdGlvbiI9PT1lLm9wZXJhdGlvbn0pKTtPYmplY3Qoby5iKSghcy5sZW5ndGh8fHUubGVuZ3RofHxjLmxlbmd0aHx8bC5sZW5ndGgsMzUpLE9iamVjdChvLmIpKHUubGVuZ3RoK2MubGVuZ3RoK2wubGVuZ3RoPD0xLDM2KSxuPXUubGVuZ3RoP3IuUXVlcnk6ci5NdXRhdGlvbix1Lmxlbmd0aHx8Yy5sZW5ndGh8fChuPXIuU3Vic2NyaXB0aW9uKTt2YXIgZj11Lmxlbmd0aD91OmMubGVuZ3RoP2M6bDtPYmplY3Qoby5iKSgxPT09Zi5sZW5ndGgsMzcpO3ZhciBoPWZbMF07dD1oLnZhcmlhYmxlRGVmaW5pdGlvbnN8fFtdO3ZhciBkPXtuYW1lOmgubmFtZSYmIk5hbWUiPT09aC5uYW1lLmtpbmQ/aC5uYW1lLnZhbHVlOiJkYXRhIix0eXBlOm4sdmFyaWFibGVzOnR9O3JldHVybiBpLnNldChlLGQpLGR9fSwxNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTApLG89big1KTtjb25zdCBpPSJicG0iLGE9MTExNDExMSxzPW51bGw9PT1zZWxmfHx2b2lkIDA9PT1zZWxmP3ZvaWQgMDpzZWxmLnBlcmZvcm1hbmNlLHU9e307ZnVuY3Rpb24gYyhlKXtPYmplY3Qoby5mKShpKSYmd2luZG93LnBlcmZvcm1hbmNlLm1hcmsoZSkscyYmKHVbZV09TWF0aC5mbG9vcihwZXJmb3JtYW5jZS5ub3coKSkpfWZ1bmN0aW9uIGwoKXt2YXIgZSx0O2NvbnN0IG49cyYmd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZztpZihuJiYodS5pbl9lPW4ucmVzcG9uc2VFbmQtbi5mZXRjaFN0YXJ0LE9iamVjdChyLmopKCkpKXtjb25zdCByPW4ubmF2aWdhdGlvblN0YXJ0LG89cyYmKG51bGw9PT0odD1udWxsPT09KGU9d2luZG93LnBlcmZvcm1hbmNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5nZXRFbnRyaWVzQnlUeXBlKCJuYXZpZ2F0aW9uIikpfHx2b2lkIDA9PT10P3ZvaWQgMDp0WzBdKSxpPShudWxsPT1vP3ZvaWQgMDpvLndvcmtlclN0YXJ0KXx8MCxjPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uW24ucmVkaXJlY3RTdGFydC1yLG4ucmVkaXJlY3RFbmQtcixuLnVubG9hZEV2ZW50U3RhcnQtcixuLnVubG9hZEV2ZW50RW5kLXIsbi5mZXRjaFN0YXJ0LXIsbi5kb21haW5Mb29rdXBTdGFydC1yLG4uZG9tYWluTG9va3VwRW5kLXIsbi5jb25uZWN0U3RhcnQtcixuLnNlY3VyZUNvbm5lY3Rpb25TdGFydC1yLG4uY29ubmVjdEVuZC1yLG4ucmVxdWVzdFN0YXJ0LXIsbi5yZXNwb25zZVN0YXJ0LXIsbi5yZXNwb25zZUVuZC1yLG4uZG9tTG9hZGluZy1yLG4uZG9tSW50ZXJhY3RpdmUtcixuLmRvbUNvbXBsZXRlLXIsbi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydC1yLG4uZG9tQ29udGVudExvYWRlZEV2ZW50RW5kLXIsbi5sb2FkRXZlbnRTdGFydC1yLG4ubG9hZEV2ZW50RW5kLXIsaV0ubWFwKGU9Pk1hdGgubWluKE1hdGgubWF4KGUsMCksYSkpKTt1LmZsPWN9cmV0dXJuIEpTT04uc3RyaW5naWZ5KHUpfWZ1bmN0aW9uIGYoKXtjb25zdCBlPU9iamVjdC5rZXlzKHUpLmZpbHRlcihlPT5lLmluZGV4T2YoIl9lIik+LTEpLnJlZHVjZSgoZSx0KT0+e2NvbnN0IG49dC5zcGxpdCgiXyIpWzBdLHI9dVtuKyJfcyJdLG89dVtuKyJfZSJdO3JldHVybiJudW1iZXIiPT10eXBlb2YgciYmIm51bWJlciI9PXR5cGVvZiBvJiYoZVtuXT1vLXIpLGV9LHt9KTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3QoKTtsZXQgbz1lKC4uLnIpO3JldHVybihudWxsPT1vP3ZvaWQgMDpvLnRoZW4pP289by50aGVuKGU9PihuKCksZSkpOm4oKSxvfX0oZSwoKT0+ZCh0KSwoKT0+cCh0KSl9ZnVuY3Rpb24gZChlKXtjKGAke2V9X3NgKX1mdW5jdGlvbiBwKGUpe2xldCB0PWAke2V9X2VgO2ModCksT2JqZWN0KG8uZikoaSkmJndpbmRvdy5wZXJmb3JtYW5jZS5tZWFzdXJlKGUsYCR7ZX1fc2AsdCl9Y29uc3Qgdj17fTtmdW5jdGlvbiBiKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuXS5rZXk7ciYmdFtuXS5wcm9taXNlLnRoZW4odD0+e3ZbZV09cn0pLmNhdGNoKCgpPT57fSl9Y29uc3Qgcj10Lm1hcChlPT5lLnByb21pc2UpO3RyeXtyZXR1cm4gUHJvbWlzZS5hbGwocil9Y2F0Y2goZSl7Y29uc3Qgbj17cGs6dHlwZW9mIHQscHQ6dHlwZW9mIHIsc3Q6dHlwZW9mIHdpbmRvdy5TeW1ib2wsc3RpOnR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9O3Rocm93IHQmJihuLnBrbD10Lmxlbmd0aCksciYmKG4ucGw9ci5sZW5ndGgsU3ltYm9sLml0ZXJhdG9yJiYobi5waT10eXBlb2YgcltTeW1ib2wuaXRlcmF0b3JdKSksZS5kaWFnbm9zdGljSW5mbz1KU09OLnN0cmluZ2lmeShuKSxlfX1mdW5jdGlvbiB5KGUsdCl7dltlXXx8KHZbZV09dCl9ZnVuY3Rpb24gbSgpe3JldHVybiBKU09OLnN0cmluZ2lmeSh2KX12YXIgZz1mdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LmRvY3VtZW50JiYidmlzaWJsZSI9PXdpbmRvdy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtlKCEwKX0pKTp2b2lkIGUoITEpfTtuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBsfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZn0pKSxuLmQodCwiaiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiBtfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKSxuLmQodCwiaSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSl9LDE3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKTtjbGFzcyBye2NvbnN0cnVjdG9yKGU9e21heFBhcmFsbGVsVGFza3M6MSx0YXNrUXVhbnRhOjB9KXt0aGlzLmNvbmZpZz1lLHRoaXMudGFza0xpc3Q9e30sdGhpcy5udW1iZXJPZlRhc2tzUnVubmluZz0wfWFkZChlLHQ9MCl7cmV0dXJuIHRoaXMudGFza0xpc3RbdF18fCh0aGlzLnRhc2tMaXN0W3RdPVtdKSxuZXcgUHJvbWlzZSgobixyKT0+e3RoaXMudGFza0xpc3RbdF0udW5zaGlmdCh7ZnVuYzplLHJlc29sdmU6bixyZWplY3Q6cn0pLHRoaXMuc2NoZWR1bGVUYXNrKCl9KX1jbGVhcigpe3RoaXMudGFza0xpc3Q9e319c2NoZWR1bGVUYXNrKCl7dGhpcy5jb25maWcudGFza1F1YW50YTwwP3RoaXMudHJ5UnVuVGFzaygpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLnRyeVJ1blRhc2soKX0sdGhpcy5jb25maWcudGFza1F1YW50YXx8MCl9dHJ5UnVuVGFzaygpe2NvbnN0IGU9T2JqZWN0LmtleXModGhpcy50YXNrTGlzdCk7aWYodGhpcy5udW1iZXJPZlRhc2tzUnVubmluZzwodGhpcy5jb25maWcubWF4UGFyYWxsZWxUYXNrc3x8MSkmJmUubGVuZ3RoPjApe2NvbnN0IHQ9TWF0aC5taW4uYXBwbHkobnVsbCxlLm1hcChlPT5wYXJzZUludChlKSkpLG49dGhpcy50YXNrTGlzdFt0XS5wb3AoKTt0aGlzLnRhc2tMaXN0W3RdJiYwIT10aGlzLnRhc2tMaXN0W3RdLmxlbmd0aHx8ZGVsZXRlIHRoaXMudGFza0xpc3RbdF0sdGhpcy5udW1iZXJPZlRhc2tzUnVubmluZysrLG4mJm4uZnVuYygpLnRoZW4oZT0+e24ucmVzb2x2ZShlKSx0aGlzLm9uVGFza0NvbXBsZXRlKCl9KS5jYXRjaChlPT57bi5yZWplY3QoZSksdGhpcy5vblRhc2tDb21wbGV0ZSgpfSksdGhpcy5zY2hlZHVsZVRhc2soKX19b25UYXNrQ29tcGxldGUoKXt0aGlzLm51bWJlck9mVGFza3NSdW5uaW5nLS0sdGhpcy5zY2hlZHVsZVRhc2soKX19fSwxNzQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9big3NSksbz1uKDI1OCksaT1uKDMyKTtmdW5jdGlvbiBhKGUsdCl7aWYoIU9iamVjdChvLmEpKCkpe2lmKHQpcmV0dXJuITE7aS5kKGBBdHRlbXB0ZWQgdG8gcmVhZCAke2V9IGJlZm9yZSBmZWF0dXJlIGZsYWdzIHdlcmUgaW5pdGlhbGl6ZWQuYCl9cmV0dXJuIE9iamVjdChyLmEpKCkuZmVhdHVyZUZsYWdzLmdldChlLnRvTG93ZXJDYXNlKCkpfHwhMX19LDE3OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKTt2YXIgcj1uKDEzMiksbz1uKDEzKSxpPW4oMTIpLGE9bigyKTtmdW5jdGlvbiBzKGUsdCl7Y29uc3Qgbj1PYmplY3Qoci5jKSgpLG89T2JqZWN0KHIuYikoKTtyZXR1cm4gdC50aGVuP3QudGhlbih0PT51KGUsdCxuLG8pKTp1KGUsdCxuLG8pfWZ1bmN0aW9uIHUoZSx0LG4scil7aWYoT2JqZWN0KGEuUSkoKSl7Y29uc3QgdD1PYmplY3QoaS5hKSgpLmxvY2F0aW9uLm9yaWdpbjtlPSJzdHJpbmciPT10eXBlb2YgZT9uZXcgVVJMKGUsdCkudG9TdHJpbmcoKTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3VybDpuZXcgVVJMKGUudXJsLHQpLnRvU3RyaW5nKCl9KX1jb25zdCBzPU9iamVjdChvLmEpKCk7aWYocy5kaXNhYmxlQWxsUmVxdWVzdHMpe2NvbnN0IHQ9bmV3IEVycm9yKCJTZXJ2aWNlIHJlcXVlc3QgYmxvY2tlZCBiZWNhdXNlIGRpc2FibGVBbGxSZXF1ZXN0cyBpcyBlbmFibGVkLiIpO3JldHVybiB0LmRpYWdub3N0aWNJbmZvPWBVUkw6ICR7ZX1gLHQuZmV0Y2hFcnJvclR5cGU9IlJlcXVlc3ROb3RDb21wbGV0ZSIsdC5yZXRyaWFibGU9ITEsUHJvbWlzZS5yZWplY3QodCl9cmV0dXJuIG4/cy5wcmVmZXRjaFRhc2tRdWV1ZS5hZGQoKCk9PmZldGNoKGUsdCkscnx8dC5wcmlvcml0eSk6cy5zZXJ2aWNlQWN0aW9uVGFza1F1ZXVlP3Muc2VydmljZUFjdGlvblRhc2tRdWV1ZS5hZGQoKCk9PmMoZSx0KSx0LnByaW9yaXR5KTpjKGUsdCl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgobixyKT0+e2NvbnN0IGk9dC50aW1lb3V0TVN8fE9iamVjdChvLmEpKCkudGltZW91dE1TfHwtMSxhPXQ7bGV0IHM9MDtpZihpPjApe2xldCBuO2NvbnN0IHU9T2JqZWN0KG8uYSkoKS5pc0ZlYXR1cmVFbmFibGVkKCJmd2stcmVxdWVzdC10aW1lb3V0Iik7IkFib3J0Q29udHJvbGxlciJpbiBzZWxmJiZ1JiYobj1uZXcgQWJvcnRDb250cm9sbGVyLGEuc2lnbmFsPW4uc2lnbmFsKSxzPXNlbGYuc2V0VGltZW91dCgoKT0+e2lmKHUmJm4pbi5hYm9ydCgpO2Vsc2V7Y29uc3Qgbj1uZXcgRXJyb3IoYFNlcnZpY2UgcmVxdWVzdCB3b3VsZCBoYXZlIHRpbWVkIG91dCBhZnRlciAke2l9bXMgaWYgZmxpZ2h0IHdlcmUgZW5hYmxlZC5gKTtpZihuLmRpYWdub3N0aWNJbmZvPWBVUkw6ICR7ZX1gLG4uZmV0Y2hFcnJvclR5cGU9IlJlcXVlc3RUaW1lb3V0IiwhdC50aW1lb3V0TVMpdGhyb3cgbjtyKG4pfX0saSl9ZmV0Y2goZSxhKS50aGVuKGU9PntzZWxmLmNsZWFyVGltZW91dChzKSxuKGUpfSkuY2F0Y2godD0+e2NvbnN0IG49dDtuLmZldGNoRXJyb3JUeXBlPSJSZXF1ZXN0Tm90Q29tcGxldGUiLG4ucmV0cmlhYmxlPSEwLCJBYm9ydEVycm9yIj09PW4ubmFtZT8oT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIm1lc3NhZ2UiLHt2YWx1ZTpgU2VydmljZSByZXF1ZXN0IHRpbWVkIG91dCBhZnRlciAke2l9bXMuIFVSTDogJHtlfWB9KSxuLmZldGNoRXJyb3JUeXBlPSJSZXF1ZXN0VGltZW91dCIpOm4ubWVzc2FnZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIm1lc3NhZ2UiLHt2YWx1ZTpgJHtuLm1lc3NhZ2V9LiBVUkw6ICR7ZX1gfSksc2VsZi5jbGVhclRpbWVvdXQocykscihuKX0pfSl9fSwxODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSksbz1uKDEwKTtsZXQgaSxhPSJvd2FtYWlsLyI7ZnVuY3Rpb24gcygpe2lmKCFpKXtjb25zdCBlPSIyIj09T2JqZWN0KHIuYykoImJPIik7bGV0IHQ9dSgpK2Esbj11KCEwKSthO2NvbnN0IHM9T2JqZWN0KG8uYikoImJhc2VVcmwiKTtPYmplY3Qoci5hKSgpJiZzJiYodD1uPXMpLGk9e1BhY2thZ2VCYXNlVXJsOmU/bjp0LEV4dHJhU2V0dGluZ3M6e30sQmFja3VwQmFzZVVybDplP3Q6bixSZXNvdXJjZXNQYXRoOiIiLFNjcmlwdFBhdGg6T2JqZWN0KHIuYikoKT8iIjoic2NyaXB0cy8ifX1yZXR1cm4gaX1mdW5jdGlvbiB1KGUpe2NvbnN0IHQ9T2JqZWN0KG8uaCkoKTtzd2l0Y2godCl7Y2FzZSJBRzA4IjpyZXR1cm4iLy9jZG4uYmxvYi5jb3JlLmVhZ2xleC5pYy5nb3YvIjtjYXNlIkFHMDkiOnJldHVybiIvL2Nkbi5ibG9iLmNvcmUubWljcm9zb2Z0LnNjbG91ZC8iO2RlZmF1bHQ6e2NvbnN0IG49ZT8yOjE7bGV0IHI9ITA7Y29uc3QgaT1PYmplY3Qoby5iKSgic2NyaXB0VmVyIik7aSYmLTE9PT1pLmluZGV4T2YoIi4iKSYmKHI9ITEpO2NvbnN0IGE9cj9gcmVzLSR7bn1gOmByZXMtJHtufS1zZGZgO3JldHVybiJHYWxsYXRpbiI9PXQ/YC8vb3V0bG9vay0ke259LmNkbi5wYXJ0bmVyLm91dGxvb2suY24vYDpgLy8ke2F9LmNkbi5vZmZpY2UubmV0L2B9fX12YXIgYz1uKDEyKTtsZXQgbCxmLGgsZDtmdW5jdGlvbiBwKGUpe2x8fChsPWUpfWZ1bmN0aW9uIHYoZSl7Zj1lLHAoZSl9ZnVuY3Rpb24gYigpe3JldHVybiBmfWZ1bmN0aW9uIHkoKXtyZXR1cm4geCgic2NyaXB0VmVyIil9ZnVuY3Rpb24gbSgpe2NvbnN0IGU9eCgiY2RuVXJsIik7cmV0dXJuIFMoZSk/ZTp1KCl9ZnVuY3Rpb24gZygpe2NvbnN0IGU9eCgiYmFja3VwQ2RuVXJsIik7cmV0dXJuIFMoZSk/ZTp1KCEwKX1mdW5jdGlvbiBPKCl7aWYoaClyZXR1cm4gaDtjb25zdCBlPXgoImNkblVybCIpLHQ9eCgiY2RuQ29udGFpbmVyIiksbj14KCJkZXZDZG5VcmwiKTtyZXR1cm4gUyhuKT9uOlMoZSkmJlModCk/ZSt0K3koKSsiLyI6QyhzKCkuUGFja2FnZUJhc2VVcmwpfWZ1bmN0aW9uIHcoKXtyZXR1cm4gVChPKCkrQSgpKX1mdW5jdGlvbiBqKCl7cmV0dXJuIFQoYCR7TygpfXJlc291cmNlcy9gKX1mdW5jdGlvbiBFKCl7aWYoaClyZXR1cm4gaDtjb25zdCBlPXgoImJhY2t1cENkblVybCIpLHQ9eCgiY2RuQ29udGFpbmVyIik7bGV0IG49QyhzKCkuQmFja3VwQmFzZVVybCk7cmV0dXJuIFMoZSkmJlModCkmJihuPWUrdCt5KCkrIi8iKSxUKG4pK0EoKX1mdW5jdGlvbiBTKGUpe3JldHVybiBlJiZlLmluZGV4T2YoIi8iKT4tMX1mdW5jdGlvbiBBKCl7Y29uc3QgZT14KCJzY3JpcHRQYXRoIik7cmV0dXJuIFMoZSk/ZTpzKCkuU2NyaXB0UGF0aH1uLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJrIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBPfSkpLG4uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gd30pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiBFfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gVH0pKTtjb25zdCBrPSgpPT57dmFyIGU7cmV0dXJuIHZvaWQgMD09PWQmJihkPShudWxsPT09KGU9T2JqZWN0KGMuYSkoKS5sb2NhdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJvdG9jb2wpfHwiaHR0cHM6IiksZH0sST1uZXcgUmVnRXhwKCJeaHR0cHM/OiIpO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIEkudGVzdChlKXx8KGU9aygpK2UpLGV9ZnVuY3Rpb24geChlKXtyZXR1cm4gT2JqZWN0KG8uYikoZSl8fCIifWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGUrKE9iamVjdChyLmEpKCk/IiI6eSgpKyIvIisoT2JqZWN0KHIuZikoImRlYnVnSnMiKT8iZGVidWcvIjoiIikpfX0sMTgwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oNjYpO2Z1bmN0aW9uIG8oZSl7Y29uc3QgdD0oZT1lfHx7fSkuaGVhZGVycz9uZXcgSGVhZGVycyhlLmhlYWRlcnMpOm5ldyBIZWFkZXJzO2xldCBuPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWV0aG9kOmUubWV0aG9kfHwiUE9TVCIsY3JlZGVudGlhbHM6ImluY2x1ZGUiLGhlYWRlcnM6dH0pO2NvbnN0IG89bnVsbD09dD92b2lkIDA6dC5oYXMoIkF1dGhvcml6YXRpb24iKSxpPW51bGw9PXQ/dm9pZCAwOnQuaGFzKCJ4LWFuY2hvcm1haWxib3giKTtyZXR1cm4gT2JqZWN0KHIuYikobyxlLnNvdXJjZUlkLGkpLnRoZW4oZT0+KE9iamVjdC5rZXlzKGUpLmZvckVhY2gobj0+e3Quc2V0KG4sZVtuXSl9KSxuKSl9fSwxODE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7bGV0IHI9MDtmdW5jdGlvbiBvKCl7cmV0dXJuIHIrK319LDE4MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTt2YXIgcj1uKDEzKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2NvbnN0IG49T2JqZWN0KHIuYSkoKTtpZihudWxsPT09KHQ9bi5pc0ZlYXR1cmVFbmFibGVkKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jYWxsKG4sImZ3ay1pbW11dGFibGUtaWRzIikpe2NvbnN0IHQ9ZnVuY3Rpb24oZSl7Y29uc3QgdD1pKGUpP2UuZ2V0KCJwcmVmZXIiKTplLnByZWZlcjtyZXR1cm4gdD9gJHt0fSwgSWRUeXBlPSJJbW11dGFibGVJZCJgOidJZFR5cGU9IkltbXV0YWJsZUlkIid9KGUpO2koZSk/ZS5zZXQoInByZWZlciIsdCk6ZS5wcmVmZXI9dH19ZnVuY3Rpb24gaShlKXtyZXR1cm4hIWUuZ2V0JiYhIWUuc2V0fX0sMTgzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oMTMpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ7Y29uc3Qgbj1PYmplY3Qoci5hKSgpO2lmKG51bGw9PT0odD1uLmlzRmVhdHVyZUVuYWJsZWQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwobiwiYWRkaW4tZXZlcnlNZWV0aW5nT25saW5lIikpe2NvbnN0IHQ9ZnVuY3Rpb24oZSl7Y29uc3QgdD1pKGUpP2UuZ2V0KCJwcmVmZXIiKTplLnByZWZlcjtyZXR1cm4gdD9gJHt0fSwgZXhjaGFuZ2UuYmVoYXZpb3I9IkluY2x1ZGVUaGlyZFBhcnR5T25saW5lTWVldGluZ1Byb3ZpZGVycyJgOidleGNoYW5nZS5iZWhhdmlvcj0iSW5jbHVkZVRoaXJkUGFydHlPbmxpbmVNZWV0aW5nUHJvdmlkZXJzIid9KGUpO2koZSk/ZS5zZXQoInByZWZlciIsdCk6ZS5wcmVmZXI9dH19ZnVuY3Rpb24gaShlKXtyZXR1cm4hIWUuZ2V0JiYhIWUuc2V0fX0sMTg0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1KSxvPW4oMTIpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTtsZXQgaT0hMTtmdW5jdGlvbiBhKGUpe2lmKCFpKXtpPSEwO2NvbnN0IHQ9T2JqZWN0KG8uYSkoKS5sb2NhdGlvbixuPU9iamVjdChyLmQpKHQpO2xldCBhPSExO2NvbnN0IHM9ZT9lLmdldCgiWC1PV0EtQ2xhaW1DaGFsbGVuZ2UiKTp2b2lkIDA7cyYmbi5jYyE9PXMmJihuLmNjPWRlY29kZVVSSUNvbXBvbmVudChzKSxhPSEwKSx2b2lkIDA9PT1uLmF1dGhSZWRpcmVjdCYmKG4uYXV0aFJlZGlyZWN0PSJ0cnVlIixhPSEwKSxhJiYobi5zdGF0ZT0iMCIsdC5zZWFyY2g9Ij8iK09iamVjdChyLmkpKG4pKX19fSwxODU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9big5Nyk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gNDQ5PT1lfHw0MDg9PWV8fDUwMj09ZXx8ZTwxMDB8fGU+NTk5fHxPYmplY3Qoci5hKShlKX19LDE4NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbygpK28oKSsiLSIrbygpKyItIitvKCkrIi0iK28oKSsiLSIrbygpK28oKStvKCl9ZnVuY3Rpb24gbygpe3JldHVybiBNYXRoLmZsb29yKDY1NTM2KigxK01hdGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sMTg4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDMxMSksaT1uKDExMykuYVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sYT0ocj0vW14uXSskLy5leGVjKGkmJmkua2V5cyYmaS5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrcjoiIjt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4hIWEmJmEgaW4gZX0sdT1uKDExNSksYz1uKDI4MSksbD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxmPUZ1bmN0aW9uLnByb3RvdHlwZSxoPU9iamVjdC5wcm90b3R5cGUsZD1mLnRvU3RyaW5nLHA9aC5oYXNPd25Qcm9wZXJ0eSx2PVJlZ0V4cCgiXiIrZC5jYWxsKHApLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3ZhciBiPWZ1bmN0aW9uKGUpe3JldHVybiEoIU9iamVjdCh1LmEpKGUpfHxzKGUpKSYmKE9iamVjdChvLmEpKGUpP3Y6bCkudGVzdChPYmplY3QoYy5hKShlKSl9O3ZhciB5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19O3QuYT1mdW5jdGlvbihlLHQpe3ZhciBuPXkoZSx0KTtyZXR1cm4gYihuKT9uOnZvaWQgMH19LDE4OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjEyKSxvPU9iamVjdC5wcm90b3R5cGUsaT1vLmhhc093blByb3BlcnR5LGE9by50b1N0cmluZyxzPXIuYT9yLmEudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciB0PWkuY2FsbChlLHMpLG49ZVtzXTt0cnl7ZVtzXT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2goZSl7fXZhciBvPWEuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtzXT1uOmRlbGV0ZSBlW3NdKSxvfSxjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuY2FsbChlKX0sZj0iW29iamVjdCBOdWxsXSIsaD0iW29iamVjdCBVbmRlZmluZWRdIixkPXIuYT9yLmEudG9TdHJpbmdUYWc6dm9pZCAwO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA9PT1lP2g6ZjpkJiZkIGluIE9iamVjdChlKT91KGUpOmwoZSl9fSwxOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBofSkpO3ZhciByPW4oMSksbz0iSW52YXJpYW50IFZpb2xhdGlvbiIsaT1PYmplY3Quc2V0UHJvdG90eXBlT2YsYT12b2lkIDA9PT1pP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX06aSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dm9pZCAwPT09biYmKG49byk7dmFyIHI9ZS5jYWxsKHRoaXMsIm51bWJlciI9PXR5cGVvZiBuP28rIjogIituKyIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9pbnZhcmlhbnQtcGFja2FnZXMpIjpuKXx8dGhpcztyZXR1cm4gci5mcmFtZXNUb1BvcD0xLHIubmFtZT1vLGEocix0LnByb3RvdHlwZSkscn1yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKSh0LGUpLHR9KEVycm9yKTtmdW5jdGlvbiB1KGUsdCl7aWYoIWUpdGhyb3cgbmV3IHModCl9dmFyIGM9WyJsb2ciLCJ3YXJuIiwiZXJyb3IiLCJzaWxlbnQiXSxsPWMuaW5kZXhPZigibG9nIik7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXtjLmluZGV4T2YoZSl9fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9Y1tsXTtyZXR1cm4gbD1NYXRoLm1heCgwLGMuaW5kZXhPZihlKSksdH0hZnVuY3Rpb24oZSl7ZS5sb2c9ZigibG9nIiksZS53YXJuPWYoIndhcm4iKSxlLmVycm9yPWYoImVycm9yIil9KHV8fCh1PXt9KSl9LDE5MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKTt2YXIgcj1uKDM4KSxvPW4oMzYpLGk9big1OCksYT1uKDEzKSxzPW4oMik7YXN5bmMgZnVuY3Rpb24gdSgpe2xldCBlPSJVVEMiO2lmKHdpbmRvdy5JbnRsJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdy5JbnRsKXtjb25zdCB0PXdpbmRvdy5JbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCk7KG51bGw9PXQ/dm9pZCAwOnQudGltZVpvbmUpJiYoZT10LnRpbWVab25lKX1jb25zdCB0PU9iamVjdChyLmEpKE9iamVjdChzLkcpKCkpLG49T2JqZWN0KG8uYikoT2JqZWN0KG8uYSkodCwibGFuZy5vd2EiKSksdT1uZXcgSGVhZGVycyxjPWBsb2NhbGVOYW1lPSR7d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZX0mdHppZD0ke2V9JnNhdmVMYW5ndWFnZUFuZFRpbWV6b25lPTFgLGw9T2JqZWN0KGEuYSkoKTtpZih1LmFwcGVuZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiksdS5hcHBlbmQoIlgtT1dBLUNBTkFSWSIsT2JqZWN0KGkuYSkoKSksbCYmbC5nZXRBdXRoVG9rZW4pe2NvbnN0IGU9YXdhaXQgbC5nZXRBdXRoVG9rZW4oKTtlJiZ1LmFwcGVuZCgiQXV0aG9yaXphdGlvbiIsZSl9cmV0dXJuIGZldGNoKG4se21ldGhvZDoiUE9TVCIsY3JlZGVudGlhbHM6ImluY2x1ZGUiLGhlYWRlcnM6dSxib2R5OmN9KX19LDE5MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwibSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZCh0LCJsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBsfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gZn0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBkfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKTt2YXIgcj1uKDM5KSxvPW4oMzEpO2Z1bmN0aW9uIGkoKXtyZXR1cm4iTWFjIE9TIFgiPT1PYmplY3Qoby5hKSgpLm9zfWZ1bmN0aW9uIGEoKXtyZXR1cm4iV2luZG93cyI9PT1PYmplY3Qoby5hKSgpLm9zfWZ1bmN0aW9uIHMoKXtyZXR1cm4iTGludXgiPT09T2JqZWN0KG8uYSkoKS5vc31mdW5jdGlvbiB1KCl7cmV0dXJuIldpbmRvd3MiPT09T2JqZWN0KG8uYSkoKS5vcyYmIlhQIj09PU9iamVjdChvLmEpKCkub3NWZXJzaW9ufWZ1bmN0aW9uIGMoKXtyZXR1cm4iV2luZG93cyI9PT1PYmplY3Qoby5hKSgpLm9zJiYiMTAiPT09T2JqZWN0KG8uYSkoKS5vc1ZlcnNpb259ZnVuY3Rpb24gbCgpe3JldHVybiJDaHJvbWl1bSBPUyI9PU9iamVjdChvLmEpKCkub3N9ZnVuY3Rpb24gZigpe3JldHVybiJBbmRyb2lkIj09T2JqZWN0KG8uYSkoKS5vc31mdW5jdGlvbiBoKCl7cmV0dXJuImlPUyI9PU9iamVjdChvLmEpKCkub3N9ZnVuY3Rpb24gZCgpe3JldHVybiJDaHJvbWUiPT09T2JqZWN0KHIuYSkoKS5icm93c2VyfWZ1bmN0aW9uIHAoKXtyZXR1cm4iRmlyZWZveCI9PT1PYmplY3Qoci5hKSgpLmJyb3dzZXJ9ZnVuY3Rpb24gdigpe3JldHVybiJFZGdlIEFuYWhlaW0iPT09T2JqZWN0KHIuYSkoKS5icm93c2VyfWZ1bmN0aW9uIGIoKXtyZXR1cm4iU2FmYXJpIj09PU9iamVjdChyLmEpKCkuYnJvd3Nlcn1mdW5jdGlvbiB5KCl7cmV0dXJuIk9wZXJhIj09PU9iamVjdChyLmEpKCkuYnJvd3Nlcn19LDE5NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI3NCksbz1uKDE0NSksaT1uKDE5NSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuZ2V0UGF5bG9hZEJsb2I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgci5JTy5NZW1vcnlTdHJlYW0sbz1uZXcgci5Db21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIobik7cmV0dXJuIG8uV3JpdGVGaWVsZEJlZ2luKHIuQm9uZERhdGFUeXBlLkJUX01BUCwzKSxvLldyaXRlTWFwQ29udGFpbmVyQmVnaW4odCxyLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsci5Cb25kRGF0YVR5cGUuQlRfTElTVCksT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5Xcml0ZVN0cmluZyh0KTt2YXIgbj1lW3RdO28uV3JpdGVDb250YWluZXJCZWdpbigxLHIuQm9uZERhdGFUeXBlLkJUX1NUUlVDVCksby5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLDIpLG8uV3JpdGVTdHJpbmcoImFjdF9kZWZhdWx0X3NvdXJjZSIpLG8uV3JpdGVGaWVsZEJlZ2luKHIuQm9uZERhdGFUeXBlLkJUX1NUUklORyw1KSxvLldyaXRlU3RyaW5nKGkubmV3R3VpZCgpKSxvLldyaXRlRmllbGRCZWdpbihyLkJvbmREYXRhVHlwZS5CVF9JTlQ2NCw2KSxvLldyaXRlSW50NjQoaS5udW1iZXJUb0JvbmRJbnQ2NChEYXRlLm5vdygpKSksby5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfTElTVCw4KSxvLldyaXRlQ29udGFpbmVyQmVnaW4obi5sZW5ndGgsci5Cb25kRGF0YVR5cGUuQlRfU1RSVUNUKTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlvLldyaXRlQmxvYihuW2FdKTtvLldyaXRlU3RydWN0RW5kKCExKX0pKSxvLldyaXRlU3RydWN0RW5kKCExKSxuLkdldEJ1ZmZlcigpfSxlLmdldEV2ZW50QmxvYj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5JTy5NZW1vcnlTdHJlYW0sbj1uZXcgci5Db21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIodCk7bi5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLDEpLG4uV3JpdGVTdHJpbmcoZS5pZCksbi5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfSU5UNjQsMyksbi5Xcml0ZUludDY0KGkubnVtYmVyVG9Cb25kSW50NjQoZS50aW1lc3RhbXApKSxuLldyaXRlRmllbGRCZWdpbihyLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsNSksbi5Xcml0ZVN0cmluZyhlLnR5cGUpLG4uV3JpdGVGaWVsZEJlZ2luKHIuQm9uZERhdGFUeXBlLkJUX1NUUklORyw2KSxuLldyaXRlU3RyaW5nKGUubmFtZSk7dmFyIGE9W10scz1bXTtyZXR1cm4gT2JqZWN0LmtleXMoZS5wcm9wZXJ0aWVzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnByb3BlcnRpZXNbdF0ucGlpPT09by5BV1RQaWlLaW5kLk5vdFNldD9hLnB1c2godCk6cy5wdXNoKHQpfSkpLGEubGVuZ3RoJiYobi5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfTUFQLDEzKSxuLldyaXRlTWFwQ29udGFpbmVyQmVnaW4oYS5sZW5ndGgsci5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLHIuQm9uZERhdGFUeXBlLkJUX1NUUklORyksYS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLldyaXRlU3RyaW5nKHQpLG4uV3JpdGVTdHJpbmcoZS5wcm9wZXJ0aWVzW3RdLnZhbHVlKX0pKSkscy5sZW5ndGgmJihuLldyaXRlRmllbGRCZWdpbihyLkJvbmREYXRhVHlwZS5CVF9NQVAsMzApLG4uV3JpdGVNYXBDb250YWluZXJCZWdpbihzLmxlbmd0aCxyLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsci5Cb25kRGF0YVR5cGUuQlRfU1RSVUNUKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe24uV3JpdGVTdHJpbmcodCksbi5Xcml0ZUZpZWxkQmVnaW4oci5Cb25kRGF0YVR5cGUuQlRfSU5UMzIsMSksbi5Xcml0ZUludDMyKDEpLG4uV3JpdGVGaWVsZEJlZ2luKHIuQm9uZERhdGFUeXBlLkJUX0lOVDMyLDIpLG4uV3JpdGVJbnQzMihlLnByb3BlcnRpZXNbdF0ucGlpKSxuLldyaXRlRmllbGRCZWdpbihyLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsMyksbi5Xcml0ZVN0cmluZyhlLnByb3BlcnRpZXNbdF0udmFsdWUpLG4uV3JpdGVTdHJ1Y3RFbmQoITEpfSkpKSxuLldyaXRlU3RydWN0RW5kKCExKSx0LkdldEJ1ZmZlcigpfSxlLmJhc2U2NEVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gci5FbmNvZGluZy5CYXNlNjQuR2V0U3RyaW5nKGUpfSxlfSgpO3QuZGVmYXVsdD1hfSwxOTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDkpLG89L1t4eV0vZzt0Lm51bWJlclRvQm9uZEludDY0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkludDY0KCIwIik7cmV0dXJuIHQubG93PTQyOTQ5NjcyOTUmZSx0LmhpZ2g9TWF0aC5mbG9vcihlLzQyOTQ5NjcyOTYpLHR9LHQubmV3R3VpZD1mdW5jdGlvbigpe3JldHVybiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UobywoZnVuY3Rpb24oZSl7dmFyIHQ9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pKX0sdC5pc1BpaT1mdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSkmJm51bGwhPT1lJiZlPj0wJiZlPD0xM319LDE5NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcnNpb249IjEuMi4yIix0LkZ1bGxWZXJzaW9uU3RyaW5nPSJBV1QtV2ViLUNKUy0iK3QuVmVyc2lvbn0sMTk3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO2NvbnN0IHI9MjUwLG89NjUsaT0yOTtmdW5jdGlvbiBhKGUsdCxuLGEpe2lmKGUuYXBwZW5kKCJYLUpzLUV4cGVyaW1lbnQiLCI1IiksdCYmMCE9dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIi9tYWlsIikpe2UuYXBwZW5kKCJYLUZvbGRlci1Db3VudCIsIjAiKSxlLmFwcGVuZCgiWC1NZXNzYWdlLUNvdW50IiwiMCIpO2NvbnN0IG49dC50b0xvd2VyQ2FzZSgpOzAhPW4uaW5kZXhPZigiL2NhbGVuZGFyIikmJjAhPW4uaW5kZXhPZigiL29weCIpfHxlLmFwcGVuZCgiWC1DYWxlbmRhci1Gb2xkZXJzIiwiMSIpfWVsc2UgaWYobil7Y29uc3QgdD1hP286aTtlLmFwcGVuZCgiWC1NZXNzYWdlLUNvdW50IixgJHtNYXRoLmZsb29yKChuLXIpL3QpfWApfX19LDE5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighdHx8MD09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49LTEhPT1lLmluZGV4T2YoIj8iKTtyZXR1cm4oZSs9bj8iJiI6Ij8iKStPYmplY3Qua2V5cyh0KS5tYXAoKGUsbik9PmAke2VuY29kZVVSSUNvbXBvbmVudChlKX09JHtlbmNvZGVVUklDb21wb25lbnQodFtlXSl9YCkuam9pbigiJiIpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sMjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTgpLG89big1KTtjb25zdCBpPS9beHldL2c7bGV0IGE7ZnVuY3Rpb24gcygpe3JldHVybiBhfHwoYT1PYmplY3Qoby5jKSgic2Vzc2lvbklkIil8fCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoaSwoZnVuY3Rpb24oZSl7dmFyIHQ9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pKSksYX1jb25zdCB1PW5ldyBSZWdFeHAoLyhbYS16QS1aMC05K19cLi1dKykoQHwlNDApKFtcZGEtekEtWlwuLV0rKVwuKFthLXpBLVpcLl17Miw2fSkvZyksYz1uZXcgUmVnRXhwKC8oPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KS9nKTtmdW5jdGlvbiBsKGUpe3JldHVybiBlJiYoZT0oZT0oZT1lLnJlcGxhY2UodSwiRW1haWxQaWkiKSkucmVwbGFjZShjLCJJcFBpaSIpKS5zcGxpdChzKCkpLmpvaW4oIlJlcGxhY2VkU2Vzc2lvbklkIikpLGV9ZnVuY3Rpb24gZigpe3ZhciBlO2xldCB0PWwobnVsbD09PShlPW51bGw9PT13aW5kb3d8fHZvaWQgMD09PXdpbmRvdz92b2lkIDA6d2luZG93LmxvY2F0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ocmVmKTtyZXR1cm4gdCYmdC5sZW5ndGg+MTAwJiYodD10LnN1YnN0cigwLDEwMCkpLHQmJmVuY29kZVVSSUNvbXBvbmVudCh0KX12YXIgaD1uKDExKTtjb25zdCBkPSJPd2FDbGllbnRJZCI7bGV0IHA9bnVsbDtmdW5jdGlvbiB2KCl7aWYoIXApe2NvbnN0IGU9KG51bGw9PT1kb2N1bWVudHx8dm9pZCAwPT09ZG9jdW1lbnQ/dm9pZCAwOmRvY3VtZW50LmNvb2tpZSkmJmRvY3VtZW50LmNvb2tpZS5zcGxpdCgiQ2xpZW50SWQ9IilbMV07bGV0IHQ9ZSYmZS5zcGxpdCgiOyIpWzBdO3Q/KHA9dCxPYmplY3QoaC5lKSh3aW5kb3csZCx0KSk6cD1PYmplY3QoaC5hKSh3aW5kb3csZCl9cmV0dXJuIHB9dmFyIGI9big0Myk7bGV0IHksbT0iKG5vbmUpIjtmdW5jdGlvbiBnKCl7cmV0dXJuIHl9ZnVuY3Rpb24gTygpe2lmKCFtKXRocm93IG5ldyBFcnJvcigiT3B4IGhhcyBub3QgcmVzcG9uZGVkIHdpdGggdGhlIGNvbmZpZyB5ZXQiKTtyZXR1cm4gbX1mdW5jdGlvbiB3KGUpe209dm9pZCAwLHk9ZS50aGVuKGU9PnttPWUuaG9zdEFwcDtjb25zdCB0PWUuc2Vzc2lvbklkO3JldHVybiB0JiZmdW5jdGlvbihlKXthPWV9KHQpLGV9KX1mdW5jdGlvbiBqKCl7Y29uc3QgZT1bYi5iLGIuaSxiLmtdO2xldCB0O2lmKE9iamVjdChvLmYpKCJob3N0QXBwIik/dD1PYmplY3Qoby5jKSgiaG9zdEFwcCIpLnRvTG93ZXJDYXNlKCk6T2JqZWN0KG8uZikoInRlc3RIb3N0QXBwIikmJih0PU9iamVjdChvLmMpKCJ0ZXN0SG9zdEFwcCIpLnRvTG93ZXJDYXNlKCkpLGUuaW5jbHVkZXModCkpcmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3JldHVybiEhaigpfXZhciBTPW4oMTIpO2Z1bmN0aW9uIEEoKXtyZXR1cm4gT2JqZWN0KFMuYSkoKS5uYXRpdmVIb3N0P2IuZTpFKCk/aigpOk8oKX1mdW5jdGlvbiBrKCl7cmV0dXJuIi9vd2EifXZhciBJPW4oMzQpLFQ9bigxMTkpO2Z1bmN0aW9uIHgoKXtyZXR1cm4iZXhjaGFuZ2VsYWJzLmxpdmUtaW50LmNvbSI9PT1PYmplY3QoUy5hKSgpLmxvY2F0aW9uLmhvc3R9bGV0IEMsTTtmdW5jdGlvbiBSKGUpe3ZhciB0LG47Y29uc3Qgcj1PYmplY3QoUy5hKSgpLG89ci5kb2N1bWVudDtpZighQ3x8ZSl7Y29uc3QgZT1udWxsPT09KHQ9bnVsbD09bz92b2lkIDA6by5kb2N1bWVudEVsZW1lbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsaWVudFdpZHRoO0M9ci5pbm5lcldpZHRoJiZlP01hdGgubWluKHIuaW5uZXJXaWR0aCxlKTpyLmlubmVyV2lkdGh8fGV8fChudWxsPT09KG49bnVsbD09bz92b2lkIDA6by5ib2R5KXx8dm9pZCAwPT09bj92b2lkIDA6bi5jbGllbnRXaWR0aCl9cmV0dXJuIEN9ZnVuY3Rpb24gUCgpe3JldHVybiBNfHwiRGVza3RvcCJ9dmFyIE49big4Nik7bGV0IEQ7ZnVuY3Rpb24gQihlKXt2YXIgdCxuLHI9T2JqZWN0KFMuYSkoKSxvPXIuZG9jdW1lbnQ7aWYoIUR8fGUpe2NvbnN0IGU9bnVsbD09PSh0PW51bGw9PW8/dm9pZCAwOm8uZG9jdW1lbnRFbGVtZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbGllbnRIZWlnaHQ7RD1yLmlubmVySGVpZ2h0JiZlP01hdGgubWluKHIuaW5uZXJIZWlnaHQsZSk6ci5pbm5lckhlaWdodHx8ZXx8KG51bGw9PT0obj1udWxsPT1vP3ZvaWQgMDpvLmJvZHkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNsaWVudEhlaWdodCl9cmV0dXJuIER9bGV0IEw9e307ZnVuY3Rpb24gVShlKXtpZihlKXRyeXtMPUpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7fXJldHVybiBMfWZ1bmN0aW9uIEYoKXtyZXR1cm4gTH1mdW5jdGlvbiBRKGUpe2NvbnN0IHQ9T2JqZWN0KHIuZikoKTtyZXR1cm4hIShudWxsPT1lP3ZvaWQgMDplLnNvbWUoZT0+e3JldHVybiBuZXcgUmVnRXhwKGBeJHtlfSRgKS50ZXN0KHQpfSkpfXZhciBWPW4oMTM4KTtmdW5jdGlvbiBxKCl7cmV0dXJuISgiZG9jdW1lbnQiaW4gc2VsZil9bi5kKHQsIm0iLChmdW5jdGlvbigpe3JldHVybiByLmN9KSksbi5kKHQsInUiLChmdW5jdGlvbigpe3JldHVybiByLmZ9KSksbi5kKHQsIkgiLChmdW5jdGlvbigpe3JldHVybiByLmd9KSksbi5kKHQsIksiLChmdW5jdGlvbigpe3JldHVybiByLmp9KSksbi5kKHQsIkoiLChmdW5jdGlvbigpe3JldHVybiByLml9KSksbi5kKHQsInMiLChmdW5jdGlvbigpe3JldHVybiByLmV9KSksbi5kKHQsIm8iLChmdW5jdGlvbigpe3JldHVybiByLmR9KSksbi5kKHQsIkkiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZCh0LCJ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiQiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKHQsIkciLChmdW5jdGlvbigpe3JldHVybiBrfSkpLG4uZCh0LCJuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5hfSkpLG4uZCh0LCJ6IiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5lfSkpLG4uZCh0LCJOIiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5nfSkpLG4uZCh0LCJMIiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5mfSkpLG4uZCh0LCJ3IiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5jfSkpLG4uZCh0LCJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5kfSkpLG4uZCh0LCJwIiwoZnVuY3Rpb24oKXtyZXR1cm4gSS5ifSkpLG4uZCh0LCJEIiwoZnVuY3Rpb24oKXtyZXR1cm4gVC5hfSkpLG4uZCh0LCJnIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5nfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5kfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5jfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5hfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5lfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5mfSkpLG4uZCh0LCJoIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5ofSkpLG4uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5qfSkpLG4uZCh0LCJrIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5rfSkpLG4uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5pfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gYi5ifSkpLG4uZCh0LCJSIiwoZnVuY3Rpb24oKXtyZXR1cm4geH0pKSxuLmQodCwiTSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsIkYiLChmdW5jdGlvbigpe3JldHVybiBnfSkpLG4uZCh0LCJFIiwoZnVuY3Rpb24oKXtyZXR1cm4gT30pKSxuLmQodCwiVSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSksbi5kKHQsInIiLChmdW5jdGlvbigpe3JldHVybiBSfSkpLG4uZCh0LCJDIiwoZnVuY3Rpb24oKXtyZXR1cm4gUH0pKSxuLmQodCwiVCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsIk8iLChmdW5jdGlvbigpe3JldHVybiBOLmF9KSksbi5kKHQsInEiLChmdW5jdGlvbigpe3JldHVybiBCfSkpLG4uZCh0LCJTIiwoZnVuY3Rpb24oKXtyZXR1cm4gVX0pKSxuLmQodCwieCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSksbi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiBRfSkpLG4uZCh0LCJ2IiwoZnVuY3Rpb24oKXtyZXR1cm4gVi5hfSkpLG4uZCh0LCJQIiwoZnVuY3Rpb24oKXtyZXR1cm4gRX0pKSxuLmQodCwiQSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSksbi5kKHQsIlEiLChmdW5jdGlvbigpe3JldHVybiBxfSkpfSwyMDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO2xldCByPSExO2Z1bmN0aW9uIG8oKXtyZXR1cm4gcn1mdW5jdGlvbiBpKGUpe3I9ZX19LDIwNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSk7dmFyIHI9big4Miksbz1uKDQ0KSxpPW4oNzIpLGE9bigyKSxzPW4oMTIyKSx1PW4oMTI0KSxjPW4oMjIpLGw9big2MCksZj1uKDMzKSxoPW4oNzEpO2FzeW5jIGZ1bmN0aW9uIGQoZSx0LG4pe2NvbnN0IHI9T2JqZWN0KGYuYSkoT2JqZWN0KGguYSkobiksIlN0YXJ0dXBEYXRhIixPYmplY3QoYS5UKShuLnVybCkpLG89T2JqZWN0KGkuYSkociksYz1PYmplY3QodS5hKShPYmplY3Qocy5hKShyLG8sZSksby5lc3JjKTtpZihjKXJldHVybiBhd2FpdCBwKCJzZXJ2ZXJSZXRyeSIscixvKSxjLndhaXRGb3ImJmF3YWl0IFByb21pc2UucmFjZShbT2JqZWN0KGwuYSkoMWU0KSxjLndhaXRGb3IuY2F0Y2goKCk9Pnt9KV0pLHtlbmRwb2ludDpgJHt0fT9iTz0xJmFwcD0ke09iamVjdChhLm0pKCl9YCxkZWxheTpjLnRpbWVvdXR9fWZ1bmN0aW9uIHAoZSx0LG4pe3JldHVybiBPYmplY3QoYy5hKSgiU3RhcnR1cERpZFJldHJ5IiwidCIpLG8uYShPYmplY3Qoci5hKShlLG58fE9iamVjdChpLmEpKHQpLHZvaWQgMCx0KSl9fSwyMDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSk7dmFyIHI9bigyKSxvPW4oNSk7Y29uc3QgaT0iIzAwNzhENCIsYT0iIzMzMyIscz0iRmV3ZXIgRGV0YWlscyIsdT0iJ1NlZ29lIFVJIFdlc3RFdXJvcGVhbicsICdTZWdvZSBVSSBTZW1pYm9sZCcsICdTZWdvZSBXUCBTZW1pYm9sZCcsICdTZWdvZSBVSScsICdTZWdvZSBXUCcsIFRhaG9tYSwgQXJpYWwsIHNhbnMtc2VyaWYnIjtmdW5jdGlvbiBjKGUsdCxuKXtjb25zdCBjPWYoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMzQwcHgiLHRvcDoiNDBweCJ9KSxkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nTG9nbyIpO2QmJihkLnJlbW92ZSgpLGgoZCx7cG9zaXRpb246ImluaXRpYWwiLHdpZHRoOiI1NnB4IixoZWlnaHQ6IjU2cHgifSksYy5hcHBlbmRDaGlsZChkKSk7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ1NjcmVlbiIpO3AmJnAucmVtb3ZlKCksbChjLHtmb250U2l6ZToiNDBweCIsY29sb3I6aSwibWFyZ2luLXRvcCI6IjI4cHgifSwiU29tZXRoaW5nIHdlbnQgd3JvbmcuIiksbChjLHtmb250U2l6ZToiMTZweCIsImZvbnQtZmFtaWx5Ijp1LG1hcmdpbjoiMjBweCAwIiwiZm9udC13ZWlnaHQiOiI2MDAiLGNvbG9yOmF9LCJQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLiIpO2NvbnN0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2godix7bWFyZ2luOiIwIDRweCIsImZvbnQtc2l6ZSI6IjE0cHgiLCJsaW5lLWhlaWdodCI6IjE5cHgifSksdi5pbm5lclRleHQ9IlJlZnJlc2ggdGhlIHBhZ2UiO2NvbnN0IGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7aChiLHtjb2xvcjoid2hpdGUiLCJiYWNrZ3JvdW5kLWNvbG9yIjppLGN1cnNvcjoicG9pbnRlciIscGFkZGluZzoiMCAxNnB4IiwibWluLXdpZHRoIjoiODBweCIsImJvcmRlci1yYWRpdXMiOiIycHgiLCJtaW4taGVpZ2h0IjoiMzJweCIsYm9yZGVyOiIxcHggc29saWQgIitpLCJmb250LXdlaWdodCI6IjYwMCIsImZvbnQtZmFtaWx5Ijp1LCJsaW5lLWhlaWdodCI6IjE5cHgifSksYi5hcHBlbmRDaGlsZCh2KSxjLmFwcGVuZENoaWxkKGIpO2NvbnN0IHk9bChjLHtmb250U2l6ZToiMTRweCIsY29sb3I6aSxjdXJzb3I6InBvaW50ZXIiLCJmb250LWZhbWlseSI6dSwibGluZS1oZWlnaHQiOiIxOXB4IiwiZm9udC13ZWlnaHQiOiI2MDAiLG1hcmdpbjoiMjBweCAwIn0scyk7bGV0IG09W2BVVEMgRGF0ZTogJHsobmV3IERhdGUpLnRvSVNPU3RyaW5nKCl9YCwiQm9vdFJlc3VsdDogIitlLCJDbGllbnQgSWQ6ICIrT2JqZWN0KHIudCkoKSwiU2Vzc2lvbiBJZDogIitPYmplY3Qoci5NKSgpLCJDbGllbnQgVmVyc2lvbjogIitPYmplY3Qoci51KSgpXTtjb25zdCBnPU9iamVjdChvLmMpKCJuYXRpdmVWZXJzaW9uIik7ZyYmbS5wdXNoKCJOYXRpdmUgSG9zdCBWZXJzaW9uOiAiK2cpLG4ucmVxdWVzdCYmbS5wdXNoKCJGYWlsZWQgcmVzb3VyY2U6ICIrbi5yZXF1ZXN0KSxtPW0uY29uY2F0KE9iamVjdC5rZXlzKHQpLmZpbHRlcihlPT50W2VdKS5tYXAoZT0+ZSsiOiAiK3RbZV0pKTtjb25zdCBPPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO08uaW5uZXJUZXh0PW0uam9pbigiXG4iKSxoKE8se2NvbG9yOmEsInVzZXItc2VsZWN0IjoiYWxsIn0pLGMuYXBwZW5kQ2hpbGQoTykseS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pntjb25zdCBlPXkuaW5uZXJUZXh0PT1zO3kuaW5uZXJUZXh0PWU/Ik1vcmUgRGV0YWlscyI6cyxPLnN0eWxlLmRpc3BsYXk9ZT8ibm9uZSI6IiJ9KTtjb25zdCB3PXdpbmRvdy5sb2NhdGlvbjtiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2NvbnN0IGU9T2JqZWN0KG8uZCkodyk7ZS5uYXRpdmU9IiIsdy5zZWFyY2g9YD8ke09iamVjdChvLmkpKGUpfWB9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwIikuYXBwZW5kQ2hpbGQoYyl9ZnVuY3Rpb24gbChlLHQsbil7Y29uc3Qgcj1mKHQpO3JldHVybiBuJiYoci5pbm5lclRleHQ9biksZS5hcHBlbmRDaGlsZChyKSxyfWZ1bmN0aW9uIGYoZSl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gaCh0LGUpLHR9ZnVuY3Rpb24gaChlLHQpe2Zvcihjb25zdCBuIG9mIE9iamVjdC5rZXlzKHQpKWUuc3R5bGVbbl09dFtuXX19LDIwNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9bigyKSxvPW4oNSk7Y29uc3QgaT17fTtmdW5jdGlvbiBhKGUsdCl7Y29uc3Qgbj1PYmplY3Qoby5kKSh3aW5kb3cubG9jYXRpb24pO2Zvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKGkpKW5bZV09aVtlXTtjb25zdCBhPW4uYk8hPT1lLnN0cmF0ZWd5O3ZhciBzLHU7cmV0dXJuIGEmJihuLmJPPWUuc3RyYXRlZ3ksbi5zZXNzaW9uSWQ9T2JqZWN0KHIuTSkoKSx0JiYoblt0XT0iIikscz1gPyR7T2JqZWN0KG8uaSkobil9YCwodT1lLnRpbWVvdXR8fDApPjA/c2V0VGltZW91dCgoKT0+e3dpbmRvdy5sb2NhdGlvbi5zZWFyY2g9c30sdSk6d2luZG93LmxvY2F0aW9uLnNlYXJjaD1zKSxhfWZ1bmN0aW9uIHMoZSx0KXtpW2VdPXR9fSwyMDc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM0KSxvPW4oMzMpLGk9big0MiksYT1uKDcxKSxzPW4oMiksdT1uKDM4KSxjPW4oMjA0KTtmdW5jdGlvbiBsKGUpe3JldHVybiAyMDQ9PWV8fDQwND09ZXx8ZT49NTAwfXZhciBmPW4oMTcpLGg9big1NiksZD1uKDExKSxwPW4oMTk3KSx2PW4oOTUpO2NvbnN0IGI9InNkZnAiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2VbZS5Ob0xvY2FsU3RvcmFnZT0wXT0iTm9Mb2NhbFN0b3JhZ2UiLGVbZS5Mb2NhbFN0b3JhZ2VGb3VuZD0xXT0iTG9jYWxTdG9yYWdlRm91bmQiLGVbZS5BcGlGb3VuZFBhcmFtcz0yXT0iQXBpRm91bmRQYXJhbXMiLGVbZS5BcGlVc2VkUGFyYW1zPTNdPSJBcGlVc2VkUGFyYW1zIn0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkZvdW5kRm9sZGVyUGFyYW1zPTFdPSJGb3VuZEZvbGRlclBhcmFtcyIsZVtlLkZvdW5kTWVzc2FnZVBhcmFtcz0yXT0iRm91bmRNZXNzYWdlUGFyYW1zIixlW2UuVXNlZEZvbGRlclBhcmFtcz00XT0iVXNlZEZvbGRlclBhcmFtcyIsZVtlLlVzZWRNZXNzYWdlUGFyYW1zPThdPSJVc2VkTWVzc2FnZVBhcmFtcyIsZVtlLkpzb25FeGNlcHRpb249MTZdPSJKc29uRXhjZXB0aW9uIn0obXx8KG09e30pKTtsZXQgZz15Lk5vTG9jYWxTdG9yYWdlLE89eS5Ob0xvY2FsU3RvcmFnZTt0LmE9T2JqZWN0KGYuZykoKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IEhlYWRlcnMsbj1PYmplY3QoZC5hKSh3aW5kb3csYik7biYmKHQuc2V0KCJmb2xkZXJQYXJhbXMiLG4pLGc9eS5Mb2NhbFN0b3JhZ2VGb3VuZCk7Y29uc3QgZj1PYmplY3QoZC5hKSh3aW5kb3csdi5hKTtmJiYodC5zZXQoIm1lc3NhZ2VQYXJhbXMiLGYpLE89eS5Mb2NhbFN0b3JhZ2VGb3VuZCk7cmV0dXJuIE9iamVjdChwLmEpKHQsd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLE9iamVjdChzLnEpKCksT2JqZWN0KHYuYikoKSksZnVuY3Rpb24oZSx0LG4sZil7Y29uc3QgaD1PYmplY3QodS5hKShPYmplY3Qocy5HKSgpKSsiL3N0YXJ0dXBkYXRhLmFzaHgiO3JldHVybiBPYmplY3QoaS5hKSgiU3RhcnR1cERhdGEiLHZvaWQgMCx7ZW5kcG9pbnQ6aCxoZWFkZXJzOnQscmV0dXJuRnVsbFJlc3BvbnNlT25TdWNjZXNzOiEwLHNob3VsZFJldHJ5Omwsb25CZWZvcmVSZXRyeTp0PT5PYmplY3QoYy5iKShlLGgsdCksYXV0aE5lZWRlZE9uVW5BdXRob3JpemVkOiExLHJldHJ5Q291bnQ6NX0pLnRoZW4oZT0+e2lmKE9iamVjdChyLmgpKGUpLCFlKXRocm93IG5ldyBFcnJvcigiTm9SZXNwb25zZSIpO2lmKDIwMCE9ZS5zdGF0dXMpdGhyb3cgT2JqZWN0KGEuYSkoZSk7cmV0dXJuIGYoZS5oZWFkZXJzKSxlLmpzb24oKS5jYXRjaChlPT57Y29uc3QgdD1uZXcgRXJyb3IoIkludmFsaWRKc29uIik7dGhyb3cgZSYmKGUuZGlhZ25vc3RpY0luZm89ZS5tZXNzYWdlKSx0fSl9LGU9Pnt0aHJvdyBPYmplY3QoYS5hKShlKX0pLnRoZW4obikuY2F0Y2goZT0+UHJvbWlzZS5yZWplY3QoT2JqZWN0KG8uYSkoZSwiU3RhcnR1cERhdGEiLGgsMCkpKX0oZSx0LHcsail9KSwic2QiKTtmdW5jdGlvbiB3KGUpe3JldHVybiBlLmZvbGRlclBhcmFtcyYmT2JqZWN0KGQuZSkod2luZG93LGIsSlNPTi5zdHJpbmdpZnkoZS5mb2xkZXJQYXJhbXMpKSxlLm1lc3NhZ2VQYXJhbXMmJk9iamVjdChkLmUpKHdpbmRvdyx2LmEsSlNPTi5zdHJpbmdpZnkoZS5tZXNzYWdlUGFyYW1zKSksT2JqZWN0KGguZikoZSksZX1mdW5jdGlvbiBqKGUpe2xldCB0O2lmKGUpe2NvbnN0IG49ZS5nZXQoIngtb3dhLXN0YXJ0dXAtcHJlbG9hZCIpO24mJk9iamVjdChmLmIpKCJzZF9wciIsbik7Y29uc3Qgcj1lLmdldCgieC1vd2Etc3RhcnR1cC1kaWFnIik7ciYmKHQ9cGFyc2VJbnQocikpfUUoYixnLHQsbS5Vc2VkRm9sZGVyUGFyYW1zLG0uRm91bmRGb2xkZXJQYXJhbXMpLEUodi5hLE8sdCxtLlVzZWRNZXNzYWdlUGFyYW1zLG0uRm91bmRNZXNzYWdlUGFyYW1zKX1mdW5jdGlvbiBFKGUsdCxuLHIsbyl7biYmKDAhPShuJnIpP3Q9eS5BcGlVc2VkUGFyYW1zOjAhPShuJm8pJiYodD15LkFwaUZvdW5kUGFyYW1zKSwwIT0obiZtLkpzb25FeGNlcHRpb24pJiZPYmplY3QoZC5kKSh3aW5kb3csZSkpLE9iamVjdChmLmIpKGUsdCl9fSwyMTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDExMykuYS5TeW1ib2w7dC5hPXJ9LDIxMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDI2KTtjb25zdCBvPVsib3V0IG9mIG1lbW9yeSIsIm5vdCBlbm91Z2ggc3RvcmFnZSIsIm5vdCBlbm91Z2ggbWVtb3J5IHJlc291cmNlcyIsImVzcGFjaW8gZGUgYWxtYWNlbmFtaWVudG8gaW5zdWZpY2llbnRlIiwiaW5zdWZmaXNhbnRlIHBvdXIgY2V0dGUiLCJubyBoYXkgc3VmaWNpZW50ZSBlc3BhY2lvIGRlIHBpbGEiLCJlc3BhY2UgcGlsZSBpbnN1ZmZpc2FudCIsIk1lbW9yaWEgZXNhdXJpdGEiLCJNw6ltb2lyZSBpbnN1ZmZpc2FudGUiLCJNZW1vcmlhIGluc3VmaWNpZW50ZSIsIk1lbcOzcmlhIGluc3VmaWNpZW50ZSJdO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIE9iamVjdChyLmEpKG8sZSl9fSwyMTM4OmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMTM5KX0sMjEzOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTt2YXIgcj1uKDg2NSk7T2JqZWN0KHIuYSkoKX0sMjE0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO3ZhciByPW4oMjYpO2NvbnN0IG89WyJjaHJvbWUtZXh0ZW5zaW9uOi8vIiwiZmlsZTovLy8iLCJidGdsc3MubmV0LyIsIigvVXNlcnMvIiwiKC9BcHBsaWNhdGlvbnMvIl07ZnVuY3Rpb24gaShlKXtyZXR1cm4gT2JqZWN0KHIuYSkobyxlKX19LDIxNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDI2KTtjb25zdCBvPVsiOiBTeW50YXggZXJyb3IiLCJTeW50YXhFcnJvcjoiLCJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQiLCJGYWlsZWQgdG8gZmV0Y2giLCJOZXR3b3JrRXJyb3IiLCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIiwiSW50ZXJuZXQgY29ubmVjdGlvbiBhcHBlYXJzIHRvIGJlIiwiVGhlIG5ldHdvcmsgY29ubmVjdGlvbiB3YXMgbG9zdC4iLCJDb3VsZCBub3QgY29ubmVjdCB0byB0aGUgc2VydmVyIiwiY2FuY2VsbGVkLiBVUkw6IiwiRXJyb3JTZXNzaW9uVGltZW91dCIsIkxvYWRpbmcgY2h1bmsgIiwiVW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgKDApIiwiVW5leHBlY3RlZCBlbmQgb2YgSlNPTiBpbnB1dCIsIlVuZXhwZWN0ZWQgdG9rZW4iLCJJbnZhbGlkIGNoYXJhY3RlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IiwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkZhaWxlZCB0byBsb2FkIGphdmFzY3JpcHQiXTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIE9iamVjdChyLmEpKG8sZSl8fChudWxsPT10P3ZvaWQgMDp0Lm5ldHdvcmtFcnJvcil9fSwyMTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9big0KTtjb25zdCBvPW5ldyByLmIoKCk9Pm4uZSgzNzUpLnRoZW4obi5iaW5kKG51bGwsNTA4KSkpLGk9bmV3IHIuYyhvLGU9PmUuZnVsbERlbnNpdHkpfSwyMTc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9big0KTtjb25zdCBvPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMTEzKSxuLmUoMjQyKV0pLnRoZW4obi5iaW5kKG51bGwsNTA3KSkpLGk9bmV3IHIuYyhvLGU9PmUud2ViUmVzb2x2ZXJzKX0sMjE4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bGV0IHI7ZnVuY3Rpb24gbyhlKXtyPWV9ZnVuY3Rpb24gaSgpe3JldHVybiByfW4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSl9LDIxOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxNyksbi5lKDExMyksbi5lKDI0Miksbi5lKDQwNCldKS50aGVuKG4uYmluZChudWxsLDUwOSkpKSxpPW5ldyByLmMobyxlPT5lLm5hdGl2ZVJlc29sdmVycyl9LDIyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMCk7dmFyIG89bigzNSksaT1uKDE4KTtuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO2NvbnN0IGE9WyJYLUNhbGN1bGF0ZWRCRVRhcmdldCIsIlgtT1dBLUNvcnJlbGF0aW9uSWQiLCJYLU1TRWRnZS1SZWYiLCJjb250ZW50LWVuY29kaW5nIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJYLU9XQS1WZXJzaW9uIiwiWC1PV0FFcnJvck1lc3NhZ2VJRCIsIngtZGlhZ2luZm8iLCJ4LWJlc2t1IiwieC1vd2EtZGlhZ25vc3RpY3NpbmZvIl07bGV0IHM9IiI7ZnVuY3Rpb24gdShlLHQpe3ZhciBuO2xldCB1PWAmdm09dHJ1ZSZzcD0ke09iamVjdChpLmopKCl9YDtlJiYodSs9YCZlaGs9JHtlLmVoa30mbXNnPSR7ZS5lbXNnfWApO2NvbnN0IGM9T2JqZWN0KHIuYikoImJvb3RGbGlnaHRzIik7aWYoYyYmKHUrPSImYmY9IitjKSx0KXt1Kz0iJnJlcT0iK2VuY29kZVVSSUNvbXBvbmVudCh0LnVybCk7Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKyspe2NvbnN0IG49YVtlXSxyPU9iamVjdChvLmEpKHQsbik7ciYmKHUrPWAmJHtufT0ke3J9YCl9dSs9IiZydD0iK3QudHlwZX1jb25zdCBsPW51bGw9PT0obj13aW5kb3cucGVyZm9ybWFuY2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm5hdmlnYXRpb247bCYmKHUrPWAmbnQ9JHtsLnR5cGV9YCk7bGV0IGY9ZnVuY3Rpb24oKXt2YXIgZTtjb25zdCB0PXdpbmRvdy5zY3JpcHRQcm9jZXNzU3RhcnQ7bGV0IG49e307aWYodCl7Y29uc3Qgcj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGk9cltvXSxhPXRbaV0scz1udWxsPT09KGU9d2luZG93LnNjcmlwdFByb2Nlc3NFbmQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplW2ldO25baV09bnVsbCE9cz9zLWE6LTF9fXJldHVybiBufSgpO2NvbnN0IGg9T2JqZWN0LmtleXMoZik7Zm9yKGxldCBlPTA7ZTxoLmxlbmd0aDtlKyspe2xldCB0PWhbZV07ZD11LHU9bnVsbCE9KHY9ZilbcD10XSYmbnVsbCE9dltwXT9kLmNvbmNhdChgJiR7cH09JHt2W3BdfWApOmR9dmFyIGQscCx2O3JldHVybiB1K3N9ZnVuY3Rpb24gYyhlLHQpe3MrPWAmJHtlfT0ke3R9YH19LDIyMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxMyksbi5lKDE1KSxuLmUoMTcpLG4uZSgxOSksbi5lKDk5KSxuLmUoMTEwKSxuLmUoMTEzKSxuLmUoNDA2KV0pLnRoZW4obi5iaW5kKG51bGwsNTEwKSkpLGk9bmV3IHIuYShvLGU9PmUuY3JlYXRlTWFuYWdlZFF1ZXJ5TGluayl9LDIyMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMik7bi5wPU9iamVjdChyLkspKCk7bigyOTQpLG4oMjk1KTt2YXIgbz1uKDIwNyksaT1uKDQ0KSxhPW4oODIpO3ZhciBzPW4oMTI0KSx1PW4oMTIzKSxjPW4oMTIyKSxsPW4oNzIpLGY9big1KSxoPW4oNjQpLGQ9bigzOCkscD1uKDQ1KSx2PW4oMTk5KSxiPW4oMzYpO2NvbnN0IHk9InN0YXRlIjtmdW5jdGlvbiBtKGUsdCxuLG8saSl7Y29uc3QgYT1PYmplY3QoZi5kKShlKSxzPWFbdF0hPT1uO2lmKHMpe2FbdF09bixvJiYoYS5zZXNzaW9uSWQ9T2JqZWN0KHIuTSkoKSk7Y29uc3Qgcz1PYmplY3QoaC5hKSgpfHwibWFpbCI7bGV0IHU9YCR7T2JqZWN0KGQuYSkoYC8ke3N9YCl9L2A7aSYmKGFbeV09IjAiLHU9YCR7ZnVuY3Rpb24oZSl7dmFyIHQ7bGV0IG49ZTtjb25zdCByPW51bGw9PT0odD1PYmplY3QocC5iKSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXRobmFtZTtpZihyKXtjb25zdCBlPXIuc3BsaXQoIi8iK09iamVjdChoLmEpKCkrIi8iKVsxXTtuPU9iamVjdChiLmEpKG4sZSl9cmV0dXJuIE9iamVjdChiLmIpKE9iamVjdChiLmMpKG4pKX0oYC8ke3N9YCl9YCksZS5hc3NpZ24oT2JqZWN0KHYuYSkodSxhKSl9cmV0dXJuIHN9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gT2JqZWN0KHAuYSkoKS5hc3NpZ24oZSksITB9dmFyIE89bigyMDUpO2Z1bmN0aW9uIHcoZSx0LG4sbyl7dmFyIGk7bGV0IGE9ITE7Imxhbmd0eiI9PWU/YT1mdW5jdGlvbihlKXtsZXQgdD1PYmplY3QoZC5hKSgiL293YSIpKyIvIjtyZXR1cm4iQ2FsZW5kYXIiPT1lfHwiTWluaUNhbGVuZGFyIj09ZT90Kz0iP3BhdGg9L2NhbGVuZGFyIjoiUGVvcGxlIiE9ZSYmIk1pbmlQZW9wbGUiIT1lfHwodCs9Ij9wYXRoPS9wZW9wbGUiKSxnKHQpfShPYmplY3Qoci5tKSgpKToiZXJyb3JmZSI9PWUmJihudWxsPT09KGk9dC5yZXNwb25zZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudXJsKT9hPWcodC5yZXNwb25zZS51cmwpOiJhdXRoIj09ZSYmKGE9bShsb2NhdGlvbiwiYXV0aFJlZGlyZWN0IiwidHJ1ZSIsdm9pZCAwLCEwKSksYXx8KG51bGw9PW98fG8oKSxPYmplY3QoTy5hKShlLG4sdCkpfXZhciBqPW4oMjA2KTt2YXIgRT1uKDMzKTtmdW5jdGlvbiBTKCl7dHJ5e2lmKCJjYWNoZXMiaW4gc2VsZiYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuY2FjaGVzLmtleXMpe2NvbnN0IGU9c2VsZi5jYWNoZXMua2V5cygpO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4pcmV0dXJuIGUuY2F0Y2goKCk9PltdKX19Y2F0Y2goZSl7fXJldHVybiBudWxsfXZhciBBPW4oMjIpO2Z1bmN0aW9uIGsoZSx0LG4pe3JldHVybiBPYmplY3QoZi5mKSgiYk8iKT9Qcm9taXNlLnJlc29sdmUoKTpQcm9taXNlLmFsbChbdCxlXSkudGhlbigoW2UsdF0pPT57aWYoIm51bWJlciI9PXR5cGVvZiBlJiYobnVsbD09dD92b2lkIDA6dC5jdXJyZW50RXBvY2hJbk1zKSYmdC5jdXJyZW50RXBvY2hJbk1zPmUpdGhyb3cgT2JqZWN0KEEuYSkoImNlaW0iLHQuY3VycmVudEVwb2NoSW5NcyksT2JqZWN0KEEuYSkoImV4cGlyYXRpb25EYXRlIixlKSxuJiZmdW5jdGlvbihlKXtjb25zdCB0PVMoKTt0P3QudGhlbih0PT4oT2JqZWN0KEEuYSkoImRlbENhY2hlcyIsdC5qb2luKCJ8IikpLFByb21pc2UuYWxsKHQuZmlsdGVyKHQ9PjA9PXQuaW5kZXhPZihlKSkubWFwKGU9PnNlbGYuY2FjaGVzLmRlbGV0ZShlKSkpLmNhdGNoKCgpPT57fSkpKTpQcm9taXNlLnJlc29sdmUobnVsbCl9KG4pLE9iamVjdChFLmEpKG5ldyBFcnJvcigiRXhwaXJlZEJ1aWxkIiksIkV4cGlyZWRCdWlsZCIpfSl9dmFyIEk9bigxOCksVD1uKDE3KSx4PW4oMTMpLEM9bigyMDApO2NvbnN0IE09T2JqZWN0KFQuZykoKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBPYmplY3QoQS5hKSgiZm1lIiwibnAiKSxQcm9taXNlLnJlc29sdmUobnVsbCk7Y29uc3QgdD1TKCk7cmV0dXJuIHQ/dC50aGVuKHQ9Pntjb25zdCBuPXQuZmlsdGVyKHQ9PnQuaW5kZXhPZihlKT4tMSk7aWYobi5sZW5ndGg8MSlyZXR1cm4gT2JqZWN0KEEuYSkoImZtZSIsIm5jIiksbnVsbDtjb25zdCBvPU9iamVjdChyLnUpKCk7Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3QgdD1lLnNwbGl0KCJfIik7aWYoMz09dC5sZW5ndGgmJm89PXRbMV0pe2NvbnN0IGU9cGFyc2VJbnQodFsyXSk7aWYoIWlzTmFOKGUpKXJldHVybiBPYmplY3QoQS5hKSgiZm1lIiwiY24iKSxlKzI1OTJlNn19cmV0dXJuIE9iamVjdChBLmEpKCJmbWUiLCJuIiksbnVsbH0pOihPYmplY3QoQS5hKSgiZm1lIiwibmsiKSxQcm9taXNlLnJlc29sdmUobnVsbCkpfSksImZtZSIpO3ZhciBSPW4oNCk7bGV0IFA7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ7dHJ5e1A9RGF0ZS5ub3coKSxPYmplY3QoSS5rKShlLmFwcCksT2JqZWN0KEMuYikoISFlLmlzRGVlcExpbmspLGkuYihlLnN0YXJ0dXBBcmlhVG9rZW4pO2NvbnN0IG49bnVsbD09PSh0PWUucnVuQmVmb3JlU3RhcnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSxlKS5jYXRjaChlPT57dGhyb3cgZS5zb3VyY2V8fChlLnNvdXJjZT0iQmVmb3JlQm9vdCIpLGV9KTtPYmplY3QoeC5iKSh7YmFzZVVybDpPYmplY3QoZC5hKShPYmplY3Qoci5HKSgpKX0pO2NvbnN0IGE9ZS5vdmVycmlkZUJvb3RQcm9taXNlc3x8KCgpPT5PYmplY3Qoby5hKShlKSk7bGV0IHM9bj9uLnRoZW4oYSk6YSgpO2NvbnN0IHU9T2JqZWN0KFQuZykoKCk9PmUuYm9vdHN0cmFwLmltcG9ydCgpLCJtanMiKSgpLGM9ZS5jYWNoZXNUb0NsZWFuLGw9W3twcm9taXNlOnMsa2V5OiJzZCJ9LHtwcm9taXNlOmsocyxNKGMpLGMpLGtleToidmMifSx7cHJvbWlzZTp1LGtleToianMifV07bGV0IGY9UHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgaD1PYmplY3Qoci5GKSgpLHA9ZS5zdHJhdGVnaWVzLHY9ZS5vcHRpb25zO3YmJihsLnB1c2goe3Byb21pc2U6T2JqZWN0KFQuZykoKCk9PnYuaW1wb3J0KCksIm9qcyIpKCksa2V5OiJvanMifSksZj1Qcm9taXNlLmFsbChbdi5pbXBvcnQoKSxofHxQcm9taXNlLnJlc29sdmUoKV0pLnRoZW4oKFtlXSk9PmUocyxwKSkpO2NvbnN0IGI9W3UsZl07aWYoaCYmYi5wdXNoKGgpLGwucHVzaCh7cHJvbWlzZTpQcm9taXNlLmFsbChiKS50aGVuKChbZSx0XSk9Pnt0cnl7cmV0dXJuIGUuYXBwbHkobnVsbCx0P1t0XTpbcyxwXSl9Y2F0Y2goZSl7dGhyb3cgT2JqZWN0KEUuYSkoZSwiQm9vdHN0cmFwIil9fSkuY2F0Y2goZT0+e3Rocm93IE9iamVjdChFLmEpKGUsIlNjcmlwdCIpfSksa2V5Om51bGx9KSxlLnJ1bkFmdGVyUmVxdWVzdHMmJmUucnVuQWZ0ZXJSZXF1ZXN0cyhzKSxlLnN0cmF0ZWdpZXMpZm9yKGxldCB0IG9mIE9iamVjdC5rZXlzKGUuc3RyYXRlZ2llcykpe2NvbnN0IG49ZS5zdHJhdGVnaWVzW3RdO24mJm4uaW1wb3J0KCl9cmV0dXJuIE9iamVjdChULmopKCJzdGFydCIsbCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KE9iamVjdChFLmEpKGUsIlByZWJvb3QiKSl9fShlKS50aGVuKCgpPT57dmFyIHQ7dHJ5eyFmdW5jdGlvbihlKXt2YXIgdDtsZXQgbj0obnVsbD09PSh0PXdpbmRvdy5wZXJmb3JtYW5jZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubm93KSYme3N0YXJ0OmUscGx0Ok1hdGguZmxvb3Iod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKX07aS5hKE9iamVjdChhLmEpKCJvayIsdm9pZCAwLG4pKX0oUCk7Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ1NjcmVlbiIpO24mJm4ucGFyZW50Tm9kZT09ZG9jdW1lbnQuYm9keSYmKE9iamVjdChULmEpKCJsc19lIiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuKSxudWxsPT09KHQ9ZS5vbkxvYWRlclJlbW92ZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSkpLE9iamVjdChSLmgpKCl9Y2F0Y2goZSl7dGhyb3cgT2JqZWN0KEUuYSkoZSwiQm9vdENvbXBsZXRlIil9fSkuY2F0Y2godD0+eyFmdW5jdGlvbihlLHQpe3ZhciBuO2NvbnN0IHI9T2JqZWN0KGwuYSkoZSk7bGV0IG89T2JqZWN0KGMuYSkoZSxyLHQpO2NvbnN0IGY9KG51bGw9PT0obj10Lm92ZXJyaWRlUmV0cnlTdHJhdGVneSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbCh0LG8pKXx8T2JqZWN0KHMuYSkobyxyLmVzcmMsITApO2YmJihvPSJyZXRyeSIpLGkuYShPYmplY3QoYS5hKShvLHIsdm9pZCAwLGUpLGY/dm9pZCAwOnUuYSkudGhlbigoKT0+e2YmJk9iamVjdChqLmIpKGYsdC5yZXRyeVFzcCl8fCh0LmhhbmRsZUJvb3RFcnJvcnx8dykobyxlLHIsdC5vbkZhdGFsQm9vdEVycm9yKX0pfSh0LGUpfSl9dmFyIEQ9bigxMDMpLEI9big0OCksTD1uKDExKSxVPW4oMTUwKSxGPW4oNTgpLFE9bigyMTYpO2NvbnN0IFY9bmV3IFIuYigoKT0+bi5lKDQzMSkudGhlbihuLmJpbmQobnVsbCwxOTI1NikpKSxxPW5ldyBSLmMoVixlPT5lLm1lZGl1bURlbnNpdHkpLFc9bmV3IFIuYigoKT0+bi5lKDM3MykudGhlbihuLmJpbmQobnVsbCwxOTI1NykpKSxHPW5ldyBSLmMoVyxlPT5lLmNvbXBhY3REZW5zaXR5KTt2YXIgej1uKDExMSksWT1uKDIxOSksSz1uKDIxNyksSD1uKDE1NSksSj1uKDIyMCk7Y29uc3QgWj1uZXcgUi5iKCgpPT5uLmUoMzc3KS50aGVuKG4uYmluZChudWxsLDE5MjU4KSkpLF89bmV3IFIuYyhaLGU9PmUubG9jYWxTdGF0ZVJlc29sdmVycyk7dmFyIFg9bigxMCk7Y29uc3QgJD0ibHMiLGVlPSJvd2FfZGVuc2l0eSIsdGU9InN0YXJ0IjtmdW5jdGlvbiBuZShlKXtpZihPYmplY3Qoci5QKSgpKXtjb25zdCB0PWUucnVuQmVmb3JlU3RhcnQ7ZS5ydW5CZWZvcmVTdGFydD1lPT56LmguaW1wb3J0KCkudGhlbihuPT4oT2JqZWN0KHguYikoe2dldEF1dGhUb2tlbjpufSksei5pLmltcG9ydEFuZEV4ZWN1dGUoKSxudWxsPT10P3ZvaWQgMDp0KGUpKSl9cmV0dXJuIE4oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtydW5BZnRlclJlcXVlc3RzOnQ9Pnt2YXIgbjtPYmplY3QoSC5hKSgpPyhPYmplY3QoWC5pKSgiZGlzYWJsZWh4Iil8fFkuYS5pbXBvcnQoKSxKLmEuaW1wb3J0KCkpOksuYS5pbXBvcnQoKSxfLmltcG9ydCgpO3ZhciByPU9iamVjdChMLmEpKHdpbmRvdyxCLmEuTE9DQUxfU1RPUkFHRV9LRVkpO3ImJk9iamVjdChCLmIpKHIsJCksT2JqZWN0KEQuZCkoJCksZS5sb2FkQnBvcyYmIU9iamVjdCh4LmEpKCkuZGlzYWJsZUFsbFJlcXVlc3RzJiYoT2JqZWN0KEYuYikoKT9PYmplY3QoVS5iKSh0ZSxlLmFwcCwhMCk6dC50aGVuKCgpPT5PYmplY3QoVS5iKSh0ZSxlLmFwcCkpKTtjb25zdCBvPU9iamVjdChMLmEpKHdpbmRvdyxlZSk7byYmZnVuY3Rpb24oZSl7cmV0dXJuIkNvbXBhY3QiPT09ZT9HOiJTaW1wbGUiPT09ZT9xOlEuYX0obykuaW1wb3J0KCksdC50aGVuKGU9Pnt2YXIgdCxuO09iamVjdChELmQpKCJzZCIpO2NvbnN0IHI9bnVsbD09PShuPW51bGw9PT0odD1udWxsPT1lP3ZvaWQgMDplLm93YVVzZXJDb25maWcpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LlVzZXJPcHRpb25zKXx8dm9pZCAwPT09bj92b2lkIDA6bi5EaXNwbGF5RGVuc2l0eU1vZGU7ciYmT2JqZWN0KEwuZSkod2luZG93LGVlLHIpfSksbnVsbD09PShuPWUucnVuQWZ0ZXJSZXF1ZXN0cyl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfX0pKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5lfSkpfSwyMjU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGUhPWUmJnQhPXR9fSwyMzA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9bigzKTtjb25zdCBvPU9iamVjdChyLmNyZWF0ZVN0b3JlKSgiQ29tbWFuZFJpYmJvbiIse3ZpZXdNb2RlOjB9KTt0LmE9bygpfSwyMzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9bnVsbCxvPXt9LGk9MSxhPUFycmF5LHM9YVsiQHdyeS9jb250ZXh0OlNsb3QiXXx8ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmlkPVsic2xvdCIsaSsrLERhdGUubm93KCksTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMildLmpvaW4oIjoiKX1yZXR1cm4gZS5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9cjtlO2U9ZS5wYXJlbnQpaWYodGhpcy5pZCBpbiBlLnNsb3RzKXt2YXIgdD1lLnNsb3RzW3RoaXMuaWRdO2lmKHQ9PT1vKWJyZWFrO3JldHVybiBlIT09ciYmKHIuc2xvdHNbdGhpcy5pZF09dCksITB9cmV0dXJuIHImJihyLnNsb3RzW3RoaXMuaWRdPW8pLCExfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe2lmKHRoaXMuaGFzVmFsdWUoKSlyZXR1cm4gci5zbG90c1t0aGlzLmlkXX0sZS5wcm90b3R5cGUud2l0aFZhbHVlPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpLGE9KChpPXtfX3Byb3RvX186bnVsbH0pW3RoaXMuaWRdPWUsaSkscz1yO3I9e3BhcmVudDpzLHNsb3RzOmF9O3RyeXtyZXR1cm4gdC5hcHBseShvLG4pfWZpbmFsbHl7cj1zfX0sZS5iaW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49cjt0cnl7cmV0dXJuIHI9dCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3I9bn19fSxlLm5vQ29udGV4dD1mdW5jdGlvbihlLHQsbil7aWYoIXIpcmV0dXJuIGUuYXBwbHkobix0KTt2YXIgbz1yO3RyeXtyZXR1cm4gcj1udWxsLGUuYXBwbHkobix0KX1maW5hbGx5e3I9b319LGV9KCk7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJAd3J5L2NvbnRleHQ6U2xvdCIse3ZhbHVlOmFbIkB3cnkvY29udGV4dDpTbG90Il09ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pfWZpbmFsbHl7cmV0dXJuIGV9fSgpO3MuYmluZCxzLm5vQ29udGV4dH0sMjM1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NzApLG89bi5uKHIpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5hfSkpO24oODAzKTt2YXIgaT1vLmEucHJvdG90eXBlO2lbIkBAb2JzZXJ2YWJsZSJdfHwoaVsiQEBvYnNlcnZhYmxlIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pfSwyMzc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMxMSksbz1uKDMzMik7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZPYmplY3Qoby5hKShlLmxlbmd0aCkmJiFPYmplY3Qoci5hKShlKX19LDI0MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjcpLG89big3NDkpLGk9big1NyksYT1uKDMpO2NvbnN0IHM9W2kuYy5TdXJmYWNlQWN0aW9uc107T2JqZWN0KGEub3JjaGVzdHJhdG9yKShvLmEsZT0+e2NvbnN0IHQ9ZS5kZWZhdWx0T3B0aW9ucztzLmZvckVhY2goZT0+e3RbZV0mJk9iamVjdChpLmgpKE51bWJlcihlKSx0W2VdKX0pfSk7dmFyIHU9big1MjApLGM9big3NDApO24uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gZn0pKSxuLmQodCwibCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImoiLChmdW5jdGlvbigpe3JldHVybiBkfSkpLG4uZCh0LCJrIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiZiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZn0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZH0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuY30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGMuYX0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGMuYn0pKTtjb25zdCBsPW5ldyByLmMoKCk9Pm4uZSg4ODUpLnRoZW4obi5iaW5kKG51bGwsMTk3NzApKSk7bGV0IGY9bmV3IHIuYShsLGU9PmUuY3JlYXRlT3JVcGRhdGVPcHRpb25zRm9yRmVhdHVyZSksaD1uZXcgci5hKGwsZT0+ZS51cGRhdGVBZGRpblBpblN0YXR1cyk7bmV3IHIuYShsLGU9PmUudXBkYXRlQWRkSW5BcnJheSk7Y29uc3QgZD1uZXcgci5iKGwsZT0+ZS5nZXRTZXJ2ZXJPcHRpb25zRm9yRmVhdHVyZSk7bGV0IHA9bmV3IHIuYShsLGU9PmUubG9hZE9wdGlvbnMpfSwyNDM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBtfSkpO3ZhciByPW4oMzk0KSxvPW4oNSksaT1uKDQwMiksYT1uKDYwNykscz1uKDY1KSx1PW4oMzIpLGM9bigyNjYpLGw9bigxNyksZj1uKDQpO2NvbnN0IGg9InBtIixkPSJvd2EtIixwPTZlNDtsZXQgdj0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LnBlcmZvcm1hbmNlJiYhIXdpbmRvdy5wZXJmb3JtYW5jZS5tYXJrLGI9LTE7ZnVuY3Rpb24geShlKXtiPWV9Y2xhc3MgbSBleHRlbmRzIHIuYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdm9pZCAwLHQpLHRoaXMuaGFzRW5kZWQ9ITEsdGhpcy50aW1lQmVmb3JlUGF1c2U9MCx0aGlzLmFsbFJlcXVlc3RJZHM9W10sdGhpcy5yZXNwb25zZUNvcnJlbGF0aW9uVmVjdG9ycz1bXSx0aGlzLm1hZGVOZXR3b3JrUmVxdWVzdD0hMTtjb25zdCBuPU9iamVjdChmLmUpKCk7dGhpcy5zdGFydFRpbWU9bnx8RGF0ZS5ub3coKSx0aGlzLnN0YXJ0U2NvcmU9Yix0aGlzLnBlcmZvcm1hbmNlTWFyaygicyIpLG4mJnRoaXMuYWRkRGF0YSgiQnVuZGxlVGltZSIsRGF0ZS5ub3coKS1uKSxzZXRUaW1lb3V0KHRoaXMuZW5kV2l0aFRpbWVvdXQuYmluZCh0aGlzKSx0JiYibnVtYmVyIj09dHlwZW9mIHQudGltZW91dD90LnRpbWVvdXQ6cCl9aXNQZWZvcm1hbmNlTWFya0VuYWJsZWQoKXtyZXR1cm4hIXYmJihPYmplY3Qoby5mKShoKSYmKCFPYmplY3Qoby5mKShoKXx8dGhpcy5ldmVudE5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKE9iamVjdChvLmMpKGgpLnRvTG93ZXJDYXNlKCkpPi0xKSl9YWRkQ2hlY2ttYXJrKGUpe3RoaXMucGVyZm9ybWFuY2VNYXJrKGUpO2NvbnN0IHQ9dGhpcy50aW1lRnJvbVN0YXJ0KCk7cmV0dXJuIHRoaXMuYWRkVG9XYXRlcmZhbGwoZSx0KSx0fWFkZENoZWNrcG9pbnQoZSl7dGhpcy5hZGRUb1dhdGVyZmFsbChlLDEpfWFkZFRvV2F0ZXJmYWxsKGUsdCl7dGhpcy53YXRlcmZhbGxUaW1pbmdzfHwodGhpcy53YXRlcmZhbGxUaW1pbmdzPXt9KTt0cnl7Y29uc3Qgbj1PYmplY3QoaS5hKSh0aGlzLndhdGVyZmFsbFRpbWluZ3MsZSk7biYmKHRoaXMud2F0ZXJmYWxsVGltaW5nc1tuXT10KX1jYXRjaChlKXt9fWVuZFdpdGhFcnJvcihlLHQsbixyKXt0aGlzLmVuZChuLGUsdCxyKX1lbmRBZnRlckFuaW1hdGlvbkZyYW1lKCl7T2JqZWN0KGwuaSkoKCk9Pnt0aGlzLmVuZCgpfSl9ZW5kKGUsdCxuLHIpe3RoaXMuaGFzRW5kZWR8fCh0aGlzLnBlcmZvcm1hbmNlTWFyaygiZSIpLHRoaXMuYWRkRGF0YShjLmEuZTJlVGltZUVsYXBzZWQsIm51bWJlciI9PXR5cGVvZiBlP01hdGguZmxvb3IoZSk6dGhpcy50aW1lRnJvbVN0YXJ0KCkrdGhpcy50aW1lQmVmb3JlUGF1c2UpLHRoaXMuc3RhcnRTY29yZT4tMSYmdGhpcy5hZGREYXRhKCJMYXlvdXRTY29yZSIsYi10aGlzLnN0YXJ0U2NvcmUpLHRoaXMuaGFzRW5kZWQ9ITAscy5qLmltcG9ydEFuZEV4ZWN1dGUodGhpcyx0LHIsbiksbiYmdS5oLndhcm4oYERhdGFwb2ludCAke3RoaXMuZXZlbnROYW1lfSBlbmRlZCB3aXRoIGFuIGVycm9yIG9mICR7bi5tZXNzYWdlfWApKX1tYXJrVXNlclBlcmNlaXZlZFRpbWUoZSl7ZT9PYmplY3QobC5pKSh0aGlzLmFkZFVzZXJQZXJjZWl2ZWRUaW1lLmJpbmQodGhpcykpOnRoaXMuYWRkVXNlclBlcmNlaXZlZFRpbWUoKX1pbnZhbGlkYXRlKCl7dGhpcy5oYXNFbmRlZD0hMH1wYXVzZSgpe3RoaXMudGltZUJlZm9yZVBhdXNlKz10aGlzLnRpbWVGcm9tU3RhcnQoKSx0aGlzLnN0YXJ0VGltZT12b2lkIDB9cmVzdW1lKCl7dGhpcy5zdGFydFRpbWV8fCh0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpKX1lbmRBY3Rpb24oZSx0KXt0aGlzLmFkZERhdGEoYy5hLnJlcXVlc3RJZHMsdGhpcy5hbGxSZXF1ZXN0SWRzLmpvaW4oIjsiKSksdGhpcy5hZGREYXRhKGMuYS5jb3JyZWxhdGlvblZlY3RvcnMsdGhpcy5yZXNwb25zZUNvcnJlbGF0aW9uVmVjdG9ycy5qb2luKCI7IikpLHRoaXMuYWRkRGF0YShjLmEuY2FjaGUsdGhpcy5tYWRlTmV0d29ya1JlcXVlc3Q/IkNhY2hlIjoiTm9DYWNoZSIpLHRoaXMuZW5kKHZvaWQgMCxlLHQpfWFkZFVzZXJQZXJjZWl2ZWRUaW1lKCl7dGhpcy5hZGREYXRhKCJVc2VyUGVyY2VpdmVkVGltZSIsdGhpcy50aW1lRnJvbVN0YXJ0KCkpfXBlcmZvcm1hbmNlTWFyayhlKXt0aGlzLmlzUGVmb3JtYW5jZU1hcmtFbmFibGVkKCkmJndpbmRvdy5wZXJmb3JtYW5jZS5tYXJrKGQrdGhpcy5ldmVudE5hbWUrIl8iK2UpfWVuZFdpdGhUaW1lb3V0KCl7IXRoaXMuaGFzRW5kZWQmJnRoaXMuc3RhcnRUaW1lJiZPYmplY3QoYS5hKSh0aGlzLnN0YXJ0VGltZSkmJih0aGlzLm9wdGlvbnM9dGhpcy5vcHRpb25zfHx7fSx0aGlzLm9wdGlvbnMubG9nVmVyYm9zZT0hMCx0aGlzLmVuZFdpdGhFcnJvcigiVGltZW91dCIpKX10aW1lRnJvbVN0YXJ0KCl7cmV0dXJuIG51bGwhPXRoaXMuc3RhcnRUaW1lP0RhdGUubm93KCktdGhpcy5zdGFydFRpbWU6MH19fSwyNDY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LG89bigyMjUpO3ZhciBpPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoT2JqZWN0KG8uYSkoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX0sYT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO3ZhciBzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1pKHQsZSk7cmV0dXJuIShuPDApJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOmEuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsITApfTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49aSh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19O3ZhciBjPWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX19kYXRhX18sZSk+LTF9O3ZhciBsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPWkobixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc307ZnVuY3Rpb24gZihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mLnByb3RvdHlwZS5jbGVhcj1yLGYucHJvdG90eXBlLmRlbGV0ZT1zLGYucHJvdG90eXBlLmdldD11LGYucHJvdG90eXBlLmhhcz1jLGYucHJvdG90eXBlLnNldD1sO3QuYT1mfSwyNDc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJnIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBofSkpO3ZhciByPW4oMTkpLG89big5MCk7ZnVuY3Rpb24gaShlKXtPYmplY3Qoci5iKShlJiYiRG9jdW1lbnQiPT09ZS5raW5kLDQ1KTt2YXIgdD1lLmRlZmluaXRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIkZyYWdtZW50RGVmaW5pdGlvbiIhPT1lLmtpbmR9KSkubWFwKChmdW5jdGlvbihlKXtpZigiT3BlcmF0aW9uRGVmaW5pdGlvbiIhPT1lLmtpbmQpdGhyb3cgbmV3IHIuYSg0Nik7cmV0dXJuIGV9KSk7cmV0dXJuIE9iamVjdChyLmIpKHQubGVuZ3RoPD0xLDQ3KSxlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGkoZSksZS5kZWZpbml0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZH0pKVswXX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmRlZmluaXRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIk9wZXJhdGlvbkRlZmluaXRpb24iPT09ZS5raW5kJiZlLm5hbWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnZhbHVlfSkpWzBdfHxudWxsfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUuZGVmaW5pdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4iRnJhZ21lbnREZWZpbml0aW9uIj09PWUua2luZH0pKX1mdW5jdGlvbiBjKGUpe3ZhciB0PWEoZSk7cmV0dXJuIE9iamVjdChyLmIpKHQmJiJxdWVyeSI9PT10Lm9wZXJhdGlvbiw0OCksdH1mdW5jdGlvbiBsKGUpe09iamVjdChyLmIpKCJEb2N1bWVudCI9PT1lLmtpbmQsNDkpLE9iamVjdChyLmIpKGUuZGVmaW5pdGlvbnMubGVuZ3RoPD0xLDUwKTt2YXIgdD1lLmRlZmluaXRpb25zWzBdO3JldHVybiBPYmplY3Qoci5iKSgiRnJhZ21lbnREZWZpbml0aW9uIj09PXQua2luZCw1MSksdH1mdW5jdGlvbiBmKGUpe3ZhciB0O2koZSk7Zm9yKHZhciBuPTAsbz1lLmRlZmluaXRpb25zO248by5sZW5ndGg7bisrKXt2YXIgYT1vW25dO2lmKCJPcGVyYXRpb25EZWZpbml0aW9uIj09PWEua2luZCl7dmFyIHM9YS5vcGVyYXRpb247aWYoInF1ZXJ5Ij09PXN8fCJtdXRhdGlvbiI9PT1zfHwic3Vic2NyaXB0aW9uIj09PXMpcmV0dXJuIGF9IkZyYWdtZW50RGVmaW5pdGlvbiIhPT1hLmtpbmR8fHR8fCh0PWEpfWlmKHQpcmV0dXJuIHQ7dGhyb3cgbmV3IHIuYSg1Mil9ZnVuY3Rpb24gaChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49ZSYmZS52YXJpYWJsZURlZmluaXRpb25zO3JldHVybiBuJiZuLmxlbmd0aCYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmRlZmF1bHRWYWx1ZSYmT2JqZWN0KG8uaikodCxlLnZhcmlhYmxlLm5hbWUsZS5kZWZhdWx0VmFsdWUpfSkpLHR9fSwyNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBnfSkpO3ZhciByPW4oMTYpLG89bigwKTtpZighby51c2VTdGF0ZSl0aHJvdyBuZXcgRXJyb3IoIm1vYngtcmVhY3QtbGl0ZSByZXF1aXJlcyBSZWFjdCB3aXRoIEhvb2tzIHN1cHBvcnQiKTtpZighci5zcHkpdGhyb3cgbmV3IEVycm9yKCJtb2J4LXJlYWN0LWxpdGUgcmVxdWlyZXMgbW9ieCBhdCBsZWFzdCB2ZXJzaW9uIDQgdG8gYmUgYXZhaWxhYmxlIik7ZnVuY3Rpb24gaShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksT2JqZWN0KG8udXNlTWVtbykoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyLmNvbXB1dGVkKShlKX0pLHQpLmdldCgpfXZhciBhPSExO2Z1bmN0aW9uIHMoKXtyZXR1cm4gYX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovdmFyIHU9ZnVuY3Rpb24oKXtyZXR1cm4odT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGMoZSx0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxpPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5jdXJyZW50P09iamVjdChyLmdldERlcGVuZGVuY3lUcmVlKShlLmN1cnJlbnQpOiI8dW5rbm93bj4ifXZhciBmPVtdO2Z1bmN0aW9uIGgoKXt2YXIgZT1jKE9iamVjdChvLnVzZVN0YXRlKSgwKSwyKVsxXTtyZXR1cm4gT2JqZWN0KG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe2UoKGZ1bmN0aW9uKGUpe3JldHVybiBlKzF9KSl9KSxbXSl9dmFyIGQ9e307ZnVuY3Rpb24gcChlLHQsbil7aWYodm9pZCAwPT09dCYmKHQ9Im9ic2VydmVkIiksdm9pZCAwPT09biYmKG49ZCkscygpKXJldHVybiBlKCk7dmFyIGksYSx1PShuLnVzZUZvcmNlVXBkYXRlfHxoKSgpLGM9T2JqZWN0KG8udXNlUmVmKShudWxsKTtpZihjLmN1cnJlbnR8fChjLmN1cnJlbnQ9bmV3IHIuUmVhY3Rpb24oIm9ic2VydmVyKCIrdCsiKSIsKGZ1bmN0aW9uKCl7dSgpfSkpKSxPYmplY3Qoby51c2VEZWJ1Z1ZhbHVlKShjLGwpLGZ1bmN0aW9uKGUpe09iamVjdChvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSxmKX0oKGZ1bmN0aW9uKCl7Yy5jdXJyZW50LmRpc3Bvc2UoKX0pKSxjLmN1cnJlbnQudHJhY2soKGZ1bmN0aW9uKCl7dHJ5e2k9ZSgpfWNhdGNoKGUpe2E9ZX19KSksYSl0aHJvdyBjLmN1cnJlbnQuZGlzcG9zZSgpLGE7cmV0dXJuIGl9ZnVuY3Rpb24gdihlLHQpe2lmKHMoKSlyZXR1cm4gZTt2YXIgbixyLGksYT11KHtmb3J3YXJkUmVmOiExfSx0KSxjPWUuZGlzcGxheU5hbWV8fGUubmFtZSxsPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuKX0pLGMpfTtyZXR1cm4gbC5kaXNwbGF5TmFtZT1jLG49YS5mb3J3YXJkUmVmP09iamVjdChvLm1lbW8pKE9iamVjdChvLmZvcndhcmRSZWYpKGwpKTpPYmplY3Qoby5tZW1vKShsKSxyPWUsaT1uLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IuaGFzT3duUHJvcGVydHkoZSkmJiFiW2VdJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSksbi5kaXNwbGF5TmFtZT1jLG59dmFyIGI9eyQkdHlwZW9mOiEwLHJlbmRlcjohMCxjb21wYXJlOiEwLHR5cGU6ITB9O2Z1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUucmVuZGVyLHI9dHx8bjtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Ygcj9udWxsOnAocil9ZnVuY3Rpb24gbShlLHQsbixyLG8pe3ZhciBpPSJjaGlsZHJlbiI9PT10PyJyZW5kZXIiOiJjaGlsZHJlbiIsYT0iZnVuY3Rpb24iPT10eXBlb2YgZVt0XSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBlW2ldO3JldHVybiBhJiZzP25ldyBFcnJvcigiTW9iWCBPYnNlcnZlcjogRG8gbm90IHVzZSBjaGlsZHJlbiBhbmQgcmVuZGVyIGluIHRoZSBzYW1lIHRpbWUgaW5gIituKTphfHxzP251bGw6bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYCIrbysiYCBvZiB0eXBlIGAiK3R5cGVvZiBlW3RdKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGBmdW5jdGlvbmAuIil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gT2JqZWN0KG8udXNlU3RhdGUpKChmdW5jdGlvbigpe3ZhciB0PU9iamVjdChyLm9ic2VydmFibGUpKGUoKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiF0fHx0PT09T2JqZWN0LnByb3RvdHlwZX0odCkmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuLG89dFtlXTsiZnVuY3Rpb24iPT10eXBlb2YgbyYmKHRbZV09KG49by5iaW5kKHQpLGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiBPYmplY3Qoci50cmFuc2FjdGlvbikoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobnVsbCxlKX0pKX0pKX0pKSx0fSkpWzBdfXkucHJvcFR5cGVzPXtjaGlsZHJlbjptLHJlbmRlcjptfSx5LmRpc3BsYXlOYW1lPSJPYnNlcnZlciJ9LDI1ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzUpLG89bigzKSxpPW4oMTYpLGE9bigyNjEpLHM9big1KTt2YXIgdT1uKDExOSksYz1uKDE3NCk7dmFyIGw9bigxNTQpLGY9bigxMTgpLGg9bigzMTgpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKTtsZXQgZD0hMTtmdW5jdGlvbiBwKCl7cmV0dXJuIGR9Y29uc3Qgdj1PYmplY3Qoby5hY3Rpb24pKCJpbml0aWFsaXplRmVhdHVyZUZsYWdzIixlPT57Y29uc3QgdD0oZXx8W10pLnJlZHVjZSgoZSx0KT0+KGVbdC50b0xvd2VyQ2FzZSgpXT0hMCxlKSx7fSksbj1mdW5jdGlvbihlPWMuYSl7cmV0dXJuIGUoInJpbmctZG9nZm9vZCIpPyJEb2dmb29kIjplKCJyaW5nLW1pY3Jvc29mdCIpPyJNaWNyb3NvZnQiOmUoInJpbmctZmlyc3RyZWxlYXNlIik/IkZpcnN0UmVsZWFzZSI6ZSgicmluZy13dyIpPyJXVyI6IlVua25vd24ifShlPT50W2VdKTtyZXR1cm4gYih0LGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhoLmEpLnJlZHVjZSgodCxuKT0+KHRbbi50b0xvd2VyQ2FzZSgpXT1oLmFbbl0ucmluZy5pbmRleE9mKGUpPi0xLHQpLHt9KX0obikpLE9iamVjdCh1LmIpKG4pLE9iamVjdChmLmIpKGZ1bmN0aW9uKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBvZiBPYmplY3Qua2V5cyhlKSl0W25dPWVbbl07cmV0dXJuIHR9KHQpKSwiRG9nZm9vZCI9PW4mJmIodCxPYmplY3QobC5iKSgpKSx0WyJmd2stZGV2dG9vbHMiXSYmYih0LGZ1bmN0aW9uKGUpe2Zvcihjb25zdFt0LG5db2YgT2JqZWN0LmVudHJpZXMoT2JqZWN0KHMuZCkoKSkpaWYodC50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiBPYmplY3QoYS5hKShuKTtyZXR1cm57fX0oImZlYXR1cmVzIikpLHR9KTtmdW5jdGlvbiBiKGUsdCl7Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKHQpKWVbbi50b0xvd2VyQ2FzZSgpXT10W25dfU9iamVjdChvLm11dGF0b3IpKHYsZT0+e09iamVjdChyLmEpKCkuZmVhdHVyZUZsYWdzPW5ldyBpLk9ic2VydmFibGVNYXAoZSksZD0hMH0pO3QuYj12fSwyNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4hIXQmJmUuc29tZShlPT50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpPi0xKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDI2MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDAxKTtuLm8ociwiQXBvbGxvQ2xpZW50IikmJm4uZCh0LCJBcG9sbG9DbGllbnQiLChmdW5jdGlvbigpe3JldHVybiByLkFwb2xsb0NsaWVudH0pKSxuLm8ociwiQXBvbGxvTGluayIpJiZuLmQodCwiQXBvbGxvTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuQXBvbGxvTGlua30pKSxuLm8ociwiQXBvbGxvUHJvdmlkZXIiKSYmbi5kKHQsIkFwb2xsb1Byb3ZpZGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5BcG9sbG9Qcm92aWRlcn0pKSxuLm8ociwiSW5NZW1vcnlDYWNoZSIpJiZuLmQodCwiSW5NZW1vcnlDYWNoZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuSW5NZW1vcnlDYWNoZX0pKSxuLm8ociwiT2JzZXJ2YWJsZSIpJiZuLmQodCwiT2JzZXJ2YWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuT2JzZXJ2YWJsZX0pKSxuLm8ociwiZXhlY3V0ZSIpJiZuLmQodCwiZXhlY3V0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZXhlY3V0ZX0pKSxuLm8ociwiZ3FsIikmJm4uZCh0LCJncWwiLChmdW5jdGlvbigpe3JldHVybiByLmdxbH0pKSxuLm8ociwiaXNBcG9sbG9FcnJvciIpJiZuLmQodCwiaXNBcG9sbG9FcnJvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuaXNBcG9sbG9FcnJvcn0pKSxuLm8ociwibWFrZVZhciIpJiZuLmQodCwibWFrZVZhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIubWFrZVZhcn0pKSxuLm8ociwidXNlQXBvbGxvQ2xpZW50IikmJm4uZCh0LCJ1c2VBcG9sbG9DbGllbnQiLChmdW5jdGlvbigpe3JldHVybiByLnVzZUFwb2xsb0NsaWVudH0pKSxuLm8ociwidXNlTGF6eVF1ZXJ5IikmJm4uZCh0LCJ1c2VMYXp5UXVlcnkiLChmdW5jdGlvbigpe3JldHVybiByLnVzZUxhenlRdWVyeX0pKSxuLm8ociwidXNlTXV0YXRpb24iKSYmbi5kKHQsInVzZU11dGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gci51c2VNdXRhdGlvbn0pKSxuLm8ociwidXNlUXVlcnkiKSYmbi5kKHQsInVzZVF1ZXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gci51c2VRdWVyeX0pKTt2YXIgbz1uKDYxMyk7bi5vKG8sIkFwb2xsb0NsaWVudCIpJiZuLmQodCwiQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gby5BcG9sbG9DbGllbnR9KSksbi5vKG8sIkFwb2xsb0xpbmsiKSYmbi5kKHQsIkFwb2xsb0xpbmsiLChmdW5jdGlvbigpe3JldHVybiBvLkFwb2xsb0xpbmt9KSksbi5vKG8sIkFwb2xsb1Byb3ZpZGVyIikmJm4uZCh0LCJBcG9sbG9Qcm92aWRlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uQXBvbGxvUHJvdmlkZXJ9KSksbi5vKG8sIkluTWVtb3J5Q2FjaGUiKSYmbi5kKHQsIkluTWVtb3J5Q2FjaGUiLChmdW5jdGlvbigpe3JldHVybiBvLkluTWVtb3J5Q2FjaGV9KSksbi5vKG8sIk9ic2VydmFibGUiKSYmbi5kKHQsIk9ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiBvLk9ic2VydmFibGV9KSksbi5vKG8sImV4ZWN1dGUiKSYmbi5kKHQsImV4ZWN1dGUiLChmdW5jdGlvbigpe3JldHVybiBvLmV4ZWN1dGV9KSksbi5vKG8sImdxbCIpJiZuLmQodCwiZ3FsIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5ncWx9KSksbi5vKG8sImlzQXBvbGxvRXJyb3IiKSYmbi5kKHQsImlzQXBvbGxvRXJyb3IiLChmdW5jdGlvbigpe3JldHVybiBvLmlzQXBvbGxvRXJyb3J9KSksbi5vKG8sIm1ha2VWYXIiKSYmbi5kKHQsIm1ha2VWYXIiLChmdW5jdGlvbigpe3JldHVybiBvLm1ha2VWYXJ9KSksbi5vKG8sInVzZUFwb2xsb0NsaWVudCIpJiZuLmQodCwidXNlQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gby51c2VBcG9sbG9DbGllbnR9KSksbi5vKG8sInVzZUxhenlRdWVyeSIpJiZuLmQodCwidXNlTGF6eVF1ZXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gby51c2VMYXp5UXVlcnl9KSksbi5vKG8sInVzZU11dGF0aW9uIikmJm4uZCh0LCJ1c2VNdXRhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8udXNlTXV0YXRpb259KSksbi5vKG8sInVzZVF1ZXJ5IikmJm4uZCh0LCJ1c2VRdWVyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8udXNlUXVlcnl9KSl9LDI2MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7bGV0IHQ9e307cmV0dXJuIGUuc3BsaXQoIiwiKS5mb3JFYWNoKGU9PntsZXQgbj0hMDswPT09ZS5pbmRleE9mKCItIikmJihuPSExLGU9ZS5zbGljZSgxLGUubGVuZ3RoKSksdFtlLnRvTG93ZXJDYXNlKCldPW59KSx0fW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sMjY0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO3ZhciByPW4oNDEpLG89bigzMik7ZnVuY3Rpb24gaSgpe2NvbnN0IGU9T2JqZWN0KHIuYSkoKTtyZXR1cm4gZSYmZS5TZXNzaW9uU2V0dGluZ3M/ZS5TZXNzaW9uU2V0dGluZ3MuTG9nb25FbWFpbEFkZHJlc3M6KG8uZCgiU2Vzc2lvblNldHRpbmdzIG5vdCBhdmFpbGFibGUiKSwibm8tc210cC1hZGRyZXNzIil9fSwyNjY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSk7bGV0IHI9e3JlcXVlc3RJZHM6IlJlcXVlc3RJZHMiLGNvcnJlbGF0aW9uVmVjdG9yczoiY1YiLGNhY2hlOiJDYWNoZSIsZTJlVGltZUVsYXBzZWQ6IkUyRVRpbWVFbGFwc2VkIn19LDI2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKTt2YXIgcj1uKDEzNCksbz1uZXcobigyMzEpLmEpLGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShlKXt2YXIgdD1pLmdldChlKTtyZXR1cm4gdHx8aS5zZXQoZSx0PXt2YXJzOm5ldyBTZXQsZGVwOk9iamVjdChyLmIpKCl9KSx0fWZ1bmN0aW9uIHMoZSl7YShlKS52YXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZvcmdldENhY2hlKGUpfSkpfWZ1bmN0aW9uIHUoZSl7YShlKS52YXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmF0dGFjaENhY2hlKGUpfSkpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9bmV3IFNldCxuPW5ldyBTZXQscj1mdW5jdGlvbihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjApe2lmKGUhPT1zKXtlPXMsdC5mb3JFYWNoKChmdW5jdGlvbihlKXthKGUpLmRlcC5kaXJ0eShyKSxsKGUpfSkpO3ZhciB1PUFycmF5LmZyb20obik7bi5jbGVhcigpLHUuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSl9fWVsc2V7dmFyIGM9by5nZXRWYWx1ZSgpO2MmJihpKGMpLGEoYykuZGVwKHIpKX1yZXR1cm4gZX07ci5vbk5leHRDaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uYWRkKGUpLGZ1bmN0aW9uKCl7bi5kZWxldGUoZSl9fTt2YXIgaT1yLmF0dGFjaENhY2hlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZChlKSxhKGUpLnZhcnMuYWRkKHIpLHJ9O3JldHVybiByLmZvcmdldENhY2hlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmRlbGV0ZShlKX0scn1mdW5jdGlvbiBsKGUpe2UuYnJvYWRjYXN0V2F0Y2hlcyYmZS5icm9hZGNhc3RXYXRjaGVzKCl9fSwyNjg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMzEpO3QuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiByLmdldEdsb2JhbENvbnRleHQoKS5yb290U3RvcmV9fSwyNjk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNiksbz1uKDE0MiksaT1uKDE0NCksYT1uKDEzMSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49by5nZXRQcml2YXRlQWN0aW9uSWQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJNdXRhdG9ycyBjYW4gb25seSBzdWJzY3JpYmUgdG8gYWN0aW9uIGNyZWF0b3JzLiIpO3ZhciBzPW8uZ2V0UHJpdmF0ZUFjdGlvblR5cGUoZSksdT1yLmFjdGlvbihzLChmdW5jdGlvbihlKXt0cnl7YS5nZXRHbG9iYWxDb250ZXh0KCkuY3VycmVudE11dGF0b3I9cyx0KGUpfWZpbmFsbHl7YS5nZXRHbG9iYWxDb250ZXh0KCkuY3VycmVudE11dGF0b3I9bnVsbH19KSk7cmV0dXJuIGkuc3Vic2NyaWJlKG4sdSksdH19LDI3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4oNCk7dmFyIGk9KCk9Pntjb25zdCBlPXIudXNlUmVmKCEwKTtyZXR1cm4gci51c2VFZmZlY3QoKCk9PihlLmN1cnJlbnQ9ITAsKCk9PntlLmN1cnJlbnQ9ITF9KSksZX07dmFyIGE9KGUsdCk9Pntjb25zdCBuPWkoKSxbbyxhXT1yLnVzZVN0YXRlKCgpPT5lLmlzTG9hZGVkKCk/ZS5kYW5nZXJvdXNseUltcG9ydFN5bmMoKTp2b2lkIDApLHM9ci51c2VNZW1vKCgpPT5lLmlzTG9hZGVkKCksW10pO3JldHVybiByLnVzZUVmZmVjdCgoKT0+e2lmKHMpcmV0dXJuO2NvbnN0IHI9ZS5pbXBvcnQoKTtyLnRoZW4oZT0+e24uY3VycmVudCYmYSgoKT0+ZSl9KSx0JiZyLmNhdGNoKHQpfSxbXSksb307Y29uc3Qgcz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHU9cz9TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpOjYwMTEyLGM9cz9TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIik6NjAxMTUsbD1lPT52b2lkIDAhPT1lJiYhIShlIGluc3RhbmNlb2YgRnVuY3Rpb24mJmUucHJvdG90eXBlJiZlLnByb3RvdHlwZS5yZW5kZXJ8fGUuJCR0eXBlb2YmJmUuJCR0eXBlb2Y9PXV8fGUuJCR0eXBlb2YmJmUuJCR0eXBlb2Y9PWMmJmwoZS50eXBlKSk7dmFyIGY9bDt2YXIgaD1mdW5jdGlvbihlLHQsbixpKXtsZXQgcz1uZXcgby5jKGUsdCk7cmV0dXJuIHIuZm9yd2FyZFJlZigoZnVuY3Rpb24oZSx0KXtjb25zdFtvLHVdPXIudXNlU3RhdGUodm9pZCAwKSxjPSJvYmplY3QiPT10eXBlb2YgaT9pOnZvaWQgMCxsPWEocyxjP3U6aSk7aWYoYyYmbylyZXR1cm4gci5jcmVhdGVFbGVtZW50KGMse2Vycm9yOm99KTtjb25zdCBoPWx8fG47aWYoIWgpcmV0dXJuIG51bGw7aWYoZihoKSl7Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3JlZjp0fSk7cmV0dXJuIHIuY3JlYXRlRWxlbWVudChoLE9iamVjdC5hc3NpZ24oe30sbikpfXJldHVybiByLmNyZWF0ZUVsZW1lbnQoaCxPYmplY3QuYXNzaWduKHt9LGUpKX0pKX0sZD1uKDMpO2Z1bmN0aW9uIHAoZSx0LG4pe3JldHVybnthY3Rpb25DcmVhdG9yOmUsaGFuZGxlcjpuLGNsb25lQWN0aW9uTmFtZTp0fX1mdW5jdGlvbiB2KGUsdCxuLHIpe2xldCBpO09iamVjdChkLm9yY2hlc3RyYXRvcikoZSxhc3luYyBhPT57aXx8KGk9YXN5bmMgZnVuY3Rpb24oKXtjb25zdCByPW5ldyBvLmModCxuKSxpPWF3YWl0IHIuaW1wb3J0KCk7aWYoZSE9PWkuYWN0aW9uQ3JlYXRvcil0aHJvdyBuZXcgRXJyb3IoIkxhenkgb3JjaGVzdHJhdG9yIGNhbm5vdCBzdWJzY3JpYmUgdG8gdGhpcyBhY3Rpb24uIik7Y29uc3QgYT1PYmplY3QoZC5hY3Rpb24pKGkuY2xvbmVBY3Rpb25OYW1lLGU9PntsZXQgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBkZWxldGUgdC50eXBlLGRlbGV0ZSB0LmxhenlPcmNoZXN0cmF0b3IsdH0pO3JldHVybiBPYmplY3QoZC5vcmNoZXN0cmF0b3IpKGEsaS5oYW5kbGVyKSxhfSgpKSxhLmxhenlPcmNoZXN0cmF0b3I9ITA7bGV0IHM9KG51bGw9PXI/dm9pZCAwOnIuY2FwdHVyZUJ1bmRsZVRpbWUpP0RhdGUubm93KCk6bnVsbDtjb25zdCB1PWF3YWl0IGk7T2JqZWN0KG8uZykocyksdShhKSxPYmplY3Qoby5nKShudWxsKX0pfWNvbnN0IGI9e2xvYWRlZEltcG9ydHM6bmV3KG4oMTYpLk9ic2VydmFibGVNYXApfTt2YXIgeT1PYmplY3QoZC5jcmVhdGVTdG9yZSkoImJ1bmRsaW5nU3RvcmUiLGIpKCksbT1PYmplY3QoZC5tdXRhdG9yQWN0aW9uKSgiTUFSS19JTVBPUlRfQVNfTE9BREVEIiwoZnVuY3Rpb24oZSl7eS5sb2FkZWRJbXBvcnRzLnNldChlLCEwKX0pKTtmdW5jdGlvbiBnKGUpe3JldHVybiB5LmxvYWRlZEltcG9ydHMuaGFzKGUpfXZhciBPPW4oMzIpO2Z1bmN0aW9uIHcoZSl7T2JqZWN0KG8uZikoe21hcmtJbXBvcnRBc0xvYWRlZDptLGlzSW1wb3J0TG9hZGVkOmcsbG9nVXNhZ2U6ZSxsb2dFcnJvcjpPLmR9KX1uLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvLmF9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBvLmN9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBvLmR9KSl9LDI3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0NSksbz1uKDI3MiksaT1uKDE5NSksYT1uKDE5Nikscz0vXlthLXpBLVowLTldKFthLXpBLVowLTldfF8pezIsOTh9W2EtekEtWjAtOV0kLyx1PS9cLi9nLGM9L15bYS16QS1aMC05XSgoW2EtekEtWjAtOXxffFwuXSl7MCw5OH1bYS16QS1aMC05XSk/JC8sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuaW5pdGlhbGl6ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PXt9KSx0aGlzLl9pc0luaXRpYWxpemVkKXRocm93IkFscmVhZHkgSW5pdGlhbGl6ZWQiO3RoaXMuX2RlZmF1bHRUZW5hbnRUb2tlbj1lLHRoaXMuX292ZXJyaWRlVmFsdWVzRnJvbUNvbmZpZyh0KSxvLmRlZmF1bHQuaW5pdGlhbGl6ZSh0aGlzLl9jb25maWcpLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9LGUuZmx1c2g9ZnVuY3Rpb24oZSl7dGhpcy5faXNJbml0aWFsaXplZCYmIXRoaXMuX2lzRGVzdHJveWVkJiZvLmRlZmF1bHQuZmx1c2goZSl9LGUuZmx1c2hBbmRUZWFyZG93bj1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQmJiF0aGlzLl9pc0Rlc3Ryb3llZCYmKHRoaXMuX2lzRGVzdHJveWVkPSEwLG8uZGVmYXVsdC5mbHVzaEFuZFRlYXJkb3duKCkpfSxlLnNldENvbnRleHQ9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSJhbGxUa25zIiksbnVsbCE9PSh0PXRoaXMuX3Nhbml0aXplUHJvcGVydHkoZSx0KSkmJih0aGlzLl9jb250ZXh0UHJvcGVydGllc1tuXXx8KHRoaXMuX2NvbnRleHRQcm9wZXJ0aWVzW25dPXt9KSx0aGlzLl9jb250ZXh0UHJvcGVydGllc1tuXVtlXT10KX0sZS5sb2dFdmVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMuX2lzSW5pdGlhbGl6ZWQpe2lmKCFlLm5hbWV8fCFlLnByb3BlcnRpZXMpcmV0dXJuO2UubmFtZT1lLm5hbWUudG9Mb3dlckNhc2UoKSxlLm5hbWUucmVwbGFjZSh1LCJfIik7dmFyIG49IiI7aWYoZS50eXBlPyhlLnR5cGUudG9Mb3dlckNhc2UoKSxuPSJjdXN0b20uIik6ZS50eXBlPSJjdXN0b20iLCFzLnRlc3QoZS5uYW1lKXx8IXMudGVzdChlLnR5cGUpKXJldHVybjtpZihlLnR5cGU9bitlLnR5cGUsaXNOYU4oZS50aW1lc3RhbXApJiYoZS50aW1lc3RhbXA9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLGUudGVuYW50VG9rZW58fChlLnRlbmFudFRva2VuPXRoaXMuX2RlZmF1bHRUZW5hbnRUb2tlbiksZS5pZD1pLm5ld0d1aWQoKSxPYmplY3Qua2V5cyhlLnByb3BlcnRpZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2UucHJvcGVydGllc1tuXT10Ll9zYW5pdGl6ZVByb3BlcnR5KG4sZS5wcm9wZXJ0aWVzW25dKSxudWxsPT09ZS5wcm9wZXJ0aWVzW25dJiZkZWxldGUgZS5wcm9wZXJ0aWVzW25dfSkpLHRoaXMuX2FkZENvbnRleHRJZkFic2VudChlLGUudGVuYW50VG9rZW4pLHRoaXMuX2FkZENvbnRleHRJZkFic2VudChlLCJhbGxUa25zIiksMD09PU9iamVjdC5rZXlzKGUucHJvcGVydGllcykubGVuZ3RoKXJldHVybjt0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZSwiRXZlbnRJbmZvLkluaXRJZCIsdGhpcy5fZ2V0SW5pdElkKGUudGVuYW50VG9rZW4pKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZSwiRXZlbnRJbmZvLlNlcXVlbmNlIix0aGlzLl9nZXRTZXF1ZW5jZUlkKGUudGVuYW50VG9rZW4pKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZSwiRXZlbnRJbmZvLlNka1ZlcnNpb24iLGEuRnVsbFZlcnNpb25TdHJpbmcpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0eShlLCJFdmVudEluZm8uTmFtZSIsZS5uYW1lKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZSwiRXZlbnRJbmZvLlRpbWUiLG5ldyBEYXRlKGUudGltZXN0YW1wKS50b0lTT1N0cmluZygpKSxvLmRlZmF1bHQuc2VuZEV2ZW50KGUpfX0sZS5fb3ZlcnJpZGVWYWx1ZXNGcm9tQ29uZmlnPWZ1bmN0aW9uKGUpe2UuY29sbGVjdG9yVXJsJiYodGhpcy5fY29uZmlnLmNvbGxlY3RvclVybD1lLmNvbGxlY3RvclVybCksZS5zZW5kaW5nVGltZXI+MWUzJiYodGhpcy5fY29uZmlnLnNlbmRpbmdUaW1lcj1lLnNlbmRpbmdUaW1lcil9LGUuX2dldEluaXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5faW5pdElkTWFwW2VdJiYodGhpcy5faW5pdElkTWFwW2VdPWkubmV3R3VpZCgpKSx0aGlzLl9pbml0SWRNYXBbZV19LGUuX2dldFNlcXVlbmNlSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX3NlcXVlbmNlSWRNYXBbZV0mJih0aGlzLl9zZXF1ZW5jZUlkTWFwW2VdPTApLCgrK3RoaXMuX3NlcXVlbmNlSWRNYXBbZV0pLnRvU3RyaW5nKCl9LGUuX3NldERlZmF1bHRQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7ZS5wcm9wZXJ0aWVzW3RdPXt2YWx1ZTpuLHBpaTpyLkFXVFBpaUtpbmQuTm90U2V0fX0sZS5fYWRkQ29udGV4dElmQWJzZW50PWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fY29udGV4dFByb3BlcnRpZXNbdF0pe3ZhciBuPXRoaXMuX2NvbnRleHRQcm9wZXJ0aWVzW3RdO09iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHJvcGVydGllc1t0XXx8KGUucHJvcGVydGllc1t0XT1uW3RdKX0pKX19LGUuX3Nhbml0aXplUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdCYmImJvb2xlYW4iIT10eXBlb2YgdHx8KHQ9e3ZhbHVlOnR9KSxjLnRlc3QoZSkmJm51bGwhPXQmJm51bGwhPT10LnZhbHVlJiZ2b2lkIDAhPT10LnZhbHVlJiYiIiE9PXQudmFsdWU/KHZvaWQgMD09PXQucGlpJiYodC5waWk9ci5BV1RQaWlLaW5kLk5vdFNldCksdC52YWx1ZT10LnZhbHVlLnRvU3RyaW5nKCksaS5pc1BpaSh0LnBpaSk/dDpudWxsKTpudWxsfSxlLl9pc0luaXRpYWxpemVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2NvbnRleHRQcm9wZXJ0aWVzPXt9LGUuX3NlcXVlbmNlSWRNYXA9e30sZS5faW5pdElkTWFwPXt9LGUuX2NvbmZpZz17Y29sbGVjdG9yVXJsOiJodHRwczovL2Jyb3dzZXIucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8iLHNlbmRpbmdUaW1lcjoxZTN9LGV9KCk7dC5kZWZhdWx0PWx9LDI3MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDI3Myksbz1uKDE5NCksaT1uKDI3OCksYT1uKDI3OSkscz1uKDE5NiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0aGlzLl9pbmJvdW5kUXVldWVzLnB1c2goW10pLHRoaXMuX3JlY29yZEJhdGNoZXI9bmV3IHIuZGVmYXVsdCgyOTM2MDEyLHRoaXMuX291dGJvdW5kUXVldWUpLHRoaXMuX25ld0V2ZW50c0FsbG93ZWQ9ITAsInVuZGVmaW5lZCI9PXR5cGVvZiBVaW50OEFycmF5JiYodGhpcy5fdXJsU3RyaW5nKz0iJmNvbnRlbnQtZW5jb2Rpbmc9YmFzZTY0IiksdGhpcy5fc2VuZGluZ1RpbWVyPWUuc2VuZGluZ1RpbWVyLHRoaXMuX3VybFN0cmluZz1lLmNvbGxlY3RvclVybCt0aGlzLl91cmxTdHJpbmcrIiZ4LWFwaWtleT0ifSxlLnNlbmRFdmVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX25ld0V2ZW50c0FsbG93ZWQmJih0aGlzLl9pbmJvdW5kUXVldWVzW3RoaXMuX2luYm91bmRRdWV1ZXMubGVuZ3RoLTFdLnB1c2goZSksIXRoaXMuX3J1bm5pbmcmJnRoaXMuX3RpbWVvdXQ8MCYmIXRoaXMuX2lzQ3VycmVudGx5Rmx1c2hpbmcmJih0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2JhdGNoQW5kU2VuZEV2ZW50cyghMSl9KSx0aGlzLl9zZW5kaW5nVGltZXIpKSl9LGUuZmx1c2hBbmRUZWFyZG93bj1mdW5jdGlvbigpe3RoaXMuX25ld0V2ZW50c0FsbG93ZWQ9ITEsdGhpcy5fYmF0Y2hBbmRTZW5kRXZlbnRzKCEwKX0sZS5mbHVzaD1mdW5jdGlvbihlKXt0aGlzLl9pbmJvdW5kUXVldWVzLnB1c2goW10pLHRoaXMuX2lzQ3VycmVudGx5Rmx1c2hpbmc/dGhpcy5fZmx1c2hRdWV1ZS5wdXNoKGUpOih0aGlzLl9pc0N1cnJlbnRseUZsdXNoaW5nPSEwLHRoaXMuX2ZsdXNoKGUpKX0sZS5fYmF0Y2hBbmRTZW5kRXZlbnRzPWZ1bmN0aW9uKGUpe2Zvcih0aGlzLl9ydW5uaW5nPSEwO3RoaXMuX2luYm91bmRRdWV1ZXNbMF0ubGVuZ3RoPjAmJnRoaXMuX291dGJvdW5kUXVldWUubGVuZ3RoPDE7KXRoaXMuX3JlY29yZEJhdGNoZXIuYWRkRXZlbnRUb0JhdGNoKHRoaXMuX2luYm91bmRRdWV1ZXNbMF0ucG9wKCkpOzA9PT10aGlzLl9vdXRib3VuZFF1ZXVlLmxlbmd0aCYmdGhpcy5fcmVjb3JkQmF0Y2hlci5mbHVzaEJhdGNoKCksdGhpcy5fc2VuZFJlcXVlc3QodGhpcy5fb3V0Ym91bmRRdWV1ZS5wb3AoKSwwLGUpfSxlLl9yZXRyeVJlcXVlc3RJZk5lZWRlZD1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPXRoaXMscz0hMDtlJiZ2b2lkIDAhPT1lLnN0YXR1cyYmKHRoaXMuX2tpbGxTd2l0Y2guc2V0S2lsbFN3aXRjaFRlbmFudHMoZS5nZXRSZXNwb25zZUhlYWRlcigia2lsbC10b2tlbnMiKSxlLmdldFJlc3BvbnNlSGVhZGVyKCJraWxsLWR1cmF0aW9uLXNlY29uZHMiKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZGVsZXRlIHRbZV0sbi0tfSkpLCghaS5kZWZhdWx0LnNob3VsZFJldHJ5Rm9yU3RhdHVzKGUuc3RhdHVzKXx8bjw9MCkmJihzPSExKSk7cyYmbzw0P3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuX3NlbmRSZXF1ZXN0KHQsbysxLCExKX0pLGkuZGVmYXVsdC5nZXRNaWxsaXNUb0JhY2tvZmZGb3JSZXRyeShvKSk6dGhpcy5faGFuZGxlUmVxdWVzdEZpbmlzaGVkKG51bGwpfSxlLl9zZW5kUmVxdWVzdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0cnl7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0LGE9MCxzPSIiO2lmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuX2tpbGxTd2l0Y2guaXNUZW5hbnRLaWxsZWQodCk/ZGVsZXRlIGVbdF06KHMubGVuZ3RoPjAmJihzKz0iLCIpLHMrPXQsYSsrKX0pKSxpLm9wZW4oIlBPU1QiLHRoaXMuX3VybFN0cmluZytzLCFuKSxufHwoaS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtyLl9yZXRyeVJlcXVlc3RJZk5lZWRlZChpLGUsYSxzLHQpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyLl9yZXRyeVJlcXVlc3RJZk5lZWRlZChpLGUsYSxzLHQpfSxpLm9ubG9hZD1mdW5jdGlvbigpe3IuX2hhbmRsZVJlcXVlc3RGaW5pc2hlZChpKX0pLGE+MCl7dmFyIHU9by5kZWZhdWx0LmdldFBheWxvYWRCbG9iKGUsYSk7InVuZGVmaW5lZCI9PXR5cGVvZiBVaW50OEFycmF5P2kuc2VuZChvLmRlZmF1bHQuYmFzZTY0RW5jb2RlKHUpKTppLnNlbmQobmV3IFVpbnQ4QXJyYXkodSkpfWVsc2UgbiYmdGhpcy5faGFuZGxlUmVxdWVzdEZpbmlzaGVkKG51bGwpfWNhdGNoKGUpe3RoaXMuX2hhbmRsZVJlcXVlc3RGaW5pc2hlZChudWxsKX19LGUuX2hhbmRsZVJlcXVlc3RGaW5pc2hlZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuX2tpbGxTd2l0Y2guc2V0S2lsbFN3aXRjaFRlbmFudHMoZS5nZXRSZXNwb25zZUhlYWRlcigia2lsbC10b2tlbnMiKSxlLmdldFJlc3BvbnNlSGVhZGVyKCJraWxsLWR1cmF0aW9uLXNlY29uZHMiKSksdGhpcy5faW5ib3VuZFF1ZXVlc1swXS5sZW5ndGg+MD90aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2JhdGNoQW5kU2VuZEV2ZW50cyghMSl9KSx0aGlzLl9zZW5kaW5nVGltZXIpOih0aGlzLl90aW1lb3V0PS0xLHRoaXMuX3J1bm5pbmc9ITEpfSxlLl9mbHVzaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX3J1bm5pbmd8fCh0aGlzLl90aW1lb3V0Pi0xJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9LTEpLHRoaXMuX2luYm91bmRRdWV1ZXNbMF0ubGVuZ3RoPjAmJnRoaXMuX2JhdGNoQW5kU2VuZEV2ZW50cyghMSkpLHRoaXMuX2NoZWNrUHJpbWFyeUluYm91bmRRdWV1ZUVtcHR5KChmdW5jdGlvbigpe3QuX2luYm91bmRRdWV1ZXMuc2hpZnQoKSxudWxsIT1lJiZlKCksdC5fZmx1c2hRdWV1ZS5sZW5ndGg+MD9zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiB0Ll9mbHVzaCh0Ll9mbHVzaFF1ZXVlLnNoaWZ0KCkpfSksdC5fc2VuZGluZ1RpbWVyKToodC5faXNDdXJyZW50bHlGbHVzaGluZz0hMSx0Ll9pbmJvdW5kUXVldWVzWzBdLmxlbmd0aD4wJiYodC5fdGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiB0Ll9iYXRjaEFuZFNlbmRFdmVudHMoITEpfSksdC5fc2VuZGluZ1RpbWVyKSkpfSkpfSxlLl9jaGVja1ByaW1hcnlJbmJvdW5kUXVldWVFbXB0eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzOzA9PT10aGlzLl9pbmJvdW5kUXVldWVzWzBdLmxlbmd0aD90aGlzLl9jaGVja091dGJvdW5kUXVldWVFbXB0eUFuZFNlbnQoZSk6c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY2hlY2tQcmltYXJ5SW5ib3VuZFF1ZXVlRW1wdHkoZSl9KSwyNTApfSxlLl9jaGVja091dGJvdW5kUXVldWVFbXB0eUFuZFNlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9ydW5uaW5nP3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NoZWNrT3V0Ym91bmRRdWV1ZUVtcHR5QW5kU2VudChlKX0pLDI1MCk6ZSgpfSxlLl9vdXRib3VuZFF1ZXVlPVtdLGUuX2luYm91bmRRdWV1ZXM9W10sZS5fbmV3RXZlbnRzQWxsb3dlZD0hMSxlLl9raWxsU3dpdGNoPW5ldyBhLmRlZmF1bHQsZS5faXNDdXJyZW50bHlGbHVzaGluZz0hMSxlLl9mbHVzaFF1ZXVlPVtdLGUuX3J1bm5pbmc9ITEsZS5fdGltZW91dD0tMSxlLl91cmxTdHJpbmc9Ij9xc3A9dHJ1ZSZjb250ZW50LXR5cGU9YXBwbGljYXRpb24lMkZib25kLWNvbXBhY3QtYmluYXJ5JmNsaWVudC1pZD1OT19BVVRIJnNkay12ZXJzaW9uPSIrcy5GdWxsVmVyc2lvblN0cmluZyxlfSgpO3QuZGVmYXVsdD11fSwyNzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxOTQpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fbWF4UmVxdWVzdFNpemU9ZSx0aGlzLl9vdXRib3VuZFF1ZXVlPXQsdGhpcy5fY3VycmVudEJhdGNoPXt9LHRoaXMuX2N1cnJlbnRCYXRjaFNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuYWRkRXZlbnRUb0JhdGNoPWZ1bmN0aW9uKGUpe3ZhciB0PXIuZGVmYXVsdC5nZXRFdmVudEJsb2IoZSk7dC5sZW5ndGg+dGhpcy5fbWF4UmVxdWVzdFNpemV8fCh0aGlzLl9jdXJyZW50QmF0Y2hTaXplK3QubGVuZ3RoPnRoaXMuX21heFJlcXVlc3RTaXplP3RoaXMuZmx1c2hCYXRjaCgpOih2b2lkIDA9PT10aGlzLl9jdXJyZW50QmF0Y2hbZS50ZW5hbnRUb2tlbl0mJih0aGlzLl9jdXJyZW50QmF0Y2hbZS50ZW5hbnRUb2tlbl09W10pLHRoaXMuX2N1cnJlbnRCYXRjaFtlLnRlbmFudFRva2VuXS5wdXNoKHQpLHRoaXMuX2N1cnJlbnRCYXRjaFNpemUrPXQubGVuZ3RoKSl9LGUucHJvdG90eXBlLmZsdXNoQmF0Y2g9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50QmF0Y2hTaXplPjAmJih0aGlzLl9vdXRib3VuZFF1ZXVlLnB1c2godGhpcy5fY3VycmVudEJhdGNoKSx0aGlzLl9jdXJyZW50QmF0Y2g9e30sdGhpcy5fY3VycmVudEJhdGNoU2l6ZT0wKX0sZX0oKTt0LmRlZmF1bHQ9b30sMjc0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjc1KTt0LkJvbmREYXRhVHlwZT1yLkJvbmREYXRhVHlwZTt2YXIgbz1uKDI3Nik7dC5FbmNvZGluZz1vO3ZhciBpPW4oMjc3KTt0LklPPWk7dmFyIGE9bigxMDkpO3QuSW50NjQ9YS5JbnQ2NCx0LlVJbnQ2ND1hLlVJbnQ2NCx0Lk51bWJlcj1hLk51bWJlcjt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fc3RyZWFtPWV9cmV0dXJuIGUucHJvdG90eXBlLldyaXRlQmxvYj1mdW5jdGlvbihlKXt0aGlzLl9zdHJlYW0uV3JpdGUoZSwwLGUubGVuZ3RoKX0sZS5wcm90b3R5cGUuV3JpdGVDb250YWluZXJCZWdpbj1mdW5jdGlvbihlLHQpe3RoaXMuV3JpdGVVSW50OCh0KSx0aGlzLldyaXRlVUludDMyKGUpfSxlLnByb3RvdHlwZS5Xcml0ZU1hcENvbnRhaW5lckJlZ2luPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLldyaXRlVUludDgodCksdGhpcy5Xcml0ZVVJbnQ4KG4pLHRoaXMuV3JpdGVVSW50MzIoZSl9LGUucHJvdG90eXBlLldyaXRlRmllbGRCZWdpbj1mdW5jdGlvbihlLHQpe3Q8PTU/dGhpcy5fc3RyZWFtLldyaXRlQnl0ZShlfHQ8PDUpOnQ8PTI1NT8odGhpcy5fc3RyZWFtLldyaXRlQnl0ZSgxOTJ8ZSksdGhpcy5fc3RyZWFtLldyaXRlQnl0ZSh0KSk6KHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUoMjI0fGUpLHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUodCksdGhpcy5fc3RyZWFtLldyaXRlQnl0ZSh0Pj44KSl9LGUucHJvdG90eXBlLldyaXRlSW50MzI9ZnVuY3Rpb24oZSl7ZT1vLlppZ3phZy5FbmNvZGVaaWd6YWczMihlKSx0aGlzLldyaXRlVUludDMyKGUpfSxlLnByb3RvdHlwZS5Xcml0ZUludDY0PWZ1bmN0aW9uKGUpe3RoaXMuV3JpdGVVSW50NjQoby5aaWd6YWcuRW5jb2RlWmlnemFnNjQoZSkpfSxlLnByb3RvdHlwZS5Xcml0ZVN0cmluZz1mdW5jdGlvbihlKXtpZigiIj09PWUpdGhpcy5Xcml0ZVVJbnQzMigwKTtlbHNle3ZhciB0PW8uVXRmOC5HZXRCeXRlcyhlKTt0aGlzLldyaXRlVUludDMyKHQubGVuZ3RoKSx0aGlzLl9zdHJlYW0uV3JpdGUodCwwLHQubGVuZ3RoKX19LGUucHJvdG90eXBlLldyaXRlU3RydWN0RW5kPWZ1bmN0aW9uKGUpe3RoaXMuV3JpdGVVSW50OChlP3IuQm9uZERhdGFUeXBlLkJUX1NUT1BfQkFTRTpyLkJvbmREYXRhVHlwZS5CVF9TVE9QKX0sZS5wcm90b3R5cGUuV3JpdGVVSW50MzI9ZnVuY3Rpb24oZSl7dmFyIHQ9by5WYXJpbnQuR2V0Qnl0ZXMoYS5OdW1iZXIuVG9VSW50MzIoZSkpO3RoaXMuX3N0cmVhbS5Xcml0ZSh0LDAsdC5sZW5ndGgpfSxlLnByb3RvdHlwZS5Xcml0ZVVJbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD1vLlZhcmludDY0LkdldEJ5dGVzKGUpO3RoaXMuX3N0cmVhbS5Xcml0ZSh0LDAsdC5sZW5ndGgpfSxlLnByb3RvdHlwZS5Xcml0ZVVJbnQ4PWZ1bmN0aW9uKGUpe3RoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUoYS5OdW1iZXIuVG9VSW50OChlKSl9LGV9KCk7dC5Db21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXI9c30sMjc1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2VbZS5CVF9TVE9QPTBdPSJCVF9TVE9QIixlW2UuQlRfU1RPUF9CQVNFPTFdPSJCVF9TVE9QX0JBU0UiLGVbZS5CVF9VSU5UOD0zXT0iQlRfVUlOVDgiLGVbZS5CVF9VSU5UMzI9NV09IkJUX1VJTlQzMiIsZVtlLkJUX1VJTlQ2ND02XT0iQlRfVUlOVDY0IixlW2UuQlRfU1RSSU5HPTldPSJCVF9TVFJJTkciLGVbZS5CVF9TVFJVQ1Q9MTBdPSJCVF9TVFJVQ1QiLGVbZS5CVF9MSVNUPTExXT0iQlRfTElTVCIsZVtlLkJUX01BUD0xM109IkJUX01BUCIsZVtlLkJUX0lOVDMyPTE2XT0iQlRfSU5UMzIiLGVbZS5CVF9JTlQ2ND0xN109IkJUX0lOVDY0IixlW2UuQlRfVU5BVkFJTEFCTEU9MTI3XT0iQlRfVU5BVkFJTEFCTEUifSh0LkJvbmREYXRhVHlwZXx8KHQuQm9uZERhdGFUeXBlPXt9KSl9LDI3NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwOSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuR2V0Qnl0ZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZS5jaGFyQ29kZUF0KG4pO3I8MTI4P3QucHVzaChyKTpyPDIwNDg/dC5wdXNoKDE5MnxyPj42LDEyOHw2MyZyKTpyPDU1Mjk2fHxyPj01NzM0ND90LnB1c2goMjI0fHI+PjEyLDEyOHxyPj42JjYzLDEyOHw2MyZyKToocj02NTUzNisoKDEwMjMmcik8PDEwfDEwMjMmZS5jaGFyQ29kZUF0KCsrbikpLHQucHVzaCgyNDB8cj4+MTgsMTI4fHI+PjEyJjYzLDEyOHxyPj42JjYzLDEyOHw2MyZyKSl9cmV0dXJuIHR9LGV9KCk7dC5VdGY4PW87dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLkdldFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscj1bXSxvPWUubGVuZ3RoJTMsaT0wLGE9ZS5sZW5ndGgtbztpPGE7aSs9Myl7dmFyIHM9KGVbaV08PDE2KSsoZVtpKzFdPDw4KStlW2krMl07ci5wdXNoKFtuLmNoYXJBdCgodD1zKT4+MTgmNjMpLG4uY2hhckF0KHQ+PjEyJjYzKSxuLmNoYXJBdCh0Pj42JjYzKSxuLmNoYXJBdCg2MyZ0KV0uam9pbigiIikpfXN3aXRjaChvKXtjYXNlIDE6cz1lW2UubGVuZ3RoLTFdO3IucHVzaChuLmNoYXJBdChzPj4yKSksci5wdXNoKG4uY2hhckF0KHM8PDQmNjMpKSxyLnB1c2goIj09Iik7YnJlYWs7Y2FzZSAyOnZhciB1PShlW2UubGVuZ3RoLTJdPDw4KStlW2UubGVuZ3RoLTFdO3IucHVzaChuLmNoYXJBdCh1Pj4xMCkpLHIucHVzaChuLmNoYXJBdCh1Pj40JjYzKSksci5wdXNoKG4uY2hhckF0KHU8PDImNjMpKSxyLnB1c2goIj0iKX1yZXR1cm4gci5qb2luKCIiKX0sZX0oKTt0LkJhc2U2ND1pO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5HZXRCeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107NDI5NDk2NzE2OCZlOyl0LnB1c2goMTI3JmV8MTI4KSxlPj4+PTc7cmV0dXJuIHQucHVzaCgxMjcmZSksdH0sZX0oKTt0LlZhcmludD1hO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5HZXRCeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sb3csbj1lLmhpZ2gscj1bXTtufHw0Mjk0OTY3MTY4JnQ7KXIucHVzaCgxMjcmdHwxMjgpLHQ9KDEyNyZuKTw8MjV8dD4+Pjcsbj4+Pj03O3JldHVybiByLnB1c2goMTI3JnQpLHJ9LGV9KCk7dC5WYXJpbnQ2ND1zO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5FbmNvZGVaaWd6YWczMj1mdW5jdGlvbihlKXtyZXR1cm4oZT1yLk51bWJlci5Ub0ludDMyKGUpKTw8MV5lPj4zMX0sZS5FbmNvZGVaaWd6YWc2ND1mdW5jdGlvbihlKXt2YXIgdD1lLmxvdyxuPWUuaGlnaCxvPW48PDF8dD4+PjMxLGk9dDw8MTsyMTQ3NDgzNjQ4Jm4mJihvPX5vLGk9fmkpO3ZhciBhPW5ldyByLlVJbnQ2NCgiMCIpO3JldHVybiBhLmxvdz1pLGEuaGlnaD1vLGF9LGV9KCk7dC5aaWd6YWc9dX0sMjc3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA5KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2J1ZmZlcj1bXX1yZXR1cm4gZS5wcm90b3R5cGUuV3JpdGVCeXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2J1ZmZlci5wdXNoKHIuTnVtYmVyLlRvQnl0ZShlKSl9LGUucHJvdG90eXBlLldyaXRlPWZ1bmN0aW9uKGUsdCxuKXtmb3IoO24tLTspdGhpcy5Xcml0ZUJ5dGUoZVt0KytdKX0sZS5wcm90b3R5cGUuR2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcn0sZX0oKTt0Lk1lbW9yeVN0cmVhbT1vfSwyNzg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnNob3VsZFJldHJ5Rm9yU3RhdHVzPWZ1bmN0aW9uKGUpe3JldHVybiEoZT49MzAwJiZlPDUwMCYmNDA4IT09ZXx8NTAxPT09ZXx8NTA1PT09ZSl9LGUuZ2V0TWlsbGlzVG9CYWNrb2ZmRm9yUmV0cnk9ZnVuY3Rpb24oZSl7dmFyIHQsbj1NYXRoLmZsb29yKDEyMDAqTWF0aC5yYW5kb20oKSkrMjQwMDtyZXR1cm4gdD1NYXRoLnBvdyg0LGUpKm4sTWF0aC5taW4odCwxMmU0KX0sZX0oKTt0LmRlZmF1bHQ9cn0sMjc5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2tpbGxlZFRva2VuRGljdGlvbmFyeT17fX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0S2lsbFN3aXRjaFRlbmFudHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKGUmJnQpdHJ5e3ZhciByPWUuc3BsaXQoIiwiKTtpZigidGhpcy1yZXF1ZXN0LW9ubHkiPT09dClyZXR1cm4gcjt2YXIgbz0xZTMqcGFyc2VJbnQodCwxMCk7ci5mb3JFYWNoKChmdW5jdGlvbihlKXtuLl9raWxsZWRUb2tlbkRpY3Rpb25hcnlbZV09RGF0ZS5ub3coKStvfSkpfWNhdGNoKGUpe3JldHVybltdfXJldHVybltdfSxlLnByb3RvdHlwZS5pc1RlbmFudEtpbGxlZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fa2lsbGVkVG9rZW5EaWN0aW9uYXJ5W2VdJiZ0aGlzLl9raWxsZWRUb2tlbkRpY3Rpb25hcnlbZV0+RGF0ZS5ub3coKXx8KGRlbGV0ZSB0aGlzLl9raWxsZWRUb2tlbkRpY3Rpb25hcnlbZV0sITEpfSxlfSgpO3QuZGVmYXVsdD1yfSwyODA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE4OCksbz1uKDExMyksaT1PYmplY3Qoci5hKShvLmEsIk1hcCIpO3QuYT1pfSwyODE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7dC5hPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gci5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2goZSl7fX1yZXR1cm4iIn19LDI4NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDcwKSxvPW4oMzM4KTtmdW5jdGlvbiBpKGUpe2NvbnN0IHQ9ZT9PYmplY3Qoby5hKShlKTpyLmEudXNlckNvbmZpZ3VyYXRpb247cmV0dXJuISEobnVsbD09dD92b2lkIDA6dC5TZXNzaW9uU2V0dGluZ3MpJiYwIT09dC5TZXNzaW9uU2V0dGluZ3MuV2ViU2Vzc2lvblR5cGV9fSwyODc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsKLyoKb2JqZWN0LWFzc2lnbgooYykgU2luZHJlIFNvcmh1cwpAbGljZW5zZSBNSVQKKi92YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZnVuY3Rpb24gYShlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdChlKX1lLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oIiIpKXJldHVybiExO3ZhciByPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbigiIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scyx1PWEoZSksYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe2Zvcih2YXIgbCBpbiBuPU9iamVjdChhcmd1bWVudHNbY10pKW8uY2FsbChuLGwpJiYodVtsXT1uW2xdKTtpZihyKXtzPXIobik7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDtmKyspaS5jYWxsKG4sc1tmXSkmJih1W3NbZl1dPW5bc1tmXV0pfX1yZXR1cm4gdX19LDI5MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTg5KSxvPW4oMTY2KSxpPSJbb2JqZWN0IEFyZ3VtZW50c10iO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qoby5hKShlKSYmT2JqZWN0KHIuYSkoZSk9PWl9LHM9T2JqZWN0LnByb3RvdHlwZSx1PXMuaGFzT3duUHJvcGVydHksYz1zLnByb3BlcnR5SXNFbnVtZXJhYmxlLGw9YShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2E6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChvLmEpKGUpJiZ1LmNhbGwoZSwiY2FsbGVlIikmJiFjLmNhbGwoZSwiY2FsbGVlIil9O3QuYT1sfSwyOTQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0cnl7aWYoInBlcmZvcm1hbmNlImluIHdpbmRvdz09MSYmImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3cpe3ZhciByPURhdGUubm93KCk7d2luZG93LnBlcmZvcm1hbmNlLm5vdz0oKT0+RGF0ZS5ub3coKS1yfX1jYXRjaChlKXtlJiZ3aW5kb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cub25lcnJvciYmd2luZG93Lm9uZXJyb3IoIlBvbHlmaWxsIGVycm9yIix2b2lkIDAsdm9pZCAwLHZvaWQgMCxlKX19LDI5NTpmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7aWYoIWUuZmV0Y2gpe3ZhciB0PXtzZWFyY2hQYXJhbXM6IlVSTFNlYXJjaFBhcmFtcyJpbiBlLGl0ZXJhYmxlOiJTeW1ib2wiaW4gZSYmIml0ZXJhdG9yImluIFN5bWJvbCxibG9iOiJGaWxlUmVhZGVyImluIGUmJiJCbG9iImluIGUmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZm9ybURhdGE6IkZvcm1EYXRhImluIGUsYXJyYXlCdWZmZXI6IkFycmF5QnVmZmVyImluIGV9O2lmKHQuYXJyYXlCdWZmZXIpdmFyIG49WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSxyPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKX0sbz1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZuLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKT4tMX07bC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7ZT1zKGUpLHQ9dSh0KTt2YXIgbj10aGlzLm1hcFtlXTtufHwobj1bXSx0aGlzLm1hcFtlXT1uKSxuLnB1c2godCl9LGwucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5tYXBbcyhlKV19LGwucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hcFtzKGUpXTtyZXR1cm4gdD90WzBdOm51bGx9LGwucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXBbcyhlKV18fFtdfSxsLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KHMoZSkpfSxsLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm1hcFtzKGUpXT1bdSh0KV19LGwucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLm1hcCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dGhpcy5tYXBbbl0uZm9yRWFjaCgoZnVuY3Rpb24ocil7ZS5jYWxsKHQscixuLHRoaXMpfSksdGhpcyl9KSx0aGlzKX0sbC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7ZS5wdXNoKG4pfSkpLGMoZSl9LGwucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSxjKGUpfSxsLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtlLnB1c2goW24sdF0pfSkpLGMoZSl9LHQuaXRlcmFibGUmJihsLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWwucHJvdG90eXBlLmVudHJpZXMpO3ZhciBpPVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07Yi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGIodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSx2LmNhbGwoYi5wcm90b3R5cGUpLHYuY2FsbChtLnByb3RvdHlwZSksbS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0odGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBsKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LG0uZXJyb3I9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIGUudHlwZT0iZXJyb3IiLGV9O3ZhciBhPVszMDEsMzAyLDMwMywzMDcsMzA4XTttLnJlZGlyZWN0PWZ1bmN0aW9uKGUsdCl7aWYoLTE9PT1hLmluZGV4T2YodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IG0obnVsbCx7c3RhdHVzOnQsaGVhZGVyczp7bG9jYXRpb246ZX19KX0sZS5IZWFkZXJzPWwsZS5SZXF1ZXN0PWIsZS5SZXNwb25zZT1tLGUuZmV0Y2g9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7dmFyIGk9bmV3IGIoZSxuKSxhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlLHQsbj17c3RhdHVzOmEuc3RhdHVzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LGhlYWRlcnM6KGU9YS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIsdD1uZXcgbCxlLnNwbGl0KCJcclxuIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdCgiOiIpLHI9bi5zaGlmdCgpLnRyaW0oKTtpZihyKXt2YXIgbz1uLmpvaW4oIjoiKS50cmltKCk7dC5hcHBlbmQocixvKX19KSksdCl9O24udXJsPSJyZXNwb25zZVVSTCJpbiBhP2EucmVzcG9uc2VVUkw6bi5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBvPSJyZXNwb25zZSJpbiBhP2EucmVzcG9uc2U6YS5yZXNwb25zZVRleHQ7cihuZXcgbShvLG4pKX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7byhuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxhLm9udGltZW91dD1mdW5jdGlvbigpe28obmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0sYS5vcGVuKGkubWV0aG9kLGkudXJsLCEwKSwiaW5jbHVkZSI9PT1pLmNyZWRlbnRpYWxzJiYoYS53aXRoQ3JlZGVudGlhbHM9ITApLCJyZXNwb25zZVR5cGUiaW4gYSYmdC5ibG9iJiYoYS5yZXNwb25zZVR5cGU9ImJsb2IiKSxpLmhlYWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXthLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhLnNlbmQodm9pZCAwPT09aS5fYm9keUluaXQ/bnVsbDppLl9ib2R5SW5pdCl9KSl9LGUuZmV0Y2gucG9seWZpbGw9ITB9ZnVuY3Rpb24gcyhlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XC0jJCUmJyorLlxeX2B8fl0vaS50ZXN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB1KGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfWZ1bmN0aW9uIGMoZSl7dmFyIG49e25leHQ6ZnVuY3Rpb24oKXt2YXIgdD1lLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09dCx2YWx1ZTp0fX19O3JldHVybiB0Lml0ZXJhYmxlJiYobltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIG59KSxufWZ1bmN0aW9uIGwoZSl7dGhpcy5tYXA9e30sZSBpbnN0YW5jZW9mIGw/ZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3RoaXMuYXBwZW5kKHQsZSl9KSx0aGlzKTplJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0LGVbdF0pfSksdGhpcyl9ZnVuY3Rpb24gZihlKXtpZihlLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7ZS5ib2R5VXNlZD0hMH1mdW5jdGlvbiBoKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXtlLm9ubG9hZD1mdW5jdGlvbigpe3QoZS5yZXN1bHQpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKGUuZXJyb3IpfX0pKX1mdW5jdGlvbiBkKGUpe3ZhciB0PW5ldyBGaWxlUmVhZGVyLG49aCh0KTtyZXR1cm4gdC5yZWFkQXNBcnJheUJ1ZmZlcihlKSxufWZ1bmN0aW9uIHAoZSl7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSgwKTt2YXIgdD1uZXcgVWludDhBcnJheShlLmJ5dGVMZW5ndGgpO3JldHVybiB0LnNldChuZXcgVWludDhBcnJheShlKSksdC5idWZmZXJ9ZnVuY3Rpb24gdigpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2JvZHlJbml0PWUsZSlpZigic3RyaW5nIj09dHlwZW9mIGUpdGhpcy5fYm9keVRleHQ9ZTtlbHNlIGlmKHQuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSl0aGlzLl9ib2R5QmxvYj1lO2Vsc2UgaWYodC5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpdGhpcy5fYm9keUZvcm1EYXRhPWU7ZWxzZSBpZih0LnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKXRoaXMuX2JvZHlUZXh0PWUudG9TdHJpbmcoKTtlbHNlIGlmKHQuYXJyYXlCdWZmZXImJnQuYmxvYiYmcihlKSl0aGlzLl9ib2R5QXJyYXlCdWZmZXI9cChlLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO2Vsc2V7aWYoIXQuYXJyYXlCdWZmZXJ8fCFBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSYmIW8oZSkpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPXAoZSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD0iIjt0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KCJzdHJpbmciPT10eXBlb2YgZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnQuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSx0LmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgZT1mKHRoaXMpO2lmKGUpcmV0dXJuIGU7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Zih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihkKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBlLHQsbixyPWYodGhpcyk7aWYocilyZXR1cm4gcjtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gZT10aGlzLl9ib2R5QmxvYix0PW5ldyBGaWxlUmVhZGVyLG49aCh0KSx0LnJlYWRBc1RleHQoZSksbjtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSksbj1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyluW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUodFtyXSk7cmV0dXJuIG4uam9pbigiIil9KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSx0LmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKHkpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9ZnVuY3Rpb24gYihlLHQpe3ZhciBuLHIsbz0odD10fHx7fSkuYm9keTtpZigic3RyaW5nIj09dHlwZW9mIGUpdGhpcy51cmw9ZTtlbHNle2lmKGUuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9ZS51cmwsdGhpcy5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzLHQuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgbChlLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1lLm1ldGhvZCx0aGlzLm1vZGU9ZS5tb2RlLG98fG51bGw9PWUuX2JvZHlJbml0fHwobz1lLl9ib2R5SW5pdCxlLmJvZHlVc2VkPSEwKX1pZih0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJvbWl0IiwhdC5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGwodC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KG49dC5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixyPW4udG9VcHBlckNhc2UoKSxpLmluZGV4T2Yocik+LTE/cjpuKSx0aGlzLm1vZGU9dC5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShvKX1mdW5jdGlvbiB5KGUpe3ZhciB0PW5ldyBGb3JtRGF0YTtyZXR1cm4gZS50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlKXt2YXIgbj1lLnNwbGl0KCI9Iikscj1uLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLG89bi5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO3QuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChyKSxkZWNvZGVVUklDb21wb25lbnQobykpfX0pKSx0fWZ1bmN0aW9uIG0oZSx0KXt0fHwodD17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz0ic3RhdHVzImluIHQ/dC5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD0ic3RhdHVzVGV4dCJpbiB0P3Quc3RhdHVzVGV4dDoiT0siLHRoaXMuaGVhZGVycz1uZXcgbCh0LmhlYWRlcnMpLHRoaXMudXJsPXQudXJsfHwiIix0aGlzLl9pbml0Qm9keShlKX19KCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSwzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzczKTt0LnVzZVN0cmljdD1yLmRlZmF1bHQ7dmFyIG89bigxNDIpO3QuYWN0aW9uPW8uYWN0aW9uLHQuYWN0aW9uQ3JlYXRvcj1vLmFjdGlvbkNyZWF0b3I7dmFyIGk9bigzNzUpO3QuYXBwbHlNaWRkbGV3YXJlPWkuZGVmYXVsdDt2YXIgYT1uKDM0Nik7dC5jcmVhdGVTdG9yZT1hLmRlZmF1bHQ7dmFyIHM9bigxNDQpO3QuZGlzcGF0Y2g9cy5kaXNwYXRjaDt2YXIgdT1uKDI2OSk7dC5tdXRhdG9yPXUuZGVmYXVsdDt2YXIgYz1uKDM3Mik7dC5vcmNoZXN0cmF0b3I9Yy5kZWZhdWx0O3ZhciBsPW4oMjY4KTt0LmdldFJvb3RTdG9yZT1sLmRlZmF1bHQ7dmFyIGY9bigzNjcpO3QubXV0YXRvckFjdGlvbj1mLm11dGF0b3JBY3Rpb24sdC5mbG93PWMuZGVmYXVsdCxyLmRlZmF1bHQoITApfSwzMDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI0Nik7dmFyIG89ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyByLmEsdGhpcy5zaXplPTB9O3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9O3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0sdT1uKDI4MCksYz1uKDMyOCksbD0yMDA7dmFyIGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiByLmEpe3ZhciBvPW4uX19kYXRhX187aWYoIXUuYXx8by5sZW5ndGg8bC0xKXJldHVybiBvLnB1c2goW2UsdF0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgYy5hKG8pfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307ZnVuY3Rpb24gaChlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyByLmEoZSk7dGhpcy5zaXplPXQuc2l6ZX1oLnByb3RvdHlwZS5jbGVhcj1vLGgucHJvdG90eXBlLmRlbGV0ZT1pLGgucHJvdG90eXBlLmdldD1hLGgucHJvdG90eXBlLmhhcz1zLGgucHJvdG90eXBlLnNldD1mO3QuYT1ofSwzMDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9bigxMTMpLG89big2MjMpLGk9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxhPWkmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmIWUubm9kZVR5cGUmJmUscz1hJiZhLmV4cG9ydHM9PT1pP3IuYS5CdWZmZXI6dm9pZCAwLHU9KHM/cy5pc0J1ZmZlcjp2b2lkIDApfHxvLmE7dC5hPXV9KS5jYWxsKHRoaXMsbigzOTgpKGUpKX0sMzA3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDkpO24uZCh0LCJleGVjdXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5hfSkpO3ZhciBvPW4oNDA1KTtuLmQodCwiQXBvbGxvTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pKTt2YXIgaT1uKDYxMik7bi5vKGksIkFwb2xsb1Byb3ZpZGVyIikmJm4uZCh0LCJBcG9sbG9Qcm92aWRlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuQXBvbGxvUHJvdmlkZXJ9KSksbi5vKGksInVzZUFwb2xsb0NsaWVudCIpJiZuLmQodCwidXNlQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gaS51c2VBcG9sbG9DbGllbnR9KSksbi5vKGksInVzZUxhenlRdWVyeSIpJiZuLmQodCwidXNlTGF6eVF1ZXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gaS51c2VMYXp5UXVlcnl9KSksbi5vKGksInVzZU11dGF0aW9uIikmJm4uZCh0LCJ1c2VNdXRhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkudXNlTXV0YXRpb259KSksbi5vKGksInVzZVF1ZXJ5IikmJm4uZCh0LCJ1c2VRdWVyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkudXNlUXVlcnl9KSl9LDMwOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDgxNSksaT1uZXcgTWFwLGE9bmV3IE1hcCxzPSExO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xzLF0rL2csIiAiKS50cmltKCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1uZXcgU2V0LG49W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoIkZyYWdtZW50RGVmaW5pdGlvbiI9PT1lLmtpbmQpe3ZhciByPWUubmFtZS52YWx1ZSxvPXUoKHM9ZS5sb2MpLnNvdXJjZS5ib2R5LnN1YnN0cmluZyhzLnN0YXJ0LHMuZW5kKSksaT1hLmdldChyKTtpJiYhaS5oYXMobyl8fGl8fGEuc2V0KHIsaT1uZXcgU2V0KSxpLmFkZChvKSx0LmhhcyhvKXx8KHQuYWRkKG8pLG4ucHVzaChlKSl9ZWxzZSBuLnB1c2goZSk7dmFyIHN9KSksT2JqZWN0KHIuX19hc3NpZ24pKE9iamVjdChyLl9fYXNzaWduKSh7fSxlKSx7ZGVmaW5pdGlvbnM6bn0pfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dShlKTtpZighaS5oYXModCkpe3ZhciBuPU9iamVjdChvLmEpKGUse2V4cGVyaW1lbnRhbEZyYWdtZW50VmFyaWFibGVzOnN9KTtpZighbnx8IkRvY3VtZW50IiE9PW4ua2luZCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBhIHZhbGlkIEdyYXBoUUwgZG9jdW1lbnQuIik7aS5zZXQodCxmdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KGUuZGVmaW5pdGlvbnMpO3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5sb2MmJmRlbGV0ZSBlLmxvYyxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1lW25dO3ImJiJvYmplY3QiPT10eXBlb2YgciYmdC5hZGQocil9KSl9KSk7dmFyIG49ZS5sb2M7cmV0dXJuIG4mJihkZWxldGUgbi5zdGFydFRva2VuLGRlbGV0ZSBuLmVuZFRva2VuKSxlfShjKG4pKSl9cmV0dXJuIGkuZ2V0KHQpfWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07InN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pO3ZhciByPWVbMF07cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0JiYiRG9jdW1lbnQiPT09dC5raW5kP3IrPXQubG9jLnNvdXJjZS5ib2R5OnIrPXQscis9ZVtuKzFdfSkpLGwocil9dmFyIGgsZD17Z3FsOmYscmVzZXRDYWNoZXM6ZnVuY3Rpb24oKXtpLmNsZWFyKCksYS5jbGVhcigpfSxkaXNhYmxlRnJhZ21lbnRXYXJuaW5nczpmdW5jdGlvbigpeyExfSxlbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpmdW5jdGlvbigpe3M9ITB9LGRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlczpmdW5jdGlvbigpe3M9ITF9fTsoaD1mfHwoZj17fSkpLmdxbD1kLmdxbCxoLnJlc2V0Q2FjaGVzPWQucmVzZXRDYWNoZXMsaC5kaXNhYmxlRnJhZ21lbnRXYXJuaW5ncz1kLmRpc2FibGVGcmFnbWVudFdhcm5pbmdzLGguZW5hYmxlRXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXM9ZC5lbmFibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcyxoLmRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcz1kLmRpc2FibGVFeHBlcmltZW50YWxGcmFnbWVudFZhcmlhYmxlcyxmLmRlZmF1bHQ9Zix0LmE9Zn0sMzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9bigxMDIpO2NvbnN0IG89ezUuMToiWFAiLCI2LjAiOiJWaXN0YSIsNi4xOiI3Iiw2LjI6IjgiLDYuMzoiOC4xIiw2LjQ6IjEwIiwiMTAuMCI6IjEwIn07bGV0IGk7ZnVuY3Rpb24gYSgpe3JldHVybiBpfHwoaT1mdW5jdGlvbigpe2xldCBlLHQ9dm9pZCAwO2NvbnN0IG49T2JqZWN0KHIuYSkoKTsvKGNyb3MpXHNbXHddK1xzKFtcd1wuXStcdykvaS50ZXN0KG4pP2U9IkNocm9taXVtIE9TIjovKGlQYWR8aVBob25lfGlQb2QpKD89LipsaWtlIE1hYyBPUyBYKS9pLnRlc3Qobik/ZT0iaU9TIjovYW5kcm9pZC9pLnRlc3Qobik/ZT0iQW5kcm9pZCI6LyhsaW51eHxqb2xpfFtreGxuXT91YnVudHV8ZGViaWFufFtvcGVuXSpzdXNlfGdlbnRvb3xhcmNofHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWRoYXR8emVud2FsaykvaS50ZXN0KG4pP2U9IkxpbnV4IjovKG1hY2ludG9zaHxtYWMgb3MgeCkvaS50ZXN0KG4pP2U9Ik1hYyBPUyBYIjovKHdpbmRvd3N8d2luMzIpL2kudGVzdChuKT8oZT0iV2luZG93cyIsdD1mdW5jdGlvbihlKXtsZXQgdD1lLm1hdGNoKG5ldyBSZWdFeHAoIldpbmRvd3MgTlQgKFtcXGQsLl0rKSIpKTtyZXR1cm4gdCYmb1t0WzFdXX0obikpOmU9IlVua25vd24iO3JldHVybntvczplLG9zVmVyc2lvbjp0fX0oKSksaX19LDMxMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzEyKTt0LmE9ZnVuY3Rpb24oZSx0LG4peyJfX3Byb3RvX18iPT10JiZyLmE/T2JqZWN0KHIuYSkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6ZVt0XT1ufX0sMzExOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxODkpLG89bigxMTUpLGk9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGE9IltvYmplY3QgRnVuY3Rpb25dIixzPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsdT0iW29iamVjdCBQcm94eV0iO3QuYT1mdW5jdGlvbihlKXtpZighT2JqZWN0KG8uYSkoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0KHIuYSkoZSk7cmV0dXJuIHQ9PWF8fHQ9PXN8fHQ9PWl8fHQ9PXV9fSwzMTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE4OCksbz1mdW5jdGlvbigpe3RyeXt2YXIgZT1PYmplY3Qoci5hKShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2goZSl7fX0oKTt0LmE9b30sMzEzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9big4KSxvPW4oMTkpO2Z1bmN0aW9uIGkoZSx0KXt2YXIgbj10LGk9W107cmV0dXJuIGUuZGVmaW5pdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoIk9wZXJhdGlvbkRlZmluaXRpb24iPT09ZS5raW5kKXRocm93IG5ldyBvLmEoNDIpOyJGcmFnbWVudERlZmluaXRpb24iPT09ZS5raW5kJiZpLnB1c2goZSl9KSksdm9pZCAwPT09biYmKE9iamVjdChvLmIpKDE9PT1pLmxlbmd0aCw0Myksbj1pWzBdLm5hbWUudmFsdWUpLE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUpLHtkZWZpbml0aW9uczpPYmplY3Qoci5mKShbe2tpbmQ6Ik9wZXJhdGlvbkRlZmluaXRpb24iLG9wZXJhdGlvbjoicXVlcnkiLHNlbGVjdGlvblNldDp7a2luZDoiU2VsZWN0aW9uU2V0IixzZWxlY3Rpb25zOlt7a2luZDoiRnJhZ21lbnRTcHJlYWQiLG5hbWU6e2tpbmQ6Ik5hbWUiLHZhbHVlOm59fV19fV0sZS5kZWZpbml0aW9ucyl9KX1mdW5jdGlvbiBhKGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgdD17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2UubmFtZS52YWx1ZV09ZX0pKSx0fWZ1bmN0aW9uIHMoZSx0KXtzd2l0Y2goZS5raW5kKXtjYXNlIklubGluZUZyYWdtZW50IjpyZXR1cm4gZTtjYXNlIkZyYWdtZW50U3ByZWFkIjp2YXIgbj10JiZ0W2UubmFtZS52YWx1ZV07cmV0dXJuIE9iamVjdChvLmIpKG4sNDQpLG47ZGVmYXVsdDpyZXR1cm4gbnVsbH19fSwzMTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSk7Y29uc3Qgcj17ImZ3ay1iZXR0ZXJEaWFnbm9zdGljcy1wYW5lbCI6e3Jpbmc6WyJEb2dmb29kIl19LCJmd2stYmV0dGVyRGlhZ25vc3RpY3Mtc2VydmljZSI6e3Jpbmc6WyJEb2dmb29kIl19LCJmd2stZmVlZGJhY2tDaGFybSI6e3Jpbmc6WyJEb2dmb29kIiwiTWljcm9zb2Z0Il19fX0sMzI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEyOCk7Y29uc3Qgbz0iW2VtcHR5IG9uZXJyb3JdIjtmdW5jdGlvbiBpKGUsdCxuLGksYSl7aWYoZXx8YSl7YXx8KChhPW5ldyBFcnJvcihlKSkuc3RhY2s9byksZT1lfHxhLm1lc3NhZ2UsT2JqZWN0LmlzRXh0ZW5zaWJsZShhKSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJmaWxlbmFtZSIse3ZhbHVlOnR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwibGluZW5vIix7dmFsdWU6bn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJjb2xubyIse3ZhbHVlOml9KSksKG51bGw9PWE/dm9pZCAwOmEucmVwb3J0ZWQpfHxPYmplY3Qoci5jKShlLGEpfX12YXIgYT1uKDExMCk7bi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiByLmJ9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiByLmN9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiByLmR9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiByLmF9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiByLmV9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGEuYX0pKX0sMzIxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByPW4oNCksbz1uKDM1NCk7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvLmF9KSk7Y29uc3QgaT1uZXcgci5iKCgpPT5Qcm9taXNlLmFsbChbbi5lKDEzKSxuLmUoMTQpLG4uZSgxNSksbi5lKDE3KSxuLmUoMTkpLG4uZSgyNCksbi5lKDI4KSxuLmUoMzApLG4uZSgzNSksbi5lKDUzKSxuLmUoNTUpLG4uZSg5OSksbi5lKDExMCksbi5lKDExMyksbi5lKDEyNSksbi5lKDEzMiksbi5lKDE1OCksbi5lKDQxNSldKS50aGVuKG4uYmluZChudWxsLDg0NykpKSxhPW5ldyByLmEoaSxlPT5lLmFwcEJvb3RzdHJhcCl9LDMyNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPU9iamVjdC5wcm90b3R5cGU7dC5hPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxyKX19LDMyODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTg4KSxvPU9iamVjdChyLmEpKE9iamVjdCwiY3JlYXRlIik7dmFyIGk9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW8/byhudWxsKTp7fSx0aGlzLnNpemU9MH07dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LHM9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG8pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1zP3ZvaWQgMDpufXJldHVybiB1LmNhbGwodCxlKT90W2VdOnZvaWQgMH0sbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBmPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIG8/dm9pZCAwIT09dFtlXTpsLmNhbGwodCxlKX0saD0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7dmFyIGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPW8mJnZvaWQgMD09PXQ/aDp0LHRoaXN9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19cC5wcm90b3R5cGUuY2xlYXI9aSxwLnByb3RvdHlwZS5kZWxldGU9YSxwLnByb3RvdHlwZS5nZXQ9YyxwLnByb3RvdHlwZS5oYXM9ZixwLnByb3RvdHlwZS5zZXQ9ZDt2YXIgdj1wLGI9bigyNDYpLHk9bigyODApO3ZhciBtPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgdixtYXA6bmV3KHkuYXx8Yi5hKSxzdHJpbmc6bmV3IHZ9fTt2YXIgZz1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwiYm9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lfTt2YXIgTz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX19kYXRhX187cmV0dXJuIGcodCk/blsic3RyaW5nIj09dHlwZW9mIHQ/InN0cmluZyI6Imhhc2giXTpuLm1hcH07dmFyIHc9ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fTt2YXIgaj1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpLmdldChlKX07dmFyIEU9ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKS5oYXMoZSl9O3ZhciBTPWZ1bmN0aW9uKGUsdCl7dmFyIG49Tyh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfTtmdW5jdGlvbiBBKGUpe3ZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fUEucHJvdG90eXBlLmNsZWFyPW0sQS5wcm90b3R5cGUuZGVsZXRlPXcsQS5wcm90b3R5cGUuZ2V0PWosQS5wcm90b3R5cGUuaGFzPUUsQS5wcm90b3R5cGUuc2V0PVM7dC5hPUF9LDMyOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTg5KSxvPW4oMzMyKSxpPW4oMTY2KSxhPXt9O2FbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPWFbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWFbIltvYmplY3QgSW50OEFycmF5XSJdPWFbIltvYmplY3QgSW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IEludDMyQXJyYXldIl09YVsiW29iamVjdCBVaW50OEFycmF5XSJdPWFbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09YVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1hWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGFbIltvYmplY3QgQXJndW1lbnRzXSJdPWFbIltvYmplY3QgQXJyYXldIl09YVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1hWyJbb2JqZWN0IEJvb2xlYW5dIl09YVsiW29iamVjdCBEYXRhVmlld10iXT1hWyJbb2JqZWN0IERhdGVdIl09YVsiW29iamVjdCBFcnJvcl0iXT1hWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWFbIltvYmplY3QgTWFwXSJdPWFbIltvYmplY3QgTnVtYmVyXSJdPWFbIltvYmplY3QgT2JqZWN0XSJdPWFbIltvYmplY3QgUmVnRXhwXSJdPWFbIltvYmplY3QgU2V0XSJdPWFbIltvYmplY3QgU3RyaW5nXSJdPWFbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGkuYSkoZSkmJk9iamVjdChvLmEpKGUubGVuZ3RoKSYmISFhW09iamVjdChyLmEpKGUpXX0sdT1uKDU4NyksYz1uKDQ2MiksbD1jLmEmJmMuYS5pc1R5cGVkQXJyYXksZj1sP09iamVjdCh1LmEpKGwpOnM7dC5hPWZ9LDMzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtjb25zdCBpPXdpbmRvdy5SZXNwb25zZSYmZSBpbnN0YW5jZW9mIHdpbmRvdy5SZXNwb25zZT9mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBFcnJvcjtyZXR1cm4gdC5yZXNwb25zZT1lLHR9KGUpOiJzdHJpbmciPT10eXBlb2YgZT9uZXcgRXJyb3IoZSk6ZTtyZXR1cm4gbyhpLCJzb3VyY2UiLHQpLG8oaSwidXJsIixuKSxvKGksInN0YXR1cyIsciksaX1mdW5jdGlvbiBvKGUsdCxuKXt2b2lkIDA9PT1lW3RdJiYoZVt0XT1uKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDMzMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPTkwMDcxOTkyNTQ3NDA5OTEsbz0vXig/OjB8WzEtOV1cZCopJC87dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P3I6dCkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJm8udGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fX0sMzMxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUpe3JldHVybiBlfX0sMzMyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9OTAwNzE5OTI1NDc0MDk5MTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PXJ9fSwzMzg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM0MCksbz1uKDcwKTt2YXIgaT1uKDQxKTtmdW5jdGlvbiBhKGUpe3JldHVybiFlfHxPYmplY3Qoci5hKShlKT9PYmplY3QoaS5hKSgpOmZ1bmN0aW9uKGUpe3JldHVybiBvLmEuY29ubmVjdGVkQWNjb3VudHNVc2VyQ29uZmlndXJhdGlvbk1hcC5nZXQoZSl9KGUpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0sMzQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2KSxvPW4oMTgpLGk9bigxMSk7Y29uc3QgYT0iQm9vdFR5cGVTY3JpcHRWZXIiO2xldCBzO2FzeW5jIGZ1bmN0aW9uIHUoZSl7aWYoT2JqZWN0KHIuYSkoKSlyZXR1cm4iUHdhIjt0cnl7Y29uc3QgdD1gJHtPYmplY3Qoby5oKSgpfWFuYWx5dGljcy1waW5nLmpzYDtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2lmKHQuaGVhZGVycy5nZXQoIngtc3ctYWN0aXZlLWNhY2hlIikpcmV0dXJuIlN3Q2FjaGUiO2xldCByPXQuaGVhZGVycy5nZXQoIkRhdGUiKTtpZihudWxsPT1yKXtjb25zdCBlPU9iamVjdChpLmEpKHdpbmRvdyxhKT09bjtyZXR1cm4gT2JqZWN0KGkuZSkod2luZG93LGEsbiksZT8iQnJvd3NlckNhY2hlIjoiTm9DYWNoZSJ9bGV0IG89RGF0ZS5wYXJzZShyKTtpZihpc05hTihvKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWREYXRlIik7cmV0dXJuIG8tZT4tMWUzPyJOb0NhY2hlIjoiQnJvd3NlckNhY2hlIn0oZSxhd2FpdCBmZXRjaCh0KSx0KX1jYXRjaChlKXtyZXR1cm4gcz1lLCJVbmtub3duIn19bi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBsfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKTtsZXQgYz17fTtmdW5jdGlvbiBsKGUpe2YoImZlIixlLCJYLUZFU2VydmVyIiksZigiYmUiLGUsIlgtQkVTZXJ2ZXIiKSxmKCJ3c3ZlciIsZSwiWC1PV0EtVmVyc2lvbiIpLGYoImZvc3QiLGUsIngtb3dhLWZvcmVzdCIsZT0+MD09ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInByb2QiKT8iTkFNUFJEMDEiOmUuc3Vic3RyKDAsZS5pbmRleE9mKCIuIikpLnRvVXBwZXJDYXNlKCkpLGYoImRhZyIsZSwieC1vd2EtZGFnIixlPT5lLnRvVXBwZXJDYXNlKCkpLCFjLnRlJiZlJiZlLmhlYWRlcnMmJihjLnRlPWUuaGVhZGVycy5nZXQoIlgtTVNFZGdlLVJlZiIpPyIxIjoiMCIpfWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIG8saTtpZighY1tlXSl7Y29uc3QgYT1udWxsPT09KGk9bnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuaGVhZGVycyl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0KXx8dm9pZCAwPT09aT92b2lkIDA6aS5jYWxsKG8sbik7Y1tlXT1hP3I/cihhKTphOiJVbmtub3duIn19ZnVuY3Rpb24gaCgpe3JldHVybiBjLmJlfWZ1bmN0aW9uIGQoKXtyZXR1cm4gYy5mZX1mdW5jdGlvbiBwKCl7cmV0dXJuIGMudGV9ZnVuY3Rpb24gdigpe3JldHVybiBjLndzdmVyfWZ1bmN0aW9uIGIoKXtyZXR1cm4gYy5kYWd9ZnVuY3Rpb24geSgpe3JldHVybiBjLmZvc3R9YXN5bmMgZnVuY3Rpb24gbSgpe2xldCBlPWMuYnQ7cmV0dXJuIWUmJnNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2UudGltaW5nJiYoZT1jLmJ0PWF3YWl0IHUoc2VsZi5wZXJmb3JtYW5jZS50aW1pbmcuZmV0Y2hTdGFydCkpLGV9fSwzNDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9bigyNjQpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGw9PWV8fE9iamVjdChyLmEpKCk9PWV9fSwzNDU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKGUpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKG49PT1pfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBuKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDppfWNhdGNoKGUpe249aX10cnl7cj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDphfWNhdGNoKGUpe3I9YX19KCk7dmFyIHUsYz1bXSxsPSExLGY9LTE7ZnVuY3Rpb24gaCgpe2wmJnUmJihsPSExLHUubGVuZ3RoP2M9dS5jb25jYXQoYyk6Zj0tMSxjLmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWwpe3ZhciBlPXMoaCk7bD0hMDtmb3IodmFyIHQ9Yy5sZW5ndGg7dDspe2Zvcih1PWMsYz1bXTsrK2Y8dDspdSYmdVtmXS5ydW4oKTtmPS0xLHQ9Yy5sZW5ndGh9dT1udWxsLGw9ITEsZnVuY3Rpb24oZSl7aWYocj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChyPT09YXx8IXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIHYoKXt9by5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO2MucHVzaChuZXcgcChlLHQpKSwxIT09Yy5sZW5ndGh8fGx8fHMoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LG8udGl0bGU9ImJyb3dzZXIiLG8uYnJvd3Nlcj0hMCxvLmVudj17fSxvLmFyZ3Y9W10sby52ZXJzaW9uPSIiLG8udmVyc2lvbnM9e30sby5vbj12LG8uYWRkTGlzdGVuZXI9dixvLm9uY2U9dixvLm9mZj12LG8ucmVtb3ZlTGlzdGVuZXI9dixvLnJlbW92ZUFsbExpc3RlbmVycz12LG8uZW1pdD12LG8ucHJlcGVuZExpc3RlbmVyPXYsby5wcmVwZW5kT25jZUxpc3RlbmVyPXYsby5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LG8uYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LG8uY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxvLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LG8udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDM0NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxvPW4oMjY4KSxpPXIuYWN0aW9uKCJjcmVhdGVTdG9yZSIsKGZ1bmN0aW9uKGUsdCl7aWYoby5kZWZhdWx0KCkuZ2V0KGUpKXRocm93IG5ldyBFcnJvcigiQSBzdG9yZSBuYW1lZCAiK2UrIiBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuIik7by5kZWZhdWx0KCkuc2V0KGUsdCl9KSk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KSxmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQoKS5nZXQoZSl9fX0sMzQ4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMTMpLmEuVWludDhBcnJheTt0LmE9cn0sMzQ5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpO3ZhciByPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhpcy5tZXNzYWdlPWUsdGhpcy5wYXRoPXQsdGhpcy5xdWVyeT1uLHRoaXMuY2xpZW50T25seT1yLHRoaXMudmFyaWFibGVzPW99fSwzNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5oZWFkZXJzKSYmZS5oZWFkZXJzLmdldCh0KX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDM1MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZS5ncmFwaFFMRXJyb3JzKWZvcihsZXQgdCBvZiBlLmdyYXBoUUxFcnJvcnMpaWYodC5leHRlbnNpb25zKXJldHVybiB0O3JldHVybiBudWxsPT09KHQ9ZS5ncmFwaFFMRXJyb3JzKXx8dm9pZCAwPT09dD92b2lkIDA6dFswXX0oZSk7cmV0dXJuIHQ/KHQuZXh0ZW5zaW9ucyYmT2JqZWN0LmtleXModC5leHRlbnNpb25zKS5mb3JFYWNoKGU9PntudWxsIT10LmV4dGVuc2lvbnNbZV0mJih0W2VdPXQuZXh0ZW5zaW9uc1tlXSl9KSx0KTplfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sMzUxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbixyPS9cclxufFtcblxyXS9nLG89MSxpPXQrMTsobj1yLmV4ZWMoZS5ib2R5KSkmJm4uaW5kZXg8dDspbys9MSxpPXQrMS0obi5pbmRleCtuWzBdLmxlbmd0aCk7cmV0dXJue2xpbmU6byxjb2x1bW46aX19bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpfSwzNTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9bigxOSksbz1mdW5jdGlvbihlLHQpe3ZhciBuO3RyeXtuPUpTT04uc3RyaW5naWZ5KGUpfWNhdGNoKGUpe3ZhciBvPW5ldyByLmEoMjMpO3Rocm93IG8ucGFyc2VFcnJvcj1lLG99cmV0dXJuIG59fSwzNTM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOnZvaWQgMDt0LmE9cn0sMzU0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oMTA2KTtmdW5jdGlvbiBvKGUsdCl7c3dpdGNoKGUpe2Nhc2Ugci5hLkNhbGVuZGFyRGVlcExpbms6cmV0dXJuIHQ/e2FwcDoiY2FsZW5kYXJEZWVwT3B4IixleHBlY3RlZFhBcHBOYW1lSGVhZGVyOiJDYWxlbmRhckRlZXBPcHgifTp2b2lkIDA7Y2FzZSByLmEuTWFpbDpjYXNlIHIuYS5DYWxlbmRhcjpjYXNlIHIuYS5GaWxlc0h1YjpyZXR1cm57YXBwOiJtYWlsIixleHBlY3RlZFhBcHBOYW1lSGVhZGVyOiJNYWlsIn19fX0sMzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKC4uLmUpe3JldHVybiBlLmZpbHRlcihlPT5lKS5tYXAoYSkuZmlsdGVyKGU9PjAhPT1lLmxlbmd0aCkuam9pbigiLyIpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/ZS5sZW5ndGg+MCYmIi8iIT09ZVswXT8iLyIrZTplOiIvIn1mdW5jdGlvbiBpKGUpe3JldHVybiBlLmxlbmd0aD4wJiYiLyIhPT1lW2UubGVuZ3RoLTFdP2UrIi8iOmV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXC8qLywiIikucmVwbGFjZSgvXC8qJC8sIiIpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBpfSkpfSwzNjc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDIpLG89bigyNjkpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIG89ci5hY3Rpb24odCwoZnVuY3Rpb24oKXtyZXR1cm57YXJnczphcmd1bWVudHN9fSkpO3JldHVybiBlKG8sKGZ1bmN0aW9uKGUpe3JldHVybiBuLmFwcGx5KG51bGwsZS5hcmdzKX0pKSxvfX10LmNyZWF0ZVNpbXBsZVN1YnNjcmliZXI9aSx0Lm11dGF0b3JBY3Rpb249aShvLmRlZmF1bHQpfSwzNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKTt2YXIgcj1PYmplY3QuZnJlZXplKHtOQU1FOiJOYW1lIixET0NVTUVOVDoiRG9jdW1lbnQiLE9QRVJBVElPTl9ERUZJTklUSU9OOiJPcGVyYXRpb25EZWZpbml0aW9uIixWQVJJQUJMRV9ERUZJTklUSU9OOiJWYXJpYWJsZURlZmluaXRpb24iLFNFTEVDVElPTl9TRVQ6IlNlbGVjdGlvblNldCIsRklFTEQ6IkZpZWxkIixBUkdVTUVOVDoiQXJndW1lbnQiLEZSQUdNRU5UX1NQUkVBRDoiRnJhZ21lbnRTcHJlYWQiLElOTElORV9GUkFHTUVOVDoiSW5saW5lRnJhZ21lbnQiLEZSQUdNRU5UX0RFRklOSVRJT046IkZyYWdtZW50RGVmaW5pdGlvbiIsVkFSSUFCTEU6IlZhcmlhYmxlIixJTlQ6IkludFZhbHVlIixGTE9BVDoiRmxvYXRWYWx1ZSIsU1RSSU5HOiJTdHJpbmdWYWx1ZSIsQk9PTEVBTjoiQm9vbGVhblZhbHVlIixOVUxMOiJOdWxsVmFsdWUiLEVOVU06IkVudW1WYWx1ZSIsTElTVDoiTGlzdFZhbHVlIixPQkpFQ1Q6Ik9iamVjdFZhbHVlIixPQkpFQ1RfRklFTEQ6Ik9iamVjdEZpZWxkIixESVJFQ1RJVkU6IkRpcmVjdGl2ZSIsTkFNRURfVFlQRToiTmFtZWRUeXBlIixMSVNUX1RZUEU6Ikxpc3RUeXBlIixOT05fTlVMTF9UWVBFOiJOb25OdWxsVHlwZSIsU0NIRU1BX0RFRklOSVRJT046IlNjaGVtYURlZmluaXRpb24iLE9QRVJBVElPTl9UWVBFX0RFRklOSVRJT046Ik9wZXJhdGlvblR5cGVEZWZpbml0aW9uIixTQ0FMQVJfVFlQRV9ERUZJTklUSU9OOiJTY2FsYXJUeXBlRGVmaW5pdGlvbiIsT0JKRUNUX1RZUEVfREVGSU5JVElPTjoiT2JqZWN0VHlwZURlZmluaXRpb24iLEZJRUxEX0RFRklOSVRJT046IkZpZWxkRGVmaW5pdGlvbiIsSU5QVVRfVkFMVUVfREVGSU5JVElPTjoiSW5wdXRWYWx1ZURlZmluaXRpb24iLElOVEVSRkFDRV9UWVBFX0RFRklOSVRJT046IkludGVyZmFjZVR5cGVEZWZpbml0aW9uIixVTklPTl9UWVBFX0RFRklOSVRJT046IlVuaW9uVHlwZURlZmluaXRpb24iLEVOVU1fVFlQRV9ERUZJTklUSU9OOiJFbnVtVHlwZURlZmluaXRpb24iLEVOVU1fVkFMVUVfREVGSU5JVElPTjoiRW51bVZhbHVlRGVmaW5pdGlvbiIsSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTjoiSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbiIsRElSRUNUSVZFX0RFRklOSVRJT046IkRpcmVjdGl2ZURlZmluaXRpb24iLFNDSEVNQV9FWFRFTlNJT046IlNjaGVtYUV4dGVuc2lvbiIsU0NBTEFSX1RZUEVfRVhURU5TSU9OOiJTY2FsYXJUeXBlRXh0ZW5zaW9uIixPQkpFQ1RfVFlQRV9FWFRFTlNJT046Ik9iamVjdFR5cGVFeHRlbnNpb24iLElOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTjoiSW50ZXJmYWNlVHlwZUV4dGVuc2lvbiIsVU5JT05fVFlQRV9FWFRFTlNJT046IlVuaW9uVHlwZUV4dGVuc2lvbiIsRU5VTV9UWVBFX0VYVEVOU0lPTjoiRW51bVR5cGVFeHRlbnNpb24iLElOUFVUX09CSkVDVF9UWVBFX0VYVEVOU0lPTjoiSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uIn0pfSwzNzI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDIpLG89bigxNDQpO3QuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZ2V0UHJpdmF0ZUFjdGlvbklkKGUpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiT3JjaGVzdHJhdG9ycyBjYW4gb25seSBzdWJzY3JpYmUgdG8gYWN0aW9uIGNyZWF0b3JzLiIpO3JldHVybiBvLnN1YnNjcmliZShuLHQpLHR9fSwzNzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3IuY29uZmlndXJlKHtlbmZvcmNlQWN0aW9uczplPyJvYnNlcnZlZCI6Im5ldmVyIn0pfX0sMzc0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTMxKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4oci5nZXRHbG9iYWxDb250ZXh0KCkubmV4dEFjdGlvbklkKyspLnRvU3RyaW5nKCl9fSwzNzU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDQpLG89bigxMzEpO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZS5iaW5kKG51bGwsdCl9dC5kZWZhdWx0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj1yLmZpbmFsRGlzcGF0Y2gsYT1lLmxlbmd0aC0xO2E+PTA7YS0tKW49aShlW2FdLG4pO28uZ2V0R2xvYmFsQ29udGV4dCgpLmRpc3BhdGNoV2l0aE1pZGRsZXdhcmU9bn19LDM4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oODkpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIE9iamVjdChyLmEpKGUsW3IuYyxyLmJdKX19LDM5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO3ZhciByPW4oMTAyKTtsZXQgbztmdW5jdGlvbiBpKCl7cmV0dXJuIG98fChvPWZ1bmN0aW9uKCl7dmFyIGUsdDtsZXQgbixvPSJVbmtub3duIjtjb25zdCBpPU9iamVjdChyLmEpKCk7L09QUlwvLy50ZXN0KGkpPyhvPSJPcGVyYSIsbj1hKGksIk9QUiIpKTovUGhhbnRvbUpTLy50ZXN0KGkpP289IlBoYW50b21KUyI6L0VkZ2UvLnRlc3QoaSk/bz0iRWRnZSI6L0VkZy8udGVzdChpKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJihudWxsPT09KHQ9bnVsbD09PShlPW51bGw9PT1uYXZpZ2F0b3J8fHZvaWQgMD09PW5hdmlnYXRvcj92b2lkIDA6bmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmJyYW5kcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc29tZShlPT4iTWljcm9zb2Z0IEVkZ2UiPT0obnVsbD09ZT92b2lkIDA6ZS5icmFuZCkpKT8obz0iRWRnZSBBbmFoZWltIixuPWEoaSwiRWRnIikpOi9FbGVjdHJvbi8udGVzdChpKT9vPSJFbGVjdHJvbiI6L0Nocm9tZS8udGVzdChpKXx8L0NyaU9TLy50ZXN0KGkpP289IkNocm9tZSI6L1RyaWRlbnQvLnRlc3QoaSk/KG89Ik1TSUUiLG49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5tYXRjaCgvTVNJRSAoW1xkLFwuXSspLyk7aWYodClyZXR1cm4gcyh0WzFdKTtyZXR1cm4gdD1lLm1hdGNoKC9ydjooW1xkLFwuXSspLyksdD9zKHRbMV0pOltdfShpKSk6L0ZpcmVmb3gvLnRlc3QoaSk/bz0iRmlyZWZveCI6L1NhZmFyaS8udGVzdChpKXx8L0FwcGxlV2ViS2l0Ly50ZXN0KGkpPyhvPSJTYWZhcmkiLG49YShpLCJWZXJzaW9uIikpOi9Ta3lwZVNoZWxsLy50ZXN0KGkpJiYobz0iU2t5cGVTaGVsbCIpO3JldHVybnticm93c2VyOm8sYnJvd3NlclZlcnNpb246bnx8YShpLG8pfX0oKSksb31mdW5jdGlvbiBhKGUsdCl7bGV0IG49ZS5tYXRjaChuZXcgUmVnRXhwKHQrIi8oW1xcZCxcXC5dKykiKSk7cmV0dXJuIG4/cyhuWzFdKTpbXX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLnNwbGl0KC9bXC4sXS8pLm1hcChlPT5wYXJzZUludChlKSl9fSwzOTM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0NSksbz1uKDExNSksaT1uKDMyNik7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gT2JqZWN0KGUpKXQucHVzaChuKTtyZXR1cm4gdH0scz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciB1PWZ1bmN0aW9uKGUpe2lmKCFPYmplY3Qoby5hKShlKSlyZXR1cm4gYShlKTt2YXIgdD1PYmplY3QoaS5hKShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKSgiY29uc3RydWN0b3IiIT1yfHwhdCYmcy5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59LGM9bigyMzcpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGMuYSkoZSk/T2JqZWN0KHIuYSkoZSwhMCk6dShlKX19LDM5NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKTt2YXIgcj1uKDI2Niksbz1uKDQwMiksaT1uKDUpLGE9big2MTYpLHM9bigyKTtjb25zdCB1PSJ0cmFjayI7ZnVuY3Rpb24gYyhlKXtsZXQgdD1PYmplY3QoaS5jKSh1KTtyZXR1cm4hIXQmJigiKiI9PXR8fHQuaW5kZXhPZihlKT4tMSl9ZnVuY3Rpb24gbCgpe3JldHVybiBjKGYpfWNvbnN0IGY9ImNsaWVudF92ZXJib3NlIjtsZXQgaD0wO2NsYXNzIGR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5jdXN0b21EYXRhSW5kZXg9MSx0aGlzLmV2ZW50TmFtZT1lJiZlLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIl8iKXx8IiIsdGhpcy5wcm9wZXJ0aWVzPXJ8fHt9LHRoaXMub3B0aW9ucz1uLHRoaXMuYWRkQ3VzdG9tRGF0YSh0KTtjb25zdCBvPU9iamVjdChhLmEpKCk7byYmdGhpcy5hZGREYXRhKCJTZXNzaW9uRWxhcHNlVGltZSIsbyksdGhpcy5ldmVudE5hbWUmJih0aGlzLmFkZERhdGEoIkV2ZW50TmFtZSIsdGhpcy5ldmVudE5hbWUpLHRoaXMudXBkYXRlU2Vzc2lvbk9jY3VyZW5jZXModGhpcy5ldmVudE5hbWUpKSwobnVsbD09bj92b2lkIDA6bi5hY3Rpb25Tb3VyY2UpJiZ0aGlzLmFkZEFjdGlvblNvdXJjZShuLmFjdGlvblNvdXJjZSksKG51bGw9PW4/dm9pZCAwOm4uY29zbW9zT25seURhdGEpJiZ0aGlzLmFkZENvc21vc09ubHlEYXRhKG4uY29zbW9zT25seURhdGEpLHRoaXMuYWRkRGF0YSgiU2VxdWVuY2VOdW1iZXIiLGgrKyl9YWRkQ3VzdG9tRGF0YShlKXtpZihlKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5hZGRDdXN0b21Qcm9wZXJ0eShgb3dhXyR7KHRoaXMuY3VzdG9tRGF0YUluZGV4KyspLnRvU3RyaW5nKCl9YCxlW3RdKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBPYmplY3Qpe2xldCB0PU9iamVjdC5rZXlzKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMuYWRkQ3VzdG9tUHJvcGVydHkodFtuXSxlW3Rbbl1dKX19YWRkQ3VzdG9tUHJvcGVydHkoZSx0KXt0aGlzLnByb3BlcnR5QmFnfHwodGhpcy5wcm9wZXJ0eUJhZz17fSk7Y29uc3Qgbj1PYmplY3Qoby5hKSh0aGlzLnByb3BlcnR5QmFnLGUpO24mJih0aGlzLnByb3BlcnR5QmFnW25dPXQpfWFkZFBpaURhdGEoZSl7dGhpcy5waWlEYXRhfHwodGhpcy5waWlEYXRhPWUpfWFkZENvc21vc09ubHlEYXRhKGUpe3RoaXMuYWRkRGF0YVdpdGhQaWlTY3J1YmJpbmcoIkV4dHJhRGF0YSIsZSl9YWRkQWN0aW9uU291cmNlKGUpe3RoaXMuYWRkRGF0YSgiQWN0aW9uU291cmNlIixlKX1hZGRDYWNoZShlKXt0aGlzLmFkZERhdGEoci5hLmNhY2hlLGUpfWdldERhdGEoZSl7cmV0dXJuIHRoaXMucHJvcGVydGllc1tlXX1hZGREYXRhV2l0aFBpaVNjcnViYmluZyhlLHQpe3RoaXMuYWRkRGF0YShlLE9iamVjdChzLlQpKHQpKX1hZGREYXRhKGUsdCl7dGhpcy5wcm9wZXJ0aWVzW2VdPXR9dXBkYXRlU2Vzc2lvbk9jY3VyZW5jZXMoZSl7ZC5zZXNzaW9uT2NjdXJlbmNlc3x8KGQuc2Vzc2lvbk9jY3VyZW5jZXM9e30pO3ZhciB0PWQuc2Vzc2lvbk9jY3VyZW5jZXNbZV07dGhpcy5zZXNzaW9uT2NjdXJlbmNlPWQuc2Vzc2lvbk9jY3VyZW5jZXNbZV09dD90KzE6MSx0aGlzLmFkZERhdGEoIlNlc3Npb25PY2N1cmVuY2VzIix0KX19fSwzOTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0NCksbz1PYmplY3Qoci5hKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmE9b30sMzk2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MDApLG89bi5uKHIpO2xldCBpLGE7YXN5bmMgZnVuY3Rpb24gcygpe3RyeXtpfHwoaT1mZXRjaChvLmEpKTtjb25zdCBlPWF3YWl0IGk7cmV0dXJuIGF8fChhPWUudGV4dCgpKSxhfWNhdGNoKGUpe3Rocm93IGk9dm9pZCAwLGE9dm9pZCAwLGV9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGV9bi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4iRGVmYXVsdFVzZXJDb25maWcifSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX0sMzk3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPWkoZSwibmFtZSIsdCk7cmV0dXJue25hbWU6bixjdXN0b21EYXRhOmkoZSwiY3VzdG9tRGF0YSIsdCxuKSxvcHRpb25zOmkoZSwib3B0aW9ucyIsdCxuKSxjb3Ntb3NPbmx5RGF0YTppKGUsImNvc21vc09ubHlEYXRhIix0LG4pLGFjdGlvblNvdXJjZTppKGUsImFjdGlvblNvdXJjZSIsdCxuKX19ZnVuY3Rpb24gaShlLHQsbixvKXtpZihlW3RdKXRyeXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZVt0XT9lW3RdLmFwcGx5KG51bGwsbik6ZVt0XX1jYXRjaChlKXtyLmQoYCR7b3x8InVua25vd24ifSBmYWlsZWQgdG8gZXh0cmFjdCAke3R9YCxlKX19dmFyIGE9bigyNDMpLHM9bigxNyksdT1uKDE1NiksYz1uKDU5OSksbD1uKDY1KTtuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiB2fSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBPfSkpO2NvbnN0IGY9W107ZnVuY3Rpb24gaCgpe3JldHVybiBmfWNvbnN0IGQ9NztsZXQgcD1bXTtmdW5jdGlvbiB2KCl7cmV0dXJuIHB9bGV0IGI9W107ZnVuY3Rpb24geShlKXtyZXR1cm4gZT9iLmZpbHRlcihlKVswXTpiWzBdfWZ1bmN0aW9uIG0oZSx0LG4scixvKXt2YXIgaT15KCk7aSYmbC5tLmltcG9ydEFuZEV4ZWN1dGUoaSxlLHQsbyl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih0LnR5cGUmJmYucHVzaCh0LnR5cGUpO3AubGVuZ3RoPj1kOylwPXAuc2xpY2UoMSk7cmV0dXJuIHQudHlwZSYmcC5wdXNoKHQudHlwZSksdyhlLmJpbmQobnVsbCx0KSx0LmRwLHQpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBuPWFyZ3VtZW50cztyZXR1cm4gdygoKT0+dC5hcHBseShudWxsLG4pLG8oZSxuKSl9fWZ1bmN0aW9uIHcoZSx0LG4pe2xldCByPW51bGw7KG51bGw9PW4/dm9pZCAwOm4uYWN0aW9uRGF0YXBvaW50KT9yPW4uYWN0aW9uRGF0YXBvaW50OihudWxsPT10P3ZvaWQgMDp0Lm5hbWUpJiYocj1uZXcgYS5hKHQubmFtZSx0Lm9wdGlvbnMpLGIucHVzaChyKSk7dmFyIG89bnVsbDt0cnl7ciYmdCYmKHQuY3VzdG9tRGF0YSYmci5hZGRDdXN0b21EYXRhKHQuY3VzdG9tRGF0YSksdC5jb3Ntb3NPbmx5RGF0YSYmci5hZGRDb3Ntb3NPbmx5RGF0YSh0LmNvc21vc09ubHlEYXRhKSx0LmFjdGlvblNvdXJjZSYmci5hZGRBY3Rpb25Tb3VyY2UodC5hY3Rpb25Tb3VyY2UpKSxvPWUoKX1jYXRjaChlKXt0aHJvdyByJiYoci5lbmRBY3Rpb24odm9pZCAwLGUpLGIucG9wKCkpLGV9ZmluYWxseXtmLnBvcCgpfWlmKHImJm4mJm4ubGF6eU9yY2hlc3RyYXRvciYmKG4uYWN0aW9uRGF0YXBvaW50PXIscj1udWxsKSxyKXtjb25zdCBlPXI7KChudWxsPT1vP3ZvaWQgMDpvLnRoZW4pP286UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PntlLmFkZENoZWNrcG9pbnQoImRtX3Byb21pc2UiKSxPYmplY3Qocy5pKSh0PT57ZS5hZGRDaGVja3BvaW50KCJkbV9yYWYiKSxzZXRUaW1lb3V0KCgpPT57ZS5hZGRDaGVja3BvaW50KCJkbV90aW1lb3V0IiksZS5lbmRBY3Rpb24odD8iU3VjY2VzcyI6IkJhY2tncm91bmRTdWNjZXNzIil9KX0pfSkuY2F0Y2godD0+e2UuZW5kQWN0aW9uKHZvaWQgMCx0KX0pLGIucG9wKCl9cmV0dXJuIG99T2JqZWN0KHUuYikobSksT2JqZWN0KGMuYikobSl9LDM5ODpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighZS53ZWJwYWNrUG9seWZpbGwpe3ZhciB0PU9iamVjdC5jcmVhdGUoZSk7dC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJleHBvcnRzIix7ZW51bWVyYWJsZTohMH0pLHQud2VicGFja1BvbHlmaWxsPTF9cmV0dXJuIHR9fSwzOTk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9bigzNTMpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgaT0xMCxhPTI7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdShlLFtdKX1mdW5jdGlvbiB1KGUsdCl7c3dpdGNoKG8oZSkpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIGUubmFtZT8iW2Z1bmN0aW9uICIuY29uY2F0KGUubmFtZSwiXSIpOiJbZnVuY3Rpb25dIjtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyJudWxsIjpmdW5jdGlvbihlLHQpe2lmKC0xIT09dC5pbmRleE9mKGUpKXJldHVybiJbQ2lyY3VsYXJdIjt2YXIgbj1bXS5jb25jYXQodCxbZV0pLG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtTdHJpbmcoci5hKV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5zcGVjdClyZXR1cm4gZS5pbnNwZWN0fShlKTtpZih2b2lkIDAhPT1vKXt2YXIgcz1vLmNhbGwoZSk7aWYocyE9PWUpcmV0dXJuInN0cmluZyI9PXR5cGVvZiBzP3M6dShzLG4pfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIltdIjtpZih0Lmxlbmd0aD5hKXJldHVybiJbQXJyYXldIjtmb3IodmFyIG49TWF0aC5taW4oaSxlLmxlbmd0aCkscj1lLmxlbmd0aC1uLG89W10scz0wO3M8bjsrK3Mpby5wdXNoKHUoZVtzXSx0KSk7MT09PXI/by5wdXNoKCIuLi4gMSBtb3JlIGl0ZW0iKTpyPjEmJm8ucHVzaCgiLi4uICIuY29uY2F0KHIsIiBtb3JlIGl0ZW1zIikpO3JldHVybiJbIitvLmpvaW4oIiwgIikrIl0ifShlLG4pO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4ie30iO2lmKHQubGVuZ3RoPmEpcmV0dXJuIlsiK2Z1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5yZXBsYWNlKC9eXFtvYmplY3QgLywiIikucmVwbGFjZSgvXSQvLCIiKTtpZigiT2JqZWN0Ij09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yKXt2YXIgbj1lLmNvbnN0cnVjdG9yLm5hbWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIiE9PW4pcmV0dXJuIG59cmV0dXJuIHR9KGUpKyJdIjtyZXR1cm4ieyAiK24ubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gbisiOiAiK3UoZVtuXSx0KX0pKS5qb2luKCIsICIpKyIgfSJ9KGUsbil9KGUsdCk7ZGVmYXVsdDpyZXR1cm4gU3RyaW5nKGUpfX19LDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtjbGFzcyBye2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzdWx0PWV9dGhlbihlLHQpe3RyeXtsZXQgdD1lKHRoaXMucmVzdWx0KTtyZXR1cm4obnVsbD09KG49dCk/dm9pZCAwOm4udGhlbikmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW4/dDpQcm9taXNlLnJlc29sdmUodCl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfXZhciBufWNhdGNoKGUpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuIlFQIn19bGV0IG89MDtjb25zdCBpPXt9O2xldCBhPXttYXJrSW1wb3J0QXNMb2FkZWQ6ZT0+e2lbZV09ITB9LGlzSW1wb3J0TG9hZGVkOmU9PmlbZV0sbG9nVXNhZ2U6KCk9Pnt9LGxvZ0Vycm9yOigpPT57fX07ZnVuY3Rpb24gcygpe3JldHVybiBhfWZ1bmN0aW9uIHUoZSl7YT1lfXZhciBjPW4oMTApO2NvbnN0IGw9IkxhenlJbXBvcnRGYWlsdXJlIjtsZXQgZjtjb25zdCBoPSgpPT4odm9pZCAwPT09ZiYmKGY9T2JqZWN0KGMuaikoKSksZiksZD0vZnVuY3Rpb25ccypcKC4qXClccyp7XHMqcmV0dXJuIFteLl0qKFteO10qLiopfS87Y2xhc3MgcHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGF6eU1vZHVsZT1lLHRoaXMuZ2V0dGVyPXQsdGhpcy5wZW5kaW5nSW1wb3J0cz0wLHRoaXMuaW1wb3J0PSgpPT57aWYoIXRoaXMuaW1wb3J0UHJvbWlzZSl7bGV0IGU7dHJ5e2U9dGhpcy5sYXp5TW9kdWxlLmltcG9ydCgpLHRoaXMuaW1wb3J0UHJvbWlzZT1lLnRoZW4oZT0+KHRoaXMuaW1wb3J0VmFsdWU9dGhpcy5nZXR0ZXIoZSksdGhpcy5pbXBvcnRQcm9taXNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKX0odGhpcy5pbXBvcnRWYWx1ZSksaCgpJiZ0aGlzLmxhenlNb2R1bGUuYWRkV2F0ZXJmYWxsQ2hlY2twb2ludCh0aGlzLl9nZXRJbXBvcnROYW1lRm9yTG9nZ2luZygpKSxzKCkubWFya0ltcG9ydEFzTG9hZGVkKHRoaXMuaWQpLHRoaXMucGVuZGluZ0ltcG9ydHM9MCx0aGlzLmltcG9ydFZhbHVlKSkuY2F0Y2goZT0+e3Rocm93IHRoaXMuaW1wb3J0UHJvbWlzZT12b2lkIDAscygpLmxvZ1VzYWdlKGwse21lc3NhZ2U6ZS5tZXNzYWdlLHBlbmRpbmdJbXBvcnRzOnRoaXMucGVuZGluZ0ltcG9ydHN9KSx0aGlzLnBlbmRpbmdJbXBvcnRzPTAsZX0pfWNhdGNoKGUpe3RoaXMuaW1wb3J0UHJvbWlzZT1Qcm9taXNlLnJlamVjdChlKX19cmV0dXJuIHRoaXMucGVuZGluZ0ltcG9ydHMrKyx0aGlzLmltcG9ydFByb21pc2V9LHRoaXMuaWQ9KG8rKykudG9TdHJpbmcoKX1kYW5nZXJvdXNseUltcG9ydFN5bmMoKXtpZighdGhpcy5pc0xvYWRlZCgpKXRocm93IG5ldyBFcnJvcigiSW1wb3J0IGlzIG5vdCBhdmFpbGFibGUgeWV0LiIpO3JldHVybiB0aGlzLmltcG9ydFZhbHVlfXRyeUltcG9ydEZvclJlbmRlcigpe2lmKHMoKS5pc0ltcG9ydExvYWRlZCh0aGlzLmlkKSlyZXR1cm4gdGhpcy5pbXBvcnRWYWx1ZTt0aGlzLmltcG9ydCgpfWlzTG9hZGVkKCl7cmV0dXJuIHMoKS5pc0ltcG9ydExvYWRlZCh0aGlzLmlkKX1fZ2V0SW1wb3J0TmFtZUZvckxvZ2dpbmcoKXtjb25zdCBlPXRoaXMuZ2V0dGVyLnRvU3RyaW5nKCk7dHJ5e2NvbnN0IHQ9ZS5tYXRjaChkKTtyZXR1cm4gdCYmdC5sZW5ndGg+MT90WzFdOmV9Y2F0Y2godCl7cmV0dXJuIGV9fX1sZXQgdjtmdW5jdGlvbiBiKCl7Y29uc3QgZT12O3JldHVybiB2PW51bGwsZX1mdW5jdGlvbiB5KGUpe3Y9ZX1jbGFzcyBtIGV4dGVuZHMgcHtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSx0KTtsZXQgcj10aGlzO3RoaXMuaW1wb3J0QW5kRXhlY3V0ZT1mdW5jdGlvbiguLi5lKXtsZXQgdD0obnVsbD09bj92b2lkIDA6bi5jYXB0dXJlQnVuZGxlVGltZSk/RGF0ZS5ub3coKTpudWxsO3JldHVybiByLmltcG9ydCgpLnRoZW4obj0+e3kodCk7Y29uc3Qgcj1uLmFwcGx5KG51bGwsZSk7cmV0dXJuIHkobnVsbCkscn0pfX19dmFyIGc9bigyKSxPPW4oNjApO2Z1bmN0aW9uIHcoZSl7cmV0dXJuIG4ucD1lLGV9bGV0IGo9W10sRT0hMTtmdW5jdGlvbiBTKGUpe0U/ZSgpOmoucHVzaChlKX1mdW5jdGlvbiBBKCl7RT0hMDtmb3IodmFyIGU9MDtlPGoubGVuZ3RoO2UrKylqW2VdKCk7aj1bXX1jb25zdCBrPTUsST0xZTMsVD0xZTQseD0iTGF6eUxvYWRTdWNjZXNzQWZ0ZXJSZXRyeSIsQz0iTGF6eUxvYWRGYWlsdXJlIixNPSJMYXp5TW9kdWxlSW1wb3J0cyI7bGV0IFI7Y29uc3QgUD0oKT0+KHZvaWQgMD09PVImJihSPU9iamVjdChjLmopKCkpLFIpO2NsYXNzIE57Y29uc3RydWN0b3IoZSx0KXt0aGlzLmltcG9ydENhbGxiYWNrPWUsdGhpcy5ydW5XaGVuPXQsdGhpcy5pc0xvYWRlZD0hMSx0aGlzLmF0dGVtcHRzPTAsdGhpcy5wZW5kaW5nSW1wb3J0cz0wLHRoaXMuaW1wb3J0V2F0ZXJmYWxsRGF0YT17fX1pbXBvcnQoKXtyZXR1cm4gdGhpcy5wcm9taXNlfHwodGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChlLHQpPT57KHRoaXMucnVuV2hlbnx8UykoYXN5bmMoKT0+e2Zvcih0aGlzLmF0dGVtcHRzPTA7IXRoaXMuaXNMb2FkZWQmJnRoaXMuYXR0ZW1wdHM8azspdHJ5e2F3YWl0IHRoaXMubG9hZE1vZHVsZShlKX1jYXRjaChlKXthd2FpdCB0aGlzLm9uTG9hZEZhaWxlZChlLHQpfX0pfSkpLHRoaXMuaXNMb2FkZWR8fHRoaXMucGVuZGluZ0ltcG9ydHMrKyx0aGlzLnByb21pc2V9Z2V0SXNMb2FkZWQoKXtyZXR1cm4gdGhpcy5pc0xvYWRlZH1nZXRVcmwoZSl7cmV0dXJuIGstZTw9MT9PYmplY3QoZy5KKSgpOk9iamVjdChnLkspKCl9YXN5bmMgbG9hZE1vZHVsZShlKXtsZXQgdD10aGlzLmdldFVybCh0aGlzLmF0dGVtcHRzKyspO3codCk7Y29uc3Qgbj10aGlzLmltcG9ydENhbGxiYWNrKCk7dyhPYmplY3QoZy5LKSgpKSxlKGF3YWl0IG4pLFAoKSYmKHRoaXMuYWRkV2F0ZXJmYWxsQ2hlY2twb2ludCgibW9kdWxlIiksc2V0VGltZW91dCgoKT0+e3MoKS5sb2dVc2FnZShNLE9iamVjdC5hc3NpZ24oe2VudHJ5TW9kdWxlSWQ6dGhpcy5fX2dldEVudHJ5TW9kdWxlSWRGb3JMb2dnaW5nKCl9LHRoaXMuaW1wb3J0V2F0ZXJmYWxsRGF0YSkpLHRoaXMuaW1wb3J0V2F0ZXJmYWxsRGF0YT1udWxsfSxUKSksdGhpcy5pc0xvYWRlZD0hMCx0aGlzLnBlbmRpbmdJbXBvcnRzPTAsdGhpcy5hdHRlbXB0cz4xJiZzKCkubG9nVXNhZ2UoeCx7YXR0ZW1wdHM6dGhpcy5hdHRlbXB0cy50b1N0cmluZygpLHVybDp0fSl9YXN5bmMgb25Mb2FkRmFpbGVkKGUsdCl7aWYoZS5yZXF1ZXN0KWlmKHRoaXMuYXR0ZW1wdHM+PWspe3MoKS5sb2dVc2FnZShDLHttZXNzYWdlOmUubWVzc2FnZSxwZW5kaW5nSW1wb3J0czp0aGlzLnBlbmRpbmdJbXBvcnRzfSk7bGV0IG49IkZhaWxlZCB0byBsb2FkIGphdmFzY3JpcHQuIjtlLmh0dHBTdGF0dXMmJihuKz0iU3RhdHVzOiIrZS5odHRwU3RhdHVzKTtjb25zdCByPW5ldyBFcnJvcihuKTtyLm5ldHdvcmtFcnJvcj0hMCxyLmRpYWdub3N0aWNJbmZvPWUuZGlhZ25vc3RpY0luZm98fGUubWVzc2FnZSxyLnJlcXVlc3Q9ZS5yZXF1ZXN0LHQociksdGhpcy5wZW5kaW5nSW1wb3J0cz0wLHRoaXMucHJvbWlzZT12b2lkIDB9ZWxzZSB0aGlzLmF0dGVtcHRzPjEmJmF3YWl0IE9iamVjdChPLmEpKEkqTWF0aC5wb3coMix0aGlzLmF0dGVtcHRzLTIpKTtlbHNlIGUuc2NyaXB0RXZhbD0hMCxzKCkubG9nRXJyb3IoZSksdGhpcy5pc0xvYWRlZD0hMCxlLnJlcG9ydGVkPSEwLHQoZSl9X19nZXRFbnRyeU1vZHVsZUlkRm9yTG9nZ2luZygpe2NvbnN0IGU9dGhpcy5pbXBvcnRDYWxsYmFjay50b1N0cmluZygpO3RyeXtjb25zdCB0PS8uKlwuYmluZFwobnVsbCwoW14pXSspXCkvLG49ZS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5sZW5ndGg+MT9uWzFdOmV9Y2F0Y2godCl7cmV0dXJuIGV9fWFkZFdhdGVyZmFsbENoZWNrcG9pbnQoZSl7dGhpcy5pbXBvcnRXYXRlcmZhbGxEYXRhJiZ2b2lkIDA9PT10aGlzLmltcG9ydFdhdGVyZmFsbERhdGFbZV0mJih0aGlzLmltcG9ydFdhdGVyZmFsbERhdGFbZV09bnVsbD09PXNlbGZ8fHZvaWQgMD09PXNlbGY/dm9pZCAwOnNlbGYucGVyZm9ybWFuY2Uubm93KCkpfX1jbGFzcyBEIGV4dGVuZHMgTntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLGU9PntlKCl9KSx0aGlzLmlzQm9vdE1vZHVsZT0oKT0+ITB9fW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE59KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSl9LDQwMDpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4ucCsiLi4vcmVzb3VyY2VzL2dyYXBocWwvc2NoZW1hLmFsbC5taW4tODhiYTgxM2Y4ZjhiYWFhMTBhMTM4MDQ2MmUwZDMzNTkuZ3JhcGhxbCJ9LDQwMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDY4KTtuLmQodCwiQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gci5hfSkpO3ZhciBvPW4oNjEwKTtuLm8obywiQXBvbGxvTGluayIpJiZuLmQodCwiQXBvbGxvTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uQXBvbGxvTGlua30pKSxuLm8obywiQXBvbGxvUHJvdmlkZXIiKSYmbi5kKHQsIkFwb2xsb1Byb3ZpZGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5BcG9sbG9Qcm92aWRlcn0pKSxuLm8obywiZXhlY3V0ZSIpJiZuLmQodCwiZXhlY3V0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uZXhlY3V0ZX0pKSxuLm8obywidXNlQXBvbGxvQ2xpZW50IikmJm4uZCh0LCJ1c2VBcG9sbG9DbGllbnQiLChmdW5jdGlvbigpe3JldHVybiBvLnVzZUFwb2xsb0NsaWVudH0pKSxuLm8obywidXNlTGF6eVF1ZXJ5IikmJm4uZCh0LCJ1c2VMYXp5UXVlcnkiLChmdW5jdGlvbigpe3JldHVybiBvLnVzZUxhenlRdWVyeX0pKSxuLm8obywidXNlTXV0YXRpb24iKSYmbi5kKHQsInVzZU11dGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gby51c2VNdXRhdGlvbn0pKSxuLm8obywidXNlUXVlcnkiKSYmbi5kKHQsInVzZVF1ZXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gby51c2VRdWVyeX0pKTt2YXIgaT1uKDE0Myk7bi5kKHQsImlzQXBvbGxvRXJyb3IiLChmdW5jdGlvbigpe3JldHVybiBpLmJ9KSk7dmFyIGE9big4MDYpO24uZCh0LCJJbk1lbW9yeUNhY2hlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSkpO3ZhciBzPW4oMjY3KTtuLmQodCwibWFrZVZhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHMuY30pKTt2YXIgdT1uKDYxMSk7bi5vKHUsIkFwb2xsb0xpbmsiKSYmbi5kKHQsIkFwb2xsb0xpbmsiLChmdW5jdGlvbigpe3JldHVybiB1LkFwb2xsb0xpbmt9KSksbi5vKHUsIkFwb2xsb1Byb3ZpZGVyIikmJm4uZCh0LCJBcG9sbG9Qcm92aWRlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuQXBvbGxvUHJvdmlkZXJ9KSksbi5vKHUsImV4ZWN1dGUiKSYmbi5kKHQsImV4ZWN1dGUiLChmdW5jdGlvbigpe3JldHVybiB1LmV4ZWN1dGV9KSksbi5vKHUsInVzZUFwb2xsb0NsaWVudCIpJiZuLmQodCwidXNlQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gdS51c2VBcG9sbG9DbGllbnR9KSksbi5vKHUsInVzZUxhenlRdWVyeSIpJiZuLmQodCwidXNlTGF6eVF1ZXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdS51c2VMYXp5UXVlcnl9KSksbi5vKHUsInVzZU11dGF0aW9uIikmJm4uZCh0LCJ1c2VNdXRhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUudXNlTXV0YXRpb259KSksbi5vKHUsInVzZVF1ZXJ5IikmJm4uZCh0LCJ1c2VRdWVyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUudXNlUXVlcnl9KSk7dmFyIGM9bigzMDcpO24ubyhjLCJBcG9sbG9MaW5rIikmJm4uZCh0LCJBcG9sbG9MaW5rIiwoZnVuY3Rpb24oKXtyZXR1cm4gYy5BcG9sbG9MaW5rfSkpLG4ubyhjLCJBcG9sbG9Qcm92aWRlciIpJiZuLmQodCwiQXBvbGxvUHJvdmlkZXIiLChmdW5jdGlvbigpe3JldHVybiBjLkFwb2xsb1Byb3ZpZGVyfSkpLG4ubyhjLCJleGVjdXRlIikmJm4uZCh0LCJleGVjdXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYy5leGVjdXRlfSkpLG4ubyhjLCJ1c2VBcG9sbG9DbGllbnQiKSYmbi5kKHQsInVzZUFwb2xsb0NsaWVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGMudXNlQXBvbGxvQ2xpZW50fSkpLG4ubyhjLCJ1c2VMYXp5UXVlcnkiKSYmbi5kKHQsInVzZUxhenlRdWVyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGMudXNlTGF6eVF1ZXJ5fSkpLG4ubyhjLCJ1c2VNdXRhdGlvbiIpJiZuLmQodCwidXNlTXV0YXRpb24iLChmdW5jdGlvbigpe3JldHVybiBjLnVzZU11dGF0aW9ufSkpLG4ubyhjLCJ1c2VRdWVyeSIpJiZuLmQodCwidXNlUXVlcnkiLChmdW5jdGlvbigpe3JldHVybiBjLnVzZVF1ZXJ5fSkpO3ZhciBsPW4oMjM1KTtuLmQodCwiT2JzZXJ2YWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pKTt2YXIgZj1uKDE5KSxoPW4oMzA5KTtuLmQodCwiZ3FsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaC5hfSkpLE9iamVjdChmLmMpKCJsb2ciKX0sNDAyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO2NvbnN0IHI9NTA7ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PXR8fG51bGw9PXQpcmV0dXJuO2xldFtuLG9dPWZ1bmN0aW9uKGUpe2xldCB0PWUubGFzdEluZGV4T2YoIl8iKTtpZih0Pi0xKXtsZXQgbj1lLnNsaWNlKDAsdCkscj1wYXJzZUludChlLnNsaWNlKHQrMSkpO2lmKCFpc05hTihyKSlyZXR1cm5bbixyXX1yZXR1cm5bZSwxXX0odCk7Zm9yKHZhciBpPTA7bnVsbCE9ZVt0XTtpKyspaWYodD1uKyJfIitvKyssaT49cil0aHJvdyBuZXcgRXJyb3IoIkdVUDoiK3QpO3JldHVybiB0fX0sNDAzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciIsbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuYXN5bmNJdGVyYXRvcj9TeW1ib2wuYXN5bmNJdGVyYXRvcjoiQEBhc3luY0l0ZXJhdG9yIixpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1N0cmluZ1RhZz9TeW1ib2wudG9TdHJpbmdUYWc6IkBAdG9TdHJpbmdUYWcifSw0MDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9bigwKSxvPW4ubihyKSxpPW5ldyhuKDYzOSkuYT9XZWFrTWFwOk1hcCk7ZnVuY3Rpb24gYSgpe3ZhciBlPWkuZ2V0KG8uYS5jcmVhdGVDb250ZXh0KTtyZXR1cm4gZXx8KChlPW8uYS5jcmVhdGVDb250ZXh0KHt9KSkuZGlzcGxheU5hbWU9IkFwb2xsb0NvbnRleHQiLGkuc2V0KG8uYS5jcmVhdGVDb250ZXh0LGUpKSxlfX0sNDA1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4KSxvPW4oMTkpLGk9bigyMzUpO3ZhciBhPW4oMjQ3KTtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHQ/dChlKTppLmEub2YoKX1mdW5jdGlvbiB1KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP25ldyBsKGUpOmV9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5yZXF1ZXN0Lmxlbmd0aDw9MX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSk7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci5saW5rPW4scn1PYmplY3Qoci5jKSh0LGUpfShFcnJvcik7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe2UmJih0aGlzLnJlcXVlc3Q9ZSl9cmV0dXJuIGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYS5vZigpfSkpfSxlLmZyb209ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lmxlbmd0aD9lLmVtcHR5KCk6dC5tYXAodSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0KX0pKX0sZS5zcGxpdD1mdW5jdGlvbih0LG4scil7dmFyIG89dShuKSxhPXUocnx8bmV3IGUocykpO3JldHVybiBjKG8pJiZjKGEpP25ldyBlKChmdW5jdGlvbihlKXtyZXR1cm4gdChlKT9vLnJlcXVlc3QoZSl8fGkuYS5vZigpOmEucmVxdWVzdChlKXx8aS5hLm9mKCl9KSk6bmV3IGUoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSk/by5yZXF1ZXN0KGUsbil8fGkuYS5vZigpOmEucmVxdWVzdChlLG4pfHxpLmEub2YoKX0pKX0sZS5leGVjdXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVxdWVzdChmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdChyLmEpKHt9LGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2V0Q29udGV4dCIse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oZSl7bj0iZnVuY3Rpb24iPT10eXBlb2YgZT9PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxuKSxlKG4pKTpPYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxuKSxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0Q29udGV4dCIse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuYSkoe30sbil9fSksdH0odC5jb250ZXh0LGZ1bmN0aW9uKGUpe3ZhciB0PXt2YXJpYWJsZXM6ZS52YXJpYWJsZXN8fHt9LGV4dGVuc2lvbnM6ZS5leHRlbnNpb25zfHx7fSxvcGVyYXRpb25OYW1lOmUub3BlcmF0aW9uTmFtZSxxdWVyeTplLnF1ZXJ5fTtyZXR1cm4gdC5vcGVyYXRpb25OYW1lfHwodC5vcGVyYXRpb25OYW1lPSJzdHJpbmciIT10eXBlb2YgdC5xdWVyeT9PYmplY3QoYS5nKSh0LnF1ZXJ5KXx8dm9pZCAwOiIiKSx0fShmdW5jdGlvbihlKXtmb3IodmFyIHQ9WyJxdWVyeSIsIm9wZXJhdGlvbk5hbWUiLCJ2YXJpYWJsZXMiLCJleHRlbnNpb25zIiwiY29udGV4dCJdLG49MCxyPU9iamVjdC5rZXlzKGUpO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKHQuaW5kZXhPZihpKTwwKXRocm93IG5ldyBvLmEoMjYpfXJldHVybiBlfSh0KSkpKXx8aS5hLm9mKCl9LGUuY29uY2F0PWZ1bmN0aW9uKHQsbil7dmFyIHI9dSh0KTtpZihjKHIpKXJldHVybiByO3ZhciBvPXUobik7cmV0dXJuIGMobyk/bmV3IGUoKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3QoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIG8ucmVxdWVzdChlKXx8aS5hLm9mKCl9KSl8fGkuYS5vZigpfSkpOm5ldyBlKChmdW5jdGlvbihlLHQpe3JldHVybiByLnJlcXVlc3QoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIG8ucmVxdWVzdChlLHQpfHxpLmEub2YoKX0pKXx8aS5hLm9mKCl9KSl9LGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5jb25jYXQoZS5zcGxpdCh0LG4scnx8bmV3IGUocykpKX0sZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmNvbmNhdCh0aGlzLHQpfSxlLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7dGhyb3cgbmV3IG8uYSgyMSl9LGUucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24oZSx0KXtpZih0JiZ0LmVycm9yKXJldHVybiB0LmVycm9yKGUpLCExO3Rocm93IGV9LGUucHJvdG90eXBlLnNldE9uRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub25FcnJvcj1lLHRoaXN9LGV9KCl9LDQwNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOCksbz1uKDE5KSxpPW4oNzMpLGE9big2OSkscz1uKDQxNiksdT1uKDI0NyksYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtzd2l0Y2goYy5jYWxsKHQpKXtjYXNlIltvYmplY3QgQXJyYXldIjppZigobj1ufHxuZXcgTWFwKS5oYXModCkpcmV0dXJuIG4uZ2V0KHQpO3ZhciByPXQuc2xpY2UoMCk7cmV0dXJuIG4uc2V0KHQsciksci5mb3JFYWNoKChmdW5jdGlvbih0LG8pe3Jbb109ZSh0LG4pfSkpLHI7Y2FzZSJbb2JqZWN0IE9iamVjdF0iOmlmKChuPW58fG5ldyBNYXApLmhhcyh0KSlyZXR1cm4gbi5nZXQodCk7dmFyIG89T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpO3JldHVybiBuLnNldCh0LG8pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe29bcl09ZSh0W3JdLG4pfSkpLG87ZGVmYXVsdDpyZXR1cm4gdH19KGUpfXZhciBmPW4oODQxKSxoPW4oMjM1KSxkPW4oNjM1KSxwPW4oMTI1Miksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5vYnNlcnZlcj1lLHRoaXMub3B0aW9ucz10LHRoaXMuZmV0Y2g9bix0aGlzLnNob3VsZEZldGNoPXJ9cmV0dXJuIGUucHJvdG90eXBlLnJlb2JzZXJ2ZT1mdW5jdGlvbihlLHQpe2U/dGhpcy51cGRhdGVPcHRpb25zKGUpOnRoaXMudXBkYXRlUG9sbGluZygpO3ZhciBuPXRoaXMuZmV0Y2godGhpcy5vcHRpb25zLHQpO3JldHVybiB0aGlzLmNvbmNhc3QmJnRoaXMuY29uY2FzdC5yZW1vdmVPYnNlcnZlcih0aGlzLm9ic2VydmVyLCEwKSxuLmFkZE9ic2VydmVyKHRoaXMub2JzZXJ2ZXIpLCh0aGlzLmNvbmNhc3Q9bikucHJvbWlzZX0sZS5wcm90b3R5cGUudXBkYXRlT3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsT2JqZWN0KHAuYSkoZSkpLHRoaXMudXBkYXRlUG9sbGluZygpLHRoaXN9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLmNvbmNhc3QmJih0aGlzLmNvbmNhc3QucmVtb3ZlT2JzZXJ2ZXIodGhpcy5vYnNlcnZlciksZGVsZXRlIHRoaXMuY29uY2FzdCksdGhpcy5wb2xsaW5nSW5mbyYmKGNsZWFyVGltZW91dCh0aGlzLnBvbGxpbmdJbmZvLnRpbWVvdXQpLHRoaXMub3B0aW9ucy5wb2xsSW50ZXJ2YWw9MCx0aGlzLnVwZGF0ZVBvbGxpbmcoKSl9LGUucHJvdG90eXBlLnVwZGF0ZVBvbGxpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wb2xsaW5nSW5mbyxuPXRoaXMub3B0aW9ucy5wb2xsSW50ZXJ2YWw7aWYobil7aWYoKCF0fHx0LmludGVydmFsIT09bikmJihPYmplY3Qoby5iKShuLDIwKSwhMSE9PXRoaXMuc2hvdWxkRmV0Y2gpKXsodHx8KHRoaXMucG9sbGluZ0luZm89e30pKS5pbnRlcnZhbD1uO3ZhciByPWZ1bmN0aW9uKCl7ZS5wb2xsaW5nSW5mbyYmKGUuc2hvdWxkRmV0Y2gmJmUuc2hvdWxkRmV0Y2goKT9lLnJlb2JzZXJ2ZSh7ZmV0Y2hQb2xpY3k6Im5ldHdvcmstb25seSIsbmV4dEZldGNoUG9saWN5OmUub3B0aW9ucy5mZXRjaFBvbGljeXx8ImNhY2hlLWZpcnN0In0sYS5hLnBvbGwpLnRoZW4oaSxpKTppKCkpfSxpPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wb2xsaW5nSW5mbzt0JiYoY2xlYXJUaW1lb3V0KHQudGltZW91dCksdC50aW1lb3V0PXNldFRpbWVvdXQocix0LmludGVydmFsKSl9O2koKX19ZWxzZSB0JiYoY2xlYXJUaW1lb3V0KHQudGltZW91dCksZGVsZXRlIHRoaXMucG9sbGluZ0luZm8pfSxlfSgpO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYn0pKTt2YXIgYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPXQucXVlcnlNYW5hZ2VyLG89dC5xdWVyeUluZm8saT10Lm9wdGlvbnMsYz1lLmNhbGwodGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGMub25TdWJzY3JpYmUoZSl9KSl8fHRoaXM7Yy5vYnNlcnZlcnM9bmV3IFNldCxjLnN1YnNjcmlwdGlvbnM9bmV3IFNldCxjLm9ic2VydmVyPXtuZXh0OmZ1bmN0aW9uKGUpeyhjLmxhc3RFcnJvcnx8Yy5pc0RpZmZlcmVudEZyb21MYXN0UmVzdWx0KGUpKSYmKGMudXBkYXRlTGFzdFJlc3VsdChlKSxPYmplY3Qocy5hKShjLm9ic2VydmVycywibmV4dCIsZSkpfSxlcnJvcjpmdW5jdGlvbihlKXtjLnVwZGF0ZUxhc3RSZXN1bHQoT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sYy5sYXN0UmVzdWx0KSx7ZXJyb3I6ZSxlcnJvcnM6ZS5ncmFwaFFMRXJyb3JzLG5ldHdvcmtTdGF0dXM6YS5hLmVycm9yLGxvYWRpbmc6ITF9KSksT2JqZWN0KHMuYSkoYy5vYnNlcnZlcnMsImVycm9yIixjLmxhc3RFcnJvcj1lKX19LGMuaXNUb3JuRG93bj0hMSxjLm9wdGlvbnM9aSxjLnF1ZXJ5SWQ9bi5nZW5lcmF0ZVF1ZXJ5SWQoKTt2YXIgbD1PYmplY3QodS5mKShpLnF1ZXJ5KTtyZXR1cm4gYy5xdWVyeU5hbWU9bCYmbC5uYW1lJiZsLm5hbWUudmFsdWUsYy5xdWVyeU1hbmFnZXI9bixjLnF1ZXJ5SW5mbz1vLGN9cmV0dXJuIE9iamVjdChyLmMpKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YXJpYWJsZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhcmlhYmxlc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5yZXN1bHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcj17bmV4dDpmdW5jdGlvbihuKXt0KG4pLGUub2JzZXJ2ZXJzLmRlbGV0ZShyKSxlLm9ic2VydmVycy5zaXplfHxlLnF1ZXJ5TWFuYWdlci5yZW1vdmVRdWVyeShlLnF1ZXJ5SWQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by51bnN1YnNjcmliZSgpfSksMCl9LGVycm9yOm59LG89ZS5zdWJzY3JpYmUocil9KSl9LHQucHJvdG90eXBlLmdldEN1cnJlbnRSZXN1bHQ9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApO3ZhciB0PXRoaXMubGFzdFJlc3VsdCxuPXRoaXMucXVlcnlJbmZvLm5ldHdvcmtTdGF0dXN8fHQmJnQubmV0d29ya1N0YXR1c3x8YS5hLnJlYWR5LG89T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdCkse2xvYWRpbmc6T2JqZWN0KGEuYikobiksbmV0d29ya1N0YXR1czpufSk7aWYodGhpcy5pc1Rvcm5Eb3duKXJldHVybiBvO3ZhciBpPXRoaXMub3B0aW9ucy5mZXRjaFBvbGljeSxzPXZvaWQgMD09PWk/ImNhY2hlLWZpcnN0IjppO2lmKCJuby1jYWNoZSI9PT1zfHwibmV0d29yay1vbmx5Ij09PXMpZGVsZXRlIG8ucGFydGlhbDtlbHNlIGlmKCFvLmRhdGF8fCF0aGlzLnF1ZXJ5TWFuYWdlci50cmFuc2Zvcm0odGhpcy5vcHRpb25zLnF1ZXJ5KS5oYXNGb3JjZWRSZXNvbHZlcnMpe3ZhciB1PXRoaXMucXVlcnlJbmZvLmdldERpZmYoKTtvLmRhdGE9dS5jb21wbGV0ZXx8dGhpcy5vcHRpb25zLnJldHVyblBhcnRpYWxEYXRhP3UucmVzdWx0OnZvaWQgMCx1LmNvbXBsZXRlPyhvLm5ldHdvcmtTdGF0dXMhPT1hLmEubG9hZGluZ3x8ImNhY2hlLWZpcnN0IiE9PXMmJiJjYWNoZS1vbmx5IiE9PXN8fChvLm5ldHdvcmtTdGF0dXM9YS5hLnJlYWR5LG8ubG9hZGluZz0hMSksZGVsZXRlIG8ucGFydGlhbCk6by5wYXJ0aWFsPSEwfXJldHVybiBlJiZ0aGlzLnVwZGF0ZUxhc3RSZXN1bHQobyksb30sdC5wcm90b3R5cGUuaXNEaWZmZXJlbnRGcm9tTGFzdFJlc3VsdD1mdW5jdGlvbihlKXtyZXR1cm4hT2JqZWN0KGkuYSkodGhpcy5sYXN0UmVzdWx0U25hcHNob3QsZSl9LHQucHJvdG90eXBlLmdldExhc3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0UmVzdWx0fSx0LnByb3RvdHlwZS5nZXRMYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0RXJyb3J9LHQucHJvdG90eXBlLnJlc2V0TGFzdFJlc3VsdHM9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5sYXN0UmVzdWx0LGRlbGV0ZSB0aGlzLmxhc3RSZXN1bHRTbmFwc2hvdCxkZWxldGUgdGhpcy5sYXN0RXJyb3IsdGhpcy5pc1Rvcm5Eb3duPSExfSx0LnByb3RvdHlwZS5yZXNldFF1ZXJ5U3RvcmVFcnJvcnM9ZnVuY3Rpb24oKXt0aGlzLnF1ZXJ5TWFuYWdlci5yZXNldEVycm9ycyh0aGlzLnF1ZXJ5SWQpfSx0LnByb3RvdHlwZS5yZWZldGNoPWZ1bmN0aW9uKGUpe3ZhciB0PXtwb2xsSW50ZXJ2YWw6MH0sbj10aGlzLm9wdGlvbnMuZmV0Y2hQb2xpY3k7cmV0dXJuIm5vLWNhY2hlIiE9PW4mJiJjYWNoZS1hbmQtbmV0d29yayIhPT1uJiYodC5mZXRjaFBvbGljeT0ibmV0d29yay1vbmx5Iix0Lm5leHRGZXRjaFBvbGljeT1ufHwiY2FjaGUtZmlyc3QiKSxlJiYhT2JqZWN0KGkuYSkodGhpcy5vcHRpb25zLnZhcmlhYmxlcyxlKSYmKHQudmFyaWFibGVzPXRoaXMub3B0aW9ucy52YXJpYWJsZXM9T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdGhpcy5vcHRpb25zLnZhcmlhYmxlcyksZSkpLHRoaXMubmV3UmVvYnNlcnZlcighMSkucmVvYnNlcnZlKHQsYS5hLnJlZmV0Y2gpfSx0LnByb3RvdHlwZS5mZXRjaE1vcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPU9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUucXVlcnk/ZTpPYmplY3Qoci5hKShPYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSx0aGlzLm9wdGlvbnMpLGUpLHt2YXJpYWJsZXM6T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdGhpcy5vcHRpb25zLnZhcmlhYmxlcyksZS52YXJpYWJsZXMpfSkpLHtmZXRjaFBvbGljeToibm8tY2FjaGUifSksbz10aGlzLnF1ZXJ5TWFuYWdlci5nZW5lcmF0ZVF1ZXJ5SWQoKTtyZXR1cm4gbi5ub3RpZnlPbk5ldHdvcmtTdGF0dXNDaGFuZ2UmJih0aGlzLnF1ZXJ5SW5mby5uZXR3b3JrU3RhdHVzPWEuYS5mZXRjaE1vcmUsdGhpcy5vYnNlcnZlKCkpLHRoaXMucXVlcnlNYW5hZ2VyLmZldGNoUXVlcnkobyxuLGEuYS5mZXRjaE1vcmUpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBvPXIuZGF0YSxpPWUudXBkYXRlUXVlcnk7cmV0dXJuIGk/dC51cGRhdGVRdWVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSx7ZmV0Y2hNb3JlUmVzdWx0Om8sdmFyaWFibGVzOm4udmFyaWFibGVzfSl9KSk6dC5xdWVyeU1hbmFnZXIuY2FjaGUud3JpdGVRdWVyeSh7cXVlcnk6bi5xdWVyeSx2YXJpYWJsZXM6bi52YXJpYWJsZXMsZGF0YTpvfSkscn0pKS5maW5hbGx5KChmdW5jdGlvbigpe3QucXVlcnlNYW5hZ2VyLnN0b3BRdWVyeShvKSx0LnJlb2JzZXJ2ZSgpfSkpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmVUb01vcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMucXVlcnlNYW5hZ2VyLnN0YXJ0R3JhcGhRTFN1YnNjcmlwdGlvbih7cXVlcnk6ZS5kb2N1bWVudCx2YXJpYWJsZXM6ZS52YXJpYWJsZXMsY29udGV4dDplLmNvbnRleHR9KS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24obil7dmFyIHI9ZS51cGRhdGVRdWVyeTtyJiZ0LnVwZGF0ZVF1ZXJ5KChmdW5jdGlvbihlLHQpe3ZhciBvPXQudmFyaWFibGVzO3JldHVybiByKGUse3N1YnNjcmlwdGlvbkRhdGE6bix2YXJpYWJsZXM6b30pfSkpfSxlcnJvcjpmdW5jdGlvbih0KXtlLm9uRXJyb3ImJmUub25FcnJvcih0KX19KTtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmFkZChuKSxmdW5jdGlvbigpe3Quc3Vic2NyaXB0aW9ucy5kZWxldGUobikmJm4udW5zdWJzY3JpYmUoKX19LHQucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVvYnNlcnZlKGUpfSx0LnByb3RvdHlwZS5zZXRWYXJpYWJsZXM9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KGkuYSkodGhpcy52YXJpYWJsZXMsZSkpcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNpemU/dGhpcy5yZXN1bHQoKTpQcm9taXNlLnJlc29sdmUoKTtpZih0aGlzLm9wdGlvbnMudmFyaWFibGVzPWUsIXRoaXMub2JzZXJ2ZXJzLnNpemUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciB0PXRoaXMub3B0aW9ucy5mZXRjaFBvbGljeSxuPXZvaWQgMD09PXQ/ImNhY2hlLWZpcnN0Ijp0LHI9e2ZldGNoUG9saWN5Om4sdmFyaWFibGVzOmV9O3JldHVybiJjYWNoZS1maXJzdCIhPT1uJiYibm8tY2FjaGUiIT09biYmIm5ldHdvcmstb25seSIhPT1uJiYoci5mZXRjaFBvbGljeT0iY2FjaGUtYW5kLW5ldHdvcmsiLHIubmV4dEZldGNoUG9saWN5PW4pLHRoaXMucmVvYnNlcnZlKHIsYS5hLnNldFZhcmlhYmxlcyl9LHQucHJvdG90eXBlLnVwZGF0ZVF1ZXJ5PWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5xdWVyeU1hbmFnZXIscj1lKG4uY2FjaGUuZGlmZih7cXVlcnk6dGhpcy5vcHRpb25zLnF1ZXJ5LHZhcmlhYmxlczp0aGlzLnZhcmlhYmxlcyxwcmV2aW91c1Jlc3VsdDpudWxsPT09KHQ9dGhpcy5sYXN0UmVzdWx0KXx8dm9pZCAwPT09dD92b2lkIDA6dC5kYXRhLHJldHVyblBhcnRpYWxEYXRhOiEwLG9wdGltaXN0aWM6ITF9KS5yZXN1bHQse3ZhcmlhYmxlczp0aGlzLnZhcmlhYmxlc30pO3ImJihuLmNhY2hlLndyaXRlUXVlcnkoe3F1ZXJ5OnRoaXMub3B0aW9ucy5xdWVyeSxkYXRhOnIsdmFyaWFibGVzOnRoaXMudmFyaWFibGVzfSksbi5icm9hZGNhc3RRdWVyaWVzKCkpfSx0LnByb3RvdHlwZS5zdGFydFBvbGxpbmc9ZnVuY3Rpb24oZSl7dGhpcy5nZXRSZW9ic2VydmVyKCkudXBkYXRlT3B0aW9ucyh7cG9sbEludGVydmFsOmV9KX0sdC5wcm90b3R5cGUuc3RvcFBvbGxpbmc9ZnVuY3Rpb24oKXt0aGlzLnJlb2JzZXJ2ZXImJnRoaXMucmVvYnNlcnZlci51cGRhdGVPcHRpb25zKHtwb2xsSW50ZXJ2YWw6MH0pfSx0LnByb3RvdHlwZS51cGRhdGVMYXN0UmVzdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGFzdFJlc3VsdDtyZXR1cm4gdGhpcy5sYXN0UmVzdWx0PWUsdGhpcy5sYXN0UmVzdWx0U25hcHNob3Q9dGhpcy5xdWVyeU1hbmFnZXIuYXNzdW1lSW1tdXRhYmxlUmVzdWx0cz9lOmwoZSksT2JqZWN0KGYuYSkoZS5lcnJvcnMpfHxkZWxldGUgdGhpcy5sYXN0RXJyb3IsdH0sdC5wcm90b3R5cGUub25TdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlPT09dGhpcy5vYnNlcnZlcilyZXR1cm4gZnVuY3Rpb24oKXt9O3RyeXt2YXIgbj1lLl9zdWJzY3JpcHRpb24uX29ic2VydmVyO24mJiFuLmVycm9yJiYobi5lcnJvcj15KX1jYXRjaChlKXt9dmFyIHI9IXRoaXMub2JzZXJ2ZXJzLnNpemU7cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmFkZChlKSx0aGlzLmxhc3RFcnJvcj9lLmVycm9yJiZlLmVycm9yKHRoaXMubGFzdEVycm9yKTp0aGlzLmxhc3RSZXN1bHQmJmUubmV4dCYmZS5uZXh0KHRoaXMubGFzdFJlc3VsdCksciYmdGhpcy5yZW9ic2VydmUoKS5jYXRjaCgoZnVuY3Rpb24oZSl7fSkpLGZ1bmN0aW9uKCl7dC5vYnNlcnZlcnMuZGVsZXRlKGUpJiYhdC5vYnNlcnZlcnMuc2l6ZSYmdC50ZWFyRG93blF1ZXJ5KCl9fSx0LnByb3RvdHlwZS5nZXRSZW9ic2VydmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVvYnNlcnZlcnx8KHRoaXMucmVvYnNlcnZlcj10aGlzLm5ld1Jlb2JzZXJ2ZXIoITApKX0sdC5wcm90b3R5cGUubmV3UmVvYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5xdWVyeU1hbmFnZXIsbz10aGlzLnF1ZXJ5SWQ7cmV0dXJuIG4uc2V0T2JzZXJ2YWJsZVF1ZXJ5KHRoaXMpLG5ldyB2KHRoaXMub2JzZXJ2ZXIsZT90aGlzLm9wdGlvbnM6T2JqZWN0KHIuYSkoe30sdGhpcy5vcHRpb25zKSwoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5zZXRPYnNlcnZhYmxlUXVlcnkodCksbi5mZXRjaFF1ZXJ5T2JzZXJ2YWJsZShvLGUscil9KSwhbi5zc3JNb2RlJiZmdW5jdGlvbigpe3JldHVybiFPYmplY3QoYS5iKSh0LnF1ZXJ5SW5mby5uZXR3b3JrU3RhdHVzKX0pfSx0LnByb3RvdHlwZS5yZW9ic2VydmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pc1Rvcm5Eb3duPSExLHRoaXMuZ2V0UmVvYnNlcnZlcigpLnJlb2JzZXJ2ZShlLHQpfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKCl7dGhpcy5vYnNlcnZlci5uZXh0KHRoaXMuZ2V0Q3VycmVudFJlc3VsdCghMSkpfSx0LnByb3RvdHlwZS5oYXNPYnNlcnZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYnNlcnZlcnMuc2l6ZT4wfSx0LnByb3RvdHlwZS50ZWFyRG93blF1ZXJ5PWZ1bmN0aW9uKCl7dGhpcy5pc1Rvcm5Eb3dufHwodGhpcy5yZW9ic2VydmVyJiYodGhpcy5yZW9ic2VydmVyLnN0b3AoKSxkZWxldGUgdGhpcy5yZW9ic2VydmVyKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudW5zdWJzY3JpYmUoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKSx0aGlzLnF1ZXJ5TWFuYWdlci5zdG9wUXVlcnkodGhpcy5xdWVyeUlkKSx0aGlzLm9ic2VydmVycy5jbGVhcigpLHRoaXMuaXNUb3JuRG93bj0hMCl9LHR9KGguYSk7ZnVuY3Rpb24geShlKXt9T2JqZWN0KGQuYSkoYil9LDQwOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlO3QuYT1ufSkuY2FsbCh0aGlzLG4oMTQxKSl9LDQxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oNzApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gci5hLnVzZXJDb25maWd1cmF0aW9ufX0sNDEyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnNwbGl0KC9cclxufFtcblxyXS9nKSxuPWkoZSk7aWYoMCE9PW4pZm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT10W3JdLnNsaWNlKG4pO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGgmJm8odFthXSk7KSsrYTtmb3IodmFyIHM9dC5sZW5ndGg7cz5hJiZvKHRbcy0xXSk7KS0tcztyZXR1cm4gdC5zbGljZShhLHMpLmpvaW4oIlxuIil9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdClpZigiICIhPT1lW3RdJiYiXHQiIT09ZVt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBpKGUpe2Zvcih2YXIgdCxuPSEwLHI9ITAsbz0wLGk9bnVsbCxhPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAxMzoxMD09PWUuY2hhckNvZGVBdChhKzEpJiYrK2E7Y2FzZSAxMDpuPSExLHI9ITAsbz0wO2JyZWFrO2Nhc2UgOTpjYXNlIDMyOisrbzticmVhaztkZWZhdWx0OnImJiFuJiYobnVsbD09PWl8fG88aSkmJihpPW8pLHI9ITF9cmV0dXJuIG51bGwhPT0odD1pKSYmdm9pZCAwIT09dD90OjB9ZnVuY3Rpb24gYShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHI9LTE9PT1lLmluZGV4T2YoIlxuIiksbz0iICI9PT1lWzBdfHwiXHQiPT09ZVswXSxpPSciJz09PWVbZS5sZW5ndGgtMV0sYT0iXFwiPT09ZVtlLmxlbmd0aC0xXSxzPSFyfHxpfHxhfHxuLHU9IiI7cmV0dXJuIXN8fHImJm98fCh1Kz0iXG4iK3QpLHUrPXQ/ZS5yZXBsYWNlKC9cbi9nLCJcbiIrdCk6ZSxzJiYodSs9IlxuIiksJyIiIicrdS5yZXBsYWNlKC8iIiIvZywnXFwiIiInKSsnIiIiJ31uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0sNDEzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBofSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKTt2YXIgcj1uKDgpLG89bigxMzQpLGk9bigxOSksYT1uKDkwKSxzPW4oNjM5KSx1PW4oMzEzKSxjPW4oNTUpLGw9bigyNjcpO2Z1bmN0aW9uIGYoZSl7cmV0dXJuIHZvaWQgMCE9PWUuYXJncz9lLmFyZ3M6ZS5maWVsZD9PYmplY3QoYS5hKShlLmZpZWxkLGUudmFyaWFibGVzKTpudWxsfXZhciBoPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fX3R5cGVuYW1lLHI9ZS5pZCxvPWUuX2lkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKHQmJih0LmtleU9iamVjdD12b2lkIDAhPT1yP3tpZDpyfTp2b2lkIDAhPT1vP3tfaWQ6b306dm9pZCAwKSx2b2lkIDA9PT1yJiYocj1vKSx2b2lkIDAhPT1yKSlyZXR1cm4gbisiOiIrKCJudW1iZXIiPT10eXBlb2Ygcnx8InN0cmluZyI9PXR5cGVvZiByP3I6SlNPTi5zdHJpbmdpZnkocikpfSxkPWZ1bmN0aW9uKCl7fSxwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZmllbGROYW1lfSx2PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxuLm1lcmdlT2JqZWN0cykoZSx0KX0sYj1mdW5jdGlvbihlLHQpe3JldHVybiB0fSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvbmZpZz1lLHRoaXMudHlwZVBvbGljaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50b0JlQWRkZWQ9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN1cGVydHlwZU1hcD1uZXcgTWFwLHRoaXMuZnV6enlTdWJ0eXBlcz1uZXcgTWFwLHRoaXMucm9vdElkc0J5VHlwZW5hbWU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnJvb3RUeXBlbmFtZXNCeUlkPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy51c2luZ1Bvc3NpYmxlVHlwZXM9ITEsdGhpcy5jb25maWc9T2JqZWN0KHIuYSkoe2RhdGFJZEZyb21PYmplY3Q6aH0sZSksdGhpcy5jYWNoZT10aGlzLmNvbmZpZy5jYWNoZSx0aGlzLnNldFJvb3RUeXBlbmFtZSgiUXVlcnkiKSx0aGlzLnNldFJvb3RUeXBlbmFtZSgiTXV0YXRpb24iKSx0aGlzLnNldFJvb3RUeXBlbmFtZSgiU3Vic2NyaXB0aW9uIiksZS5wb3NzaWJsZVR5cGVzJiZ0aGlzLmFkZFBvc3NpYmxlVHlwZXMoZS5wb3NzaWJsZVR5cGVzKSxlLnR5cGVQb2xpY2llcyYmdGhpcy5hZGRUeXBlUG9saWNpZXMoZS50eXBlUG9saWNpZXMpfXJldHVybiBlLnByb3RvdHlwZS5pZGVudGlmeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dCYmbj9PYmplY3QoYS5jKShlLHQsbik6ZS5fX3R5cGVuYW1lO2lmKHI9PT10aGlzLnJvb3RUeXBlbmFtZXNCeUlkLlJPT1RfUVVFUlkpcmV0dXJuWyJST09UX1FVRVJZIl07Zm9yKHZhciBvLGk9e3R5cGVuYW1lOnIsc2VsZWN0aW9uU2V0OnQsZnJhZ21lbnRNYXA6bn0scz1yJiZ0aGlzLmdldFR5cGVQb2xpY3kociksdT1zJiZzLmtleUZufHx0aGlzLmNvbmZpZy5kYXRhSWRGcm9tT2JqZWN0O3U7KXt2YXIgYz11KGUsaSk7aWYoIUFycmF5LmlzQXJyYXkoYykpe289YzticmVha311PXcoYyl9cmV0dXJuIG89bz9TdHJpbmcobyk6dm9pZCAwLGkua2V5T2JqZWN0P1tvLGkua2V5T2JqZWN0XTpbb119LGUucHJvdG90eXBlLmFkZFR5cGVQb2xpY2llcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWVbbl0saT1vLnF1ZXJ5VHlwZSxhPW8ubXV0YXRpb25UeXBlLHM9by5zdWJzY3JpcHRpb25UeXBlLHU9T2JqZWN0KHIuZSkobyxbInF1ZXJ5VHlwZSIsIm11dGF0aW9uVHlwZSIsInN1YnNjcmlwdGlvblR5cGUiXSk7aSYmdC5zZXRSb290VHlwZW5hbWUoIlF1ZXJ5IixuKSxhJiZ0LnNldFJvb3RUeXBlbmFtZSgiTXV0YXRpb24iLG4pLHMmJnQuc2V0Um9vdFR5cGVuYW1lKCJTdWJzY3JpcHRpb24iLG4pLGMuYy5jYWxsKHQudG9CZUFkZGVkLG4pP3QudG9CZUFkZGVkW25dLnB1c2godSk6dC50b0JlQWRkZWRbbl09W3VdfSkpfSxlLnByb3RvdHlwZS51cGRhdGVUeXBlUG9saWN5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuZ2V0VHlwZVBvbGljeShlKSxvPXQua2V5RmllbGRzLGk9dC5maWVsZHM7ZnVuY3Rpb24gYShlLHQpe2UubWVyZ2U9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDohMD09PXQ/djohMT09PXQ/YjplLm1lcmdlfWEocix0Lm1lcmdlKSxyLmtleUZuPSExPT09bz9kOkFycmF5LmlzQXJyYXkobyk/dyhvKToiZnVuY3Rpb24iPT10eXBlb2Ygbz9vOnIua2V5Rm4saSYmT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5nZXRGaWVsZFBvbGljeShlLHQsITApLG89aVt0XTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbylyLnJlYWQ9bztlbHNle3ZhciBzPW8ua2V5QXJncyx1PW8ucmVhZCxjPW8ubWVyZ2U7ci5rZXlGbj0hMT09PXM/cDpBcnJheS5pc0FycmF5KHMpP08ocyk6ImZ1bmN0aW9uIj09dHlwZW9mIHM/czpyLmtleUZuLCJmdW5jdGlvbiI9PXR5cGVvZiB1JiYoci5yZWFkPXUpLGEocixjKX1yLnJlYWQmJnIubWVyZ2UmJihyLmtleUZuPXIua2V5Rm58fHApfSkpfSxlLnByb3RvdHlwZS5zZXRSb290VHlwZW5hbWU9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1lKTt2YXIgbj0iUk9PVF8iK2UudG9VcHBlckNhc2UoKSxyPXRoaXMucm9vdFR5cGVuYW1lc0J5SWRbbl07dCE9PXImJihPYmplY3QoaS5iKSghcnx8cj09PWUsMSksciYmZGVsZXRlIHRoaXMucm9vdElkc0J5VHlwZW5hbWVbcl0sdGhpcy5yb290SWRzQnlUeXBlbmFtZVt0XT1uLHRoaXMucm9vdFR5cGVuYW1lc0J5SWRbbl09dCl9LGUucHJvdG90eXBlLmFkZFBvc3NpYmxlVHlwZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnVzaW5nUG9zc2libGVUeXBlcz0hMCxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt0LmdldFN1cGVydHlwZVNldChuLCEwKSxlW25dLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuZ2V0U3VwZXJ0eXBlU2V0KGUsITApLmFkZChuKTt2YXIgcj1lLm1hdGNoKGMuYSk7ciYmclswXT09PWV8fHQuZnV6enlTdWJ0eXBlcy5zZXQoZSxuZXcgUmVnRXhwKGUpKX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0VHlwZVBvbGljeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCFjLmMuY2FsbCh0aGlzLnR5cGVQb2xpY2llcyxlKSl7dmFyIG49dGhpcy50eXBlUG9saWNpZXNbZV09T2JqZWN0LmNyZWF0ZShudWxsKTtuLmZpZWxkcz1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBvPXRoaXMuc3VwZXJ0eXBlTWFwLmdldChlKTtvJiZvLnNpemUmJm8uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG89dC5nZXRUeXBlUG9saWN5KGUpLGk9by5maWVsZHMsYT1PYmplY3Qoci5lKShvLFsiZmllbGRzIl0pO09iamVjdC5hc3NpZ24obixhKSxPYmplY3QuYXNzaWduKG4uZmllbGRzLGkpfSkpfXZhciBpPXRoaXMudG9CZUFkZGVkW2VdO3JldHVybiBpJiZpLmxlbmd0aCYmaS5zcGxpY2UoMCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dC51cGRhdGVUeXBlUG9saWN5KGUsbil9KSksdGhpcy50eXBlUG9saWNpZXNbZV19LGUucHJvdG90eXBlLmdldEZpZWxkUG9saWN5PWZ1bmN0aW9uKGUsdCxuKXtpZihlKXt2YXIgcj10aGlzLmdldFR5cGVQb2xpY3koZSkuZmllbGRzO3JldHVybiByW3RdfHxuJiYoclt0XT1PYmplY3QuY3JlYXRlKG51bGwpKX19LGUucHJvdG90eXBlLmdldFN1cGVydHlwZVNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc3VwZXJ0eXBlTWFwLmdldChlKTtyZXR1cm4hbiYmdCYmdGhpcy5zdXBlcnR5cGVNYXAuc2V0KGUsbj1uZXcgU2V0KSxufSxlLnByb3RvdHlwZS5mcmFnbWVudE1hdGNoZXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZighZS50eXBlQ29uZGl0aW9uKXJldHVybiEwO2lmKCF0KXJldHVybiExO3ZhciBpPWUudHlwZUNvbmRpdGlvbi5uYW1lLnZhbHVlO2lmKHQ9PT1pKXJldHVybiEwO2lmKHRoaXMudXNpbmdQb3NzaWJsZVR5cGVzJiZ0aGlzLnN1cGVydHlwZU1hcC5oYXMoaSkpZm9yKHZhciBhPXRoaXMuZ2V0U3VwZXJ0eXBlU2V0KHQsITApLHM9W2FdLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9by5nZXRTdXBlcnR5cGVTZXQoZSwhMSk7dCYmdC5zaXplJiZzLmluZGV4T2YodCk8MCYmcy5wdXNoKHQpfSxsPSEoIW58fCF0aGlzLmZ1enp5U3VidHlwZXMuc2l6ZSksZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKGguaGFzKGkpKXJldHVybiBhLmhhcyhpKXx8YS5hZGQoaSksITA7aC5mb3JFYWNoKHUpLGwmJmY9PT1zLmxlbmd0aC0xJiZPYmplY3QoYy5lKShlLnNlbGVjdGlvblNldCxuLHIpJiYobD0hMSwhMCx0aGlzLmZ1enp5U3VidHlwZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt2YXIgcj10Lm1hdGNoKGUpO3ImJnJbMF09PT10JiZ1KG4pfSkpKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzS2V5QXJncz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0RmllbGRQb2xpY3koZSx0LCExKTtyZXR1cm4hKCFufHwhbi5rZXlGbil9LGUucHJvdG90eXBlLmdldFN0b3JlRmllbGROYW1lPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS50eXBlbmFtZSxyPWUuZmllbGROYW1lLG89dGhpcy5nZXRGaWVsZFBvbGljeShuLHIsITEpLGk9byYmby5rZXlGbjtpZihpJiZuKWZvcih2YXIgcz17dHlwZW5hbWU6bixmaWVsZE5hbWU6cixmaWVsZDplLmZpZWxkfHxudWxsLHZhcmlhYmxlczplLnZhcmlhYmxlc30sdT1mKGUpO2k7KXt2YXIgbD1pKHUscyk7aWYoIUFycmF5LmlzQXJyYXkobCkpe3Q9bHx8cjticmVha31pPU8obCl9cmV0dXJuIHZvaWQgMD09PXQmJih0PWUuZmllbGQ/T2JqZWN0KGEuaSkoZS5maWVsZCxlLnZhcmlhYmxlcyk6T2JqZWN0KGEuYikocixmKGUpKSksITE9PT10P3I6cj09PU9iamVjdChjLmIpKHQpP3Q6cisiOiIrdH0sZS5wcm90b3R5cGUucmVhZEZpZWxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5mcm9tO2lmKG4mJihlLmZpZWxkfHxlLmZpZWxkTmFtZSkpe2lmKHZvaWQgMD09PWUudHlwZW5hbWUpe3ZhciByPXQuc3RvcmUuZ2V0RmllbGRWYWx1ZShuLCJfX3R5cGVuYW1lIik7ciYmKGUudHlwZW5hbWU9cil9dmFyIG89dGhpcy5nZXRTdG9yZUZpZWxkTmFtZShlKSxpPU9iamVjdChjLmIpKG8pLHM9dC5zdG9yZS5nZXRGaWVsZFZhbHVlKG4sbyksdT10aGlzLmdldEZpZWxkUG9saWN5KGUudHlwZW5hbWUsaSwhMSksZj11JiZ1LnJlYWQ7aWYoZil7dmFyIGg9bSh0aGlzLG4sZSx0LHQuc3RvcmUuZ2V0U3RvcmFnZShPYmplY3QoYS5mKShuKT9uLl9fcmVmOm4sbykpO3JldHVybiBsLmEud2l0aFZhbHVlKHRoaXMuY2FjaGUsZixbcyxoXSl9cmV0dXJuIHN9fSxlLnByb3RvdHlwZS5nZXRNZXJnZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmdldEZpZWxkUG9saWN5KGUsdCwhMSksbz1yJiZyLm1lcmdlO3JldHVybiFvJiZuJiYobz0ocj10aGlzLmdldFR5cGVQb2xpY3kobikpJiZyLm1lcmdlKSxvfSxlLnByb3RvdHlwZS5ydW5NZXJnZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9bi5maWVsZCxhPW4udHlwZW5hbWUscz1uLm1lcmdlO3JldHVybiBzPT09dj9nKHIuc3RvcmUuZ2V0RmllbGRWYWx1ZSkoZSx0KTpzPT09Yj90OnMoZSx0LG0odGhpcyx2b2lkIDAse3R5cGVuYW1lOmEsZmllbGROYW1lOmkubmFtZS52YWx1ZSxmaWVsZDppLHZhcmlhYmxlczpyLnZhcmlhYmxlc30scixvfHxPYmplY3QuY3JlYXRlKG51bGwpKSl9LGV9KCk7ZnVuY3Rpb24gbShlLHQsbixvLGkpe3ZhciBzPWUuZ2V0U3RvcmVGaWVsZE5hbWUobiksdT1PYmplY3QoYy5iKShzKSxsPW4udmFyaWFibGVzfHxvLnZhcmlhYmxlcyxoPW8uc3RvcmUsZD1oLmdldEZpZWxkVmFsdWUscD1oLnRvUmVmZXJlbmNlLHY9aC5jYW5SZWFkO3JldHVybnthcmdzOmYobiksZmllbGQ6bi5maWVsZHx8bnVsbCxmaWVsZE5hbWU6dSxzdG9yZUZpZWxkTmFtZTpzLHZhcmlhYmxlczpsLGlzUmVmZXJlbmNlOmEuZix0b1JlZmVyZW5jZTpwLHN0b3JhZ2U6aSxjYWNoZTplLmNhY2hlLGNhblJlYWQ6dixyZWFkRmllbGQ6ZnVuY3Rpb24obixpKXt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIG4/e2ZpZWxkTmFtZTpuLGZyb206aX06T2JqZWN0KHIuYSkoe30sbik7cmV0dXJuIHZvaWQgMD09PWEuZnJvbSYmKGEuZnJvbT10KSx2b2lkIDA9PT1hLnZhcmlhYmxlcyYmKGEudmFyaWFibGVzPWwpLGUucmVhZEZpZWxkKGEsbyl9LG1lcmdlT2JqZWN0czpnKGQpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCl8fEFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IGkuYSgyKTtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJm4mJiJvYmplY3QiPT10eXBlb2Ygbil7dmFyIG89ZSh0LCJfX3R5cGVuYW1lIiksYT1lKG4sIl9fdHlwZW5hbWUiKTtyZXR1cm4hKG8mJmEmJm8hPT1hKSYmT2JqZWN0KGMuZikodCkmJk9iamVjdChjLmYpKG4pP09iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHQpLG4pOm59cmV0dXJuIG59fWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ/bi5maWVsZE5hbWUrIjoiK0pTT04uc3RyaW5naWZ5KGoodCxlLCExKSk6bi5maWVsZE5hbWV9fWZ1bmN0aW9uIHcoZSl7dmFyIHQ9bmV3IG8uYShzLmEpO3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvO2lmKHIuc2VsZWN0aW9uU2V0JiZyLmZyYWdtZW50TWFwKXt2YXIgaT10Lmxvb2t1cEFycmF5KFtyLnNlbGVjdGlvblNldCxyLmZyYWdtZW50TWFwXSk7bz1pLmFsaWFzTWFwfHwoaS5hbGlhc01hcD1mdW5jdGlvbiBlKHQsbil7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBTZXQoW3RdKTtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNlbGVjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoT2JqZWN0KGEuZCkodCkpe2lmKHQuYWxpYXMpe3ZhciBpPXQuYWxpYXMudmFsdWUscz10Lm5hbWUudmFsdWU7aWYocyE9PWkpKHIuYWxpYXNlc3x8KHIuYWxpYXNlcz1PYmplY3QuY3JlYXRlKG51bGwpKSlbc109aX1pZih0LnNlbGVjdGlvblNldCkoci5zdWJzZXRzfHwoci5zdWJzZXRzPU9iamVjdC5jcmVhdGUobnVsbCkpKVt0Lm5hbWUudmFsdWVdPWUodC5zZWxlY3Rpb25TZXQsbil9ZWxzZXt2YXIgYz1PYmplY3QodS5iKSh0LG4pO2MmJm8uYWRkKGMuc2VsZWN0aW9uU2V0KX19KSl9KSkscn0oci5zZWxlY3Rpb25TZXQsci5mcmFnbWVudE1hcCkpfXZhciBzPXIua2V5T2JqZWN0PWoobixlLCEwLG8pO3JldHVybiByLnR5cGVuYW1lKyI6IitKU09OLnN0cmluZ2lmeShzKX19ZnVuY3Rpb24gaihlLHQsbixyKXt2YXIgbyxhPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgcz1yJiZyLnN1YnNldHMsdT1zJiZzW29dO2Fbb109aihlW29dLHQsbix1KX19ZWxzZXt2YXIgbD1yJiZyLmFsaWFzZXMsZj1sJiZsW3RdfHx0O2MuYy5jYWxsKGUsZik/YVtvPXRdPWVbZl06KE9iamVjdChpLmIpKCFuLDMpLG89dm9pZCAwKX19KSksYX19LDQxNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighQm9vbGVhbihlKSl0aHJvdyBuZXcgRXJyb3IodCl9bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpfSw0MTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1bXTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdJiZyLnB1c2goZSl9KSksci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVt0XShuKX0pKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDQyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByPW4oMTU2KSxvPW4oMTMpLGk9bigyKTtmdW5jdGlvbiBhKGUsdCxuKXtjb25zdCBhPU9iamVjdChvLmEpKCk7bGV0IHM7aWYobnVsbD09bj92b2lkIDA6bi5lbmRwb2ludClzPW4uZW5kcG9pbnQ7ZWxzZXtzPWAkeyhudWxsPT1uP3ZvaWQgMDpuLmN1c3RvbUJhc2VVcmwpP24uY3VzdG9tQmFzZVVybFN1YlBhdGg/bi5jdXN0b21CYXNlVXJsLmNvbmNhdChuLmN1c3RvbUJhc2VVcmxTdWJQYXRoKTpuLmN1c3RvbUJhc2VVcmw6YS5iYXNlVXJsfS9zZXJ2aWNlLnN2Yz9hY3Rpb249JHtlfWB9cmV0dXJuKHZvaWQgMCE9PWEuaXNVc2VySWRsZSYmYS5pc1VzZXJJZGxlKCl8fDA9PShudWxsPT1uP3ZvaWQgMDpuLmlzVXNlckFjdGl2aXR5KSkmJihzKz0iJlVBPTAiKSwtMT09cy5pbmRleE9mKCImYXBwPSIpJiYtMT09cy5pbmRleE9mKCI/YXBwPSIpJiYocys9YCR7cy5pbmRleE9mKCI/Iik+LTE/IiYiOiI/In1hcHA9JHtPYmplY3QoaS5tKSgpfWApLE9iamVjdChyLmEpKGUscywxLG4sdCl9fSw0MjU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsKLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xNC4wCiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgcj1uKDI4Nyksbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGk9bz9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsYT1vP1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LHM9bz9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LHU9bz9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LGM9bz9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LGw9bz9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LGY9bz9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsaD1vP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsZD1vP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMscD1vP1N5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKTo2MDExNSx2PW8/U3ltYm9sLmZvcigicmVhY3QubGF6eSIpOjYwMTE2LGI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHkoZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgbT17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sZz17fTtmdW5jdGlvbiBPKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fG19ZnVuY3Rpb24gdygpe31mdW5jdGlvbiBqKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWcsdGhpcy51cGRhdGVyPW58fG19Ty5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxPLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IoeSg4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9LE8ucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfSx3LnByb3RvdHlwZT1PLnByb3RvdHlwZTt2YXIgRT1qLnByb3RvdHlwZT1uZXcgdztFLmNvbnN0cnVjdG9yPWoscihFLE8ucHJvdG90eXBlKSxFLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBTPXtjdXJyZW50Om51bGx9LEE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gSShlLHQsbil7dmFyIHIsbz17fSxhPW51bGwscz1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5yZWYmJihzPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGE9IiIrdC5rZXkpLHQpQS5jYWxsKHQscikmJiFrLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgdT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXUpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTx1KXtmb3IodmFyIGM9QXJyYXkodSksbD0wO2w8dTtsKyspY1tsXT1hcmd1bWVudHNbbCsyXTtvLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gdT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1vW3JdJiYob1tyXT11W3JdKTtyZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUsa2V5OmEscmVmOnMscHJvcHM6byxfb3duZXI6Uy5jdXJyZW50fX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1pfXZhciB4PS9cLysvZyxDPVtdO2Z1bmN0aW9uIE0oZSx0LG4scil7aWYoQy5sZW5ndGgpe3ZhciBvPUMucG9wKCk7cmV0dXJuIG8ucmVzdWx0PWUsby5rZXlQcmVmaXg9dCxvLmZ1bmM9bixvLmNvbnRleHQ9cixvLmNvdW50PTAsb31yZXR1cm57cmVzdWx0OmUsa2V5UHJlZml4OnQsZnVuYzpuLGNvbnRleHQ6cixjb3VudDowfX1mdW5jdGlvbiBSKGUpe2UucmVzdWx0PW51bGwsZS5rZXlQcmVmaXg9bnVsbCxlLmZ1bmM9bnVsbCxlLmNvbnRleHQ9bnVsbCxlLmNvdW50PTAsMTA+Qy5sZW5ndGgmJkMucHVzaChlKX1mdW5jdGlvbiBQKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOmZ1bmN0aW9uIGUodCxuLHIsbyl7dmFyIHM9dHlwZW9mIHQ7InVuZGVmaW5lZCIhPT1zJiYiYm9vbGVhbiIhPT1zfHwodD1udWxsKTt2YXIgdT0hMTtpZihudWxsPT09dCl1PSEwO2Vsc2Ugc3dpdGNoKHMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6dT0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaTpjYXNlIGE6dT0hMH19aWYodSlyZXR1cm4gcihvLHQsIiI9PT1uPyIuIitOKHQsMCk6biksMTtpZih1PTAsbj0iIj09PW4/Ii4iOm4rIjoiLEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBsPW4rTihzPXRbY10sYyk7dSs9ZShzLGwscixvKX1lbHNlIGlmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQ/bD1udWxsOmw9ImZ1bmN0aW9uIj09dHlwZW9mKGw9YiYmdFtiXXx8dFsiQEBpdGVyYXRvciJdKT9sOm51bGwsImZ1bmN0aW9uIj09dHlwZW9mIGwpZm9yKHQ9bC5jYWxsKHQpLGM9MDshKHM9dC5uZXh0KCkpLmRvbmU7KXUrPWUocz1zLnZhbHVlLGw9bitOKHMsYysrKSxyLG8pO2Vsc2UgaWYoIm9iamVjdCI9PT1zKXRocm93IHI9IiIrdCxFcnJvcih5KDMxLCJbb2JqZWN0IE9iamVjdF0iPT09cj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjpyLCIiKSk7cmV0dXJuIHV9KGUsIiIsdCxuKX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2UoL1s9Ol0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9KGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBEKGUsdCl7ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKX1mdW5jdGlvbiBCKGUsdCxuKXt2YXIgcj1lLnJlc3VsdCxvPWUua2V5UHJlZml4O2U9ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKSxBcnJheS5pc0FycmF5KGUpP0woZSxyLG4sKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWUmJihUKGUpJiYoZT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjppLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGUsbysoIWUua2V5fHx0JiZ0LmtleT09PWUua2V5PyIiOigiIitlLmtleSkucmVwbGFjZSh4LCIkJi8iKSsiLyIpK24pKSxyLnB1c2goZSkpfWZ1bmN0aW9uIEwoZSx0LG4scixvKXt2YXIgaT0iIjtudWxsIT1uJiYoaT0oIiIrbikucmVwbGFjZSh4LCIkJi8iKSsiLyIpLFAoZSxCLHQ9TSh0LGkscixvKSksUih0KX12YXIgVT17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBGKCl7dmFyIGU9VS5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHkoMzIxKSk7cmV0dXJuIGV9dmFyIFE9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6VSxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7c3VzcGVuc2U6bnVsbH0sUmVhY3RDdXJyZW50T3duZXI6UyxJc1NvbWVSZW5kZXJlckFjdGluZzp7Y3VycmVudDohMX0sYXNzaWduOnJ9O3QuQ2hpbGRyZW49e21hcDpmdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXTtyZXR1cm4gTChlLHIsbnVsbCx0LG4pLHJ9LGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7UChlLEQsdD1NKG51bGwsbnVsbCx0LG4pKSxSKHQpfSxjb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLChmdW5jdGlvbigpe3JldHVybiBudWxsfSksbnVsbCl9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIEwoZSx0LG51bGwsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLHR9LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIVQoZSkpdGhyb3cgRXJyb3IoeSgxNDMpKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PU8sdC5GcmFnbWVudD1zLHQuUHJvZmlsZXI9Yyx0LlB1cmVDb21wb25lbnQ9aix0LlN0cmljdE1vZGU9dSx0LlN1c3BlbnNlPWQsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1RLHQuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXRocm93IEVycm9yKHkoMjY3LGUpKTt2YXIgbz1yKHt9LGUucHJvcHMpLGE9ZS5rZXkscz1lLnJlZix1PWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYocz10LnJlZix1PVMuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihhPSIiK3Qua2V5KSxlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGM9ZS50eXBlLmRlZmF1bHRQcm9wcztmb3IobCBpbiB0KUEuY2FsbCh0LGwpJiYhay5oYXNPd25Qcm9wZXJ0eShsKSYmKG9bbF09dm9pZCAwPT09dFtsXSYmdm9pZCAwIT09Yz9jW2xdOnRbbF0pfXZhciBsPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09bClvLmNoaWxkcmVuPW47ZWxzZSBpZigxPGwpe2M9QXJyYXkobCk7Zm9yKHZhciBmPTA7ZjxsO2YrKyljW2ZdPWFyZ3VtZW50c1tmKzJdO28uY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUudHlwZSxrZXk6YSxyZWY6cyxwcm9wczpvLF9vd25lcjp1fX0sdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLChlPXskJHR5cGVvZjpmLF9jYWxjdWxhdGVDaGFuZ2VkQml0czp0LF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH0pLlByb3ZpZGVyPXskJHR5cGVvZjpsLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX0sdC5jcmVhdGVFbGVtZW50PUksdC5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PUkuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSx0LmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSx0LmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmgscmVuZGVyOmV9fSx0LmlzVmFsaWRFbGVtZW50PVQsdC5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjp2LF9jdG9yOmUsX3N0YXR1czotMSxfcmVzdWx0Om51bGx9fSx0Lm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6cCx0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHQudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRigpLnVzZUNhbGxiYWNrKGUsdCl9LHQudXNlQ29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiBGKCkudXNlQ29udGV4dChlLHQpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYoKS51c2VFZmZlY3QoZSx0KX0sdC51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRigpLnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LG4pfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBGKCkudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBGKCkudXNlTWVtbyhlLHQpfSx0LnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGKCkudXNlUmVkdWNlcihlLHQsbil9LHQudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBGKCkudXNlUmVmKGUpfSx0LnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBGKCkudXNlU3RhdGUoZSl9LHQudmVyc2lvbj0iMTYuMTQuMCJ9LDQzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiZiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiBofSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKTtjb25zdCByPSJvdXRsb29rZGVza3RvcCIsbz0ibWFjb3V0bG9vayIsaT0iaW9zb3V0bG9vayIsYT0iYW5kcm9pZG91dGxvb2siLHM9Im5hdGl2ZSIsdT0ibzM2NXNoZWxsIixjPSJ0ZWFtcyIsbD0id2lkZ2V0IixmPSJ3aW4zMm91dGxvb2todWIiLGg9InRlYW1zaHViIixkPSJodWIifSw0MzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTk1KTsic3RyaW5nIj09dHlwZW9mIHImJihyPVtbZS5pLHIsIiJdXSk7dmFyIG89e3RyYW5zZm9ybTp2b2lkIDB9O24oODgpKHIsbyk7ci5sb2NhbHMmJihlLmV4cG9ydHM9ci5sb2NhbHMpfSw0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSk7dmFyIHI9big3OSksbz1uKDUpLGk9bigxMCk7Y29uc3QgYT0zZTM7bGV0IHM7Y29uc3QgdT0iZHAiO2Z1bmN0aW9uIGMoZSl7aWYocz1lLHMpdHJ5e2NvbnN0IGU9ZnVuY3Rpb24oKXtjb25zdCBlPU9iamVjdChpLmMpKCksdD1PYmplY3QoaS5lKSgpO2lmKHR8fGUpcmV0dXJuIHR8fGU7c3dpdGNoKE9iamVjdChpLmgpKCkpe2Nhc2UiQmxhY2tGb3Jlc3QiOnJldHVybiByLkFXVF9DT0xMRUNUT1JfVVJMX0VVUk9QRTtjYXNlIkdjY0hpZ2giOnJldHVybiJodHRwczovL3RiLnBpcGUuYXJpYS5taWNyb3NvZnQuY29tLyIraS5hO2Nhc2UiRG9EIjpyZXR1cm4iaHR0cHM6Ly9wZi5waXBlLmFyaWEubWljcm9zb2Z0LmNvbS8iK2kuYTtjYXNlIkFHMDgiOnJldHVybiJodHRwczovL29mZmljZS5jb2xsZWN0b3IuYXp1cmUuZWFnbGV4LmljLmdvdi8iK2kuYTtjYXNlIkFHMDkiOnJldHVybiJodHRwczovL29mZmljZS5jb2xsZWN0b3IuYXp1cmUubWljcm9zb2Z0LnNjbG91ZC8iK2kuYTtkZWZhdWx0OnJldHVybn19KCk7ZT9yLkFXVC5pbml0aWFsaXplKHMse2NvbGxlY3RvclVybDplfSk6ci5BV1QuaW5pdGlhbGl6ZShzKX1jYXRjaChlKXt9fWZ1bmN0aW9uIGwoZSl7dmFyIHQsbjtlLm5hbWUsaCgobnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUucHJvcGVydGllcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuRXJyb3JTb3VyY2UpfHwiIiksaCgobnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucHJvcGVydGllcyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uRXJyb3JUeXBlKXx8IiIpfWZ1bmN0aW9uIGYoZSx0KXtpZighcylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj1PYmplY3Qoby5mKSh1KSxpPSFPYmplY3Qoby5hKSgpO3JldHVybiBuZXcgUHJvbWlzZShhc3luYyBvPT57bGV0IHM9d2luZG93LnNldFRpbWVvdXQobyx0fHxhKTt0cnl7Y29uc3QgdD1hd2FpdCBlO2lmKHQpe2Zvcihjb25zdCBlIG9mIHQpaSYmci5BV1QubG9nRXZlbnQoZSksbiYmbChlKTthd2FpdCBuZXcgUHJvbWlzZShlPT57ci5BV1QuZmx1c2goKCk9PmUoKSl9KX19Y2F0Y2goZSl7fWZpbmFsbHl7d2luZG93LmNsZWFyVGltZW91dChzKSxvKCl9fSl9ZnVuY3Rpb24gaChlKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWNhdGNoKGUpe3JldHVybiBlLm1lc3NhZ2V9fX0sNDQ0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX19LDQ0NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjE3KSxvPW4oMjkyKSxpPW4oMTQwKSxhPW4oMzA1KSxzPW4oMzMwKSx1PW4oMzI5KSxjPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0KGkuYSkoZSksbD0hbiYmT2JqZWN0KG8uYSkoZSksZj0hbiYmIWwmJk9iamVjdChhLmEpKGUpLGg9IW4mJiFsJiYhZiYmT2JqZWN0KHUuYSkoZSksZD1ufHxsfHxmfHxoLHA9ZD9PYmplY3Qoci5hKShlLmxlbmd0aCxTdHJpbmcpOltdLHY9cC5sZW5ndGg7Zm9yKHZhciBiIGluIGUpIXQmJiFjLmNhbGwoZSxiKXx8ZCYmKCJsZW5ndGgiPT1ifHxmJiYoIm9mZnNldCI9PWJ8fCJwYXJlbnQiPT1iKXx8aCYmKCJidWZmZXIiPT1ifHwiYnl0ZUxlbmd0aCI9PWJ8fCJieXRlT2Zmc2V0Ij09Yil8fE9iamVjdChzLmEpKGIsdikpfHxwLnB1c2goYik7cmV0dXJuIHB9fSw0NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9bigxMik7ZnVuY3Rpb24gbygpe3JldHVybiBPYmplY3Qoci5hKSgpLmxvY2F0aW9ufWZ1bmN0aW9uIGkoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9ufX0sNDY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2KSxvPW4oMjEzKSxpPW4oMjE0KTtjb25zdCBhPVsiSW52YWxpZExpY2Vuc2UiLCJUZW5hbnRBY2Nlc3NCbG9ja2VkIiwiVXNlckhhc05vTWFpbGJveCIsIkFjY291bnREaXNhYmxlZCIsIkVycm9yTm9uRXhpc3RlbnRNYWlsYm94IiwiRXJyb3JNZXNzYWdlU2l6ZUV4Y2VlZGVkIl07ZnVuY3Rpb24gcyhlKXtyZXR1cm4gT2JqZWN0KHIuYSkoYSxlKX12YXIgdT1uKDIxNSk7Y29uc3QgYz1bIk92ZXJCdWRnZXQiLCJUb29NYW55T2JqZWN0c09wZW5lZCIsIkVycm9yU2VydmVyQnVzeSIsIk1haWxib3hTdG9yZVVuYXZhaWxhYmxlIl07ZnVuY3Rpb24gbChlKXtyZXR1cm4gT2JqZWN0KHIuYSkoYyxlKX1jb25zdCBmPVsiQ29ubmVjdGlvbkZhaWxlZFRyYW5zaWVudCIsIlN0b3JhZ2VUcmFuc2llbnQiLCJPd2FMb2NrVHJhY2thYmxlVGltZW91dCIsIk1haWxib3hJblRyYW5zaXQiLCJNYWlsYm94SW5mb1N0YWxlIiwiTWFpbGJveENyb3NzU2l0ZUZhaWxvdmVyIiwiT3dhTG9ja1RpbWVvdXQiLCJEQ092ZXJsb2FkZWQiLCJFcnJvckludGVybmFsU2VydmVyVHJhbnNpZW50RXJyb3IiLCJFcnJvclJpZ2h0c01hbmFnZW1lbnRUcmFuc2llbnRFeGNlcHRpb24iXTtmdW5jdGlvbiBoKGUpe3JldHVybiBPYmplY3Qoci5hKShmLGUpfWNvbnN0IGQ9WyJOb09wZXJhdGlvbkVycm9yIiwiU3ludGF4RXJyb3IiLCJJbnZhbGlkT3BlcmF0aW9uRXJyb3IiLCJJbnZhbGlkVmFyaWFibGVFcnJvciIsIlVOSVFVRV9PUEVSQVRJT05fTkFNRVMiLCJMT05FX0FOT05ZTU9VU19PUEVSQVRJT04iLCJTSU5HTEVfUk9PVF9GSUVMRF9TVUJTQ1JJUFRJT05TIiwiRklFTERTX09OX0NPUlJFQ1RfVFlQRSIsIk9WRVJMQVBQSU5HX0ZJRUxEU19DQU5fQkVfTUVSR0VEIiwiU0NBTEFSX0xFQUZTIiwiS05PV05fQVJHVU1FTlRfTkFNRVMiLCJVTklRVUVfQVJHVU1FTlRfTkFNRVMiLCJQUk9WSURFRF9OT05fTlVMTF9BUkdVTUVOVFMiLCJVTklRVUVfRlJBR01FTlRfTkFNRVMiLCJLTk9XTl9UWVBFX05BTUVTIiwiRlJBR01FTlRTX09OX0NPTVBPU0lURV9UWVBFUyIsIk5PX1VOVVNFRF9GUkFHTUVOVFMiLCJLTk9XTl9GUkFHTUVOVF9OQU1FUyIsIk5PX0ZSQUdNRU5UX0NZQ0xFUyIsIlBPU1NJQkxFX0ZSQUdNRU5UX1NQUkVBRFMiLCJBUkdVTUVOVFNfT0ZfQ09SUkVDVF9UWVBFIiwiREVGQVVMVF9WQUxVRVNfT0ZfQ09SUkVDVF9UWVBFIiwiVU5JUVVFX0lOUFVUX0ZJRUxEX05BTUVTIiwiS05PV05fRElSRUNUSVZFUyIsIkRJUkVDVElWRVNfSU5fQUxMT1dFRF9MT0NBVElPTlMiLCJVTklRVUVfRElSRUNUSVZFU19QRVJfTE9DQVRJT04iLCJVTklRVUVfVkFSSUFCTEVfTkFNRVMiLCJWQVJJQUJMRVNfQVJFX0lOUFVUX1RZUEVTIiwiTk9fVU5ERUZJTkVEX1ZBUklBQkxFUyIsIk5PX1VOVVNFRF9WQVJJQUJMRVMiLCJWQVJJQUJMRVNfSU5fQUxMT1dFRF9QT1NJVElPTiIsInVuZGVmaW5lZCJdO2Z1bmN0aW9uIHAoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPShudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5leHRlbnNpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb2RlKSYmIU9iamVjdChyLmEpKGQsZS5leHRlbnNpb25zLmNvZGUpfW4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5hfSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5hfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gaS5hfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBofSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKX0sNDYyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciByPW4oNDA5KSxvPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsaT1vJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmaS5leHBvcnRzPT09byYmci5hLnByb2Nlc3Mscz1mdW5jdGlvbigpe3RyeXt2YXIgZT1pJiZpLnJlcXVpcmUmJmkucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiBlfHxhJiZhLmJpbmRpbmcmJmEuYmluZGluZygidXRpbCIpfWNhdGNoKGUpe319KCk7dC5hPXN9KS5jYWxsKHRoaXMsbigzOTgpKGUpKX0sNDY4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4KSxvPW4oMTkpLGk9big0MDUpLGE9big2MDkpLHM9bigxMjUyKSx1PSIzLjMuMjEiLGM9big0NzMpLGw9bigyMzUpLGY9bigzNTIpLGg9big2MzIpLGQ9big2MzQpLHA9big2MjkpLHY9big0NzYpLGI9big2MzMpO3ZhciB5PW4oODA0KSxtPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD1lLnVyaSxuPXZvaWQgMD09PXQ/Ii9ncmFwaHFsIjp0LG89ZS5mZXRjaCxhPWUuaW5jbHVkZUV4dGVuc2lvbnMscz1lLnVzZUdFVEZvclF1ZXJpZXMsdT1lLmluY2x1ZGVVbnVzZWRWYXJpYWJsZXMsbT12b2lkIDAhPT11JiZ1LGc9T2JqZWN0KHIuZSkoZSxbInVyaSIsImZldGNoIiwiaW5jbHVkZUV4dGVuc2lvbnMiLCJ1c2VHRVRGb3JRdWVyaWVzIiwiaW5jbHVkZVVudXNlZFZhcmlhYmxlcyJdKTtPYmplY3QocC5hKShvKSxvfHwobz1mZXRjaCk7dmFyIE89e2h0dHA6e2luY2x1ZGVFeHRlbnNpb25zOmF9LG9wdGlvbnM6Zy5mZXRjaE9wdGlvbnMsY3JlZGVudGlhbHM6Zy5jcmVkZW50aWFscyxoZWFkZXJzOmcuaGVhZGVyc307cmV0dXJuIG5ldyBpLmEoKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChoLmEpKGUsbiksaT1lLmdldENvbnRleHQoKSxhPXt9O2lmKGkuY2xpZW50QXdhcmVuZXNzKXt2YXIgdT1pLmNsaWVudEF3YXJlbmVzcyxwPXUubmFtZSxnPXUudmVyc2lvbjtwJiYoYVsiYXBvbGxvZ3JhcGhxbC1jbGllbnQtbmFtZSJdPXApLGcmJihhWyJhcG9sbG9ncmFwaHFsLWNsaWVudC12ZXJzaW9uIl09Zyl9dmFyIHcsaj1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxhKSxpLmhlYWRlcnMpLEU9e2h0dHA6aS5odHRwLG9wdGlvbnM6aS5mZXRjaE9wdGlvbnMsY3JlZGVudGlhbHM6aS5jcmVkZW50aWFscyxoZWFkZXJzOmp9LFM9T2JqZWN0KHYuYikoZSx2LmEsTyxFKSxBPVMub3B0aW9ucyxrPVMuYm9keTtpZihrLnZhcmlhYmxlcyYmIW0pe3ZhciBJPW5ldyBTZXQoT2JqZWN0LmtleXMoay52YXJpYWJsZXMpKTtPYmplY3QoYy5jKShlLnF1ZXJ5LHtWYXJpYWJsZTpmdW5jdGlvbihlLHQsbil7biYmIlZhcmlhYmxlRGVmaW5pdGlvbiIhPT1uLmtpbmQmJkkuZGVsZXRlKGUubmFtZS52YWx1ZSl9fSksSS5zaXplJiYoay52YXJpYWJsZXM9T2JqZWN0KHIuYSkoe30say52YXJpYWJsZXMpLEkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZGVsZXRlIGsudmFyaWFibGVzW2VdfSkpKX1pZighQS5zaWduYWwpe3ZhciBUPU9iamVjdChiLmEpKCkseD1ULmNvbnRyb2xsZXIsQz1ULnNpZ25hbDsodz14KSYmKEEuc2lnbmFsPUMpfWlmKHMmJiFlLnF1ZXJ5LmRlZmluaXRpb25zLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJPcGVyYXRpb25EZWZpbml0aW9uIj09PWUua2luZCYmIm11dGF0aW9uIj09PWUub3BlcmF0aW9ufSkpJiYoQS5tZXRob2Q9IkdFVCIpLCJHRVQiPT09QS5tZXRob2Qpe3ZhciBNPWZ1bmN0aW9uKGUsdCl7dmFyIG49W10scj1mdW5jdGlvbihlLHQpe24ucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpfTtpZigicXVlcnkiaW4gdCYmcigicXVlcnkiLHQucXVlcnkpLHQub3BlcmF0aW9uTmFtZSYmcigib3BlcmF0aW9uTmFtZSIsdC5vcGVyYXRpb25OYW1lKSx0LnZhcmlhYmxlcyl7dmFyIG89dm9pZCAwO3RyeXtvPU9iamVjdChmLmEpKHQudmFyaWFibGVzLCJWYXJpYWJsZXMgbWFwIil9Y2F0Y2goZSl7cmV0dXJue3BhcnNlRXJyb3I6ZX19cigidmFyaWFibGVzIixvKX1pZih0LmV4dGVuc2lvbnMpe3ZhciBpPXZvaWQgMDt0cnl7aT1PYmplY3QoZi5hKSh0LmV4dGVuc2lvbnMsIkV4dGVuc2lvbnMgbWFwIil9Y2F0Y2goZSl7cmV0dXJue3BhcnNlRXJyb3I6ZX19cigiZXh0ZW5zaW9ucyIsaSl9dmFyIGE9IiIscz1lLHU9ZS5pbmRleE9mKCIjIik7LTEhPT11JiYoYT1lLnN1YnN0cih1KSxzPWUuc3Vic3RyKDAsdSkpO3ZhciBjPS0xPT09cy5pbmRleE9mKCI/Iik/Ij8iOiImIjtyZXR1cm57bmV3VVJJOnMrYytuLmpvaW4oIiYiKSthfX0odCxrKSxSPU0ubmV3VVJJLFA9TS5wYXJzZUVycm9yO2lmKFApcmV0dXJuIE9iamVjdCh5LmEpKFApO3Q9Un1lbHNlIHRyeXtBLmJvZHk9T2JqZWN0KGYuYSkoaywiUGF5bG9hZCIpfWNhdGNoKFApe3JldHVybiBPYmplY3QoeS5hKShQKX1yZXR1cm4gbmV3IGwuYSgoZnVuY3Rpb24obil7cmV0dXJuIG8odCxBKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRDb250ZXh0KHtyZXNwb25zZTp0fSksdH0pKS50aGVuKE9iamVjdChkLmEpKGUpKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbi5uZXh0KGUpLG4uY29tcGxldGUoKSxlfSkpLmNhdGNoKChmdW5jdGlvbihlKXsiQWJvcnRFcnJvciIhPT1lLm5hbWUmJihlLnJlc3VsdCYmZS5yZXN1bHQuZXJyb3JzJiZlLnJlc3VsdC5kYXRhJiZuLm5leHQoZS5yZXN1bHQpLG4uZXJyb3IoZSkpfSkpLGZ1bmN0aW9uKCl7dyYmdy5hYm9ydCgpfX0pKX0pKX0sZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1lLmNhbGwodGhpcyxtKHQpLnJlcXVlc3QpfHx0aGlzO3JldHVybiBuLm9wdGlvbnM9dCxufXJldHVybiBPYmplY3Qoci5jKSh0LGUpLHR9KGkuYSksTz1uKDczKSx3PW4oNjM5KTtmdW5jdGlvbiBqKGUpe3JldHVybiBlLmVycm9ycyYmZS5lcnJvcnMubGVuZ3RoPjB8fCExfXZhciBFPW4oODQxKSxTPW4oMjQ3KSxBPW4oMTI1Nyksaz1uKDg0MCksST1uKDQxNiksVD1uKDYzNSk7ZnVuY3Rpb24geChlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudGhlbn12YXIgQz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGRPYnNlcnZlcihlKSxmdW5jdGlvbigpe3JldHVybiBuLnJlbW92ZU9ic2VydmVyKGUpfX0pKXx8dGhpcztyZXR1cm4gbi5vYnNlcnZlcnM9bmV3IFNldCxuLmFkZENvdW50PTAsbi5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe24ucmVzb2x2ZT1lLG4ucmVqZWN0PXR9KSksbi5oYW5kbGVycz17bmV4dDpmdW5jdGlvbihlKXtudWxsIT09bi5zdWImJihuLmxhdGVzdD1bIm5leHQiLGVdLE9iamVjdChJLmEpKG4ub2JzZXJ2ZXJzLCJuZXh0IixlKSl9LGVycm9yOmZ1bmN0aW9uKGUpe3ZhciB0PW4uc3ViO251bGwhPT10JiYodCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC51bnN1YnNjcmliZSgpfSkpLG4uc3ViPW51bGwsbi5sYXRlc3Q9WyJlcnJvciIsZV0sbi5yZWplY3QoZSksT2JqZWN0KEkuYSkobi5vYnNlcnZlcnMsImVycm9yIixlKSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7aWYobnVsbCE9PW4uc3ViKXt2YXIgZT1uLnNvdXJjZXMuc2hpZnQoKTtlP3goZSk/ZS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbi5zdWI9ZS5zdWJzY3JpYmUobi5oYW5kbGVycyl9KSk6bi5zdWI9ZS5zdWJzY3JpYmUobi5oYW5kbGVycyk6KG4uc3ViPW51bGwsbi5sYXRlc3QmJiJuZXh0Ij09PW4ubGF0ZXN0WzBdP24ucmVzb2x2ZShuLmxhdGVzdFsxXSk6bi5yZXNvbHZlKCksT2JqZWN0KEkuYSkobi5vYnNlcnZlcnMsImNvbXBsZXRlIikpfX19LG4uY2FuY2VsPWZ1bmN0aW9uKGUpe24ucmVqZWN0KGUpLG4uc291cmNlcz1bXSxuLmhhbmRsZXJzLmNvbXBsZXRlKCl9LG4ucHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oZSl7fSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1bbmV3IGwuYSh0KV0pLHgodCk/dC50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbi5zdGFydChlKX0pLG4uaGFuZGxlcnMuZXJyb3IpOm4uc3RhcnQodCksbn1yZXR1cm4gT2JqZWN0KHIuYykodCxlKSx0LnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2b2lkIDA9PT10aGlzLnN1YiYmKHRoaXMuc291cmNlcz1BcnJheS5mcm9tKGUpLHRoaXMuaGFuZGxlcnMuY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmRlbGl2ZXJMYXN0TWVzc2FnZT1mdW5jdGlvbihlKXtpZih0aGlzLmxhdGVzdCl7dmFyIHQ9dGhpcy5sYXRlc3RbMF0sbj1lW3RdO24mJm4uY2FsbChlLHRoaXMubGF0ZXN0WzFdKSxudWxsPT09dGhpcy5zdWImJiJuZXh0Ij09PXQmJmUuY29tcGxldGUmJmUuY29tcGxldGUoKX19LHQucHJvdG90eXBlLmFkZE9ic2VydmVyPWZ1bmN0aW9uKGUpe3RoaXMub2JzZXJ2ZXJzLmhhcyhlKXx8KHRoaXMuZGVsaXZlckxhc3RNZXNzYWdlKGUpLHRoaXMub2JzZXJ2ZXJzLmFkZChlKSwrK3RoaXMuYWRkQ291bnQpfSx0LnByb3RvdHlwZS5yZW1vdmVPYnNlcnZlcj1mdW5jdGlvbihlLHQpe3RoaXMub2JzZXJ2ZXJzLmRlbGV0ZShlKSYmLS10aGlzLmFkZENvdW50PDEmJiF0JiZ0aGlzLmhhbmRsZXJzLmVycm9yKG5ldyBFcnJvcigiT2JzZXJ2YWJsZSBjYW5jZWxsZWQgcHJlbWF0dXJlbHkiKSl9LHQucHJvdG90eXBlLmNsZWFudXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPSExLHI9ZnVuY3Rpb24oKXtufHwobj0hMCx0Lm9ic2VydmVycy5kZWxldGUobyksZSgpKX0sbz17bmV4dDpyLGVycm9yOnIsY29tcGxldGU6cn0saT10aGlzLmFkZENvdW50O3RoaXMuYWRkT2JzZXJ2ZXIobyksdGhpcy5hZGRDb3VudD1pfSx0fShsLmEpO2Z1bmN0aW9uIE0oZSx0LG4pe3JldHVybiBuZXcgbC5hKChmdW5jdGlvbihyKXt2YXIgbz1yLm5leHQsaT1yLmVycm9yLGE9ci5jb21wbGV0ZSxzPTAsdT0hMSxjPXt0aGVuOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSgpKX0pKX19O2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT9mdW5jdGlvbih0KXsrK3M7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX07Yz1jLnRoZW4obixuKS50aGVuKChmdW5jdGlvbihlKXstLXMsbyYmby5jYWxsKHIsZSksdSYmZi5jb21wbGV0ZSgpfSksKGZ1bmN0aW9uKGUpe3Rocm93LS1zLGV9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2kmJmkuY2FsbChyLGUpfSkpfTpmdW5jdGlvbihlKXtyZXR1cm4gdCYmdC5jYWxsKHIsZSl9fXZhciBmPXtuZXh0OmwodCxvKSxlcnJvcjpsKG4saSksY29tcGxldGU6ZnVuY3Rpb24oKXt1PSEwLHN8fGEmJmEuY2FsbChyKX19LGg9ZS5zdWJzY3JpYmUoZik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGgudW5zdWJzY3JpYmUoKX19KSl9T2JqZWN0KFQuYSkoQyk7dmFyIFI9bigxNDMpLFA9big0MDYpLE49big2OSksRD1uKDgzOSksQj1uKDMxMyksTD1uKDkwKSxVPW4oMjY3KSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLmNhY2hlLG49ZS5jbGllbnQscj1lLnJlc29sdmVycyxvPWUuZnJhZ21lbnRNYXRjaGVyO3RoaXMuY2FjaGU9dCxuJiYodGhpcy5jbGllbnQ9biksciYmdGhpcy5hZGRSZXNvbHZlcnMociksbyYmdGhpcy5zZXRGcmFnbWVudE1hdGNoZXIobyl9cmV0dXJuIGUucHJvdG90eXBlLmFkZFJlc29sdmVycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucmVzb2x2ZXJzPXRoaXMucmVzb2x2ZXJzfHx7fSxBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5yZXNvbHZlcnM9T2JqZWN0KEQuYikodC5yZXNvbHZlcnMsZSl9KSk6dGhpcy5yZXNvbHZlcnM9T2JqZWN0KEQuYikodGhpcy5yZXNvbHZlcnMsZSl9LGUucHJvdG90eXBlLnNldFJlc29sdmVycz1mdW5jdGlvbihlKXt0aGlzLnJlc29sdmVycz17fSx0aGlzLmFkZFJlc29sdmVycyhlKX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzb2x2ZXJzfHx7fX0sZS5wcm90b3R5cGUucnVuUmVzb2x2ZXJzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnQsbj1lLnJlbW90ZVJlc3VsdCxvPWUuY29udGV4dCxpPWUudmFyaWFibGVzLGE9ZS5vbmx5UnVuRm9yY2VkUmVzb2x2ZXJzLHM9dm9pZCAwIT09YSYmYTtyZXR1cm4gT2JqZWN0KHIuYikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoci5kKSh0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gdD9bMix0aGlzLnJlc29sdmVEb2N1bWVudCh0LG4uZGF0YSxvLGksdGhpcy5mcmFnbWVudE1hdGNoZXIscykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LG4pLHtkYXRhOmUucmVzdWx0fSl9KSldOlsyLG5dfSkpfSkpfSxlLnByb3RvdHlwZS5zZXRGcmFnbWVudE1hdGNoZXI9ZnVuY3Rpb24oZSl7dGhpcy5mcmFnbWVudE1hdGNoZXI9ZX0sZS5wcm90b3R5cGUuZ2V0RnJhZ21lbnRNYXRjaGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJhZ21lbnRNYXRjaGVyfSxlLnByb3RvdHlwZS5jbGllbnRRdWVyeT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGsuYikoWyJjbGllbnQiXSxlKSYmdGhpcy5yZXNvbHZlcnM/ZTpudWxsfSxlLnByb3RvdHlwZS5zZXJ2ZXJRdWVyeT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KEEuYykoZSl9LGUucHJvdG90eXBlLnByZXBhcmVDb250ZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2FjaGU7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUpLHtjYWNoZTp0LGdldENhY2hlS2V5OmZ1bmN0aW9uKGUpe3JldHVybiB0LmlkZW50aWZ5KGUpfX0pfSxlLnByb3RvdHlwZS5hZGRFeHBvcnRlZFZhcmlhYmxlcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDA9PT1uJiYobj17fSksT2JqZWN0KHIuYikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoci5kKSh0aGlzLChmdW5jdGlvbihvKXtyZXR1cm4gZT9bMix0aGlzLnJlc29sdmVEb2N1bWVudChlLHRoaXMuYnVpbGRSb290VmFsdWVGcm9tQ2FjaGUoZSx0KXx8e30sdGhpcy5wcmVwYXJlQ29udGV4dChuKSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdCksZS5leHBvcnRlZFZhcmlhYmxlcyl9KSldOlsyLE9iamVjdChyLmEpKHt9LHQpXX0pKX0pKX0sZS5wcm90b3R5cGUuc2hvdWxkRm9yY2VSZXNvbHZlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIE9iamVjdChjLmMpKGUse0RpcmVjdGl2ZTp7ZW50ZXI6ZnVuY3Rpb24oZSl7aWYoImNsaWVudCI9PT1lLm5hbWUudmFsdWUmJmUuYXJndW1lbnRzJiYodD1lLmFyZ3VtZW50cy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4iYWx3YXlzIj09PWUubmFtZS52YWx1ZSYmIkJvb2xlYW5WYWx1ZSI9PT1lLnZhbHVlLmtpbmQmJiEwPT09ZS52YWx1ZS52YWx1ZX0pKSkpcmV0dXJuIGMuYX19fSksdH0sZS5wcm90b3R5cGUuYnVpbGRSb290VmFsdWVGcm9tQ2FjaGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jYWNoZS5kaWZmKHtxdWVyeTpPYmplY3QoQS5iKShlKSx2YXJpYWJsZXM6dCxyZXR1cm5QYXJ0aWFsRGF0YTohMCxvcHRpbWlzdGljOiExfSkucmVzdWx0fSxlLnByb3RvdHlwZS5yZXNvbHZlRG9jdW1lbnQ9ZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09byYmKG89e30pLHZvaWQgMD09PWkmJihpPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx2b2lkIDA9PT1hJiYoYT0hMSksT2JqZWN0KHIuYikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBzLHUsYyxsLGYsaCxkLHAsdjtyZXR1cm4gT2JqZWN0KHIuZCkodGhpcywoZnVuY3Rpb24oYil7cmV0dXJuIHM9T2JqZWN0KFMuZSkoZSksdT1PYmplY3QoUy5kKShlKSxjPU9iamVjdChCLmEpKHUpLGw9cy5vcGVyYXRpb24sZj1sP2wuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbC5zbGljZSgxKToiUXVlcnkiLGQ9KGg9dGhpcykuY2FjaGUscD1oLmNsaWVudCx2PXtmcmFnbWVudE1hcDpjLGNvbnRleHQ6T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sbikse2NhY2hlOmQsY2xpZW50OnB9KSx2YXJpYWJsZXM6byxmcmFnbWVudE1hdGNoZXI6aSxkZWZhdWx0T3BlcmF0aW9uVHlwZTpmLGV4cG9ydGVkVmFyaWFibGVzOnt9LG9ubHlSdW5Gb3JjZWRSZXNvbHZlcnM6YX0sWzIsdGhpcy5yZXNvbHZlU2VsZWN0aW9uU2V0KHMuc2VsZWN0aW9uU2V0LHQsdikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJue3Jlc3VsdDplLGV4cG9ydGVkVmFyaWFibGVzOnYuZXhwb3J0ZWRWYXJpYWJsZXN9fSkpXX0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVNlbGVjdGlvblNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE9iamVjdChyLmIpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgaSxhLHMsdSxjLGw9dGhpcztyZXR1cm4gT2JqZWN0KHIuZCkodGhpcywoZnVuY3Rpb24oZil7cmV0dXJuIGk9bi5mcmFnbWVudE1hcCxhPW4uY29udGV4dCxzPW4udmFyaWFibGVzLHU9W3RdLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyLmIpKGwsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgYyxsO3JldHVybiBPYmplY3Qoci5kKSh0aGlzLChmdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0KGsuYykoZSxzKT9PYmplY3QoTC5kKShlKT9bMix0aGlzLnJlc29sdmVGaWVsZChlLHQsbikudGhlbigoZnVuY3Rpb24odCl7dmFyIG47dm9pZCAwIT09dCYmdS5wdXNoKCgobj17fSlbT2JqZWN0KEwuaCkoZSldPXQsbikpfSkpXTooT2JqZWN0KEwuZSkoZSk/Yz1lOihjPWlbZS5uYW1lLnZhbHVlXSxPYmplY3Qoby5iKShjLDExKSksYyYmYy50eXBlQ29uZGl0aW9uJiYobD1jLnR5cGVDb25kaXRpb24ubmFtZS52YWx1ZSxuLmZyYWdtZW50TWF0Y2hlcih0LGwsYSkpP1syLHRoaXMucmVzb2x2ZVNlbGVjdGlvblNldChjLnNlbGVjdGlvblNldCx0LG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3UucHVzaChlKX0pKV06WzJdKTpbMl19KSl9KSl9LFsyLFByb21pc2UuYWxsKGUuc2VsZWN0aW9ucy5tYXAoYykpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChELmMpKHUpfSkpXX0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZUZpZWxkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT2JqZWN0KHIuYikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBvLGksYSxzLHUsYyxsLGYsaCxkPXRoaXM7cmV0dXJuIE9iamVjdChyLmQpKHRoaXMsKGZ1bmN0aW9uKHIpe3JldHVybiBvPW4udmFyaWFibGVzLGk9ZS5uYW1lLnZhbHVlLGE9T2JqZWN0KEwuaCkoZSkscz1pIT09YSx1PXRbYV18fHRbaV0sYz1Qcm9taXNlLnJlc29sdmUodSksbi5vbmx5UnVuRm9yY2VkUmVzb2x2ZXJzJiYhdGhpcy5zaG91bGRGb3JjZVJlc29sdmVycyhlKXx8KGw9dC5fX3R5cGVuYW1lfHxuLmRlZmF1bHRPcGVyYXRpb25UeXBlLChmPXRoaXMucmVzb2x2ZXJzJiZ0aGlzLnJlc29sdmVyc1tsXSkmJihoPWZbcz9pOmFdKSYmKGM9UHJvbWlzZS5yZXNvbHZlKFUuYS53aXRoVmFsdWUodGhpcy5jYWNoZSxoLFt0LE9iamVjdChMLmEpKGUsbyksbi5jb250ZXh0LHtmaWVsZDplLGZyYWdtZW50TWFwOm4uZnJhZ21lbnRNYXB9XSkpKSksWzIsYy50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dSksZS5kaXJlY3RpdmVzJiZlLmRpcmVjdGl2ZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImV4cG9ydCI9PT1lLm5hbWUudmFsdWUmJmUuYXJndW1lbnRzJiZlLmFyZ3VtZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXsiYXMiPT09ZS5uYW1lLnZhbHVlJiYiU3RyaW5nVmFsdWUiPT09ZS52YWx1ZS5raW5kJiYobi5leHBvcnRlZFZhcmlhYmxlc1tlLnZhbHVlLnZhbHVlXT10KX0pKX0pKSxlLnNlbGVjdGlvblNldD9udWxsPT10P3Q6QXJyYXkuaXNBcnJheSh0KT9kLnJlc29sdmVTdWJTZWxlY3RlZEFycmF5KGUsdCxuKTplLnNlbGVjdGlvblNldD9kLnJlc29sdmVTZWxlY3Rpb25TZXQoZS5zZWxlY3Rpb25TZXQsdCxuKTp2b2lkIDA6dH0pKV19KSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTdWJTZWxlY3RlZEFycmF5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P251bGw6QXJyYXkuaXNBcnJheSh0KT9yLnJlc29sdmVTdWJTZWxlY3RlZEFycmF5KGUsdCxuKTplLnNlbGVjdGlvblNldD9yLnJlc29sdmVTZWxlY3Rpb25TZXQoZS5zZWxlY3Rpb25TZXQsdCxuKTp2b2lkIDB9KSkpfSxlfSgpLFE9bmV3KHcuYT9XZWFrTWFwOk1hcCk7ZnVuY3Rpb24gVihlLHQpe3ZhciBuPWVbdF07ImZ1bmN0aW9uIj09dHlwZW9mIG4mJihlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIFEuc2V0KGUsKFEuZ2V0KGUpKzEpJTFlMTUpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9ZnVuY3Rpb24gcShlKXtlLm5vdGlmeVRpbWVvdXQmJihjbGVhclRpbWVvdXQoZS5ub3RpZnlUaW1lb3V0KSxlLm5vdGlmeVRpbWVvdXQ9dm9pZCAwKX12YXIgVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYWNoZT1lLHRoaXMubGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5kb2N1bWVudD1udWxsLHRoaXMubGFzdFJlcXVlc3RJZD0xLHRoaXMuc3Vic2NyaXB0aW9ucz1uZXcgU2V0LHRoaXMuc3RvcHBlZD0hMSx0aGlzLmRpcnR5PSExLHRoaXMuZGlmZj1udWxsLHRoaXMub2JzZXJ2YWJsZVF1ZXJ5PW51bGwsUS5oYXMoZSl8fChRLnNldChlLDApLFYoZSwiZXZpY3QiKSxWKGUsIm1vZGlmeSIpLFYoZSwicmVzZXQiKSl9cmV0dXJuIGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uZXR3b3JrU3RhdHVzfHxOLmEubG9hZGluZztyZXR1cm4gdGhpcy52YXJpYWJsZXMmJnRoaXMubmV0d29ya1N0YXR1cyE9PU4uYS5sb2FkaW5nJiYhT2JqZWN0KE8uYSkodGhpcy52YXJpYWJsZXMsZS52YXJpYWJsZXMpJiYodD1OLmEuc2V0VmFyaWFibGVzKSxPYmplY3QoTy5hKShlLnZhcmlhYmxlcyx0aGlzLnZhcmlhYmxlcyl8fCh0aGlzLmRpZmY9bnVsbCksT2JqZWN0LmFzc2lnbih0aGlzLHtkb2N1bWVudDplLmRvY3VtZW50LHZhcmlhYmxlczplLnZhcmlhYmxlcyxuZXR3b3JrRXJyb3I6bnVsbCxncmFwaFFMRXJyb3JzOnRoaXMuZ3JhcGhRTEVycm9yc3x8W10sbmV0d29ya1N0YXR1czp0fSksZS5vYnNlcnZhYmxlUXVlcnkmJnRoaXMuc2V0T2JzZXJ2YWJsZVF1ZXJ5KGUub2JzZXJ2YWJsZVF1ZXJ5KSxlLmxhc3RSZXF1ZXN0SWQmJih0aGlzLmxhc3RSZXF1ZXN0SWQ9ZS5sYXN0UmVxdWVzdElkKSx0aGlzfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3EodGhpcyksdGhpcy5kaWZmPW51bGwsdGhpcy5kaXJ0eT0hMX0sZS5wcm90b3R5cGUuZ2V0RGlmZj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy52YXJpYWJsZXMpLHRoaXMuZGlmZiYmT2JqZWN0KE8uYSkoZSx0aGlzLnZhcmlhYmxlcyk/dGhpcy5kaWZmOih0aGlzLnVwZGF0ZVdhdGNoKHRoaXMudmFyaWFibGVzPWUpLHRoaXMuZGlmZj10aGlzLmNhY2hlLmRpZmYoe3F1ZXJ5OnRoaXMuZG9jdW1lbnQsdmFyaWFibGVzOmUscmV0dXJuUGFydGlhbERhdGE6ITAsb3B0aW1pc3RpYzohMH0pKX0sZS5wcm90b3R5cGUuc2V0RGlmZj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5kaWZmO3RoaXMuZGlmZj1lLHRoaXMuZGlydHl8fChlJiZlLnJlc3VsdCk9PT0obiYmbi5yZXN1bHQpfHwodGhpcy5kaXJ0eT0hMCx0aGlzLm5vdGlmeVRpbWVvdXR8fCh0aGlzLm5vdGlmeVRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5ub3RpZnkoKX0pLDApKSl9LGUucHJvdG90eXBlLnNldE9ic2VydmFibGVRdWVyeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UhPT10aGlzLm9ic2VydmFibGVRdWVyeSYmKHRoaXMub3FMaXN0ZW5lciYmdGhpcy5saXN0ZW5lcnMuZGVsZXRlKHRoaXMub3FMaXN0ZW5lciksdGhpcy5vYnNlcnZhYmxlUXVlcnk9ZSxlPyhlLnF1ZXJ5SW5mbz10aGlzLHRoaXMubGlzdGVuZXJzLmFkZCh0aGlzLm9xTGlzdGVuZXI9ZnVuY3Rpb24oKXt0LmdldERpZmYoKS5mcm9tT3B0aW1pc3RpY1RyYW5zYWN0aW9uP2Uub2JzZXJ2ZSgpOmUucmVvYnNlcnZlKCl9KSk6ZGVsZXRlIHRoaXMub3FMaXN0ZW5lcil9LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cSh0aGlzKSx0aGlzLnNob3VsZE5vdGlmeSgpJiZ0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKSx0aGlzLmRpcnR5PSExfSxlLnByb3RvdHlwZS5zaG91bGROb3RpZnk9ZnVuY3Rpb24oKXtpZighdGhpcy5kaXJ0eXx8IXRoaXMubGlzdGVuZXJzLnNpemUpcmV0dXJuITE7aWYoT2JqZWN0KE4uYikodGhpcy5uZXR3b3JrU3RhdHVzKSYmdGhpcy5vYnNlcnZhYmxlUXVlcnkpe3ZhciBlPXRoaXMub2JzZXJ2YWJsZVF1ZXJ5Lm9wdGlvbnMuZmV0Y2hQb2xpY3k7aWYoImNhY2hlLW9ubHkiIT09ZSYmImNhY2hlLWFuZC1uZXR3b3JrIiE9PWUpcmV0dXJuITF9cmV0dXJuITB9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXt0aGlzLnN0b3BwZWQ9ITAsdGhpcy5yZXNldCgpLHRoaXMuY2FuY2VsKCksZGVsZXRlIHRoaXMuY2FuY2VsLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51bnN1YnNjcmliZSgpfSkpO3ZhciBlPXRoaXMub2JzZXJ2YWJsZVF1ZXJ5O2UmJmUuc3RvcFBvbGxpbmcoKX19LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUudXBkYXRlV2F0Y2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt2b2lkIDA9PT1lJiYoZT10aGlzLnZhcmlhYmxlcyk7dmFyIG49dGhpcy5vYnNlcnZhYmxlUXVlcnk7biYmIm5vLWNhY2hlIj09PW4ub3B0aW9ucy5mZXRjaFBvbGljeXx8dGhpcy5sYXN0V2F0Y2gmJnRoaXMubGFzdFdhdGNoLnF1ZXJ5PT09dGhpcy5kb2N1bWVudCYmT2JqZWN0KE8uYSkoZSx0aGlzLmxhc3RXYXRjaC52YXJpYWJsZXMpfHwodGhpcy5jYW5jZWwoKSx0aGlzLmNhbmNlbD10aGlzLmNhY2hlLndhdGNoKHRoaXMubGFzdFdhdGNoPXtxdWVyeTp0aGlzLmRvY3VtZW50LHZhcmlhYmxlczplLG9wdGltaXN0aWM6ITAsY2FsbGJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0RGlmZihlKX19KSl9LGUucHJvdG90eXBlLnNob3VsZFdyaXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sYXN0V3JpdGU7cmV0dXJuIShuJiZuLmRtQ291bnQ9PT1RLmdldCh0aGlzLmNhY2hlKSYmT2JqZWN0KE8uYSkodCxuLnZhcmlhYmxlcykmJk9iamVjdChPLmEpKGUuZGF0YSxuLnJlc3VsdC5kYXRhKSl9LGUucHJvdG90eXBlLm1hcmtSZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dGhpcy5ncmFwaFFMRXJyb3JzPU9iamVjdChFLmEpKGUuZXJyb3JzKT9lLmVycm9yczpbXSx0aGlzLnJlc2V0KCksIm5vLWNhY2hlIj09PXQuZmV0Y2hQb2xpY3k/dGhpcy5kaWZmPXtyZXN1bHQ6ZS5kYXRhLGNvbXBsZXRlOiEwfTohdGhpcy5zdG9wcGVkJiZuJiYoRyhlLHQuZXJyb3JQb2xpY3kpP3RoaXMuY2FjaGUucGVyZm9ybVRyYW5zYWN0aW9uKChmdW5jdGlvbihuKXtpZihyLnNob3VsZFdyaXRlKGUsdC52YXJpYWJsZXMpKW4ud3JpdGVRdWVyeSh7cXVlcnk6ci5kb2N1bWVudCxkYXRhOmUuZGF0YSx2YXJpYWJsZXM6dC52YXJpYWJsZXN9KSxyLmxhc3RXcml0ZT17cmVzdWx0OmUsdmFyaWFibGVzOnQudmFyaWFibGVzLGRtQ291bnQ6US5nZXQoci5jYWNoZSl9O2Vsc2UgaWYoci5kaWZmJiZyLmRpZmYuY29tcGxldGUpcmV0dXJuIHZvaWQoZS5kYXRhPXIuZGlmZi5yZXN1bHQpO3ZhciBvPW4uZGlmZih7cXVlcnk6ci5kb2N1bWVudCx2YXJpYWJsZXM6dC52YXJpYWJsZXMscmV0dXJuUGFydGlhbERhdGE6ITAsb3B0aW1pc3RpYzohMH0pO3Iuc3RvcHBlZHx8ci51cGRhdGVXYXRjaCh0LnZhcmlhYmxlcyksci5kaWZmPW8sby5jb21wbGV0ZSYmKGUuZGF0YT1vLnJlc3VsdCl9KSk6dGhpcy5sYXN0V3JpdGU9dm9pZCAwKX0sZS5wcm90b3R5cGUubWFya1JlYWR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV0d29ya0Vycm9yPW51bGwsdGhpcy5uZXR3b3JrU3RhdHVzPU4uYS5yZWFkeX0sZS5wcm90b3R5cGUubWFya0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5ldHdvcmtTdGF0dXM9Ti5hLmVycm9yLHRoaXMubGFzdFdyaXRlPXZvaWQgMCx0aGlzLnJlc2V0KCksZS5ncmFwaFFMRXJyb3JzJiYodGhpcy5ncmFwaFFMRXJyb3JzPWUuZ3JhcGhRTEVycm9ycyksZS5uZXR3b3JrRXJyb3ImJih0aGlzLm5ldHdvcmtFcnJvcj1lLm5ldHdvcmtFcnJvciksZX0sZX0oKTtmdW5jdGlvbiBHKGUsdCl7dm9pZCAwPT09dCYmKHQ9Im5vbmUiKTt2YXIgbj0iaWdub3JlIj09PXR8fCJhbGwiPT09dCxyPSFqKGUpO3JldHVybiFyJiZuJiZlLmRhdGEmJihyPSEwKSxyfXZhciB6PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksWT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5jYWNoZSxuPWUubGluayxyPWUucXVlcnlEZWR1cGxpY2F0aW9uLG89dm9pZCAwIT09ciYmcixpPWUub25Ccm9hZGNhc3QsYT1lLnNzck1vZGUscz12b2lkIDAhPT1hJiZhLHU9ZS5jbGllbnRBd2FyZW5lc3MsYz12b2lkIDA9PT11P3t9OnUsbD1lLmxvY2FsU3RhdGUsZj1lLmFzc3VtZUltbXV0YWJsZVJlc3VsdHM7dGhpcy5jbGllbnRBd2FyZW5lc3M9e30sdGhpcy5xdWVyaWVzPW5ldyBNYXAsdGhpcy5mZXRjaENhbmNlbEZucz1uZXcgTWFwLHRoaXMudHJhbnNmb3JtQ2FjaGU9bmV3KHcuYT9XZWFrTWFwOk1hcCksdGhpcy5xdWVyeUlkQ291bnRlcj0xLHRoaXMucmVxdWVzdElkQ291bnRlcj0xLHRoaXMubXV0YXRpb25JZENvdW50ZXI9MSx0aGlzLmluRmxpZ2h0TGlua09ic2VydmFibGVzPW5ldyBNYXAsdGhpcy5jYWNoZT10LHRoaXMubGluaz1uLHRoaXMucXVlcnlEZWR1cGxpY2F0aW9uPW8sdGhpcy5jbGllbnRBd2FyZW5lc3M9Yyx0aGlzLmxvY2FsU3RhdGU9bHx8bmV3IEYoe2NhY2hlOnR9KSx0aGlzLnNzck1vZGU9cyx0aGlzLmFzc3VtZUltbXV0YWJsZVJlc3VsdHM9ISFmLCh0aGlzLm9uQnJvYWRjYXN0PWkpJiYodGhpcy5tdXRhdGlvblN0b3JlPU9iamVjdC5jcmVhdGUobnVsbCkpfXJldHVybiBlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnF1ZXJpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtlLnN0b3BRdWVyeU5vQnJvYWRjYXN0KG4pfSkpLHRoaXMuY2FuY2VsUGVuZGluZ0ZldGNoZXMobmV3IG8uYSgxMikpfSxlLnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nRmV0Y2hlcz1mdW5jdGlvbihlKXt0aGlzLmZldGNoQ2FuY2VsRm5zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpLHRoaXMuZmV0Y2hDYW5jZWxGbnMuY2xlYXIoKX0sZS5wcm90b3R5cGUubXV0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubXV0YXRpb24sbj1lLnZhcmlhYmxlcyxpPWUub3B0aW1pc3RpY1Jlc3BvbnNlLGE9ZS51cGRhdGVRdWVyaWVzLHM9ZS5yZWZldGNoUXVlcmllcyx1PXZvaWQgMD09PXM/W106cyxjPWUuYXdhaXRSZWZldGNoUXVlcmllcyxsPXZvaWQgMCE9PWMmJmMsZj1lLnVwZGF0ZSxoPWUuZXJyb3JQb2xpY3ksZD12b2lkIDA9PT1oPyJub25lIjpoLHA9ZS5mZXRjaFBvbGljeSx2PWUuY29udGV4dCxiPXZvaWQgMD09PXY/e306djtyZXR1cm4gT2JqZWN0KHIuYikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBlLHMsYztyZXR1cm4gT2JqZWN0KHIuZCkodGhpcywoZnVuY3Rpb24oaCl7c3dpdGNoKGgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gT2JqZWN0KG8uYikodCwxMyksT2JqZWN0KG8uYikoIXB8fCJuby1jYWNoZSI9PT1wLDE0KSxlPXRoaXMuZ2VuZXJhdGVNdXRhdGlvbklkKCksdD10aGlzLnRyYW5zZm9ybSh0KS5kb2N1bWVudCxuPXRoaXMuZ2V0VmFyaWFibGVzKHQsbiksdGhpcy50cmFuc2Zvcm0odCkuaGFzQ2xpZW50RXhwb3J0cz9bNCx0aGlzLmxvY2FsU3RhdGUuYWRkRXhwb3J0ZWRWYXJpYWJsZXModCxuLGIpXTpbMywyXTtjYXNlIDE6bj1oLnNlbnQoKSxoLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBzPXRoaXMubXV0YXRpb25TdG9yZSYmKHRoaXMubXV0YXRpb25TdG9yZVtlXT17bXV0YXRpb246dCx2YXJpYWJsZXM6bixsb2FkaW5nOiEwLGVycm9yOm51bGx9KSxpJiZ0aGlzLm1hcmtNdXRhdGlvbk9wdGltaXN0aWMoaSx7bXV0YXRpb25JZDplLGRvY3VtZW50OnQsdmFyaWFibGVzOm4sZXJyb3JQb2xpY3k6ZCx1cGRhdGVRdWVyaWVzOmEsdXBkYXRlOmZ9KSx0aGlzLmJyb2FkY2FzdFF1ZXJpZXMoKSxjPXRoaXMsWzIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saCl7dmFyIHYseTtjLmdldE9ic2VydmFibGVGcm9tTGluayh0LE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGIpLHtvcHRpbWlzdGljUmVzcG9uc2U6aX0pLG4sITEpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihyKXtpZihqKHIpJiYibm9uZSI9PT1kKXk9bmV3IFIuYSh7Z3JhcGhRTEVycm9yczpyLmVycm9yc30pO2Vsc2V7aWYocyYmKHMubG9hZGluZz0hMSxzLmVycm9yPW51bGwpLCJuby1jYWNoZSIhPT1wKXRyeXtjLm1hcmtNdXRhdGlvblJlc3VsdCh7bXV0YXRpb25JZDplLHJlc3VsdDpyLGRvY3VtZW50OnQsdmFyaWFibGVzOm4sZXJyb3JQb2xpY3k6ZCx1cGRhdGVRdWVyaWVzOmEsdXBkYXRlOmZ9KX1jYXRjaChlKXtyZXR1cm4gdm9pZCh5PW5ldyBSLmEoe25ldHdvcmtFcnJvcjplfSkpfXY9cn19LGVycm9yOmZ1bmN0aW9uKHQpe3MmJihzLmxvYWRpbmc9ITEscy5lcnJvcj10KSxpJiZjLmNhY2hlLnJlbW92ZU9wdGltaXN0aWMoZSksYy5icm9hZGNhc3RRdWVyaWVzKCksaChuZXcgUi5hKHtuZXR3b3JrRXJyb3I6dH0pKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih5JiZzJiYocy5sb2FkaW5nPSExLHMuZXJyb3I9eSksaSYmYy5jYWNoZS5yZW1vdmVPcHRpbWlzdGljKGUpLGMuYnJvYWRjYXN0UXVlcmllcygpLHkpaCh5KTtlbHNleyJmdW5jdGlvbiI9PXR5cGVvZiB1JiYodT11KHYpKTt2YXIgdD1bXTtPYmplY3QoRS5hKSh1KSYmdS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpYy5xdWVyaWVzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW4ub2JzZXJ2YWJsZVF1ZXJ5O3ImJnIuaGFzT2JzZXJ2ZXJzKCkmJnIucXVlcnlOYW1lPT09ZSYmdC5wdXNoKHIucmVmZXRjaCgpKX0pKTtlbHNle3ZhciBuPXtxdWVyeTplLnF1ZXJ5LHZhcmlhYmxlczplLnZhcmlhYmxlcyxmZXRjaFBvbGljeToibmV0d29yay1vbmx5In07ZS5jb250ZXh0JiYobi5jb250ZXh0PWUuY29udGV4dCksdC5wdXNoKGMucXVlcnkobikpfX0pKSxQcm9taXNlLmFsbChsP3Q6W10pLnRoZW4oKGZ1bmN0aW9uKCl7Imlnbm9yZSI9PT1kJiZ2JiZqKHYpJiZkZWxldGUgdi5lcnJvcnMsbyh2KX0pLGgpfX19KX0pKV19fSkpfSkpfSxlLnByb3RvdHlwZS5tYXJrTXV0YXRpb25SZXN1bHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PXQmJih0PXRoaXMuY2FjaGUpLEcoZS5yZXN1bHQsZS5lcnJvclBvbGljeSkpe3ZhciByPVt7cmVzdWx0OmUucmVzdWx0LmRhdGEsZGF0YUlkOiJST09UX01VVEFUSU9OIixxdWVyeTplLmRvY3VtZW50LHZhcmlhYmxlczplLnZhcmlhYmxlc31dLG89ZS51cGRhdGVRdWVyaWVzO28mJnRoaXMucXVlcmllcy5mb3JFYWNoKChmdW5jdGlvbihpLGEpe3ZhciBzPWkub2JzZXJ2YWJsZVF1ZXJ5LHU9cyYmcy5xdWVyeU5hbWU7aWYodSYmei5jYWxsKG8sdSkpe3ZhciBjPW9bdV0sbD1uLnF1ZXJpZXMuZ2V0KGEpLGY9bC5kb2N1bWVudCxoPWwudmFyaWFibGVzLGQ9dC5kaWZmKHtxdWVyeTpmLHZhcmlhYmxlczpoLHJldHVyblBhcnRpYWxEYXRhOiEwLG9wdGltaXN0aWM6ITF9KSxwPWQucmVzdWx0O2lmKGQuY29tcGxldGUmJnApe3ZhciB2PWMocCx7bXV0YXRpb25SZXN1bHQ6ZS5yZXN1bHQscXVlcnlOYW1lOmYmJk9iamVjdChTLmcpKGYpfHx2b2lkIDAscXVlcnlWYXJpYWJsZXM6aH0pO3YmJnIucHVzaCh7cmVzdWx0OnYsZGF0YUlkOiJST09UX1FVRVJZIixxdWVyeTpmLHZhcmlhYmxlczpofSl9fX0pKSx0LnBlcmZvcm1UcmFuc2FjdGlvbigoZnVuY3Rpb24odCl7ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdC53cml0ZShlKX0pKTt2YXIgbj1lLnVwZGF0ZTtuJiZuKHQsZS5yZXN1bHQpfSksbnVsbCl9fSxlLnByb3RvdHlwZS5tYXJrTXV0YXRpb25PcHRpbWlzdGljPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UodC52YXJpYWJsZXMpOmU7cmV0dXJuIHRoaXMuY2FjaGUucmVjb3JkT3B0aW1pc3RpY1RyYW5zYWN0aW9uKChmdW5jdGlvbihlKXt0cnl7bi5tYXJrTXV0YXRpb25SZXN1bHQoT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdCkse3Jlc3VsdDp7ZGF0YTpvfX0pLGUpfWNhdGNoKGUpe319KSx0Lm11dGF0aW9uSWQpfSxlLnByb3RvdHlwZS5mZXRjaFF1ZXJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5T2JzZXJ2YWJsZShlLHQsbikucHJvbWlzZX0sZS5wcm90b3R5cGUuZ2V0UXVlcnlTdG9yZT1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHRoaXMucXVlcmllcy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Vbbl09e3ZhcmlhYmxlczp0LnZhcmlhYmxlcyxuZXR3b3JrU3RhdHVzOnQubmV0d29ya1N0YXR1cyxuZXR3b3JrRXJyb3I6dC5uZXR3b3JrRXJyb3IsZ3JhcGhRTEVycm9yczp0LmdyYXBoUUxFcnJvcnN9fSkpLGV9LGUucHJvdG90eXBlLnJlc2V0RXJyb3JzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucXVlcmllcy5nZXQoZSk7dCYmKHQubmV0d29ya0Vycm9yPXZvaWQgMCx0LmdyYXBoUUxFcnJvcnM9W10pfSxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2Zvcm1DYWNoZTtpZighdC5oYXMoZSkpe3ZhciBuPXRoaXMuY2FjaGUudHJhbnNmb3JtRG9jdW1lbnQoZSkscj1PYmplY3QoQS5kKSh0aGlzLmNhY2hlLnRyYW5zZm9ybUZvckxpbmsobikpLG89dGhpcy5sb2NhbFN0YXRlLmNsaWVudFF1ZXJ5KG4pLGk9ciYmdGhpcy5sb2NhbFN0YXRlLnNlcnZlclF1ZXJ5KHIpLGE9e2RvY3VtZW50Om4saGFzQ2xpZW50RXhwb3J0czpPYmplY3Qoay5hKShuKSxoYXNGb3JjZWRSZXNvbHZlcnM6dGhpcy5sb2NhbFN0YXRlLnNob3VsZEZvcmNlUmVzb2x2ZXJzKG4pLGNsaWVudFF1ZXJ5Om8sc2VydmVyUXVlcnk6aSxkZWZhdWx0VmFyczpPYmplY3QoUy5iKShPYmplY3QoUy5mKShuKSl9LHM9ZnVuY3Rpb24oZSl7ZSYmIXQuaGFzKGUpJiZ0LnNldChlLGEpfTtzKGUpLHMobikscyhvKSxzKGkpfXJldHVybiB0LmdldChlKX0sZS5wcm90b3R5cGUuZ2V0VmFyaWFibGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHRoaXMudHJhbnNmb3JtKGUpLmRlZmF1bHRWYXJzKSx0KX0sZS5wcm90b3R5cGUud2F0Y2hRdWVyeT1mdW5jdGlvbihlKXt2b2lkIDA9PT0oZT1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxlKSx7dmFyaWFibGVzOnRoaXMuZ2V0VmFyaWFibGVzKGUucXVlcnksZS52YXJpYWJsZXMpfSkpLm5vdGlmeU9uTmV0d29ya1N0YXR1c0NoYW5nZSYmKGUubm90aWZ5T25OZXR3b3JrU3RhdHVzQ2hhbmdlPSExKTt2YXIgdD1uZXcgVyh0aGlzLmNhY2hlKSxuPW5ldyBQLmEoe3F1ZXJ5TWFuYWdlcjp0aGlzLHF1ZXJ5SW5mbzp0LG9wdGlvbnM6ZX0pO3JldHVybiB0aGlzLnF1ZXJpZXMuc2V0KG4ucXVlcnlJZCx0KSx0LmluaXQoe2RvY3VtZW50OmUucXVlcnksb2JzZXJ2YWJsZVF1ZXJ5Om4sdmFyaWFibGVzOmUudmFyaWFibGVzfSksbn0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztPYmplY3Qoby5iKShlLnF1ZXJ5LDE1KSxPYmplY3Qoby5iKSgiRG9jdW1lbnQiPT09ZS5xdWVyeS5raW5kLDE2KSxPYmplY3Qoby5iKSghZS5yZXR1cm5QYXJ0aWFsRGF0YSwxNyksT2JqZWN0KG8uYikoIWUucG9sbEludGVydmFsLDE4KTt2YXIgbj10aGlzLmdlbmVyYXRlUXVlcnlJZCgpO3JldHVybiB0aGlzLmZldGNoUXVlcnkobixlKS5maW5hbGx5KChmdW5jdGlvbigpe3JldHVybiB0LnN0b3BRdWVyeShuKX0pKX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVRdWVyeUlkPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnF1ZXJ5SWRDb3VudGVyKyspfSxlLnByb3RvdHlwZS5nZW5lcmF0ZVJlcXVlc3RJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcXVlc3RJZENvdW50ZXIrK30sZS5wcm90b3R5cGUuZ2VuZXJhdGVNdXRhdGlvbklkPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLm11dGF0aW9uSWRDb3VudGVyKyspfSxlLnByb3RvdHlwZS5zdG9wUXVlcnlJblN0b3JlPWZ1bmN0aW9uKGUpe3RoaXMuc3RvcFF1ZXJ5SW5TdG9yZU5vQnJvYWRjYXN0KGUpLHRoaXMuYnJvYWRjYXN0UXVlcmllcygpfSxlLnByb3RvdHlwZS5zdG9wUXVlcnlJblN0b3JlTm9Ccm9hZGNhc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5xdWVyaWVzLmdldChlKTt0JiZ0LnN0b3AoKX0sZS5wcm90b3R5cGUuY2xlYXJTdG9yZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbFBlbmRpbmdGZXRjaGVzKG5ldyBvLmEoMTkpKSx0aGlzLnF1ZXJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5vYnNlcnZhYmxlUXVlcnk/ZS5uZXR3b3JrU3RhdHVzPU4uYS5sb2FkaW5nOmUuc3RvcCgpfSkpLHRoaXMubXV0YXRpb25TdG9yZSYmKHRoaXMubXV0YXRpb25TdG9yZT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmNhY2hlLnJlc2V0KCl9LGUucHJvdG90eXBlLnJlc2V0U3RvcmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmNsZWFyU3RvcmUoKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpfSkpfSxlLnByb3RvdHlwZS5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG49W107cmV0dXJuIHRoaXMucXVlcmllcy5mb3JFYWNoKChmdW5jdGlvbihyLG8pe3ZhciBpPXIub2JzZXJ2YWJsZVF1ZXJ5O2lmKGkmJmkuaGFzT2JzZXJ2ZXJzKCkpe3ZhciBhPWkub3B0aW9ucy5mZXRjaFBvbGljeTtpLnJlc2V0TGFzdFJlc3VsdHMoKSwiY2FjaGUtb25seSI9PT1hfHwhZSYmInN0YW5kYnkiPT09YXx8bi5wdXNoKGkucmVmZXRjaCgpKSx0LmdldFF1ZXJ5KG8pLnNldERpZmYobnVsbCl9fSkpLHRoaXMuYnJvYWRjYXN0UXVlcmllcygpLFByb21pc2UuYWxsKG4pfSxlLnByb3RvdHlwZS5zZXRPYnNlcnZhYmxlUXVlcnk9ZnVuY3Rpb24oZSl7dGhpcy5nZXRRdWVyeShlLnF1ZXJ5SWQpLnNldE9ic2VydmFibGVRdWVyeShlKX0sZS5wcm90b3R5cGUuc3RhcnRHcmFwaFFMU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLnF1ZXJ5LHI9ZS5mZXRjaFBvbGljeSxvPWUuZXJyb3JQb2xpY3ksaT1lLnZhcmlhYmxlcyxhPWUuY29udGV4dCxzPXZvaWQgMD09PWE/e306YTtuPXRoaXMudHJhbnNmb3JtKG4pLmRvY3VtZW50LGk9dGhpcy5nZXRWYXJpYWJsZXMobixpKTt2YXIgdT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRPYnNlcnZhYmxlRnJvbUxpbmsobixzLGUsITEpLm1hcCgoZnVuY3Rpb24oaSl7aWYoIm5vLWNhY2hlIiE9PXImJihHKGksbykmJnQuY2FjaGUud3JpdGUoe3F1ZXJ5Om4scmVzdWx0OmkuZGF0YSxkYXRhSWQ6IlJPT1RfU1VCU0NSSVBUSU9OIix2YXJpYWJsZXM6ZX0pLHQuYnJvYWRjYXN0UXVlcmllcygpKSxqKGkpKXRocm93IG5ldyBSLmEoe2dyYXBoUUxFcnJvcnM6aS5lcnJvcnN9KTtyZXR1cm4gaX0pKX07aWYodGhpcy50cmFuc2Zvcm0obikuaGFzQ2xpZW50RXhwb3J0cyl7dmFyIGM9dGhpcy5sb2NhbFN0YXRlLmFkZEV4cG9ydGVkVmFyaWFibGVzKG4saSxzKS50aGVuKHUpO3JldHVybiBuZXcgbC5hKChmdW5jdGlvbihlKXt2YXIgdD1udWxsO3JldHVybiBjLnRoZW4oKGZ1bmN0aW9uKG4pe3JldHVybiB0PW4uc3Vic2NyaWJlKGUpfSksZS5lcnJvciksZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC51bnN1YnNjcmliZSgpfX0pKX1yZXR1cm4gdShpKX0sZS5wcm90b3R5cGUuc3RvcFF1ZXJ5PWZ1bmN0aW9uKGUpe3RoaXMuc3RvcFF1ZXJ5Tm9Ccm9hZGNhc3QoZSksdGhpcy5icm9hZGNhc3RRdWVyaWVzKCl9LGUucHJvdG90eXBlLnN0b3BRdWVyeU5vQnJvYWRjYXN0PWZ1bmN0aW9uKGUpe3RoaXMuc3RvcFF1ZXJ5SW5TdG9yZU5vQnJvYWRjYXN0KGUpLHRoaXMucmVtb3ZlUXVlcnkoZSl9LGUucHJvdG90eXBlLnJlbW92ZVF1ZXJ5PWZ1bmN0aW9uKGUpe3RoaXMuZmV0Y2hDYW5jZWxGbnMuZGVsZXRlKGUpLHRoaXMuZ2V0UXVlcnkoZSkuc3RvcCgpLHRoaXMucXVlcmllcy5kZWxldGUoZSl9LGUucHJvdG90eXBlLmJyb2FkY2FzdFF1ZXJpZXM9ZnVuY3Rpb24oKXt0aGlzLm9uQnJvYWRjYXN0JiZ0aGlzLm9uQnJvYWRjYXN0KCksdGhpcy5xdWVyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vdGlmeSgpfSkpfSxlLnByb3RvdHlwZS5nZXRMb2NhbFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxTdGF0ZX0sZS5wcm90b3R5cGUuZ2V0T2JzZXJ2YWJsZUZyb21MaW5rPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpLHMsdT10aGlzO3ZvaWQgMD09PW8mJihvPW51bGwhPT0oaT1udWxsPT10P3ZvaWQgMDp0LnF1ZXJ5RGVkdXBsaWNhdGlvbikmJnZvaWQgMCE9PWk/aTp0aGlzLnF1ZXJ5RGVkdXBsaWNhdGlvbik7dmFyIGM9dGhpcy50cmFuc2Zvcm0oZSkuc2VydmVyUXVlcnk7aWYoYyl7dmFyIGY9dGhpcy5pbkZsaWdodExpbmtPYnNlcnZhYmxlcyxoPXRoaXMubGluayxkPXtxdWVyeTpjLHZhcmlhYmxlczpuLG9wZXJhdGlvbk5hbWU6T2JqZWN0KFMuZykoYyl8fHZvaWQgMCxjb250ZXh0OnRoaXMucHJlcGFyZUNvbnRleHQoT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdCkse2ZvcmNlRmV0Y2g6IW99KSl9O2lmKHQ9ZC5jb250ZXh0LG8pe3ZhciBwPWYuZ2V0KGMpfHxuZXcgTWFwO2Yuc2V0KGMscCk7dmFyIHY9SlNPTi5zdHJpbmdpZnkobik7aWYoIShzPXAuZ2V0KHYpKSl7dmFyIGI9bmV3IEMoW09iamVjdChhLmEpKGgsZCldKTtwLnNldCh2LHM9YiksYi5jbGVhbnVwKChmdW5jdGlvbigpe3AuZGVsZXRlKHYpJiZwLnNpemU8MSYmZi5kZWxldGUoYyl9KSl9fWVsc2Ugcz1uZXcgQyhbT2JqZWN0KGEuYSkoaCxkKV0pfWVsc2Ugcz1uZXcgQyhbbC5hLm9mKHtkYXRhOnt9fSldKSx0PXRoaXMucHJlcGFyZUNvbnRleHQodCk7dmFyIHk9dGhpcy50cmFuc2Zvcm0oZSkuY2xpZW50UXVlcnk7cmV0dXJuIHkmJihzPU0ocywoZnVuY3Rpb24oZSl7cmV0dXJuIHUubG9jYWxTdGF0ZS5ydW5SZXNvbHZlcnMoe2RvY3VtZW50OnkscmVtb3RlUmVzdWx0OmUsY29udGV4dDp0LHZhcmlhYmxlczpufSl9KSkpLHN9LGUucHJvdG90eXBlLmdldFJlc3VsdHNGcm9tTGluaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5sYXN0UmVxdWVzdElkPXRoaXMuZ2VuZXJhdGVSZXF1ZXN0SWQoKTtyZXR1cm4gTSh0aGlzLmdldE9ic2VydmFibGVGcm9tTGluayhlLmRvY3VtZW50LG4uY29udGV4dCxuLnZhcmlhYmxlcyksKGZ1bmN0aW9uKG8pe3ZhciBpPU9iamVjdChFLmEpKG8uZXJyb3JzKTtpZihyPj1lLmxhc3RSZXF1ZXN0SWQpe2lmKGkmJiJub25lIj09PW4uZXJyb3JQb2xpY3kpdGhyb3cgZS5tYXJrRXJyb3IobmV3IFIuYSh7Z3JhcGhRTEVycm9yczpvLmVycm9yc30pKTtlLm1hcmtSZXN1bHQobyxuLHQpLGUubWFya1JlYWR5KCl9dmFyIGE9e2RhdGE6by5kYXRhLGxvYWRpbmc6ITEsbmV0d29ya1N0YXR1czplLm5ldHdvcmtTdGF0dXN8fE4uYS5yZWFkeX07cmV0dXJuIGkmJiJpZ25vcmUiIT09bi5lcnJvclBvbGljeSYmKGEuZXJyb3JzPW8uZXJyb3JzKSxhfSksKGZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdChSLmIpKHQpP3Q6bmV3IFIuYSh7bmV0d29ya0Vycm9yOnR9KTt0aHJvdyByPj1lLmxhc3RSZXF1ZXN0SWQmJmUubWFya0Vycm9yKG4pLG59KSl9LGUucHJvdG90eXBlLmZldGNoUXVlcnlPYnNlcnZhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPU4uYS5sb2FkaW5nKTt2YXIgbz10aGlzLnRyYW5zZm9ybSh0LnF1ZXJ5KS5kb2N1bWVudCxpPXRoaXMuZ2V0VmFyaWFibGVzKG8sdC52YXJpYWJsZXMpLGE9dGhpcy5nZXRRdWVyeShlKSxzPWEubmV0d29ya1N0YXR1cyx1PXQuZmV0Y2hQb2xpY3ksYz12b2lkIDA9PT11PyJjYWNoZS1maXJzdCI6dSxsPXQuZXJyb3JQb2xpY3ksZj12b2lkIDA9PT1sPyJub25lIjpsLGg9dC5yZXR1cm5QYXJ0aWFsRGF0YSxkPXZvaWQgMCE9PWgmJmgscD10Lm5vdGlmeU9uTmV0d29ya1N0YXR1c0NoYW5nZSx2PXZvaWQgMCE9PXAmJnAsYj10LmNvbnRleHQseT12b2lkIDA9PT1iP3t9OmI7KCJjYWNoZS1maXJzdCI9PT1jfHwiY2FjaGUtYW5kLW5ldHdvcmsiPT09Y3x8Im5ldHdvcmstb25seSI9PT1jfHwibm8tY2FjaGUiPT09YykmJnYmJiJudW1iZXIiPT10eXBlb2YgcyYmcyE9PW4mJk9iamVjdChOLmIpKG4pJiYoImNhY2hlLWZpcnN0IiE9PWMmJihjPSJjYWNoZS1hbmQtbmV0d29yayIpLGQ9ITApO3ZhciBtPU9iamVjdC5hc3NpZ24oe30sdCx7cXVlcnk6byx2YXJpYWJsZXM6aSxmZXRjaFBvbGljeTpjLGVycm9yUG9saWN5OmYscmV0dXJuUGFydGlhbERhdGE6ZCxub3RpZnlPbk5ldHdvcmtTdGF0dXNDaGFuZ2U6dixjb250ZXh0Onl9KSxnPWZ1bmN0aW9uKGUpe3JldHVybiBtLnZhcmlhYmxlcz1lLHIuZmV0Y2hRdWVyeUJ5UG9saWN5KGEsbSxuKX07dGhpcy5mZXRjaENhbmNlbEZucy5zZXQoZSwoZnVuY3Rpb24oZSl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTy5jYW5jZWwoZSl9KSl9KSk7dmFyIE89bmV3IEModGhpcy50cmFuc2Zvcm0obS5xdWVyeSkuaGFzQ2xpZW50RXhwb3J0cz90aGlzLmxvY2FsU3RhdGUuYWRkRXhwb3J0ZWRWYXJpYWJsZXMobS5xdWVyeSxtLnZhcmlhYmxlcyxtLmNvbnRleHQpLnRoZW4oZyk6ZyhtLnZhcmlhYmxlcykpO3JldHVybiBPLmNsZWFudXAoKGZ1bmN0aW9uKCl7ci5mZXRjaENhbmNlbEZucy5kZWxldGUoZSk7dmFyIG49dC5uZXh0RmV0Y2hQb2xpY3k7biYmKHQubmV4dEZldGNoUG9saWN5PXZvaWQgMCx0LmZldGNoUG9saWN5PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uY2FsbCh0LHQuZmV0Y2hQb2xpY3l8fCJjYWNoZS1maXJzdCIpOm4pfSkpLE99LGUucHJvdG90eXBlLmZldGNoUXVlcnlCeVBvbGljeT1mdW5jdGlvbihlLHQsbil7dmFyIG89dGhpcyxpPXQucXVlcnksYT10LnZhcmlhYmxlcyxzPXQuZmV0Y2hQb2xpY3ksdT10LmVycm9yUG9saWN5LGM9dC5yZXR1cm5QYXJ0aWFsRGF0YSxmPXQuY29udGV4dDtlLmluaXQoe2RvY3VtZW50OmksdmFyaWFibGVzOmEsbmV0d29ya1N0YXR1czpufSk7dmFyIGg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXREaWZmKGEpfSxkPWZ1bmN0aW9uKHQsbil7dm9pZCAwPT09biYmKG49ZS5uZXR3b3JrU3RhdHVzfHxOLmEubG9hZGluZyk7dmFyIHM9dC5yZXN1bHQ7dmFyIHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGwuYS5vZihPYmplY3Qoci5hKSh7ZGF0YTplLGxvYWRpbmc6T2JqZWN0KE4uYikobiksbmV0d29ya1N0YXR1czpufSx0LmNvbXBsZXRlP251bGw6e3BhcnRpYWw6ITB9KSl9O3JldHVybiBvLnRyYW5zZm9ybShpKS5oYXNGb3JjZWRSZXNvbHZlcnM/by5sb2NhbFN0YXRlLnJ1blJlc29sdmVycyh7ZG9jdW1lbnQ6aSxyZW1vdGVSZXN1bHQ6e2RhdGE6c30sY29udGV4dDpmLHZhcmlhYmxlczphLG9ubHlSdW5Gb3JjZWRSZXNvbHZlcnM6ITB9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdShlLmRhdGEpfSkpOnUocyl9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZ2V0UmVzdWx0c0Zyb21MaW5rKGUsdCx7dmFyaWFibGVzOmEsY29udGV4dDpmLGZldGNoUG9saWN5OnMsZXJyb3JQb2xpY3k6dX0pfTtzd2l0Y2gocyl7ZGVmYXVsdDpjYXNlImNhY2hlLWZpcnN0IjpyZXR1cm4odj1oKCkpLmNvbXBsZXRlP1tkKHYsZS5tYXJrUmVhZHkoKSldOmM/W2QodikscCghMCldOltwKCEwKV07Y2FzZSJjYWNoZS1hbmQtbmV0d29yayI6dmFyIHY7cmV0dXJuKHY9aCgpKS5jb21wbGV0ZXx8Yz9bZCh2KSxwKCEwKV06W3AoITApXTtjYXNlImNhY2hlLW9ubHkiOnJldHVybltkKGgoKSxlLm1hcmtSZWFkeSgpKV07Y2FzZSJuZXR3b3JrLW9ubHkiOnJldHVybltwKCEwKV07Y2FzZSJuby1jYWNoZSI6cmV0dXJuW3AoITEpXTtjYXNlInN0YW5kYnkiOnJldHVybltdfX0sZS5wcm90b3R5cGUuZ2V0UXVlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiF0aGlzLnF1ZXJpZXMuaGFzKGUpJiZ0aGlzLnF1ZXJpZXMuc2V0KGUsbmV3IFcodGhpcy5jYWNoZSkpLHRoaXMucXVlcmllcy5nZXQoZSl9LGUucHJvdG90eXBlLnByZXBhcmVDb250ZXh0PWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD10aGlzLmxvY2FsU3RhdGUucHJlcGFyZUNvbnRleHQoZSk7cmV0dXJuIE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHQpLHtjbGllbnRBd2FyZW5lc3M6dGhpcy5jbGllbnRBd2FyZW5lc3N9KX0sZX0oKTtuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEt9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBIfSkpO2Z1bmN0aW9uIEsoZSx0KXtyZXR1cm4gT2JqZWN0KHMuYSkoZSx0LHQudmFyaWFibGVzJiZ7dmFyaWFibGVzOk9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUudmFyaWFibGVzKSx0LnZhcmlhYmxlcyl9KX12YXIgSD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLmRlZmF1bHRPcHRpb25zPXt9LHRoaXMucmVzZXRTdG9yZUNhbGxiYWNrcz1bXSx0aGlzLmNsZWFyU3RvcmVDYWxsYmFja3M9W107dmFyIG49ZS51cmkscj1lLmNyZWRlbnRpYWxzLGE9ZS5oZWFkZXJzLHM9ZS5jYWNoZSxjPWUuc3NyTW9kZSxsPXZvaWQgMCE9PWMmJmMsZj1lLnNzckZvcmNlRmV0Y2hEZWxheSxoPXZvaWQgMD09PWY/MDpmLGQ9ZS5jb25uZWN0VG9EZXZUb29scyxwPXZvaWQgMD09PWQ/Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJiF3aW5kb3cuX19BUE9MTE9fQ0xJRU5UX18mJiExOmQsdj1lLnF1ZXJ5RGVkdXBsaWNhdGlvbixiPXZvaWQgMD09PXZ8fHYseT1lLmRlZmF1bHRPcHRpb25zLG09ZS5hc3N1bWVJbW11dGFibGVSZXN1bHRzLE89dm9pZCAwIT09bSYmbSx3PWUucmVzb2x2ZXJzLGo9ZS50eXBlRGVmcyxFPWUuZnJhZ21lbnRNYXRjaGVyLFM9ZS5uYW1lLEE9ZS52ZXJzaW9uLGs9ZS5saW5rO2lmKGt8fChrPW4/bmV3IGcoe3VyaTpuLGNyZWRlbnRpYWxzOnIsaGVhZGVyczphfSk6aS5hLmVtcHR5KCkpLCFzKXRocm93IG5ldyBvLmEoOSk7dGhpcy5saW5rPWssdGhpcy5jYWNoZT1zLHRoaXMuZGlzYWJsZU5ldHdvcmtGZXRjaGVzPWx8fGg+MCx0aGlzLnF1ZXJ5RGVkdXBsaWNhdGlvbj1iLHRoaXMuZGVmYXVsdE9wdGlvbnM9eXx8e30sdGhpcy50eXBlRGVmcz1qLGgmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGlzYWJsZU5ldHdvcmtGZXRjaGVzPSExfSksaCksdGhpcy53YXRjaFF1ZXJ5PXRoaXMud2F0Y2hRdWVyeS5iaW5kKHRoaXMpLHRoaXMucXVlcnk9dGhpcy5xdWVyeS5iaW5kKHRoaXMpLHRoaXMubXV0YXRlPXRoaXMubXV0YXRlLmJpbmQodGhpcyksdGhpcy5yZXNldFN0b3JlPXRoaXMucmVzZXRTdG9yZS5iaW5kKHRoaXMpLHRoaXMucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzPXRoaXMucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzLmJpbmQodGhpcykscCYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuX19BUE9MTE9fQ0xJRU5UX189dGhpcyksdGhpcy52ZXJzaW9uPXUsdGhpcy5sb2NhbFN0YXRlPW5ldyBGKHtjYWNoZTpzLGNsaWVudDp0aGlzLHJlc29sdmVyczp3LGZyYWdtZW50TWF0Y2hlcjpFfSksdGhpcy5xdWVyeU1hbmFnZXI9bmV3IFkoe2NhY2hlOnRoaXMuY2FjaGUsbGluazp0aGlzLmxpbmsscXVlcnlEZWR1cGxpY2F0aW9uOmIsc3NyTW9kZTpsLGNsaWVudEF3YXJlbmVzczp7bmFtZTpTLHZlcnNpb246QX0sbG9jYWxTdGF0ZTp0aGlzLmxvY2FsU3RhdGUsYXNzdW1lSW1tdXRhYmxlUmVzdWx0czpPLG9uQnJvYWRjYXN0OnA/ZnVuY3Rpb24oKXt0LmRldlRvb2xzSG9va0NiJiZ0LmRldlRvb2xzSG9va0NiKHthY3Rpb246e30sc3RhdGU6e3F1ZXJpZXM6dC5xdWVyeU1hbmFnZXIuZ2V0UXVlcnlTdG9yZSgpLG11dGF0aW9uczp0LnF1ZXJ5TWFuYWdlci5tdXRhdGlvblN0b3JlfHx7fX0sZGF0YVdpdGhPcHRpbWlzdGljUmVzdWx0czp0LmNhY2hlLmV4dHJhY3QoITApfSl9OnZvaWQgMH0pfXJldHVybiBlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5xdWVyeU1hbmFnZXIuc3RvcCgpfSxlLnByb3RvdHlwZS53YXRjaFF1ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zLndhdGNoUXVlcnkmJihlPUsodGhpcy5kZWZhdWx0T3B0aW9ucy53YXRjaFF1ZXJ5LGUpKSwhdGhpcy5kaXNhYmxlTmV0d29ya0ZldGNoZXN8fCJuZXR3b3JrLW9ubHkiIT09ZS5mZXRjaFBvbGljeSYmImNhY2hlLWFuZC1uZXR3b3JrIiE9PWUuZmV0Y2hQb2xpY3l8fChlPU9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGUpLHtmZXRjaFBvbGljeToiY2FjaGUtZmlyc3QifSkpLHRoaXMucXVlcnlNYW5hZ2VyLndhdGNoUXVlcnkoZSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJ5JiYoZT1LKHRoaXMuZGVmYXVsdE9wdGlvbnMucXVlcnksZSkpLE9iamVjdChvLmIpKCJjYWNoZS1hbmQtbmV0d29yayIhPT1lLmZldGNoUG9saWN5LDEwKSx0aGlzLmRpc2FibGVOZXR3b3JrRmV0Y2hlcyYmIm5ldHdvcmstb25seSI9PT1lLmZldGNoUG9saWN5JiYoZT1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxlKSx7ZmV0Y2hQb2xpY3k6ImNhY2hlLWZpcnN0In0pKSx0aGlzLnF1ZXJ5TWFuYWdlci5xdWVyeShlKX0sZS5wcm90b3R5cGUubXV0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0ZSYmKGU9Syh0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0ZSxlKSksdGhpcy5xdWVyeU1hbmFnZXIubXV0YXRlKGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVlcnlNYW5hZ2VyLnN0YXJ0R3JhcGhRTFN1YnNjcmlwdGlvbihlKX0sZS5wcm90b3R5cGUucmVhZFF1ZXJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLmNhY2hlLnJlYWRRdWVyeShlLHQpfSxlLnByb3RvdHlwZS5yZWFkRnJhZ21lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMuY2FjaGUucmVhZEZyYWdtZW50KGUsdCl9LGUucHJvdG90eXBlLndyaXRlUXVlcnk9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZS53cml0ZVF1ZXJ5KGUpLHRoaXMucXVlcnlNYW5hZ2VyLmJyb2FkY2FzdFF1ZXJpZXMoKX0sZS5wcm90b3R5cGUud3JpdGVGcmFnbWVudD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlLndyaXRlRnJhZ21lbnQoZSksdGhpcy5xdWVyeU1hbmFnZXIuYnJvYWRjYXN0UXVlcmllcygpfSxlLnByb3RvdHlwZS5fX2FjdGlvbkhvb2tGb3JEZXZUb29scz1mdW5jdGlvbihlKXt0aGlzLmRldlRvb2xzSG9va0NiPWV9LGUucHJvdG90eXBlLl9fcmVxdWVzdFJhdz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGEuYSkodGhpcy5saW5rLGUpfSxlLnByb3RvdHlwZS5yZXNldFN0b3JlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5xdWVyeU1hbmFnZXIuY2xlYXJTdG9yZSgpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UuYWxsKGUucmVzZXRTdG9yZUNhbGxiYWNrcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCl9KSl9LGUucHJvdG90eXBlLmNsZWFyU3RvcmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLnF1ZXJ5TWFuYWdlci5jbGVhclN0b3JlKCl9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5jbGVhclN0b3JlQ2FsbGJhY2tzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pKSl9KSl9LGUucHJvdG90eXBlLm9uUmVzZXRTdG9yZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnJlc2V0U3RvcmVDYWxsYmFja3MucHVzaChlKSxmdW5jdGlvbigpe3QucmVzZXRTdG9yZUNhbGxiYWNrcz10LnJlc2V0U3RvcmVDYWxsYmFja3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWV9KSl9fSxlLnByb3RvdHlwZS5vbkNsZWFyU3RvcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5jbGVhclN0b3JlQ2FsbGJhY2tzLnB1c2goZSksZnVuY3Rpb24oKXt0LmNsZWFyU3RvcmVDYWxsYmFja3M9dC5jbGVhclN0b3JlQ2FsbGJhY2tzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpfX0sZS5wcm90b3R5cGUucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXJ5TWFuYWdlci5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoZSl9LGUucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FjaGUuZXh0cmFjdChlKX0sZS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jYWNoZS5yZXN0b3JlKGUpfSxlLnByb3RvdHlwZS5hZGRSZXNvbHZlcnM9ZnVuY3Rpb24oZSl7dGhpcy5sb2NhbFN0YXRlLmFkZFJlc29sdmVycyhlKX0sZS5wcm90b3R5cGUuc2V0UmVzb2x2ZXJzPWZ1bmN0aW9uKGUpe3RoaXMubG9jYWxTdGF0ZS5zZXRSZXNvbHZlcnMoZSl9LGUucHJvdG90eXBlLmdldFJlc29sdmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsU3RhdGUuZ2V0UmVzb2x2ZXJzKCl9LGUucHJvdG90eXBlLnNldExvY2FsU3RhdGVGcmFnbWVudE1hdGNoZXI9ZnVuY3Rpb24oZSl7dGhpcy5sb2NhbFN0YXRlLnNldEZyYWdtZW50TWF0Y2hlcihlKX0sZS5wcm90b3R5cGUuc2V0TGluaz1mdW5jdGlvbihlKXt0aGlzLmxpbms9dGhpcy5xdWVyeU1hbmFnZXIubGluaz1lfSxlfSgpfSw0Njk6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5sb2NhdGlvbjtpZighdCl0aHJvdyBuZXcgRXJyb3IoImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uIik7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgbj10LnByb3RvY29sKyIvLyIrdC5ob3N0LHI9bit0LnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sIi8iKTtyZXR1cm4gZS5yZXBsYWNlKC91cmxccypcKCgoPzpbXikoXXxcKCg/OlteKShdK3xcKFteKShdKlwpKSpcKSkqKVwpL2dpLChmdW5jdGlvbihlLHQpe3ZhciBvLGk9dC50cmltKCkucmVwbGFjZSgvXiIoLiopIiQvLChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkpLnJlcGxhY2UoL14nKC4qKSckLywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKTtyZXR1cm4vXigjfGRhdGE6fGh0dHA6XC9cL3xodHRwczpcL1wvfGZpbGU6XC9cL1wvKS9pLnRlc3QoaSk/ZToobz0wPT09aS5pbmRleE9mKCIvLyIpP2k6MD09PWkuaW5kZXhPZigiLyIpP24raTpyK2kucmVwbGFjZSgvXlwuXC8vLCIiKSwidXJsKCIrSlNPTi5zdHJpbmdpZnkobykrIikiKX0pKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3NSksbz1uKDMpO3ZhciBpPU9iamVjdChvLmFjdGlvbikoIlVQREFURV9BQ1RJVkVfRkxJR0hUUyIsZT0+KHtmZWF0dXJlT3ZlcnJpZGVzOmV9KSk7ZnVuY3Rpb24gYShlKXtpZighZSlyZXR1cm5bXTtsZXQgdD1bXTtyZXR1cm5bImFkZGluIiwiYW4iLCJhdXRoIiwiY2FsIiwiY21wIiwiZG9jIiwiZXZlbnRpZnkiLCJmbXMiLCJmd2siLCJnZXRzdGFydGVkIiwiZ3JwIiwiZ3N4IiwiaGVscCIsImhvbmV5YmVlIiwiaW5saW5lIiwiaXJpcyIsImxpZ2h0bmluZyIsImxwYyIsIm1jIiwibm90ZXMiLCJucHMiLCJvdXRsb29rU3BhY2VzIiwicGVvIiwicGVvcGxlIiwibWMiLCJwbGF0Zm9ybSIsInJwIiwic2VhIiwic3hzIiwidG9kbyIsInRyYSIsInRyaSIsInNpZyIsIm1vbiIsInVzdiIsIndvdmVuIl0uZm9yRWFjaChuPT57T2JqZWN0LmtleXMoZVtuXXx8e30pLmZvckVhY2gocj0+eyEwPT09ZVtuXVtyXSYmdC5wdXNoKGAke259LSR7cn1gKX0pfSksdH1mdW5jdGlvbiBzKGUpe3JldHVybiBPYmplY3Qoci5hKSgpLmZlYXR1cmVGbGFncy5nZXQoZSl9T2JqZWN0KG8ubXV0YXRvcikoaSxlPT57Zm9yKGNvbnN0IHQgb2YgZS5mZWF0dXJlT3ZlcnJpZGVzKU9iamVjdChyLmEpKCkuZmVhdHVyZUZsYWdzLnNldCh0Lm5hbWUudG9Mb3dlckNhc2UoKSx0LmlzRW5hYmxlZCl9KTt2YXIgdT1uKDE2KSxjPW4oMTc0KTtmdW5jdGlvbiBsKGUsdCl7aWYoT2JqZWN0KGMuYSkoZSkpdCgpO2Vsc2V7bGV0IG49T2JqZWN0KHUuYXV0b3J1bikoKCk9PntPYmplY3QoYy5hKShlKSYmKHQoKSxuKCkpfSl9fXZhciBmPW4oMjU4KSxoPW4oMTU0KTtsZXQgZD1PYmplY3Qoby5hY3Rpb24pKCJzZXRGZWF0dXJlRmxhZzxUPiIsKGUsdCk9Pih7ZmVhdHVyZTplLGlzT246dH0pKTtPYmplY3Qoby5tdXRhdG9yKShkLChmdW5jdGlvbihlKXtPYmplY3Qoci5hKSgpLmZlYXR1cmVGbGFncy5zZXQoZS5mZWF0dXJlLnRvTG93ZXJDYXNlKCksZS5pc09uKX0pKSxPYmplY3Qoby5vcmNoZXN0cmF0b3IpKGQsKGZ1bmN0aW9uKGUpe2xldCB0PWUuZmVhdHVyZSxuPWUuaXNPbjtPYmplY3QoaC5jKShbe25hbWU6dC50b0xvd2VyQ2FzZSgpLGlzRW5hYmxlZDpufV0pfSkpO3ZhciBwPWQsdj1uKDExOCk7ZnVuY3Rpb24gYigpe2NvbnN0IGU9T2JqZWN0KHYuYSkoKTtmb3IobGV0IHQgb2YgT2JqZWN0KHIuYSkoKS5mZWF0dXJlRmxhZ3Mua2V5cygpKXAodCwhIWVbdF0pO09iamVjdChoLmEpKCl9ZnVuY3Rpb24geSgpe3JldHVybiBPYmplY3Qua2V5cyhPYmplY3Qodi5hKSgpKX1jb25zdCBtPSJmd2stdWJlcmZsYWciLGc9ImZ3ay1jb25zdW1lciIsTz0iZndrLWJ1c2luZXNzIjtmdW5jdGlvbiB3KCl7cmV0dXJuIFMoKS5pbmNsdWRlcyhtKT8xOjB9ZnVuY3Rpb24gaihlKXtjb25zdCB0PVMoKTtyZXR1cm4gZSYmdC5pbmNsdWRlcyhnKSYmIXQuaW5jbHVkZXMoTyl8fCFlJiZ0LmluY2x1ZGVzKE8pJiYhdC5pbmNsdWRlcyhnKT8xOjB9bGV0IEU7ZnVuY3Rpb24gUygpe3JldHVybiBFfHwoRT15KCkuZmlsdGVyKGU9PmU9PT1tfHxlPT09Z3x8ZT09PU8pKSxFfWZ1bmN0aW9uIEEoZSl7Y29uc3QgdD1PYmplY3Qoci5hKSgpLmZlYXR1cmVGbGFncztyZXR1cm5bLi4udC5rZXlzKCldLmZpbHRlcihuPT4wPT1uLmluZGV4T2YoZSkmJnQuZ2V0KG4udG9Mb3dlckNhc2UoKSkpfW4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImgiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiaiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGYuYn0pKSxuLmQodCwiayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGMuYX0pKSxuLmQodCwibSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSksbi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJvIiwoZnVuY3Rpb24oKXtyZXR1cm4gaC5jfSkpLG4uZCh0LCJuIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gan0pKSxuLmQodCwiZiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHYuYX0pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSk7bGV0IGs9T2JqZWN0KHIuYSkoKS5mZWF0dXJlRmxhZ3N9LDQ3MDpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oODAyKS5PYnNlcnZhYmxlfSw0NzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9bigxMzQpLG89bigzMTMpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5nZXRGcmFnbWVudERvYz1PYmplY3Qoci5jKShvLmMpfXJldHVybiBlLnByb3RvdHlwZS5yZWNvcmRPcHRpbWlzdGljVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSx0KXt0aGlzLnBlcmZvcm1UcmFuc2FjdGlvbihlLHQpfSxlLnByb3RvdHlwZS50cmFuc2Zvcm1Eb2N1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZS5wcm90b3R5cGUuaWRlbnRpZnk9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5nYz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5tb2RpZnk9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLnRyYW5zZm9ybUZvckxpbms9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUucHJvdG90eXBlLnJlYWRRdWVyeT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hIWUub3B0aW1pc3RpYyksdGhpcy5yZWFkKHtyb290SWQ6ZS5pZHx8IlJPT1RfUVVFUlkiLHF1ZXJ5OmUucXVlcnksdmFyaWFibGVzOmUudmFyaWFibGVzLHJldHVyblBhcnRpYWxEYXRhOmUucmV0dXJuUGFydGlhbERhdGEsb3B0aW1pc3RpYzp0fSl9LGUucHJvdG90eXBlLnJlYWRGcmFnbWVudD1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hIWUub3B0aW1pc3RpYyksdGhpcy5yZWFkKHtxdWVyeTp0aGlzLmdldEZyYWdtZW50RG9jKGUuZnJhZ21lbnQsZS5mcmFnbWVudE5hbWUpLHZhcmlhYmxlczplLnZhcmlhYmxlcyxyb290SWQ6ZS5pZCxyZXR1cm5QYXJ0aWFsRGF0YTplLnJldHVyblBhcnRpYWxEYXRhLG9wdGltaXN0aWM6dH0pfSxlLnByb3RvdHlwZS53cml0ZVF1ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlKHtkYXRhSWQ6ZS5pZHx8IlJPT1RfUVVFUlkiLHJlc3VsdDplLmRhdGEscXVlcnk6ZS5xdWVyeSx2YXJpYWJsZXM6ZS52YXJpYWJsZXMsYnJvYWRjYXN0OmUuYnJvYWRjYXN0fSl9LGUucHJvdG90eXBlLndyaXRlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGUoe2RhdGFJZDplLmlkLHJlc3VsdDplLmRhdGEsdmFyaWFibGVzOmUudmFyaWFibGVzLHF1ZXJ5OnRoaXMuZ2V0RnJhZ21lbnREb2MoZS5mcmFnbWVudCxlLmZyYWdtZW50TmFtZSksYnJvYWRjYXN0OmUuYnJvYWRjYXN0fSl9LGV9KCl9LDQ3MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKTt2YXIgcj1uKDM5OSksbz1uKDc4KSxpPXtOYW1lOltdLERvY3VtZW50OlsiZGVmaW5pdGlvbnMiXSxPcGVyYXRpb25EZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sVmFyaWFibGVEZWZpbml0aW9uOlsidmFyaWFibGUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLFZhcmlhYmxlOlsibmFtZSJdLFNlbGVjdGlvblNldDpbInNlbGVjdGlvbnMiXSxGaWVsZDpbImFsaWFzIiwibmFtZSIsImFyZ3VtZW50cyIsImRpcmVjdGl2ZXMiLCJzZWxlY3Rpb25TZXQiXSxBcmd1bWVudDpbIm5hbWUiLCJ2YWx1ZSJdLEZyYWdtZW50U3ByZWFkOlsibmFtZSIsImRpcmVjdGl2ZXMiXSxJbmxpbmVGcmFnbWVudDpbInR5cGVDb25kaXRpb24iLCJkaXJlY3RpdmVzIiwic2VsZWN0aW9uU2V0Il0sRnJhZ21lbnREZWZpbml0aW9uOlsibmFtZSIsInZhcmlhYmxlRGVmaW5pdGlvbnMiLCJ0eXBlQ29uZGl0aW9uIiwiZGlyZWN0aXZlcyIsInNlbGVjdGlvblNldCJdLEludFZhbHVlOltdLEZsb2F0VmFsdWU6W10sU3RyaW5nVmFsdWU6W10sQm9vbGVhblZhbHVlOltdLE51bGxWYWx1ZTpbXSxFbnVtVmFsdWU6W10sTGlzdFZhbHVlOlsidmFsdWVzIl0sT2JqZWN0VmFsdWU6WyJmaWVsZHMiXSxPYmplY3RGaWVsZDpbIm5hbWUiLCJ2YWx1ZSJdLERpcmVjdGl2ZTpbIm5hbWUiLCJhcmd1bWVudHMiXSxOYW1lZFR5cGU6WyJuYW1lIl0sTGlzdFR5cGU6WyJ0eXBlIl0sTm9uTnVsbFR5cGU6WyJ0eXBlIl0sU2NoZW1hRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sT3BlcmF0aW9uVHlwZURlZmluaXRpb246WyJ0eXBlIl0sU2NhbGFyVHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEZpZWxkRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImFyZ3VtZW50cyIsInR5cGUiLCJkaXJlY3RpdmVzIl0sSW5wdXRWYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiZGlyZWN0aXZlcyJdLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLEVudW1WYWx1ZURlZmluaXRpb246WyJkZXNjcmlwdGlvbiIsIm5hbWUiLCJkaXJlY3RpdmVzIl0sSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbjpbImRlc2NyaXB0aW9uIiwibmFtZSIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxEaXJlY3RpdmVEZWZpbml0aW9uOlsiZGVzY3JpcHRpb24iLCJuYW1lIiwiYXJndW1lbnRzIiwibG9jYXRpb25zIl0sU2NoZW1hRXh0ZW5zaW9uOlsiZGlyZWN0aXZlcyIsIm9wZXJhdGlvblR5cGVzIl0sU2NhbGFyVHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIl0sT2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJpbnRlcmZhY2VzIiwiZGlyZWN0aXZlcyIsImZpZWxkcyJdLEludGVyZmFjZVR5cGVFeHRlbnNpb246WyJuYW1lIiwiaW50ZXJmYWNlcyIsImRpcmVjdGl2ZXMiLCJmaWVsZHMiXSxVbmlvblR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInR5cGVzIl0sRW51bVR5cGVFeHRlbnNpb246WyJuYW1lIiwiZGlyZWN0aXZlcyIsInZhbHVlcyJdLElucHV0T2JqZWN0VHlwZUV4dGVuc2lvbjpbIm5hbWUiLCJkaXJlY3RpdmVzIiwiZmllbGRzIl19LGE9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTppLHM9dm9pZCAwLHU9QXJyYXkuaXNBcnJheShlKSxsPVtlXSxmPS0xLGg9W10sZD12b2lkIDAscD12b2lkIDAsdj12b2lkIDAsYj1bXSx5PVtdLG09ZTtkb3t2YXIgZz0rK2Y9PT1sLmxlbmd0aCxPPWcmJjAhPT1oLmxlbmd0aDtpZihnKXtpZihwPTA9PT15Lmxlbmd0aD92b2lkIDA6YltiLmxlbmd0aC0xXSxkPXYsdj15LnBvcCgpLE8pe2lmKHUpZD1kLnNsaWNlKCk7ZWxzZXtmb3IodmFyIHc9e30saj0wLEU9T2JqZWN0LmtleXMoZCk7ajxFLmxlbmd0aDtqKyspe3ZhciBTPUVbal07d1tTXT1kW1NdfWQ9d31mb3IodmFyIEE9MCxrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBJPWhba11bMF0sVD1oW2tdWzFdO3UmJihJLT1BKSx1JiZudWxsPT09VD8oZC5zcGxpY2UoSSwxKSxBKyspOmRbSV09VH19Zj1zLmluZGV4LGw9cy5rZXlzLGg9cy5lZGl0cyx1PXMuaW5BcnJheSxzPXMucHJldn1lbHNle2lmKHA9dj91P2Y6bFtmXTp2b2lkIDAsbnVsbD09KGQ9dj92W3BdOm0pKWNvbnRpbnVlO3YmJmIucHVzaChwKX12YXIgeCxDPXZvaWQgMDtpZighQXJyYXkuaXNBcnJheShkKSl7aWYoIU9iamVjdChvLmMpKGQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBBU1QgTm9kZTogIi5jb25jYXQoT2JqZWN0KHIuYSkoZCksIi4iKSk7dmFyIE09Yyh0LGQua2luZCxnKTtpZihNKXtpZigoQz1NLmNhbGwodCxkLHAsdixiLHkpKT09PWEpYnJlYWs7aWYoITE9PT1DKXtpZighZyl7Yi5wb3AoKTtjb250aW51ZX19ZWxzZSBpZih2b2lkIDAhPT1DJiYoaC5wdXNoKFtwLENdKSwhZykpe2lmKCFPYmplY3Qoby5jKShDKSl7Yi5wb3AoKTtjb250aW51ZX1kPUN9fX1pZih2b2lkIDA9PT1DJiZPJiZoLnB1c2goW3AsZF0pLGcpYi5wb3AoKTtlbHNlIHM9e2luQXJyYXk6dSxpbmRleDpmLGtleXM6bCxlZGl0czpoLHByZXY6c30sbD0odT1BcnJheS5pc0FycmF5KGQpKT9kOm51bGwhPT0oeD1uW2Qua2luZF0pJiZ2b2lkIDAhPT14P3g6W10sZj0tMSxoPVtdLHYmJnkucHVzaCh2KSx2PWR9d2hpbGUodm9pZCAwIT09cyk7cmV0dXJuIDAhPT1oLmxlbmd0aCYmKG09aFtoLmxlbmd0aC0xXVsxXSksbX1mdW5jdGlvbiB1KGUpe3ZhciB0PW5ldyBBcnJheShlLmxlbmd0aCk7cmV0dXJue2VudGVyOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKG51bGw9PXRbcl0pe3ZhciBvPWMoZVtyXSxuLmtpbmQsITEpO2lmKG8pe3ZhciBpPW8uYXBwbHkoZVtyXSxhcmd1bWVudHMpO2lmKCExPT09aSl0W3JdPW47ZWxzZSBpZihpPT09YSl0W3JdPWE7ZWxzZSBpZih2b2lkIDAhPT1pKXJldHVybiBpfX19LGxlYXZlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKG51bGw9PXRbcl0pe3ZhciBvPWMoZVtyXSxuLmtpbmQsITApO2lmKG8pe3ZhciBpPW8uYXBwbHkoZVtyXSxhcmd1bWVudHMpO2lmKGk9PT1hKXRbcl09YTtlbHNlIGlmKHZvaWQgMCE9PWkmJiExIT09aSlyZXR1cm4gaX19ZWxzZSB0W3JdPT09biYmKHRbcl09bnVsbCl9fX1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcj1lW3RdO2lmKHIpe2lmKCFuJiYiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gcjt2YXIgbz1uP3IubGVhdmU6ci5lbnRlcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgbylyZXR1cm4gb31lbHNle3ZhciBpPW4/ZS5sZWF2ZTplLmVudGVyO2lmKGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXJldHVybiBpO3ZhciBhPWlbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGF9fX19LDQ3NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9bigzNTEpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGkoZS5zb3VyY2UsT2JqZWN0KHIuYSkoZS5zb3VyY2UsZS5zdGFydCkpfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1lLmxvY2F0aW9uT2Zmc2V0LmNvbHVtbi0xLHI9cyhuKStlLmJvZHksbz10LmxpbmUtMSxpPWUubG9jYXRpb25PZmZzZXQubGluZS0xLHU9dC5saW5lK2ksYz0xPT09dC5saW5lP246MCxsPXQuY29sdW1uK2MsZj0iIi5jb25jYXQoZS5uYW1lLCI6IikuY29uY2F0KHUsIjoiKS5jb25jYXQobCwiXG4iKSxoPXIuc3BsaXQoL1xyXG58W1xuXHJdL2cpLGQ9aFtvXTtpZihkLmxlbmd0aD4xMjApe2Zvcih2YXIgcD1NYXRoLmZsb29yKGwvODApLHY9bCU4MCxiPVtdLHk9MDt5PGQubGVuZ3RoO3krPTgwKWIucHVzaChkLnNsaWNlKHkseSs4MCkpO3JldHVybiBmK2EoW1siIi5jb25jYXQodSksYlswXV1dLmNvbmNhdChiLnNsaWNlKDEscCsxKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblsiIixlXX0pKSxbWyIgIixzKHYtMSkrIl4iXSxbIiIsYltwKzFdXV0pKX1yZXR1cm4gZithKFtbIiIuY29uY2F0KHUtMSksaFtvLTFdXSxbIiIuY29uY2F0KHUpLGRdLFsiIixzKGwtMSkrIl4iXSxbIiIuY29uY2F0KHUrMSksaFtvKzFdXV0pfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe2VbMF07cmV0dXJuIHZvaWQgMCE9PWVbMV19KSksbj1NYXRoLm1heC5hcHBseShNYXRoLHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGh9KSkpO3JldHVybiB0Lm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQscj1lWzBdLG89ZVsxXTtyZXR1cm4gcyhuLSh0PXIpLmxlbmd0aCkrdCsobz8iIHwgIitvOiIgfCIpfSkpLmpvaW4oIlxuIil9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gQXJyYXkoZSsxKS5qb2luKCIgIil9fSw0NzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByPW4oOCksbz1uKDc4OCksaT17aHR0cDp7aW5jbHVkZVF1ZXJ5OiEwLGluY2x1ZGVFeHRlbnNpb25zOiExfSxoZWFkZXJzOnthY2NlcHQ6IiovKiIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxvcHRpb25zOnttZXRob2Q6IlBPU1QifX0sYT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBhPU9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHQub3B0aW9ucykse2hlYWRlcnM6dC5oZWFkZXJzLGNyZWRlbnRpYWxzOnQuY3JlZGVudGlhbHN9KSx1PXQuaHR0cHx8e307bi5mb3JFYWNoKChmdW5jdGlvbihlKXthPU9iamVjdChyLmEpKE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGEpLGUub3B0aW9ucykse2hlYWRlcnM6T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sYS5oZWFkZXJzKSxzKGUuaGVhZGVycykpfSksZS5jcmVkZW50aWFscyYmKGEuY3JlZGVudGlhbHM9ZS5jcmVkZW50aWFscyksdT1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSx1KSxlLmh0dHApfSkpO3ZhciBjPWUub3BlcmF0aW9uTmFtZSxsPWUuZXh0ZW5zaW9ucyxmPWUudmFyaWFibGVzLGg9ZS5xdWVyeSxkPXtvcGVyYXRpb25OYW1lOmMsdmFyaWFibGVzOmZ9O3JldHVybiB1LmluY2x1ZGVFeHRlbnNpb25zJiYoZC5leHRlbnNpb25zPWwpLHUuaW5jbHVkZVF1ZXJ5JiYoZC5xdWVyeT1PYmplY3Qoby5hKShoKSkse29wdGlvbnM6YSxib2R5OmR9fTtmdW5jdGlvbiBzKGUpe2lmKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5rZXlzKE9iamVjdChlKSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dFtuLnRvTG93ZXJDYXNlKCldPWVbbl19KSksdH1yZXR1cm4gZX19LDQ3NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDYwMSksbz1uKDM1Myk7ZnVuY3Rpb24gaShlKXt2YXIgdD1lLnByb3RvdHlwZS50b0pTT047ImZ1bmN0aW9uIj09dHlwZW9mIHR8fE9iamVjdChyLmEpKDApLGUucHJvdG90eXBlLmluc3BlY3Q9dCxvLmEmJihlLnByb3RvdHlwZVtvLmFdPXQpfX0sNDc4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpO3ZhciByPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uZXcgRXJyb3Iobik7dGhyb3cgci5uYW1lPSJTZXJ2ZXJFcnJvciIsci5yZXNwb25zZT1lLHIuc3RhdHVzQ29kZT1lLnN0YXR1cyxyLnJlc3VsdD10LHJ9fSw0Nzk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oNDAzKSxvPW4oMzk5KSxpPW4oNDE0KSxhPW4oNjI3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiR3JhcGhRTCByZXF1ZXN0IixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7bGluZToxLGNvbHVtbjoxfTsic3RyaW5nIj09dHlwZW9mIGV8fE9iamVjdChpLmEpKDAsIkJvZHkgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQ6ICIuY29uY2F0KE9iamVjdChvLmEpKGUpLCIuIikpLHRoaXMuYm9keT1lLHRoaXMubmFtZT10LHRoaXMubG9jYXRpb25PZmZzZXQ9bix0aGlzLmxvY2F0aW9uT2Zmc2V0LmxpbmU+MHx8T2JqZWN0KGkuYSkoMCwibGluZSBpbiBsb2NhdGlvbk9mZnNldCBpcyAxLWluZGV4ZWQgYW5kIG11c3QgYmUgcG9zaXRpdmUuIiksdGhpcy5sb2NhdGlvbk9mZnNldC5jb2x1bW4+MHx8T2JqZWN0KGkuYSkoMCwiY29sdW1uIGluIGxvY2F0aW9uT2Zmc2V0IGlzIDEtaW5kZXhlZCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4iKX12YXIgdCxuLGE7cmV0dXJuIHQ9ZSwobj1be2tleTpyLmMsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlNvdXJjZSJ9fV0pJiZzKHQucHJvdG90eXBlLG4pLGEmJnModCxhKSxlfSgpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIE9iamVjdChhLmEpKGUsdSl9fSw0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O24ucihyKSxuLmQociwiQkFTRV9USEVNRV9JRCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHIsIkJBU0VfREFSS19USEVNRV9JRCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHIsIkJBU0VfT0ZGSUNFX1RIRU1FX0lEIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQociwiQ09OVFJBU1RfVEhFTUVfSUQiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChyLCJMT0NBTF9TVE9SQUdFX0tFWSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSk7Y29uc3Qgbz0iYmFzZSIsaT1gJHtvfS5kYXJrYCxhPSJiYXNld2l0aG9mZmljZXRoZW1lcHJlZmVycmVkIixzPSJjb250cmFzdCIsdT0iVXNlcnNOb3JtYWxpemVkVGhlbWUiO3ZhciBjPW4oMiksbD1uKDE3KTtjb25zdCBmPXt9O2FzeW5jIGZ1bmN0aW9uIGgoZSx0KXtpZihlPT1vKXJldHVybiBudWxsO2xldCBuPWZbZV07cmV0dXJuIG58fChuPWZbZV09KGFzeW5jKCk9Pnt0cnl7bGV0IHQ9YXdhaXQgZmV0Y2goYCR7T2JqZWN0KGMuSCkoKX1yZXNvdXJjZXMvdGhlbWUvZmFicmljLmNvbG9yLnZhcmlhYmxlcy50aGVtZS4ke2UudG9Mb3dlckNhc2UoKX0uanNvbmApO3JldHVybiBhd2FpdCB0Lmpzb24oKX1jYXRjaChlKXtyZXR1cm4gbnVsbH19KSgpLE9iamVjdChsLmIpKCJ0bV9zIix0fHwibi9hIikpLG59ZnVuY3Rpb24gZChlLHQpe3JldHVybmAke2V9JHt0PyIuZGFyayI6IiJ9YH1uLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBkfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sNDgwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKTt2YXIgcj1uKDE0Niksbz1uKDc4KSxpPW4oMTUpLGE9big0MTIpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PW5ldyBvLmIoaS5hLlNPRiwwLDAsMCwwLG51bGwpO3RoaXMuc291cmNlPWUsdGhpcy5sYXN0VG9rZW49dCx0aGlzLnRva2VuPXQsdGhpcy5saW5lPTEsdGhpcy5saW5lU3RhcnQ9MH12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5hZHZhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdFRva2VuPXRoaXMudG9rZW4sdGhpcy50b2tlbj10aGlzLmxvb2thaGVhZCgpfSx0Lmxvb2thaGVhZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMudG9rZW47aWYoZS5raW5kIT09aS5hLkVPRilkb3t2YXIgdDtlPW51bGwhPT0odD1lLm5leHQpJiZ2b2lkIDAhPT10P3Q6ZS5uZXh0PWwodGhpcyxlKX13aGlsZShlLmtpbmQ9PT1pLmEuQ09NTUVOVCk7cmV0dXJuIGV9LGV9KCk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZT09PWkuYS5CQU5HfHxlPT09aS5hLkRPTExBUnx8ZT09PWkuYS5BTVB8fGU9PT1pLmEuUEFSRU5fTHx8ZT09PWkuYS5QQVJFTl9SfHxlPT09aS5hLlNQUkVBRHx8ZT09PWkuYS5DT0xPTnx8ZT09PWkuYS5FUVVBTFN8fGU9PT1pLmEuQVR8fGU9PT1pLmEuQlJBQ0tFVF9MfHxlPT09aS5hLkJSQUNLRVRfUnx8ZT09PWkuYS5CUkFDRV9MfHxlPT09aS5hLlBJUEV8fGU9PT1pLmEuQlJBQ0VfUn1mdW5jdGlvbiBjKGUpe3JldHVybiBpc05hTihlKT9pLmEuRU9GOmU8MTI3P0pTT04uc3RyaW5naWZ5KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOiciXFx1Jy5jb25jYXQoKCIwMCIrZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSkuc2xpY2UoLTQpLCciJyl9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1lLnNvdXJjZSxhPW4uYm9keSxzPWEubGVuZ3RoLHU9dC5lbmQ7dTxzOyl7dmFyIGM9YS5jaGFyQ29kZUF0KHUpLGw9ZS5saW5lLHA9MSt1LWUubGluZVN0YXJ0O3N3aXRjaChjKXtjYXNlIDY1Mjc5OmNhc2UgOTpjYXNlIDMyOmNhc2UgNDQ6Kyt1O2NvbnRpbnVlO2Nhc2UgMTA6Kyt1LCsrZS5saW5lLGUubGluZVN0YXJ0PXU7Y29udGludWU7Y2FzZSAxMzoxMD09PWEuY2hhckNvZGVBdCh1KzEpP3UrPTI6Kyt1LCsrZS5saW5lLGUubGluZVN0YXJ0PXU7Y29udGludWU7Y2FzZSAzMzpyZXR1cm4gbmV3IG8uYihpLmEuQkFORyx1LHUrMSxsLHAsdCk7Y2FzZSAzNTpyZXR1cm4gaChuLHUsbCxwLHQpO2Nhc2UgMzY6cmV0dXJuIG5ldyBvLmIoaS5hLkRPTExBUix1LHUrMSxsLHAsdCk7Y2FzZSAzODpyZXR1cm4gbmV3IG8uYihpLmEuQU1QLHUsdSsxLGwscCx0KTtjYXNlIDQwOnJldHVybiBuZXcgby5iKGkuYS5QQVJFTl9MLHUsdSsxLGwscCx0KTtjYXNlIDQxOnJldHVybiBuZXcgby5iKGkuYS5QQVJFTl9SLHUsdSsxLGwscCx0KTtjYXNlIDQ2OmlmKDQ2PT09YS5jaGFyQ29kZUF0KHUrMSkmJjQ2PT09YS5jaGFyQ29kZUF0KHUrMikpcmV0dXJuIG5ldyBvLmIoaS5hLlNQUkVBRCx1LHUrMyxsLHAsdCk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gbmV3IG8uYihpLmEuQ09MT04sdSx1KzEsbCxwLHQpO2Nhc2UgNjE6cmV0dXJuIG5ldyBvLmIoaS5hLkVRVUFMUyx1LHUrMSxsLHAsdCk7Y2FzZSA2NDpyZXR1cm4gbmV3IG8uYihpLmEuQVQsdSx1KzEsbCxwLHQpO2Nhc2UgOTE6cmV0dXJuIG5ldyBvLmIoaS5hLkJSQUNLRVRfTCx1LHUrMSxsLHAsdCk7Y2FzZSA5MzpyZXR1cm4gbmV3IG8uYihpLmEuQlJBQ0tFVF9SLHUsdSsxLGwscCx0KTtjYXNlIDEyMzpyZXR1cm4gbmV3IG8uYihpLmEuQlJBQ0VfTCx1LHUrMSxsLHAsdCk7Y2FzZSAxMjQ6cmV0dXJuIG5ldyBvLmIoaS5hLlBJUEUsdSx1KzEsbCxwLHQpO2Nhc2UgMTI1OnJldHVybiBuZXcgby5iKGkuYS5CUkFDRV9SLHUsdSsxLGwscCx0KTtjYXNlIDM0OnJldHVybiAzND09PWEuY2hhckNvZGVBdCh1KzEpJiYzND09PWEuY2hhckNvZGVBdCh1KzIpP2Iobix1LGwscCx0LGUpOnYobix1LGwscCx0KTtjYXNlIDQ1OmNhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGQobix1LGMsbCxwLHQpO2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOmNhc2UgNzE6Y2FzZSA3MjpjYXNlIDczOmNhc2UgNzQ6Y2FzZSA3NTpjYXNlIDc2OmNhc2UgNzc6Y2FzZSA3ODpjYXNlIDc5OmNhc2UgODA6Y2FzZSA4MTpjYXNlIDgyOmNhc2UgODM6Y2FzZSA4NDpjYXNlIDg1OmNhc2UgODY6Y2FzZSA4NzpjYXNlIDg4OmNhc2UgODk6Y2FzZSA5MDpjYXNlIDk1OmNhc2UgOTc6Y2FzZSA5ODpjYXNlIDk5OmNhc2UgMTAwOmNhc2UgMTAxOmNhc2UgMTAyOmNhc2UgMTAzOmNhc2UgMTA0OmNhc2UgMTA1OmNhc2UgMTA2OmNhc2UgMTA3OmNhc2UgMTA4OmNhc2UgMTA5OmNhc2UgMTEwOmNhc2UgMTExOmNhc2UgMTEyOmNhc2UgMTEzOmNhc2UgMTE0OmNhc2UgMTE1OmNhc2UgMTE2OmNhc2UgMTE3OmNhc2UgMTE4OmNhc2UgMTE5OmNhc2UgMTIwOmNhc2UgMTIxOmNhc2UgMTIyOnJldHVybiBtKG4sdSxsLHAsdCl9dGhyb3cgT2JqZWN0KHIuYSkobix1LGYoYykpfXZhciB5PWUubGluZSxnPTErdS1lLmxpbmVTdGFydDtyZXR1cm4gbmV3IG8uYihpLmEuRU9GLHMscyx5LGcsdCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZTwzMiYmOSE9PWUmJjEwIT09ZSYmMTMhPT1lPyJDYW5ub3QgY29udGFpbiB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgIi5jb25jYXQoYyhlKSwiLiIpOjM5PT09ZT8iVW5leHBlY3RlZCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyICgnKSwgZGlkIHlvdSBtZWFuIHRvIHVzZSBhIGRvdWJsZSBxdW90ZSAoXCIpPyI6IkNhbm5vdCBwYXJzZSB0aGUgdW5leHBlY3RlZCBjaGFyYWN0ZXIgIi5jb25jYXQoYyhlKSwiLiIpfWZ1bmN0aW9uIGgoZSx0LG4scixhKXt2YXIgcyx1PWUuYm9keSxjPXQ7ZG97cz11LmNoYXJDb2RlQXQoKytjKX13aGlsZSghaXNOYU4ocykmJihzPjMxfHw5PT09cykpO3JldHVybiBuZXcgby5iKGkuYS5DT01NRU5ULHQsYyxuLHIsYSx1LnNsaWNlKHQrMSxjKSl9ZnVuY3Rpb24gZChlLHQsbixhLHMsdSl7dmFyIGw9ZS5ib2R5LGY9bixoPXQsZD0hMTtpZig0NT09PWYmJihmPWwuY2hhckNvZGVBdCgrK2gpKSw0OD09PWYpe2lmKChmPWwuY2hhckNvZGVBdCgrK2gpKT49NDgmJmY8PTU3KXRocm93IE9iamVjdChyLmEpKGUsaCwiSW52YWxpZCBudW1iZXIsIHVuZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgMDogIi5jb25jYXQoYyhmKSwiLiIpKX1lbHNlIGg9cChlLGgsZiksZj1sLmNoYXJDb2RlQXQoaCk7aWYoNDY9PT1mJiYoZD0hMCxmPWwuY2hhckNvZGVBdCgrK2gpLGg9cChlLGgsZiksZj1sLmNoYXJDb2RlQXQoaCkpLDY5IT09ZiYmMTAxIT09Znx8KGQ9ITAsNDMhPT0oZj1sLmNoYXJDb2RlQXQoKytoKSkmJjQ1IT09Znx8KGY9bC5jaGFyQ29kZUF0KCsraCkpLGg9cChlLGgsZiksZj1sLmNoYXJDb2RlQXQoaCkpLDQ2PT09Znx8ZnVuY3Rpb24oZSl7cmV0dXJuIDk1PT09ZXx8ZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfShmKSl0aHJvdyBPYmplY3Qoci5hKShlLGgsIkludmFsaWQgbnVtYmVyLCBleHBlY3RlZCBkaWdpdCBidXQgZ290OiAiLmNvbmNhdChjKGYpLCIuIikpO3JldHVybiBuZXcgby5iKGQ/aS5hLkZMT0FUOmkuYS5JTlQsdCxoLGEscyx1LGwuc2xpY2UodCxoKSl9ZnVuY3Rpb24gcChlLHQsbil7dmFyIG89ZS5ib2R5LGk9dCxhPW47aWYoYT49NDgmJmE8PTU3KXtkb3thPW8uY2hhckNvZGVBdCgrK2kpfXdoaWxlKGE+PTQ4JiZhPD01Nyk7cmV0dXJuIGl9dGhyb3cgT2JqZWN0KHIuYSkoZSxpLCJJbnZhbGlkIG51bWJlciwgZXhwZWN0ZWQgZGlnaXQgYnV0IGdvdDogIi5jb25jYXQoYyhhKSwiLiIpKX1mdW5jdGlvbiB2KGUsdCxuLGEscyl7Zm9yKHZhciB1LGwsZixoLGQ9ZS5ib2R5LHA9dCsxLHY9cCxiPTAsbT0iIjtwPGQubGVuZ3RoJiYhaXNOYU4oYj1kLmNoYXJDb2RlQXQocCkpJiYxMCE9PWImJjEzIT09Yjspe2lmKDM0PT09YilyZXR1cm4gbSs9ZC5zbGljZSh2LHApLG5ldyBvLmIoaS5hLlNUUklORyx0LHArMSxuLGEscyxtKTtpZihiPDMyJiY5IT09Yil0aHJvdyBPYmplY3Qoci5hKShlLHAsIkludmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBTdHJpbmc6ICIuY29uY2F0KGMoYiksIi4iKSk7aWYoKytwLDkyPT09Yil7c3dpdGNoKG0rPWQuc2xpY2UodixwLTEpLGI9ZC5jaGFyQ29kZUF0KHApKXtjYXNlIDM0Om0rPSciJzticmVhaztjYXNlIDQ3Om0rPSIvIjticmVhaztjYXNlIDkyOm0rPSJcXCI7YnJlYWs7Y2FzZSA5ODptKz0iXGIiO2JyZWFrO2Nhc2UgMTAyOm0rPSJcZiI7YnJlYWs7Y2FzZSAxMTA6bSs9IlxuIjticmVhaztjYXNlIDExNDptKz0iXHIiO2JyZWFrO2Nhc2UgMTE2Om0rPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIGc9KHU9ZC5jaGFyQ29kZUF0KHArMSksbD1kLmNoYXJDb2RlQXQocCsyKSxmPWQuY2hhckNvZGVBdChwKzMpLGg9ZC5jaGFyQ29kZUF0KHArNCkseSh1KTw8MTJ8eShsKTw8OHx5KGYpPDw0fHkoaCkpO2lmKGc8MCl7dmFyIE89ZC5zbGljZShwKzEscCs1KTt0aHJvdyBPYmplY3Qoci5hKShlLHAsIkludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogXFx1Ii5jb25jYXQoTywiLiIpKX1tKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGcpLHArPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBPYmplY3Qoci5hKShlLHAsIkludmFsaWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogXFwiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLCIuIikpfXY9KytwfX10aHJvdyBPYmplY3Qoci5hKShlLHAsIlVudGVybWluYXRlZCBzdHJpbmcuIil9ZnVuY3Rpb24gYihlLHQsbixzLHUsbCl7Zm9yKHZhciBmPWUuYm9keSxoPXQrMyxkPWgscD0wLHY9IiI7aDxmLmxlbmd0aCYmIWlzTmFOKHA9Zi5jaGFyQ29kZUF0KGgpKTspe2lmKDM0PT09cCYmMzQ9PT1mLmNoYXJDb2RlQXQoaCsxKSYmMzQ9PT1mLmNoYXJDb2RlQXQoaCsyKSlyZXR1cm4gdis9Zi5zbGljZShkLGgpLG5ldyBvLmIoaS5hLkJMT0NLX1NUUklORyx0LGgrMyxuLHMsdSxPYmplY3QoYS5hKSh2KSk7aWYocDwzMiYmOSE9PXAmJjEwIT09cCYmMTMhPT1wKXRocm93IE9iamVjdChyLmEpKGUsaCwiSW52YWxpZCBjaGFyYWN0ZXIgd2l0aGluIFN0cmluZzogIi5jb25jYXQoYyhwKSwiLiIpKTsxMD09PXA/KCsraCwrK2wubGluZSxsLmxpbmVTdGFydD1oKToxMz09PXA/KDEwPT09Zi5jaGFyQ29kZUF0KGgrMSk/aCs9MjorK2gsKytsLmxpbmUsbC5saW5lU3RhcnQ9aCk6OTI9PT1wJiYzND09PWYuY2hhckNvZGVBdChoKzEpJiYzND09PWYuY2hhckNvZGVBdChoKzIpJiYzND09PWYuY2hhckNvZGVBdChoKzMpPyh2Kz1mLnNsaWNlKGQsaCkrJyIiIicsZD1oKz00KTorK2h9dGhyb3cgT2JqZWN0KHIuYSkoZSxoLCJVbnRlcm1pbmF0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz9lLTQ4OmU+PTY1JiZlPD03MD9lLTU1OmU+PTk3JiZlPD0xMDI/ZS04NzotMX1mdW5jdGlvbiBtKGUsdCxuLHIsYSl7Zm9yKHZhciBzPWUuYm9keSx1PXMubGVuZ3RoLGM9dCsxLGw9MDtjIT09dSYmIWlzTmFOKGw9cy5jaGFyQ29kZUF0KGMpKSYmKDk1PT09bHx8bD49NDgmJmw8PTU3fHxsPj02NSYmbDw9OTB8fGw+PTk3JiZsPD0xMjIpOykrK2M7cmV0dXJuIG5ldyBvLmIoaS5hLk5BTUUsdCxjLG4scixhLHMuc2xpY2UodCxjKSl9fSw0OTI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksbz1uKDYyNiksaT1uKDYwNik7bGV0IGE9ITA7Y29uc3Qgcz0oKT0+e2E9ITF9LHU9KCk9Pih7UXVlcnk6e2ZpZWxkczp7dXNlckNvbmZpZ3VyYXRpb246e3JlYWQoZSx7YXJnczp0LHRvUmVmZXJlbmNlOm59KXtpZihlKXJldHVybiBlO2lmKGEpe2NvbnN0IGU9ITA7cmV0dXJuIG4oT2JqZWN0KGkuYikobnVsbD09dD92b2lkIDA6dC5pZCksZSl9cmV0dXJuIG4oe19fdHlwZW5hbWU6IlVzZXJDb25maWd1cmF0aW9uIixpZDp0LmlkfSl9fX19LFVzZXJDb25maWd1cmF0aW9uOntmaWVsZHM6e0FwcGxpY2F0aW9uU2V0dGluZ3M6e21lcmdlOiEwfSxBdHRhY2htZW50UG9saWN5OnttZXJnZTohMH0sRmF2b3JpdGVzOnttZXJnZTohMH0sTWFzdGVyQ2F0ZWdvcnlMaXN0OnttZXJnZTohMH0sUG9saWN5U2V0dGluZ3M6e21lcmdlOiEwfSxQcmltZVNldHRpbmdzOnttZXJnZTohMH0sU2FmZXR5VXNlck9wdGlvbnM6e21lcmdlOiEwfSxTZWdtZW50YXRpb25TZXR0aW5nczp7bWVyZ2U6ITB9LFNlc3Npb25TZXR0aW5nczp7bWVyZ2U6ITB9LFNtaW1lQWRtaW5TZXR0aW5nczp7bWVyZ2U6ITB9LFRlbmFudFRoZW1lRGF0YTp7bWVyZ2U6ITB9LFVzZXJPcHRpb25zOnttZXJnZTohMH0sVmlld1N0YXRlQ29uZmlndXJhdGlvbjp7bWVyZ2U6ITB9fX19KTt2YXIgYz1uKDU5MCk7dmFyIGw9big3NCk7Y29uc3QgZj0iQXBvbGxvTm90SW5pdGlhbGl6ZWQiO2xldCBoPW51bGwsZD1udWxsO2Z1bmN0aW9uIHAoKXtpZighaCl7Y29uc3QgZT1uZXcgRXJyb3IoZik7dGhyb3cgZS5hZGRRdWV1ZT0hMCxlfXJldHVybiBofWZ1bmN0aW9uIHYoZSl7aWYoIWgpcmV0dXJuIE9iamVjdChsLnApKGYse3M6ZSxjczoobmV3IEVycm9yKS5zdGFja30pLGR9ZnVuY3Rpb24gYih7bGF6eUxpbmtzOmUsY29udGV4dDp0fSl7cmV0dXJuIGQ9ZS50aGVuKGU9PihoPWZ1bmN0aW9uKHtsaW5rczplLGNvbnRleHQ6dH0pe2NvbnN0IG49e3dhdGNoUXVlcnk6e2ZldGNoUG9saWN5OiJuby1jYWNoZSJ9LHF1ZXJ5OntmZXRjaFBvbGljeToibm8tY2FjaGUifX0saT11KCksYT1uZXcgci5BcG9sbG9DbGllbnQoe2NhY2hlOm5ldyByLkluTWVtb3J5Q2FjaGUoe3Bvc3NpYmxlVHlwZXM6by5hLHR5cGVQb2xpY2llczpPYmplY3QoYy5hKShpKX0pLGRlZmF1bHRPcHRpb25zOm59KTtyZXR1cm4gdC5jbGllbnQ9YSxhLnNldExpbmsoci5BcG9sbG9MaW5rLmZyb20oZSkpLGF9KHtsaW5rczplLGNvbnRleHQ6dH0pLGgpKSxkfXZhciB5PW4oMCk7ZnVuY3Rpb24gbShlKXtyZXR1cm4oKT0+eS5jcmVhdGVFbGVtZW50KHIuQXBvbGxvUHJvdmlkZXIse2NsaWVudDpwKCl9LGUoKSl9bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gYn0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBtfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX0sNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBwfSkpLG4uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBnfSkpO3ZhciByPW4oMTIpO2xldCBvPW51bGwsaT12b2lkIDA7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZXx8KGU9T2JqZWN0KHIuYSkoKS5sb2NhdGlvbiksZT09PWxvY2F0aW9uP298fChvPWMobG9jYXRpb24pKTpjKGUpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gYSh0KVtlXX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhKHQpLGUpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIHZvaWQgMCE9PWUmJmUuc2VhcmNoP3AoZS5zZWFyY2guc3Vic3RyKDEpKTp7fX1mdW5jdGlvbiBsKCl7cmV0dXJuIGl8fChpPWZ1bmN0aW9uKCl7bGV0IGU9cygic291cmNlIik7aWYoZSl7Y29uc3QgZT1mKGxvY2F0aW9uLnNlYXJjaCwic291cmNlIik7aGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeS5zdGF0ZSwiLyIsbG9jYXRpb24ucGF0aG5hbWUrZSl9cmV0dXJuIGV9KCkpfWZ1bmN0aW9uIGYoZSx0KXtjb25zdCBuPW5ldyBSZWdFeHAoIihcXD98JikiK3QrIj1cXHcqJj8iLCJnIik7bGV0IHI9ZS5zcGxpdChuKS5qb2luKCIiKTtjb25zdCBvPXJbci5sZW5ndGgtMV07cmV0dXJuIj8iIT09byYmIiYiIT09b3x8KHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSkscn1jb25zdCBoPTFlMyxkPS9cKy9nO2Z1bmN0aW9uIHAoZSl7Y29uc3QgdD17fTtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoPjApe2NvbnN0IG49ZS5zcGxpdCgiJiIpLHI9bi5sZW5ndGg+aD9oOm4ubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cjsrK2Upe2NvbnN0IHI9bltlXS5yZXBsYWNlKGQsIiUyMCIpLnNwbGl0KCI9Iik7dFtkZWNvZGVVUklDb21wb25lbnQoclswXSldPWRlY29kZVVSSUNvbXBvbmVudChyLnNsaWNlKDEpLmpvaW4oIj0iKSl9fXJldHVybiB0fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGU/T2JqZWN0LmtleXMoZSkubWFwKHQ9PmVuY29kZVVSSUNvbXBvbmVudCh0KSsoZVt0XT8iPSIrZW5jb2RlVVJJQ29tcG9uZW50KGVbdF0pOiIiKSkuam9pbigiJiIpOiIifWxldCBiO2NvbnN0IHk9KCk9Pih2b2lkIDA9PT1iJiYoYj11KCJndWxwIikpLGIpO2xldCBtO2NvbnN0IGc9KCk9Pih2b2lkIDA9PT1tJiYobT15KCl8fHUoImJyYW5jaCIpKSxtKX0sNTIwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByPW4oNDcpLG89bigyODYpLGk9big1Nyk7ZnVuY3Rpb24gYSgpe3JldHVybntbaS5jLkFkc0FnZ3JlZ2F0ZV06e2ZlYXR1cmU6aS5jLkFkc0FnZ3JlZ2F0ZSxuYXRpdmVBZHNTZWVuUnVubmluZ1N1bTowLG5hdGl2ZUFkc0NsaWNrZWRSdW5uaW5nU3VtOjAsbmF0aXZlQWRzRGVsZXRlZFJ1bm5pbmdTdW06MCxuYXRpdmVDUE1SdW5uaW5nU3VtOjAsbmF0aXZlV2luQ1BNUnVubmluZ1N1bTowLHdhc0FkU2VlbkluTGFzdFNlc3Npb246ITEsc3RhcnRPZkFkRnJlZVRyaWFsOiIiLG1pbmlOYXRpdmVBZHNTZWVuUnVubmluZ1N1bTowLG1pbmlOYXRpdmVBZHNDbGlja2VkUnVubmluZ1N1bTowLG1pbmlOYXRpdmVBZHNEZWxldGVkUnVubmluZ1N1bTowLG1pbmlOYXRpdmVDUE1SdW5uaW5nU3VtOjAsbWluaU5hdGl2ZVdpbkNQTVJ1bm5pbmdTdW06MCxtaW5pV2FzQWRTZWVuSW5MYXN0U2Vzc2lvbjohMX0sW2kuYy5TbWFydFN1Z2dlc3Rpb25zXTp7c21hcnRTdWdnZXN0aW9uc0VuYWJsZWQ6ITAsYnJvd3NlckxvY2F0aW9uRW5hYmxlZDohMX0sW2kuYy5EaXZlcnNlRW1vamlzXTp7ZGl2ZXJzZUVtb2ppc1NlbGVjdGVkU2tpblRvbmU6IiJ9LFtpLmMuU3VyZmFjZUFjdGlvbnNdOntyZWFkU3VyZmFjZUFjdGlvbnM6WyJSZXBseSIsIlJlcGx5QWxsIiwiRm9yd2FyZCJdLmNvbmNhdChPYmplY3Qoby5hKSgpP1tdOlsiTGlrZVVubGlrZSJdKSxyZWFkU3VyZmFjZUFkZGluczpbXSxjb21wb3NlU3VyZmFjZUFjdGlvbnM6WyJBZGRBdHRhY2htZW50IiwiQWRkQ2xhc3NpY0F0dGFjaG1lbnQiLCJJbnNlcnRMaW5rIiwiQWRkSW5saW5lSW1hZ2UiLCJBZGRFbW9qaSIsIlRvZ2dsZURpY3RhdGlvbiIsIlByb29maW5nT3B0aW9ucyIsIlF1aWNrVXNlIiwiVG9nZ2xlUmliYm9uIiwiRmx1aWRIZXJvQnV0dG9uIl0sY29tcG9zZVN1cmZhY2VBZGRpbnM6W119LFtpLmMuU2t5cGVOb3RpZmljYXRpb25zXTp7c2t5cGVNZXNzYWdlTm90aWZpY2F0aW9uOjEsc2t5cGVDYWxsaW5nTm90aWZpY2F0aW9uOjF9LFtpLmMuQ29uZmV0dGldOntjb25mZXR0aUVuYWJsZWQ6ITB9LFtpLmMuQ29tcG9zZUFzc2lzdGFuY2VdOntjb21wb3NlQXNzaXN0YW5jZUVuYWJsZWQ6ITB9LFtpLmMuQ2FsZW5kYXJTdXJmYWNlQWRkaW5zXTp7Y2FsZW5kYXJTdXJmYWNlQWRkaW5zOltdfSxbaS5jLkV4dGVybmFsSW1hZ2VzXTp7ZXh0ZXJuYWxJbWFnZXNTZWxlY3RlZE9wdGlvbjowfSxbaS5jLkV2ZW50Q2FwdHVyZV06e2F1dG9Db2xsZWN0aW9uRW5hYmxlZDohMX0sW2kuYy5UcmFuc2xhdGlvbl06e3RyYW5zbGF0aW9uTW9kZTowLHRhcmdldExhbmd1YWdlOiIiLGV4Y2x1ZGVkTGFuZ3VhZ2VzOltdfSxbaS5jLkNhbGVuZGFyU3VyZmFjZU9wdGlvbnNdOnthZ2VuZGFQYW5lSXNDbG9zZWQ6ITEsbGFzdEtub3duUm9hbWluZ1RpbWVab25lOm51bGwscm9hbWluZ1RpbWVab25lTm90aWZpY2F0aW9uc0lzRGlzYWJsZWQ6ITEsYWxsRGF5V2VsbEhlaWdodDowLG51bURheXNJbkRheVJhbmdlOjEsd29ya0xpZmVWaWV3OjN9LFtpLmMuQW1wRGV2ZWxvcGVyXTp7ZW5hYmxlZDpPYmplY3Qoci5rKSgicnAtYW1wRGVmYXVsdCIpLGFsbG93ZWRTZW5kZXI6W119LFtpLmMuQ2FsZW5kYXJIZWxwXTp7Y2FsZW5kYXJIZWxwRW5hYmxlZDohMX0sW2kuYy5MaW5rZWRJblZpZXdQcm9maWxlXTp7ZGlzbWlzc2VkOiExfSxbaS5jLkJvaGVtaWFdOntib2hlbWlhRW5hYmxlZDpPYmplY3Qoci5rKSgiY21wLXByYWd1ZSIpfSxbaS5jLkdkcHJBZHNWM106e2ZlYXR1cmU6aS5jLkdkcHJBZHNWMyxlbmNvZGVkVENTdHJpbmc6bnVsbCxhbGxTdG9yZUFuZEFjY2Vzc0RldmljZTohMSxhbGxvd0RldmVsb3BBbmRJbXByb3ZlUHJvZHVjdDohMSxhbGxvd1BlcnNvbmFsaXNlZEFkczohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc1NlbGVjdEJhc2ljQWQ6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNBcHBseU1hcmtldFJlc2VhcmNoOiExLGFsbG93UGVyc29uYWxpc2VkQWRzTWVhc3VyZUNvbnRlbnRQZXJmb3JtYW5jZTohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc1NlbGVjdFBlcnNvbmFsaXNlZEFkczohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc01lYXN1cmVBZFBlcmY6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNTZWxlY3RQZXJzb25hbGlzZWRDb250ZW50OiExLGFsbG93UGVyc29uYWxpc2VkQWRzQ3JlYXRlUGVyc29uYWxpc2VkQ29udGVudFByb2ZpbGU6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNDcmVhdGVQZXJzb25hbGlzZWRBZHNQcm9maWxlOiExLGFsbG93UHJlY2lzZUdlb0RhdGFBbmRJZGVudGlmeURldmljZTohMSxhbGxvd1ByZWNpc2VHZW9EYXRhQW5kSWRlbnRpZnlEZXZpY2VTY2FuRGV2aWNlOiExLGFsbG93UHJlY2lzZUdlb0RhdGFBbmRJZGVudGlmeURldmljZUdlb0RhdGE6ITEsZGlzc2VsZWN0ZWRWZW5kb3JJZDpbXSxzZWxlY3RlZFZlbmRvcklkOltdfSxbaS5jLlByb29maW5nXTp7ZmVhdHVyZTppLmMuUHJvb2Zpbmcsc3BlbGxDaGVja0VuYWJsZWQ6ITAsZ3JhbW1hckVuYWJsZWQ6ITAsd3JpdGluZ1JlZmluZW1lbnRzRW5hYmxlZDohMCxwcm9vZmluZ0xvY2FsZTp2b2lkIDAsb3ZlcnJpZGRlbk9wdGlvbnM6dm9pZCAwLGlzVG9uYWxGcmVFeHBlcmllbmNlRW5hYmxlZDohMH0sW2kuYy5BY3RpdmVQcm94eUFkZHJlc3NdOntmZWF0dXJlOmkuYy5BY3RpdmVQcm94eUFkZHJlc3MsYWN0aXZlUHJveHlBZGRyZXNzZXM6W119LFtpLmMuU3hTXTp7ZmVhdHVyZTppLmMuU3hTLGhpZGVSZWFkaW5nUGFuZTohMSxkZWZhdWx0RWRpdENvbW1hbmQ6aS5hLkVkaXRJbkJyb3dzZXJ9LFtpLmMuUmVhZGluZ1BhbmVDb252ZXJzYXRpb25dOntmZWF0dXJlOmkuYy5SZWFkaW5nUGFuZUNvbnZlcnNhdGlvbixjb252ZXJzYXRpb25FbmFibGVkOiEwLGNvbnZlcnNhdGlvbkVuYWJsZWROYXRpdmVIb3N0OiExfSxbaS5jLkxpc3RWaWV3Q29sdW1uSGVhZGVyc106e2ZlYXR1cmU6aS5jLkxpc3RWaWV3Q29sdW1uSGVhZGVycyxzZW5kZXJDb2x1bW5XaWR0aDozMzIsc3ViamVjdENvbHVtbldpZHRoOjFlMyxyZWNlaXZlZENvbHVtbldpZHRoOk9iamVjdChyLmspKCJtb24tdHJpLW1haWxMaXN0SXRlbUhvdmVyRGVsZXRlU2x2Iik/MjE1OjgwfSxbaS5jLk1haWxMYXlvdXRdOntmZWF0dXJlOmkuYy5NYWlsTGF5b3V0LHVzZVNpbmdsZUxpbmVNZXNzYWdlTGlzdFdpdGhSaWdodFJlYWRpbmdQYW5lOiEwfSxbaS5jLlNlYXJjaF06e2ZlYXR1cmU6aS5jLlNlYXJjaCxkZWZhdWx0U2VhcmNoU2NvcGU6MH0sW2kuYy5MZ3BkQWRzXTp7ZmVhdHVyZTppLmMuTGdwZEFkcyxvcHRJbjohMSxvcHRJbkJpdDowfSxbaS5jLk1pY3Jvc29mdENob2ljZV06e2ZlYXR1cmU6aS5jLk1pY3Jvc29mdENob2ljZSxvcHRPdXQ6ITF9LFtpLmMuU3RhcnRVcF06e2ZlYXR1cmU6aS5jLlN0YXJ0VXAsZGVmYXVsdFJlb3Blbkl0ZW1zOjB9LFtpLmMuS2V5Ym9hcmRTaG9ydGN1dHNdOntmZWF0dXJlOmkuYy5LZXlib2FyZFNob3J0Y3V0cyxrZXlib2FyZFNob3J0Y3V0c01vZGU6aS5iLk91dGxvb2tGb3JXaW5kb3dzfX19fSw1Mzk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI0Mik7ZnVuY3Rpb24gbygpe3JldHVybiBPYmplY3Qoci5nKShyLmQuQ29tbWFuZGluZyl9YXN5bmMgZnVuY3Rpb24gaSgpe2NvbnN0IGU9YXdhaXQgci5qLmltcG9ydCgpO3JldHVybiBlJiZhd2FpdCBlKHIuZC5Db21tYW5kaW5nKX1mdW5jdGlvbiBhKGUpeyFhc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PWF3YWl0IGkoKXx8T2JqZWN0KHIuZykoci5kLkNvbW1hbmRpbmcpLG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGUpO3IuaS5pbXBvcnRBbmRFeGVjdXRlKHIuZC5Db21tYW5kaW5nLG4pfSh7dmlld01vZGU6ZX0pfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSl9LDU1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSk7dmFyIHI9big5MCksbz1uKDg0MCksaT1uKDgzOSksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBzPS9eW19hLXpdW18wLTlhLXpdKi9pO2Z1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5tYXRjaChzKTtyZXR1cm4gdD90WzBdOmV9ZnVuY3Rpb24gYyhlLHQsbil7cmV0dXJuISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIGMoZSx0LG4pfSkpOmUuc2VsZWN0aW9ucy5ldmVyeSgoZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHIuZCkoZSkmJk9iamVjdChvLmMpKGUsbikpe3ZhciBpPU9iamVjdChyLmgpKGUpO3JldHVybiBhLmNhbGwodCxpKSYmKCFlLnNlbGVjdGlvblNldHx8YyhlLnNlbGVjdGlvblNldCx0W2ldLG4pKX1yZXR1cm4hMH0pKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSYmIU9iamVjdChyLmYpKGUpJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBmKCl7cmV0dXJuIG5ldyBpLmF9fSw1NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBmfSkpO3ZhciByPW4oMTEpO2xldCBvO2Z1bmN0aW9uIGkoKXtpZighbyl7Y29uc3QgZT1PYmplY3Qoci5hKSh3aW5kb3csIkJvb3REaWFnbm9zdGljcyIpO2lmKGUpdHJ5e289SlNPTi5wYXJzZShlKX1jYXRjaChlKXtvPXt9fWVsc2Ugbz17fX1yZXR1cm4gb31mdW5jdGlvbiBhKGUpe3ZhciB0O2NvbnN0IG49bnVsbD09PSh0PWUub3dhVXNlckNvbmZpZyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuU2Vzc2lvblNldHRpbmdzO3JldHVybiBuJiYobz17cHVpZDpuLlVzZXJQdWlkLHRpZDpuLkV4dGVybmFsRGlyZWN0b3J5VGVuYW50R3VpZCxtYng6bi5NYWlsYm94R3VpZCxwcmVtOm4uSXNQcmVtaXVtQ29uc3VtZXJNYWlsYm94PyIxIjoiMCIsaXNDb246MCE9bi5XZWJTZXNzaW9uVHlwZX0pLE9iamVjdChyLmUpKHdpbmRvdywiQm9vdERpYWdub3N0aWNzIixKU09OLnN0cmluZ2lmeShvKSksZX1mdW5jdGlvbiBzKCl7cmV0dXJuIGkoKS5wdWlkfWZ1bmN0aW9uIHUoKXtyZXR1cm4gaSgpLnRpZH1mdW5jdGlvbiBjKCl7cmV0dXJuIGkoKS5tYnh9ZnVuY3Rpb24gbCgpe3JldHVybiBpKCkucHJlbX1mdW5jdGlvbiBmKCl7cmV0dXJuIGkoKS5pc0Nvbn19LDU3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzKTtjb25zdCBvPU9iamVjdChyLmFjdGlvbikoInNldE9wdGlvblZhbHVlIiwoZSx0KT0+KHtmZWF0dXJlOmUsdmFsdWU6dH0pKSxpPU9iamVjdChyLmFjdGlvbikoImFzc2lnbk9wdGlvblZhbHVlIiwoZSx0KT0+KHtmZWF0dXJlOmUsdmFsdWU6dH0pKSxhPU9iamVjdChyLmFjdGlvbikoInZlcmlmeUFuZFNldE9wdGlvblZhbHVlcyIsZT0+KHtwb3RlbnRpYWxPcHRpb25WYWx1ZXM6ZX0pKSxzPU9iamVjdChyLmFjdGlvbikoInNldE9wdGlvblZhbHVlIiwoZSx0KT0+KHtmZWF0dXJlOmUsdmFsdWU6dH0pKTt2YXIgdSxjLGw7IWZ1bmN0aW9uKGUpe2VbZS5UZXN0RmVhdHVyZT0xXT0iVGVzdEZlYXR1cmUiLGVbZS5TbWFydFN1Z2dlc3Rpb25zPTJdPSJTbWFydFN1Z2dlc3Rpb25zIixlW2UuRGl2ZXJzZUVtb2ppcz00XT0iRGl2ZXJzZUVtb2ppcyIsZVtlLlN1cmZhY2VBY3Rpb25zPTVdPSJTdXJmYWNlQWN0aW9ucyIsZVtlLlNreXBlTm90aWZpY2F0aW9ucz02XT0iU2t5cGVOb3RpZmljYXRpb25zIixlW2UuV2ViUHVzaE5vdGlmaWNhdGlvbnM9N109IldlYlB1c2hOb3RpZmljYXRpb25zIixlW2UuQ29uZmV0dGk9OF09IkNvbmZldHRpIixlW2UuR2RwckFkc1ByZWZzPTldPSJHZHByQWRzUHJlZnMiLGVbZS5DYWxlbmRhclN1cmZhY2VBZGRpbnM9MTBdPSJDYWxlbmRhclN1cmZhY2VBZGRpbnMiLGVbZS5FeHRlcm5hbEltYWdlcz0xMV09IkV4dGVybmFsSW1hZ2VzIixlW2UuRXZlbnRDYXB0dXJlPTEyXT0iRXZlbnRDYXB0dXJlIixlW2UuVHJhbnNsYXRpb249MTRdPSJUcmFuc2xhdGlvbiIsZVtlLkNhbGVuZGFyU3VyZmFjZU9wdGlvbnM9MTVdPSJDYWxlbmRhclN1cmZhY2VPcHRpb25zIixlW2UuVHhwRXZlbnROb3RpZmljYXRpb25zPTE2XT0iVHhwRXZlbnROb3RpZmljYXRpb25zIixlW2UuTWVudGlvbkV2ZW50Tm90aWZpY2F0aW9ucz0xN109Ik1lbnRpb25FdmVudE5vdGlmaWNhdGlvbnMiLGVbZS5Db21wb3NlQXNzaXN0YW5jZT0xOF09IkNvbXBvc2VBc3Npc3RhbmNlIixlW2UuQWN0aXZpdHlGZWVkPTE5XT0iQWN0aXZpdHlGZWVkIixlW2UuQW1wRGV2ZWxvcGVyPTIwXT0iQW1wRGV2ZWxvcGVyIixlW2UuQ2FsZW5kYXJIZWxwPTIxXT0iQ2FsZW5kYXJIZWxwIixlW2UuTGlua2VkSW5WaWV3UHJvZmlsZT0yMl09IkxpbmtlZEluVmlld1Byb2ZpbGUiLGVbZS5Cb2hlbWlhPTIzXT0iQm9oZW1pYSIsZVtlLkdkcHJBZHNWMj0yNF09IkdkcHJBZHNWMiIsZVtlLlByb29maW5nPTI1XT0iUHJvb2ZpbmciLGVbZS5BY3RpdmVQcm94eUFkZHJlc3M9MjZdPSJBY3RpdmVQcm94eUFkZHJlc3MiLGVbZS5HZHByQWRzVjM9MjhdPSJHZHByQWRzVjMiLGVbZS5TeFM9MjldPSJTeFMiLGVbZS5SZWFkaW5nUGFuZUNvbnZlcnNhdGlvbj0zMF09IlJlYWRpbmdQYW5lQ29udmVyc2F0aW9uIixlW2UuQWRzQWdncmVnYXRlPTMxXT0iQWRzQWdncmVnYXRlIixlW2UuTGlzdFZpZXdDb2x1bW5IZWFkZXJzPTMyXT0iTGlzdFZpZXdDb2x1bW5IZWFkZXJzIixlW2UuTWFpbExheW91dD0zM109Ik1haWxMYXlvdXQiLGVbZS5Db21tYW5kaW5nPTM0XT0iQ29tbWFuZGluZyIsZVtlLlNlYXJjaD0zNV09IlNlYXJjaCIsZVtlLkxncGRBZHM9MzZdPSJMZ3BkQWRzIixlW2UuTWljcm9zb2Z0Q2hvaWNlPTM3XT0iTWljcm9zb2Z0Q2hvaWNlIixlW2UuU3RhcnRVcD0zOF09IlN0YXJ0VXAiLGVbZS5LZXlib2FyZFNob3J0Y3V0cz0zOV09IktleWJvYXJkU2hvcnRjdXRzIn0odXx8KHU9e30pKSxmdW5jdGlvbihlKXtlW2UuRWRpdEluQnJvd3Nlcj0wXT0iRWRpdEluQnJvd3NlciIsZVtlLkVkaXRJbkRlc2t0b3A9MV09IkVkaXRJbkRlc2t0b3AiLGVbZS5FZGl0QW5kUmVwbHk9Ml09IkVkaXRBbmRSZXBseSJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk91dGxvb2tGb3JXaW5kb3dzPTBdPSJPdXRsb29rRm9yV2luZG93cyIsZVtlLk91dGxvb2tGb3JXZWI9MV09Ik91dGxvb2tGb3JXZWIiLGVbZS5PZmY9Ml09Ik9mZiJ9KGx8fChsPXt9KSk7dmFyIGY9T2JqZWN0KHIuY3JlYXRlU3RvcmUpKCJvd3NPcHRpb25zU3RvcmUiLHtvcHRpb25zOntbdS5TbWFydFN1Z2dlc3Rpb25zXTp7ZmVhdHVyZTp1LlNtYXJ0U3VnZ2VzdGlvbnMsc21hcnRTdWdnZXN0aW9uc0VuYWJsZWQ6ITEsYnJvd3NlckxvY2F0aW9uRW5hYmxlZDohMX0sW3UuRGl2ZXJzZUVtb2ppc106e2ZlYXR1cmU6dS5EaXZlcnNlRW1vamlzLGRpdmVyc2VFbW9qaXNTZWxlY3RlZFNraW5Ub25lOiIifSxbdS5TdXJmYWNlQWN0aW9uc106e2ZlYXR1cmU6dS5TdXJmYWNlQWN0aW9ucyxyZWFkU3VyZmFjZUFjdGlvbnM6W10scmVhZFN1cmZhY2VBZGRpbnM6W10sY29tcG9zZVN1cmZhY2VBY3Rpb25zOltdLGNvbXBvc2VTdXJmYWNlQWRkaW5zOltdfSxbdS5Ta3lwZU5vdGlmaWNhdGlvbnNdOntmZWF0dXJlOnUuU2t5cGVOb3RpZmljYXRpb25zLHNreXBlTWVzc2FnZU5vdGlmaWNhdGlvbjoxLHNreXBlQ2FsbGluZ05vdGlmaWNhdGlvbjoxfSxbdS5XZWJQdXNoTm90aWZpY2F0aW9uc106e2ZlYXR1cmU6dS5XZWJQdXNoTm90aWZpY2F0aW9ucyxlbmFibGVkOiExLGFwcGxpY2F0aW9uU2VydmVyS2V5Om51bGx9LFt1LkNvbmZldHRpXTp7ZmVhdHVyZTp1LkNvbmZldHRpLGNvbmZldHRpRW5hYmxlZDohMX0sW3UuR2RwckFkc1YzXTp7ZmVhdHVyZTp1LkdkcHJBZHNWMyxlbmNvZGVkVENTdHJpbmc6bnVsbCxhbGxTdG9yZUFuZEFjY2Vzc0RldmljZTohMSxhbGxvd0RldmVsb3BBbmRJbXByb3ZlUHJvZHVjdDohMSxhbGxvd1BlcnNvbmFsaXNlZEFkczohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc1NlbGVjdEJhc2ljQWQ6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNBcHBseU1hcmtldFJlc2VhcmNoOiExLGFsbG93UGVyc29uYWxpc2VkQWRzTWVhc3VyZUNvbnRlbnRQZXJmb3JtYW5jZTohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc1NlbGVjdFBlcnNvbmFsaXNlZEFkczohMSxhbGxvd1BlcnNvbmFsaXNlZEFkc01lYXN1cmVBZFBlcmY6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNTZWxlY3RQZXJzb25hbGlzZWRDb250ZW50OiExLGFsbG93UGVyc29uYWxpc2VkQWRzQ3JlYXRlUGVyc29uYWxpc2VkQ29udGVudFByb2ZpbGU6ITEsYWxsb3dQZXJzb25hbGlzZWRBZHNDcmVhdGVQZXJzb25hbGlzZWRBZHNQcm9maWxlOiExLGFsbG93UHJlY2lzZUdlb0RhdGFBbmRJZGVudGlmeURldmljZTohMSxhbGxvd1ByZWNpc2VHZW9EYXRhQW5kSWRlbnRpZnlEZXZpY2VTY2FuRGV2aWNlOiExLGFsbG93UHJlY2lzZUdlb0RhdGFBbmRJZGVudGlmeURldmljZUdlb0RhdGE6ITEsZGlzc2VsZWN0ZWRWZW5kb3JJZDpbXSxzZWxlY3RlZFZlbmRvcklkOltdfSxbdS5DYWxlbmRhclN1cmZhY2VBZGRpbnNdOntmZWF0dXJlOnUuQ2FsZW5kYXJTdXJmYWNlQWRkaW5zLGNhbGVuZGFyU3VyZmFjZUFkZGluczpbXX0sW3UuRXh0ZXJuYWxJbWFnZXNdOntmZWF0dXJlOnUuRXh0ZXJuYWxJbWFnZXMsZXh0ZXJuYWxJbWFnZXNTZWxlY3RlZE9wdGlvbjpudWxsfSxbdS5FdmVudENhcHR1cmVdOnthdXRvQ29sbGVjdGlvbkVuYWJsZWQ6ITF9LFt1LlRyYW5zbGF0aW9uXTp7ZmVhdHVyZTp1LlRyYW5zbGF0aW9uLHRyYW5zbGF0aW9uTW9kZTowLHRhcmdldExhbmd1YWdlOiIiLGV4Y2x1ZGVkTGFuZ3VhZ2VzOltdfSxbdS5DYWxlbmRhclN1cmZhY2VPcHRpb25zXTp7ZmVhdHVyZTp1LkNhbGVuZGFyU3VyZmFjZU9wdGlvbnMsYWdlbmRhUGFuZUlzQ2xvc2VkOiEwLGxhc3RLbm93blJvYW1pbmdUaW1lWm9uZTp2b2lkIDAscm9hbWluZ1RpbWVab25lTm90aWZpY2F0aW9uc0lzRGlzYWJsZWQ6dm9pZCAwLGFsbERheVdlbGxIZWlnaHQ6MCxudW1EYXlzSW5EYXlSYW5nZToxLHdvcmtMaWZlVmlldzozfSxbdS5NZW50aW9uRXZlbnROb3RpZmljYXRpb25zXTp7ZmVhdHVyZTp1Lk1lbnRpb25FdmVudE5vdGlmaWNhdGlvbnMsZW5hYmxlZDohMX0sW3UuVHhwRXZlbnROb3RpZmljYXRpb25zXTp7ZmVhdHVyZTp1LlR4cEV2ZW50Tm90aWZpY2F0aW9ucyxlbmFibGVkOiExfSxbdS5Db21wb3NlQXNzaXN0YW5jZV06e2ZlYXR1cmU6dS5Db21wb3NlQXNzaXN0YW5jZSxjb21wb3NlQXNzaXN0YW5jZUVuYWJsZWQ6ITF9LFt1LkFtcERldmVsb3Blcl06e2ZlYXR1cmU6dS5BbXBEZXZlbG9wZXIsZW5hYmxlZDohMCxhbGxvd2VkU2VuZGVyOltdfSxbdS5BY3Rpdml0eUZlZWRdOntmZWF0dXJlOnUuQWN0aXZpdHlGZWVkLE9XQVN1cmZhY2VPcHRpb25zOntTdXBwb3J0ZWRUeXBlczpbXSxEaXNhYmxlZEluRmVlZFBhbmVsOltdfX0sW3UuTGlua2VkSW5WaWV3UHJvZmlsZV06e2Rpc21pc3NlZDohMX0sW3UuQ2FsZW5kYXJIZWxwXTp7ZmVhdHVyZTp1LkNhbGVuZGFySGVscCxjYWxlbmRhckhlbHBFbmFibGVkOiExfSxbdS5Cb2hlbWlhXTp7ZmVhdHVyZTp1LkJvaGVtaWEsYm9oZW1pYUVuYWJsZWQ6ITEsZmx1aWRFbmFibGVkRm9yVGVuYW50OiExfSxbdS5Qcm9vZmluZ106e2ZlYXR1cmU6dS5Qcm9vZmluZyxzcGVsbENoZWNrRW5hYmxlZDohMCxncmFtbWFyRW5hYmxlZDohMCx3cml0aW5nUmVmaW5lbWVudHNFbmFibGVkOiExLHByb29maW5nTG9jYWxlOnZvaWQgMCxvdmVycmlkZGVuT3B0aW9uczp2b2lkIDAsaXNUb25hbEZyZUV4cGVyaWVuY2VFbmFibGVkOiExfSxbdS5BY3RpdmVQcm94eUFkZHJlc3NdOntmZWF0dXJlOnUuQWN0aXZlUHJveHlBZGRyZXNzLGFjdGl2ZVByb3h5QWRkcmVzc2VzOltdfSxbdS5TeFNdOntmZWF0dXJlOnUuU3hTLGhpZGVSZWFkaW5nUGFuZTohMSxkZWZhdWx0RWRpdENvbW1hbmQ6Yy5FZGl0SW5Ccm93c2VyfSxbdS5SZWFkaW5nUGFuZUNvbnZlcnNhdGlvbl06e2ZlYXR1cmU6dS5SZWFkaW5nUGFuZUNvbnZlcnNhdGlvbixjb252ZXJzYXRpb25FbmFibGVkOiEwLGNvbnZlcnNhdGlvbkVuYWJsZWROYXRpdmVIb3N0OiExfSxbdS5TZWFyY2hdOntmZWF0dXJlOnUuU2VhcmNoLGRlZmF1bHRTZWFyY2hTY29wZTp2b2lkIDB9LFt1LlN0YXJ0VXBdOntmZWF0dXJlOnUuU3RhcnRVcCxkZWZhdWx0UmVvcGVuSXRlbXM6dm9pZCAwfSxbdS5LZXlib2FyZFNob3J0Y3V0c106e2ZlYXR1cmU6dS5LZXlib2FyZFNob3J0Y3V0cyxrZXlib2FyZFNob3J0Y3V0c01vZGU6bC5PdXRsb29rRm9yV2luZG93c319fSksaD1uKDE2KTtmdW5jdGlvbiBkKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLmZlYXR1cmUpaW4gdX12YXIgcCx2PW4oMjg3KSxiPW4ubih2KTtmdW5jdGlvbiB5KGUsdCl7ZigpLm9wdGlvbnNbZV09dH1mdW5jdGlvbiBtKGUpe3JldHVybiBmKCkub3B0aW9uc1tlXX1PYmplY3Qoci5tdXRhdG9yKShpLGU9Pntjb25zdHtmZWF0dXJlOnQsdmFsdWU6bn09ZTtiKCkoZigpLm9wdGlvbnNbdF0sbil9KSxPYmplY3Qoci5tdXRhdG9yKShvLGU9Pntjb25zdHtmZWF0dXJlOnQsdmFsdWU6bn09ZTt5KHQsbil9KSxPYmplY3Qoci5tdXRhdG9yKShzLGU9Pntjb25zdHtmZWF0dXJlOnQsdmFsdWU6bn09ZTtPYmplY3QoaC5leHRlbmRPYnNlcnZhYmxlKShmKCkub3B0aW9uc1t0XSxuKX0pLE9iamVjdChyLm11dGF0b3IpKGEsZT0+e2NvbnN0e3BvdGVudGlhbE9wdGlvblZhbHVlczp0fT1lO2ZvcihsZXQgZSBvZiB0KWUmJmQoZSkmJnkoZS5mZWF0dXJlLGUpfSksZnVuY3Rpb24oZSl7ZVtlLldvcms9MV09IldvcmsiLGVbZS5MaWZlPTJdPSJMaWZlIn0ocHx8KHA9e30pKSxuLmQodCwiaSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImciLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiB1fSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gY30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSl9LDU3NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTg5KSxvPW4oMzEwKTt0LmE9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIGE9IW47bnx8KG49e30pO2Zvcih2YXIgcz0tMSx1PXQubGVuZ3RoOysrczx1Oyl7dmFyIGM9dFtzXSxsPWk/aShuW2NdLGVbY10sYyxuLGUpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD1lW2NdKSxhP09iamVjdChvLmEpKG4sYyxsKTpPYmplY3Qoci5hKShuLGMsbCl9cmV0dXJuIG59fSw1ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByPW4oMik7ZnVuY3Rpb24gbyhlKXtsZXQgdD1PYmplY3Qoci52KShzKCJYLU9XQS1DQU5BUlkiLGUpKTtjb25zdCBuPU9iamVjdChyLnYpKHMoIlgtT1dBLUNBTkFSWS1QUkQiLGUpKSxvPU9iamVjdChyLnYpKHMoIlgtT1dBLUNBTkFSWS1CRiIsZSkpO3JldHVybiB0JiYwIT10Lmxlbmd0aD8obiYmbi5sZW5ndGg+MCYmKHQrPSIsIituKSxvJiZvLmxlbmd0aD4wJiYodCs9IiwiK28pLHQpOm51bGx9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbyhlKXx8IlgtT1dBLUNBTkFSWV9jb29raWVfaXNfbnVsbF9vcl9lbXB0eSJ9ZnVuY3Rpb24gYShlKXtyZXR1cm4gT2JqZWN0KHIudikocygiWC1PV0EtQ0FOQVJZLURFQlVHIixlKSl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlKygodD10fHxPYmplY3Qoci52KSgidGFyZ2V0U2VydmVyIikpPyJfIit0LnRvTG9jYWxlTG93ZXJDYXNlKCk6IiIpfX0sNTgxOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXNlbGYuSXRlbXNWaWV3U3RyaW5nc30sNTg1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3JldHVyblsiNTY0NjhmNjk5MWMzNDgwMjljNmJiYTQwM2I0NDQ2MDctN2Y1ZDZjZDEtN2ZiZS00YWIxLWJlMDMtM2IyYjZhZWIzZWI0LTc2OTYiXX1mdW5jdGlvbiBvKCl7cmV0dXJuIjIwZWQ0ZjU4NjNkMTQ1YmI5Yjk4MTFjMGYwMTZkYTQ3LTBmODY3ZjhkLWEwYmUtNDRkYy1iNTU3LTZkYTgxNzgwMDZmNy03NTU5In1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBvfSkpfSw1ODY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiB5fSkpO3ZhciByPW4oNjA0KSxvPW4oNDAzKSxpPW4oMzUxKSxhPW4oNDc0KTtmdW5jdGlvbiBzKGUpe3JldHVybihzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1zKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9sKGUpOnR9ZnVuY3Rpb24gbChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gZihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybihmPWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwobj1lLC0xPT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChuKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpKXJldHVybiBlO3ZhciBuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodm9pZCAwIT09dCl7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3Quc2V0KGUscil9ZnVuY3Rpb24gcigpe3JldHVybiBoKGUsYXJndW1lbnRzLHYodGhpcykuY29uc3RydWN0b3IpfXJldHVybiByLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6cixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxwKHIsZSl9KShlKX1mdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4oaD1kKCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtudWxsXTtyLnB1c2guYXBwbHkocix0KTt2YXIgbz1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLHIpKTtyZXR1cm4gbiYmcChvLG4ucHJvdG90eXBlKSxvfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGQoKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuKHA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuKHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZwKGUsdCl9KGIsZSk7dmFyIHQsbixhLHMsZixoPSh0PWIsbj1kKCksZnVuY3Rpb24oKXt2YXIgZSxyPXYodCk7aWYobil7dmFyIG89dih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHIsYXJndW1lbnRzLG8pfWVsc2UgZT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYyh0aGlzLGUpfSk7ZnVuY3Rpb24gYihlLHQsbixvLGEscyx1KXt2YXIgZixkLHAsdix5OyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGIpLHk9aC5jYWxsKHRoaXMsZSk7dmFyIG0sZz1BcnJheS5pc0FycmF5KHQpPzAhPT10Lmxlbmd0aD90OnZvaWQgMDp0P1t0XTp2b2lkIDAsTz1uOyFPJiZnJiYoTz1udWxsPT09KG09Z1swXS5sb2MpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnNvdXJjZSk7dmFyIHcsaj1vOyFqJiZnJiYoaj1nLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5sb2MmJmUucHVzaCh0LmxvYy5zdGFydCksZX0pLFtdKSksaiYmMD09PWoubGVuZ3RoJiYoaj12b2lkIDApLG8mJm4/dz1vLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpLmEpKG4sZSl9KSk6ZyYmKHc9Zy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubG9jJiZlLnB1c2goT2JqZWN0KGkuYSkodC5sb2Muc291cmNlLHQubG9jLnN0YXJ0KSksZX0pLFtdKSk7dmFyIEU9dTtpZihudWxsPT1FJiZudWxsIT1zKXt2YXIgUz1zLmV4dGVuc2lvbnM7T2JqZWN0KHIuYSkoUykmJihFPVMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsKHkpLHtuYW1lOnt2YWx1ZToiR3JhcGhRTEVycm9yIn0sbWVzc2FnZTp7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwfSxsb2NhdGlvbnM6e3ZhbHVlOm51bGwhPT0oZj13KSYmdm9pZCAwIT09Zj9mOnZvaWQgMCxlbnVtZXJhYmxlOm51bGwhPXd9LHBhdGg6e3ZhbHVlOm51bGwhPWE/YTp2b2lkIDAsZW51bWVyYWJsZTpudWxsIT1hfSxub2Rlczp7dmFsdWU6bnVsbCE9Zz9nOnZvaWQgMH0sc291cmNlOnt2YWx1ZTpudWxsIT09KGQ9TykmJnZvaWQgMCE9PWQ/ZDp2b2lkIDB9LHBvc2l0aW9uczp7dmFsdWU6bnVsbCE9PShwPWopJiZ2b2lkIDAhPT1wP3A6dm9pZCAwfSxvcmlnaW5hbEVycm9yOnt2YWx1ZTpzfSxleHRlbnNpb25zOnt2YWx1ZTpudWxsIT09KHY9RSkmJnZvaWQgMCE9PXY/djp2b2lkIDAsZW51bWVyYWJsZTpudWxsIT1FfX0pLG51bGwhPXMmJnMuc3RhY2s/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsKHkpLCJzdGFjayIse3ZhbHVlOnMuc3RhY2ssd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksYyh5KSk6KEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGwoeSksYik6T2JqZWN0LmRlZmluZVByb3BlcnR5KGwoeSksInN0YWNrIix7dmFsdWU6RXJyb3IoKS5zdGFjayx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx5KX1yZXR1cm4gYT1iLChzPVt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzKX19LHtrZXk6by5jLGdldDpmdW5jdGlvbigpe3JldHVybiJPYmplY3QifX1dKSYmdShhLnByb3RvdHlwZSxzKSxmJiZ1KGEsZiksYn0oZihFcnJvcikpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5tZXNzYWdlO2lmKGUubm9kZXMpZm9yKHZhciBuPTAscj1lLm5vZGVzO248ci5sZW5ndGg7bisrKXt2YXIgbz1yW25dO28ubG9jJiYodCs9IlxuXG4iK09iamVjdChhLmEpKG8ubG9jKSl9ZWxzZSBpZihlLnNvdXJjZSYmZS5sb2NhdGlvbnMpZm9yKHZhciBpPTAscz1lLmxvY2F0aW9ucztpPHMubGVuZ3RoO2krKyl7dmFyIHU9c1tpXTt0Kz0iXG5cbiIrT2JqZWN0KGEuYikoZS5zb3VyY2UsdSl9cmV0dXJuIHR9fSw1ODc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX19LDU4ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzQ4KTt0LmE9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHIuYSh0KS5zZXQobmV3IHIuYShlKSksdH19LDU4OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzEwKSxvPW4oMjI1KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5hPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lW3RdO2kuY2FsbChlLHQpJiZPYmplY3Qoby5hKShhLG4pJiYodm9pZCAwIT09bnx8dCBpbiBlKXx8T2JqZWN0KHIuYSkoZSx0LG4pfX0sNTkwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMDQpLG89bigzMTApLGk9bigyMjUpO3ZhciBhPWZ1bmN0aW9uKGUsdCxuKXsodm9pZCAwPT09bnx8T2JqZWN0KGkuYSkoZVt0XSxuKSkmJih2b2lkIDAhPT1ufHx0IGluIGUpfHxPYmplY3Qoby5hKShlLHQsbil9LHM9big2MDUpLHU9big1OTQpLGM9big1OTUpLGw9big1OTMpLGY9big1OTYpLGg9bigyOTIpLGQ9bigxNDApLHA9big2MDIpLHY9bigzMDUpLGI9bigzMTEpLHk9bigxMTUpLG09big2MjIpLGc9bigzMjkpO3ZhciBPPWZ1bmN0aW9uKGUsdCl7aWYoKCJjb25zdHJ1Y3RvciIhPT10fHwiZnVuY3Rpb24iIT10eXBlb2YgZVt0XSkmJiJfX3Byb3RvX18iIT10KXJldHVybiBlW3RdfSx3PW4oNTc3KSxqPW4oMzkzKTt2YXIgRT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHcuYSkoZSxPYmplY3Qoai5hKShlKSl9O3ZhciBTPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLHMpe3ZhciB3PU8oZSxuKSxqPU8odCxuKSxTPXMuZ2V0KGopO2lmKFMpYShlLG4sUyk7ZWxzZXt2YXIgQT1pP2kodyxqLG4rIiIsZSx0LHMpOnZvaWQgMCxrPXZvaWQgMD09PUE7aWYoayl7dmFyIEk9T2JqZWN0KGQuYSkoaiksVD0hSSYmT2JqZWN0KHYuYSkoaikseD0hSSYmIVQmJk9iamVjdChnLmEpKGopO0E9aixJfHxUfHx4P09iamVjdChkLmEpKHcpP0E9dzpPYmplY3QocC5hKSh3KT9BPU9iamVjdChsLmEpKHcpOlQ/KGs9ITEsQT1PYmplY3QodS5hKShqLCEwKSk6eD8oaz0hMSxBPU9iamVjdChjLmEpKGosITApKTpBPVtdOk9iamVjdChtLmEpKGopfHxPYmplY3QoaC5hKShqKT8oQT13LE9iamVjdChoLmEpKHcpP0E9RSh3KTpPYmplY3QoeS5hKSh3KSYmIU9iamVjdChiLmEpKHcpfHwoQT1PYmplY3QoZi5hKShqKSkpOms9ITF9ayYmKHMuc2V0KGosQSksbyhBLGoscixpLHMpLHMuZGVsZXRlKGopKSxhKGUsbixBKX19O3ZhciBBPWZ1bmN0aW9uIGUodCxuLG8saSx1KXt0IT09biYmT2JqZWN0KHMuYSkobiwoZnVuY3Rpb24ocyxjKXtpZih1fHwodT1uZXcgci5hKSxPYmplY3QoeS5hKShzKSlTKHQsbixjLG8sZSxpLHUpO2Vsc2V7dmFyIGw9aT9pKE8odCxjKSxzLGMrIiIsdCxuLHUpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD1zKSxhKHQsYyxsKX19KSxqLmEpfSxrPW4oNTkxKSxJPU9iamVjdChrLmEpKChmdW5jdGlvbihlLHQsbil7QShlLHQsbil9KSk7dC5hPUl9LDU5MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAwKSxvPW4oNjE4KTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyLmEpKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsYT1pPjE/bltpLTFdOnZvaWQgMCxzPWk+Mj9uWzJdOnZvaWQgMDtmb3IoYT1lLmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2YgYT8oaS0tLGEpOnZvaWQgMCxzJiZPYmplY3Qoby5hKShuWzBdLG5bMV0scykmJihhPWk8Mz92b2lkIDA6YSxpPTEpLHQ9T2JqZWN0KHQpOysrcjxpOyl7dmFyIHU9bltyXTt1JiZlKHQsdSxyLGEpfXJldHVybiB0fSkpfX0sNTkzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aDtmb3IodHx8KHQ9QXJyYXkocikpOysrbjxyOyl0W25dPWVbbl07cmV0dXJuIHR9fSw1OTQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIHI9bigxMTMpLG89Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxpPW8mJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmIWUubm9kZVR5cGUmJmUsYT1pJiZpLmV4cG9ydHM9PT1vP3IuYS5CdWZmZXI6dm9pZCAwLHM9YT9hLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmE9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1zP3Mobik6bmV3IGUuY29uc3RydWN0b3Iobik7cmV0dXJuIGUuY29weShyKSxyfX0pLmNhbGwodGhpcyxuKDM5OCkoZSkpfSw1OTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU4OCk7dC5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49dD9PYmplY3Qoci5hKShlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX19LDU5NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTE1KSxvPU9iamVjdC5jcmVhdGUsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFPYmplY3Qoci5hKSh0KSlyZXR1cm57fTtpZihvKXJldHVybiBvKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxufX0oKSxhPW4oMzk1KSxzPW4oMzI2KTt0LmE9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fE9iamVjdChzLmEpKGUpP3t9OmkoT2JqZWN0KGEuYSkoZSkpfX0sNTk3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5oZWFkZXJzKSYmKGUuaGVhZGVycy5nZXQoIngtb3dhLWVycm9yIil8fGUuaGVhZGVycy5nZXQoIngtYXV0aC1lcnJvciIpfHxlLmhlYWRlcnMuZ2V0KCJ4LXJlZGlyLWVycm9yIil8fGUuaGVhZGVycy5nZXQoIngtaml0LWVycm9yIikpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sNTk5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTt2YXIgcj0wLG89e307ZnVuY3Rpb24gaShlKXtsZXQgdD1yKys7cmV0dXJuIG9bdF09ZSwoKT0+e2RlbGV0ZSBvW3RdfX1mdW5jdGlvbiBhKGUsdCxuLHIsaSl7bGV0IGE9T2JqZWN0LmtleXMobyk7dC5kYXRhcG9pbnQmJihlLmRhdGFwb2ludD10LmRhdGFwb2ludCk7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0Kyspb1thW3RdXShuLHJ8fCJPV1MiLGksMCxlKX19LDYwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+c2V0VGltZW91dCh0LGUpKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9LDYwMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzMxKSxvPW4oNjIwKSxpPW4oNjE5KTt0LmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0KGkuYSkoT2JqZWN0KG8uYSkoZSx0LHIuYSksZSsiIil9fSw2MDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIUJvb2xlYW4oZSkpdGhyb3cgbmV3IEVycm9yKG51bGwhPXQ/dDoiVW5leHBlY3RlZCBpbnZhcmlhbnQgdHJpZ2dlcmVkLiIpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sNjAyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMzcpLG89bigxNjYpO3QuYT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG8uYSkoZSkmJk9iamVjdChyLmEpKGUpfX0sNjA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4ocj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXIoZSkmJm51bGwhPT1lfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKX0sNjA1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsaT1PYmplY3QodCksYT1yKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIHU9YVtlP3M6KytvXTtpZighMT09PW4oaVt1XSx1LGkpKWJyZWFrfXJldHVybiB0fX0oKTt0LmE9cn0sNjA2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzOTYpLG89bigzMiksaT1uKDIpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7Y29uc3Qgbj17fTtyZXR1cm4gbnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUuSXRlbXMpfHx2b2lkIDA9PT10fHx0LmZvckVhY2goZT0+e2UuSWQmJihuW2UuSWRdPWUuVmFsdWUpfSksbn1jb25zdCBzPWU9Pntzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiJCdXNpbmVzcyI7Y2FzZSAxOnJldHVybiJFeG9Db25zdW1lciI7Y2FzZSAyOnJldHVybiJHTWFpbCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHU9ZT0+e3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIkRpc2FibGVkIjtjYXNlIDI6cmV0dXJuIkVuYWJsZWQiO2Nhc2UgMDpyZXR1cm4iRmlyc3RSdW4iO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxjPWU9Pntzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiJDZWxzaXVzIjtjYXNlIDA6cmV0dXJuIkRlZmF1bHQiO2Nhc2UgMjpyZXR1cm4iRmFocmVuaGVpdCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGw9ZT0+e3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIkRpc2FibGVkIjtjYXNlIDI6cmV0dXJuIkVuYWJsZWQiO2Nhc2UgMDpyZXR1cm4iRmlyc3RSdW4iO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxmPWU9Pntzd2l0Y2goZSl7Y2FzZSAyOnJldHVybiJFbWFpbFRvYXN0IjtjYXNlIDg6cmV0dXJuIkZheFRvYXN0IjtjYXNlIDA6cmV0dXJuIk5vbmUiO2Nhc2UgMTpyZXR1cm4iU291bmQiO2Nhc2UgNDpyZXR1cm4iVm9pY2VNYWlsVG9hc3QiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxoPWU9Pntzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiJBbGwiO2Nhc2UgMTpyZXR1cm4iQm9sZCI7Y2FzZSAyOnJldHVybiJJdGFsaWMiO2Nhc2UgMDpyZXR1cm4iTm9ybWFsIjtjYXNlIDQ6cmV0dXJuIlVuZGVybGluZSI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGQ9ZT0+e3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIkdtYWlsIjtjYXNlIDA6cmV0dXJuIkhvdG1haWwiO2Nhc2UgMTpyZXR1cm4iT2ZmIjtjYXNlIDQ6cmV0dXJuIk93YSI7Y2FzZSAyOnJldHVybiJZYWhvbyI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHA9ZT0+e3N3aXRjaChlKXtjYXNlIDI6cmV0dXJuIkNhbGVuZGFySXRlbXMiO2Nhc2UgMDpyZXR1cm4iQ29udmVyc2F0aW9uIjtjYXNlIDE6cmV0dXJuIk1lc3NhZ2UiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSx2PWU9Pntzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiJKc212dm0iO2Nhc2UgMDpyZXR1cm4iTm9uZSI7Y2FzZSAyOnJldHVybiJSZWFjdCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGI9ZT0+e3N3aXRjaChlKXtjYXNlIDI6cmV0dXJuIkFyY2hpdmUiO2Nhc2UgMTpyZXR1cm4iRGVsZXRlIjtjYXNlIDA6cmV0dXJuIk5vbmUiO2Nhc2UgNTpyZXR1cm4iVG9nZ2xlRmxhZyI7Y2FzZSAzOnJldHVybiJUb2dnbGVQaW4iO2Nhc2UgNDpyZXR1cm4iVG9nZ2xlUmVhZCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHk9ZT0+e3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIk5vbmUiO2Nhc2UgMTpyZXR1cm4iRXh0ZXJuYWxMaW5rIjtjYXNlIDI6cmV0dXJuIkRlbGV0ZUZsYWdnZWRNZXNzYWdlIjtjYXNlIDQ6cmV0dXJuIkRlbGV0ZUZsYWdnZWRDb250YWN0cyI7Y2FzZSA4OnJldHVybiJEZWxldGVGbGFnZ2VkSXRlbXMiO2Nhc2UgMTY6cmV0dXJuIkRlbGV0ZU91dGxvb2tEaXNhYmxlZFJ1bGVzIjtjYXNlIDMyOnJldHVybiJEaXNhYmxlZFJ1bGVzTGVmdCI7Y2FzZSA2NDpyZXR1cm4iRGVsZXRlQ29udmVyc2F0aW9uIjtjYXNlIDEyODpyZXR1cm4iSWdub3JlQ29udmVyc2F0aW9uIjtjYXNlIDI1NjpyZXR1cm4iQ2FuY2VsSWdub3JlQ29udmVyc2F0aW9uIjtjYXNlIDUxMjpyZXR1cm4iRmlsdGVyZWRCeVVucmVhZCI7Y2FzZSAxMDI0OnJldHVybiJEZWxldGVBbGxDbHV0dGVyIjtjYXNlIDIwNDg6cmV0dXJuIlNob3dGaXJzdFJ1bk1vZGFsRGlhbG9nIjtjYXNlIDQwOTY6cmV0dXJuIlN0b3BTaG93Q29uc3VtZXJQcm9tb3Rpb24iO2Nhc2UgODE5MjpyZXR1cm4iU2hvd0Fkc0VkZ2VQcm9tb3Rpb25NaWRkbGUiO2Nhc2UgMTYzODQ6cmV0dXJuIlVzZVVDTUFMZWdhY3lDaGF0IjtjYXNlIDMyNzY4OnJldHVybiJEb25vdFNob3dBZHMiO2Nhc2UgNjU1MzY6cmV0dXJuIkZvY3VzZWRJbmJveEZpcnN0UnVuRXhwZXJpZW5jZSI7Y2FzZSAxMzEwNzI6cmV0dXJuIlNob3dHcm91cHNBcHBVcHNlbGxCYW5uZXIiO2Nhc2UgMjYyMTQ0OnJldHVybiJIaWRlVXBOZXh0QWdlbmRhQnV0dG9uTGFiZWwiO2Nhc2UgNTI0Mjg4OnJldHVybiJGb2N1c2VkSW5ib3hGZWVkYmFjayI7Y2FzZSAxMDQ4NTc2OnJldHVybiJOb3RPMzY1SG9tZXN1YnNjcmliZWRVc2VyIjtjYXNlIDIwOTcxNTI6cmV0dXJuIlN3ZWVwR3JleUVtYWlscyI7Y2FzZSA0MTk0MzA0OnJldHVybiJSZWFjdERlZmF1bHRTZXR0aW5nc092ZXJyaWRlIjtjYXNlIDgzODg2MDg6cmV0dXJuIkFkc0V4cGVyaW1lbnRzIjtjYXNlIDE2Nzc3MjE2OnJldHVybiJBZHNEaXNwbGF5T24iO2Nhc2UgMzM1NTQ0MzI6cmV0dXJuIkFkc05hdGl2ZU9uIjtjYXNlIDY3MTA4ODY0OnJldHVybiJBZHNGb2N1c09uT25seSI7Y2FzZSAxMzQyMTc3Mjg6cmV0dXJuIlNob3dHZXRTdGFydGVkUGFuZSI7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIkdkcHJBZHNQcmVmTm90U2V0IjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4iR2V0U3RhcnRlZEVuYWJsZWRWaWFOZXdVc2VyUGF0aCI7Y2FzZSAxMDczNzQxODI0OnJldHVybiJPbmVOb3RlRmVlZEV2ZXJJbml0aWFsaXplZCI7Y2FzZSAyMTQ3NDgzNjQ3OnJldHVybiJBbGwiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxtPWU9Pntzd2l0Y2goZSl7Y2FzZSAyOnJldHVybiJBcmNoaXZlIjtjYXNlIDE6cmV0dXJuIkRlbGV0ZSI7Y2FzZSAwOnJldHVybiJOb25lIjtjYXNlIDU6cmV0dXJuIkZsYWdVbmZsYWciO2Nhc2UgNjpyZXR1cm4iTW92ZSI7Y2FzZSAzOnJldHVybiJQaW5VbnBpbiI7Y2FzZSA0OnJldHVybiJSZWFkVW5yZWFkIn19LGc9ZT0+e3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIkFsbCI7Y2FzZSA0OnJldHVybiJEaXN0cmlidXRpb25Hcm91cHMiO2Nhc2UgMjpyZXR1cm4iRXhjbHVkZUZhdm9yaXRlcyI7Y2FzZSA1OnJldHVybiJGYW1pbHlHcm91cCI7Y2FzZSAxOnJldHVybiJGYXZvcml0ZXMiO2Nhc2UgMzpyZXR1cm4iUHVibGljT25seSI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LE89ZT0+e3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIk1lbWJlck9mVW5pZmllZEdyb3VwcyI7Y2FzZSAxOnJldHVybiJPd25lck9mRGVsZXRlZFVuaWZpZWRHcm91cHMiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSx3PWU9Pntzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiJEZWxldGVBbmRBbGxvd1JlY292ZXJ5IjtjYXNlIDU6cmV0dXJuIk1hcmtBc1Bhc3RSZXRlbnRpb25MaW1pdCI7Y2FzZSA2OnJldHVybiJNb3ZlVG9BcmNoaXZlIjtjYXNlIDE6cmV0dXJuIk1vdmVUb0RlbGV0ZWRJdGVtcyI7Y2FzZSAyOnJldHVybiJNb3ZlVG9Gb2xkZXIiO2Nhc2UgMDpyZXR1cm4iTm9uZSI7Y2FzZSA0OnJldHVybiJQZXJtYW5lbnRseURlbGV0ZSI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGo9ZT0+e3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIkNhbGVuZGFyIjtjYXNlIDI6cmV0dXJuIkNvbnRhY3RzIjtjYXNlIDM6cmV0dXJuIkRlbGV0ZWRJdGVtcyI7Y2FzZSA0OnJldHVybiJEcmFmdHMiO2Nhc2UgNTpyZXR1cm4iSW5ib3giO2Nhc2UgNjpyZXR1cm4iSnVua0VtYWlsIjtjYXNlIDc6cmV0dXJuIkpvdXJuYWwiO2Nhc2UgODpyZXR1cm4iTm90ZXMiO2Nhc2UgOTpyZXR1cm4iT3V0Ym94IjtjYXNlIDEwOnJldHVybiJTZW50SXRlbXMiO2Nhc2UgMTE6cmV0dXJuIlRhc2tzIjtjYXNlIDEyOnJldHVybiJBbGwiO2Nhc2UgMTM6cmV0dXJuIk1hbmFnZWRDdXN0b21Gb2xkZXIiO2Nhc2UgMTQ6cmV0dXJuIlJzc1N1YnNjcmlwdGlvbnMiO2Nhc2UgMTU6cmV0dXJuIlN5bmNJc3N1ZXMiO2Nhc2UgMTY6cmV0dXJuIkNvbnZlcnNhdGlvbkhpc3RvcnkiO2Nhc2UgMTc6cmV0dXJuIlBlcnNvbmFsIjtjYXNlIDE4OnJldHVybiJSZWNvdmVyYWJsZUl0ZW1zIjtjYXNlIDE5OnJldHVybiJOb25JcG1Sb290IjtkZWZhdWx0OnJldHVybiBudWxsfX0sRT1lPT5lP2UubWFwKG0pOm51bGwsUz1lPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse0ZpbHRlclR5cGU6ZyhudWxsPT1lP3ZvaWQgMDplLkZpbHRlclR5cGUpLEdyb3Vwc1NldFR5cGU6TyhudWxsPT1lP3ZvaWQgMDplLkdyb3Vwc1NldFR5cGUpfSksQT1lPT5lP2UubWFwKFMpOm51bGwsaz1lPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse1dlYlNlc3Npb25UeXBlOnMobnVsbD09ZT92b2lkIDA6ZS5XZWJTZXNzaW9uVHlwZSl9KSxJPWU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7V2VhdGhlckVuYWJsZWQ6dShudWxsPT1lP3ZvaWQgMDplLldlYXRoZXJFbmFibGVkKSxXZWF0aGVyVW5pdDpjKG51bGw9PWU/dm9pZCAwOmUuV2VhdGhlclVuaXQpLExvY2FsRXZlbnRzRW5hYmxlZDpsKG51bGw9PWU/dm9pZCAwOmUuTG9jYWxFdmVudHNFbmFibGVkKSxOZXdJdGVtTm90aWZ5OmYobnVsbD09ZT92b2lkIDA6ZS5OZXdJdGVtTm90aWZ5KSxDb21wb3NlRm9udEZsYWdzOmgobnVsbD09ZT92b2lkIDA6ZS5Db21wb3NlRm9udEZsYWdzKSxOZXdFbmFibGVkUG9udHM6eShudWxsPT1lP3ZvaWQgMDplLk5ld0VuYWJsZWRQb250cyksS2V5Ym9hcmRTaG9ydGN1dHNNb2RlOmQobnVsbD09ZT92b2lkIDA6ZS5LZXlib2FyZFNob3J0Y3V0c01vZGUpLEdsb2JhbExpc3RWaWV3VHlwZVJlYWN0OnAobnVsbD09ZT92b2lkIDA6ZS5HbG9iYWxMaXN0Vmlld1R5cGVSZWFjdCksQ2xpZW50VHlwZU9wdEluU3RhdGU6dihudWxsPT1lP3ZvaWQgMDplLkNsaWVudFR5cGVPcHRJblN0YXRlKSxUYXNrc0NsaWVudFR5cGVPcHRJblN0YXRlOnYobnVsbD09ZT92b2lkIDA6ZS5UYXNrc0NsaWVudFR5cGVPcHRJblN0YXRlKX0pLFQ9ZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtUZW1wZXJhdHVyZVVuaXQ6YyhudWxsPT1lP3ZvaWQgMDplLlRlbXBlcmF0dXJlVW5pdCksTWFpbExlZnRTd2lwZUFjdGlvbjpiKG51bGw9PWU/dm9pZCAwOmUuTWFpbExlZnRTd2lwZUFjdGlvbiksTWFpbFJpZ2h0U3dpcGVBY3Rpb246YihudWxsPT1lP3ZvaWQgMDplLk1haWxSaWdodFN3aXBlQWN0aW9uKSxNYWlsVHJpYWdlT25Ib3ZlckFjdGlvbnM6RShudWxsPT1lP3ZvaWQgMDplLk1haWxUcmlhZ2VPbkhvdmVyQWN0aW9ucyl9KSx4PWU9Pih7VW5pZmllZEdyb3Vwc1NldHM6QShudWxsPT1lP3ZvaWQgMDplLlVuaWZpZWRHcm91cHNTZXRzKX0pLEM9ZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtUeXBlOmooZS5UeXBlKSxSZXRlbnRpb25BY3Rpb246dyhlLlJldGVudGlvbkFjdGlvbil9KSxNPWU9PmU/ZS5tYXAoQyk6bnVsbDt2YXIgUj1uKDU5MCk7Y29uc3QgUD1uZXcgTWFwO2xldCBOO2Z1bmN0aW9uIEQoZSx0KXtpZih0PXR8fHIuYSxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX0oZSkpTj1lO2Vsc2UgaWYoT2JqZWN0KGkuUSkoKSlvLmQoIkNhbm5vdCBzZXQgY29uZmlndXJhdGlvbiBvbiB3b3JrZXIuICBDb25maWd1cmF0aW9uIHNob3VsZCBiZSBjb25zdW1lZCBieSB0aGUgd29ya2VyIHZpYSBhIHByb3h5IHRvIHRoZSBtYWluIHJlbmRlcmVyLiIpO2Vsc2UgdHJ5e2lmKGUpe2NvbnN0IG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHtfX3R5cGVuYW1lOiJVc2VyQ29uZmlndXJhdGlvbiIsaWQ6dH0sZSkse1ByaW1lU2V0dGluZ3M6YShlLlByaW1lU2V0dGluZ3MpLFVzZXJPcHRpb25zOkkoZS5Vc2VyT3B0aW9ucyksU2Vzc2lvblNldHRpbmdzOmsoZS5TZXNzaW9uU2V0dGluZ3MpLFZpZXdTdGF0ZUNvbmZpZ3VyYXRpb246VChlLlZpZXdTdGF0ZUNvbmZpZ3VyYXRpb24pLEdyb3Vwc1NldHM6eChlLkdyb3Vwc1NldHMpLFJldGVudGlvblBvbGljeVRhZ3M6TShlLlJldGVudGlvblBvbGljeVRhZ3MpfSl9KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpLHQpO1BbdF09bn19Y2F0Y2goZSl7by5kKCJVc2VyIGNvbmZpZ3VyYXRpb24gY2FjaGUgc2V0IGZhaWxlZDogIitlKX19YXN5bmMgZnVuY3Rpb24gQihlKXtyZXR1cm4gT2JqZWN0KGkuUSkoKT9OKGUpOkwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gT2JqZWN0KGkuUSkoKSYmby5kKCJDYW5ub3QgZ2V0IGNvbmZpZ3VyYXRpb24gc3luY2hyb25vdXNseSBvbiB3b3JrZXIuICBDb25maWd1cmF0aW9uIHNob3VsZCBiZSBjb25zdW1lZCBieSB0aGUgd29ya2VyIHZpYSBhIHByb3h5IHRvIHRoZSBtYWluIHJlbmRlcmVyLiIpLGU9ZXx8ci5hLFBbZV18fHtpZDplfX1hc3luYyBmdW5jdGlvbiBVKGUsdCl7T2JqZWN0KGkuUSkoKT9hd2FpdCBOKGUsdCk6dCYmKGU9ZXx8ci5hLE9iamVjdChSLmEpKFBbZV0sdCkpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gQn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBEfSkpLG4uZCh0LCJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gVX0pKX0sNjA3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTtsZXQgcj0wO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU+PXJ9ZnVuY3Rpb24gaSgpe3JldHVybiJ2aXNpYmxlIj09d2luZG93LmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+e3I9aSgpPyhuZXcgRGF0ZSkuZ2V0VGltZSgpOk51bWJlci5NQVhfVkFMVUV9KX0sNjA4OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImEiOnsiQWNjb3VudEVudHJ5IjpbIkFjY291bnRMb2NhbEZpbGUiLCJBY2NvdW50TWFpbGJveCIsIkFjY291bnRTb3VyY2UiXSwiQXBwZW5kT25TZW5kIjpbXSwiQXR0YWNobWVudCI6WyJCYXNpY0F0dGFjaG1lbnQiLCJSZWZlcmVuY2VBdHRhY2htZW50Il0sIkF0dGFjaG1lbnRUeXBlVW5pb24iOlsiQmFzaWNBdHRhY2htZW50IiwiUmVmZXJlbmNlQXR0YWNobWVudCJdLCJDYWxlbmRhckVudHJ5IjpbIkxpbmtlZENhbGVuZGFyRW50cnkiLCJMb2NhbENhY2hlRm9yUmVtb3RlQ2FsZW5kYXJFbnRyeSIsIkxvY2FsQ2FsZW5kYXJFbnRyeSJdLCJDb25uZWN0aW9uIjpbIkNvbnZlcnNhdGlvblJvd0Nvbm5lY3Rpb24iLCJDb252ZXJzYXRpb25Ub0NvbnZlcnNhdGlvbk5vZGVzQ29ubmVjdGlvbiIsIkl0ZW1Sb3dDb25uZWN0aW9uIl0sIkNvbnZlcnNhdGlvbk5vZGVJdGVtIjpbIkl0ZW0iLCJNZXNzYWdlIiwiTWVldGluZ01lc3NhZ2UiLCJNZWV0aW5nUmVzcG9uc2VNZXNzYWdlIiwiTWVldGluZ1JlcXVlc3RNZXNzYWdlIiwiTWVldGluZ0NhbmNlbGxhdGlvbk1lc3NhZ2UiXSwiQ29udmVyc2F0aW9uUm93QnlJZFJlc3VsdCI6WyJDb252ZXJzYXRpb25UeXBlIiwiTm90Rm91bmQiXSwiQ29weU1vdmVHcm91cEZvbGRlclJlc3VsdCI6WyJDb3B5TW92ZUdyb3VwRm9sZGVyUmVzcG9uc2UiLCJFcnJvck1lc3NhZ2UiXSwiQ3JlYXRlQWNjb3VudFJlc3VsdCI6WyJBY2NvdW50U291cmNlIiwiQWNjb3VudENyZWF0aW9uRmFpbHVyZSJdLCJDcmVhdGVGb2xkZXJSZXN1bHQiOlsiRm9sZGVySWQiLCJBY2Nlc3NEZW5pZWQiXSwiQ3JlYXRlR3JvdXBGb2xkZXJSZXN1bHQiOlsiQ3JlYXRlR3JvdXBGb2xkZXJSZXNwb25zZSIsIkVycm9yTWVzc2FnZSJdLCJFZGdlIjpbIkNvbnZlcnNhdGlvbkNvbnZlcnNhdGlvbk5vZGVzRWRnZSIsIkNvbnZlcnNhdGlvblJvd0VkZ2UiLCJJdGVtUm93RWRnZSJdLCJHZW5lcmljSXRlbSI6WyJDYWxlbmRhckl0ZW0iLCJJdGVtIiwiTWVldGluZ0NhbmNlbGxhdGlvbk1lc3NhZ2UiLCJNZWV0aW5nTWVzc2FnZSIsIk1lZXRpbmdSZXF1ZXN0TWVzc2FnZSIsIk1lZXRpbmdSZXNwb25zZU1lc3NhZ2UiLCJNZXNzYWdlIl0sIkdlbmVyaWNNZWV0aW5nTWVzc2FnZSI6WyJNZWV0aW5nQ2FuY2VsbGF0aW9uTWVzc2FnZSIsIk1lZXRpbmdNZXNzYWdlIiwiTWVldGluZ1JlcXVlc3RNZXNzYWdlIiwiTWVldGluZ1Jlc3BvbnNlTWVzc2FnZSJdLCJHZW5lcmljTWVzc2FnZSI6WyJNZWV0aW5nQ2FuY2VsbGF0aW9uTWVzc2FnZSIsIk1lZXRpbmdNZXNzYWdlIiwiTWVldGluZ1JlcXVlc3RNZXNzYWdlIiwiTWVldGluZ1Jlc3BvbnNlTWVzc2FnZSIsIk1lc3NhZ2UiXSwiR2V0SXRlbVJlc3BvbnNlVHlwZSI6WyJJdGVtIiwiTWVzc2FnZSIsIk1lZXRpbmdNZXNzYWdlIiwiTWVldGluZ1Jlc3BvbnNlTWVzc2FnZSIsIk1lZXRpbmdSZXF1ZXN0TWVzc2FnZSIsIk1lZXRpbmdDYW5jZWxsYXRpb25NZXNzYWdlIl0sIkludGVydmFsUmVjdXJyZW5jZVBhdHRlcm5CYXNlIjpbIkFic29sdXRlTW9udGhseVJlY3VycmVuY2UiLCJEYWlseVJlY3VycmVuY2UiLCJSZWdlbmVyYXRpbmdQYXR0ZXJuQmFzZVR5cGUiLCJSZWxhdGl2ZU1vbnRobHlSZWN1cnJlbmNlIiwiV2Vla2x5UmVjdXJyZW5jZSJdLCJNMzY1QXBwbGljYXRpb24iOlsiTTM2NUh1YkFwcGxpY2F0aW9uIiwiTTM2NVBsYXRmb3JtQXBwbGljYXRpb24iXSwiTTM2NUFwcGxpY2F0aW9uQmFkZ2UiOlsiTTM2NUFwcGxpY2F0aW9uTnVtZXJpY0JhZGdlIl0sIk0zNjVBcHBsaWNhdGlvbkljb24iOlsiSW50ZXJuYWxJY29uIiwiUmVtb3RlSW1hZ2UiXSwiTWFpbEZvbGRlclBlcm1pc3Npb25zIjpbIk1haWxGb2xkZXIiXSwiTm9kZSI6WyJDYWxlbmRhckV2ZW50IiwiQ2FsZW5kYXJJdGVtIiwiQ29udmVyc2F0aW9uIiwiQ29udmVyc2F0aW9uTm9kZSIsIkNvbnZlcnNhdGlvblR5cGUiLCJEcmFmdCIsIkl0ZW0iLCJJdGVtUm93IiwiTWVldGluZ0NhbmNlbGxhdGlvbk1lc3NhZ2UiLCJNZWV0aW5nTWVzc2FnZSIsIk1lZXRpbmdSZXF1ZXN0TWVzc2FnZSIsIk1lZXRpbmdSZXNwb25zZU1lc3NhZ2UiLCJNZXNzYWdlIl0sIk5vdGlmaWNhdGlvblBheWxvYWQiOlsiSGllcmFyY2h5Tm90aWZpY2F0aW9uUGF5bG9hZCIsIlJvd05vdGlmaWNhdGlvbkNoYW5nZVBheWxvYWQiLCJSb3dOb3RpZmljYXRpb25EZWxldGVQYXlsb2FkIiwiVW5yZWFkSXRlbU5vdGlmaWNhdGlvblBheWxvYWQiXSwiUHJvcGVydHlQYXRoIjpbIkJ1aWx0SW5Qcm9wZXJ0eVVyaSIsIkV4dGVuZGVkUHJvcGVydHlVcmkiXSwiUmVjdXJyZW5jZVBhdHRlcm5UeXBlIjpbIkFic29sdXRlWWVhcmx5UmVjdXJyZW5jZSIsIkFic29sdXRlTW9udGhseVJlY3VycmVuY2UiLCJEYWlseVJlY3VycmVuY2UiLCJSZWdlbmVyYXRpbmdQYXR0ZXJuQmFzZVR5cGUiLCJSZWxhdGl2ZVllYXJseVJlY3VycmVuY2UiLCJSZWxhdGl2ZU1vbnRobHlSZWN1cnJlbmNlIiwiV2Vla2x5UmVjdXJyZW5jZSJdLCJSZWN1cnJlbmNlUmFuZ2VCYXNlIjpbIkVuZERhdGVSZWN1cnJlbmNlIiwiTm9FbmRSZWN1cnJlbmNlIiwiTnVtYmVyZWRSZWN1cnJlbmNlIl0sIlJlY3VycmVuY2VSYW5nZVR5cGUiOlsiRW5kRGF0ZVJlY3VycmVuY2UiLCJOb0VuZFJlY3VycmVuY2UiLCJOdW1iZXJlZFJlY3VycmVuY2UiXSwiUmVuYW1lR3JvdXBGb2xkZXJSZXN1bHQiOlsiUmVuYW1lR3JvdXBGb2xkZXJSZXNwb25zZSIsIkVycm9yTWVzc2FnZSJdLCJSb3dOb3RpZmljYXRpb25QYXlsb2FkIjpbIlJvd05vdGlmaWNhdGlvbkNoYW5nZVBheWxvYWQiLCJSb3dOb3RpZmljYXRpb25EZWxldGVQYXlsb2FkIl0sIlVuZG9hYmxlQWN0aW9uUmVzdWx0IjpbIkNhdGVnb3JpemVDb252ZXJzYXRpb25SZXN1bHQiLCJDYXRlZ29yaXplSXRlbVJlc3VsdCIsIkRlbGV0ZUNvbnZlcnNhdGlvblJlc3VsdCIsIkRlbGV0ZUl0ZW1SZXN1bHQiLCJNYXJrSXRlbUFzSnVua1Jlc3VsdCIsIk1vdmVDb252ZXJzYXRpb25SZXN1bHQiLCJNb3ZlSXRlbVJlc3VsdCIsIlNjaGVkdWxlQ29udmVyc2F0aW9uUmVzdWx0Il0sImNhbGVuZGFyc1VuaW9uVHlwZSI6WyJMb2NhbENhbGVuZGFyRW50cnkiLCJMaW5rZWRDYWxlbmRhckVudHJ5IiwiTG9jYWxDYWNoZUZvclJlbW90ZUNhbGVuZGFyRW50cnkiXX19Jyl9LDYwOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKTt2YXIgcj1uKDQwNSkuYS5leGVjdXRlfSw2MTA6ZnVuY3Rpb24oZSx0KXt9LDYxMTpmdW5jdGlvbihlLHQpe30sNjEyOmZ1bmN0aW9uKGUsdCl7fSw2MTM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgwNSk7bi5kKHQsIkFwb2xsb1Byb3ZpZGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5hfSkpO3ZhciBvPW4oNjE1KTtuLmQodCwidXNlQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gby5hfSkpLG4uZCh0LCJ1c2VMYXp5UXVlcnkiLChmdW5jdGlvbigpe3JldHVybiBvLmJ9KSksbi5kKHQsInVzZU11dGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gby5jfSkpLG4uZCh0LCJ1c2VRdWVyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uZH0pKTt2YXIgaT1uKDYxNCk7bi5vKGksIkFwb2xsb0NsaWVudCIpJiZuLmQodCwiQXBvbGxvQ2xpZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gaS5BcG9sbG9DbGllbnR9KSksbi5vKGksIkFwb2xsb0xpbmsiKSYmbi5kKHQsIkFwb2xsb0xpbmsiLChmdW5jdGlvbigpe3JldHVybiBpLkFwb2xsb0xpbmt9KSksbi5vKGksIkluTWVtb3J5Q2FjaGUiKSYmbi5kKHQsIkluTWVtb3J5Q2FjaGUiLChmdW5jdGlvbigpe3JldHVybiBpLkluTWVtb3J5Q2FjaGV9KSksbi5vKGksIk9ic2VydmFibGUiKSYmbi5kKHQsIk9ic2VydmFibGUiLChmdW5jdGlvbigpe3JldHVybiBpLk9ic2VydmFibGV9KSksbi5vKGksImV4ZWN1dGUiKSYmbi5kKHQsImV4ZWN1dGUiLChmdW5jdGlvbigpe3JldHVybiBpLmV4ZWN1dGV9KSksbi5vKGksImdxbCIpJiZuLmQodCwiZ3FsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaS5ncWx9KSksbi5vKGksImlzQXBvbGxvRXJyb3IiKSYmbi5kKHQsImlzQXBvbGxvRXJyb3IiLChmdW5jdGlvbigpe3JldHVybiBpLmlzQXBvbGxvRXJyb3J9KSksbi5vKGksIm1ha2VWYXIiKSYmbi5kKHQsIm1ha2VWYXIiLChmdW5jdGlvbigpe3JldHVybiBpLm1ha2VWYXJ9KSl9LDYxNDpmdW5jdGlvbihlLHQpe30sNjE1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4ubihyKSxpPW4oMTkpLGE9big0MDQpO2Z1bmN0aW9uIHMoKXt2YXIgZT1vLmEudXNlQ29udGV4dChPYmplY3QoYS5hKSgpKS5jbGllbnQ7cmV0dXJuIE9iamVjdChpLmIpKGUsMzMpLGV9dmFyIHU9big4KSxjPW4oNzMpLGw9bigxNDMpLGY9big2OSksaD1uKDE2OSksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmlzTW91bnRlZD0hMSx0aGlzLnByZXZpb3VzT3B0aW9ucz17fSx0aGlzLmNvbnRleHQ9e30sdGhpcy5vcHRpb25zPXt9LHRoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmNvbnRleHQ9dHx8e319cmV0dXJuIGUucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zfSxlLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLHQmJiFPYmplY3QoYy5hKSh0aGlzLm9wdGlvbnMsZSkmJih0aGlzLnByZXZpb3VzT3B0aW9ucz10aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucz1lfSxlLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5pc01vdW50ZWQ9ITF9LGUucHJvdG90eXBlLnJlZnJlc2hDbGllbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jbGllbnR8fHRoaXMuY29udGV4dCYmdGhpcy5jb250ZXh0LmNsaWVudDtPYmplY3QoaS5iKSghIWUsMjkpO3ZhciB0PSExO3JldHVybiBlIT09dGhpcy5jbGllbnQmJih0PSEwLHRoaXMuY2xpZW50PWUsdGhpcy5jbGVhbnVwKCkpLHtjbGllbnQ6dGhpcy5jbGllbnQsaXNOZXc6dH19LGUucHJvdG90eXBlLnZlcmlmeURvY3VtZW50VHlwZT1mdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdChoLmMpKGUpO09iamVjdChoLmIpKHQpLE9iamVjdChoLmIpKG4udHlwZSk7T2JqZWN0KGkuYikobi50eXBlPT09dCwzMCl9LGV9KCkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPXQub3B0aW9ucyxyPXQuY29udGV4dCxvPXQub25OZXdEYXRhLGk9ZS5jYWxsKHRoaXMsbixyKXx8dGhpcztyZXR1cm4gaS5ydW5MYXp5PSExLGkucHJldmlvdXM9T2JqZWN0LmNyZWF0ZShudWxsKSxpLnJ1bkxhenlRdWVyeT1mdW5jdGlvbihlKXtpLmNsZWFudXAoKSxpLnJ1bkxhenk9ITAsaS5sYXp5T3B0aW9ucz1lLGkub25OZXdEYXRhKCl9LGkuZ2V0UXVlcnlSZXN1bHQ9ZnVuY3Rpb24oKXt2YXIgZT1pLm9ic2VydmFibGVRdWVyeUZpZWxkcygpLHQ9aS5nZXRPcHRpb25zKCk7aWYodC5za2lwKWU9T2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sZSkse2RhdGE6dm9pZCAwLGVycm9yOnZvaWQgMCxsb2FkaW5nOiExLG5ldHdvcmtTdGF0dXM6Zi5hLnJlYWR5LGNhbGxlZDohMH0pO2Vsc2UgaWYoaS5jdXJyZW50T2JzZXJ2YWJsZSl7dmFyIG49aS5jdXJyZW50T2JzZXJ2YWJsZS5nZXRDdXJyZW50UmVzdWx0KCkscj1uLmRhdGEsbz1uLmxvYWRpbmcsYT1uLnBhcnRpYWwscz1uLm5ldHdvcmtTdGF0dXMsYz1uLmVycm9ycyxoPW4uZXJyb3I7aWYoYyYmYy5sZW5ndGg+MCYmKGg9bmV3IGwuYSh7Z3JhcGhRTEVycm9yczpjfSkpLGU9T2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sZSkse2RhdGE6cixsb2FkaW5nOm8sbmV0d29ya1N0YXR1czpzLGVycm9yOmgsY2FsbGVkOiEwfSksbyk7ZWxzZSBpZihoKU9iamVjdC5hc3NpZ24oZSx7ZGF0YTooaS5jdXJyZW50T2JzZXJ2YWJsZS5nZXRMYXN0UmVzdWx0KCl8fHt9KS5kYXRhfSk7ZWxzZXt2YXIgZD1pLmN1cnJlbnRPYnNlcnZhYmxlLm9wdGlvbnMuZmV0Y2hQb2xpY3k7aWYodC5wYXJ0aWFsUmVmZXRjaCYmYSYmKCFyfHwwPT09T2JqZWN0LmtleXMocikubGVuZ3RoKSYmImNhY2hlLW9ubHkiIT09ZClyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtsb2FkaW5nOiEwLG5ldHdvcmtTdGF0dXM6Zi5hLmxvYWRpbmd9KSxlLnJlZmV0Y2goKSxlfX1lLmNsaWVudD1pLmNsaWVudCxpLnNldE9wdGlvbnModCwhMCk7dmFyIHA9aS5wcmV2aW91cy5yZXN1bHQ7cmV0dXJuIGkucHJldmlvdXMubG9hZGluZz1wJiZwLmxvYWRpbmd8fCExLGUucHJldmlvdXNEYXRhPXAmJihwLmRhdGF8fHAucHJldmlvdXNEYXRhKSxpLnByZXZpb3VzLnJlc3VsdD1lLGkuY3VycmVudE9ic2VydmFibGUmJmkuY3VycmVudE9ic2VydmFibGUucmVzZXRRdWVyeVN0b3JlRXJyb3JzKCksZX0saS5vYnNSZWZldGNoPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9aS5jdXJyZW50T2JzZXJ2YWJsZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQucmVmZXRjaChlKX0saS5vYnNGZXRjaE1vcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3VycmVudE9ic2VydmFibGUuZmV0Y2hNb3JlKGUpfSxpLm9ic1VwZGF0ZVF1ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBpLmN1cnJlbnRPYnNlcnZhYmxlLnVwZGF0ZVF1ZXJ5KGUpfSxpLm9ic1N0YXJ0UG9sbGluZz1mdW5jdGlvbihlKXt2YXIgdDtudWxsPT09KHQ9aS5jdXJyZW50T2JzZXJ2YWJsZSl8fHZvaWQgMD09PXR8fHQuc3RhcnRQb2xsaW5nKGUpfSxpLm9ic1N0b3BQb2xsaW5nPWZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPWkuY3VycmVudE9ic2VydmFibGUpfHx2b2lkIDA9PT1lfHxlLnN0b3BQb2xsaW5nKCl9LGkub2JzU3Vic2NyaWJlVG9Nb3JlPWZ1bmN0aW9uKGUpe3JldHVybiBpLmN1cnJlbnRPYnNlcnZhYmxlLnN1YnNjcmliZVRvTW9yZShlKX0saS5vbk5ld0RhdGE9byxpfXJldHVybiBPYmplY3QodS5jKSh0LGUpLHQucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hDbGllbnQoKTt2YXIgZT10aGlzLmdldE9wdGlvbnMoKSx0PWUuc2tpcCxuPWUucXVlcnk7cmV0dXJuKHR8fG4hPT10aGlzLnByZXZpb3VzLnF1ZXJ5KSYmKHRoaXMucmVtb3ZlUXVlcnlTdWJzY3JpcHRpb24oKSx0aGlzLnJlbW92ZU9ic2VydmFibGUoIXQpLHRoaXMucHJldmlvdXMucXVlcnk9biksdGhpcy51cGRhdGVPYnNlcnZhYmxlUXVlcnkoKSx0aGlzLmlzTW91bnRlZCYmdGhpcy5zdGFydFF1ZXJ5U3Vic2NyaXB0aW9uKCksdGhpcy5nZXRFeGVjdXRlU3NyUmVzdWx0KCl8fHRoaXMuZ2V0RXhlY3V0ZVJlc3VsdCgpfSx0LnByb3RvdHlwZS5leGVjdXRlTGF6eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJ1bkxhenk/W3RoaXMucnVuTGF6eVF1ZXJ5LHRoaXMuZXhlY3V0ZSgpXTpbdGhpcy5ydW5MYXp5UXVlcnkse2xvYWRpbmc6ITEsbmV0d29ya1N0YXR1czpmLmEucmVhZHksY2FsbGVkOiExLGRhdGE6dm9pZCAwfV19LHQucHJvdG90eXBlLmZldGNoRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldE9wdGlvbnMoKTtyZXR1cm4hdC5za2lwJiYhMSE9PXQuc3NyJiZuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuc3RhcnRRdWVyeVN1YnNjcmlwdGlvbih0KX0pKX0sdC5wcm90b3R5cGUuYWZ0ZXJFeGVjdXRlPWZ1bmN0aW9uKGUpe3ZhciB0PSh2b2lkIDA9PT1lP3t9OmUpLmxhenksbj12b2lkIDAhPT10JiZ0O3JldHVybiB0aGlzLmlzTW91bnRlZD0hMCxuJiYhdGhpcy5ydW5MYXp5fHx0aGlzLmhhbmRsZUVycm9yT3JDb21wbGV0ZWQoKSx0aGlzLnByZXZpb3VzT3B0aW9ucz10aGlzLmdldE9wdGlvbnMoKSx0aGlzLnVubW91bnQuYmluZCh0aGlzKX0sdC5wcm90b3R5cGUuY2xlYW51cD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlUXVlcnlTdWJzY3JpcHRpb24oKSx0aGlzLnJlbW92ZU9ic2VydmFibGUoITApLGRlbGV0ZSB0aGlzLnByZXZpb3VzLnJlc3VsdH0sdC5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbigpe3ZhciB0PWUucHJvdG90eXBlLmdldE9wdGlvbnMuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5sYXp5T3B0aW9ucyYmKHQudmFyaWFibGVzPU9iamVjdCh1LmEpKE9iamVjdCh1LmEpKHt9LHQudmFyaWFibGVzKSx0aGlzLmxhenlPcHRpb25zLnZhcmlhYmxlcyksdC5jb250ZXh0PU9iamVjdCh1LmEpKE9iamVjdCh1LmEpKHt9LHQuY29udGV4dCksdGhpcy5sYXp5T3B0aW9ucy5jb250ZXh0KSksdGhpcy5ydW5MYXp5JiZkZWxldGUgdC5za2lwLHR9LHQucHJvdG90eXBlLnNzckluaXRpYXRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQmJnRoaXMuY29udGV4dC5yZW5kZXJQcm9taXNlc30sdC5wcm90b3R5cGUuZ2V0RXhlY3V0ZVJlc3VsdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UXVlcnlSZXN1bHQoKTtyZXR1cm4gdGhpcy5zdGFydFF1ZXJ5U3Vic2NyaXB0aW9uKCksZX0sdC5wcm90b3R5cGUuZ2V0RXhlY3V0ZVNzclJlc3VsdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0T3B0aW9ucygpLHQ9ZS5zc3Isbj1lLnNraXAscj0hMT09PXQsbz10aGlzLnJlZnJlc2hDbGllbnQoKS5jbGllbnQuZGlzYWJsZU5ldHdvcmtGZXRjaGVzLGk9T2JqZWN0KHUuYSkoe2xvYWRpbmc6ITAsbmV0d29ya1N0YXR1czpmLmEubG9hZGluZyxjYWxsZWQ6ITAsZGF0YTp2b2lkIDAsc3RhbGU6ITEsY2xpZW50OnRoaXMuY2xpZW50fSx0aGlzLm9ic2VydmFibGVRdWVyeUZpZWxkcygpKTtpZihyJiYodGhpcy5zc3JJbml0aWF0ZWQoKXx8bykpcmV0dXJuIHRoaXMucHJldmlvdXMucmVzdWx0PWksaTtpZih0aGlzLnNzckluaXRpYXRlZCgpKXt2YXIgYT10aGlzLmdldFF1ZXJ5UmVzdWx0KCl8fGk7cmV0dXJuIGEubG9hZGluZyYmIW4mJnRoaXMuY29udGV4dC5yZW5kZXJQcm9taXNlcy5hZGRRdWVyeVByb21pc2UodGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pKSxhfX0sdC5wcm90b3R5cGUucHJlcGFyZU9ic2VydmFibGVRdWVyeU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE9wdGlvbnMoKTt0aGlzLnZlcmlmeURvY3VtZW50VHlwZShlLnF1ZXJ5LGguYS5RdWVyeSk7dmFyIHQ9ZS5kaXNwbGF5TmFtZXx8IlF1ZXJ5IjtyZXR1cm4hdGhpcy5zc3JJbml0aWF0ZWQoKXx8Im5ldHdvcmstb25seSIhPT1lLmZldGNoUG9saWN5JiYiY2FjaGUtYW5kLW5ldHdvcmsiIT09ZS5mZXRjaFBvbGljeXx8KGUuZmV0Y2hQb2xpY3k9ImNhY2hlLWZpcnN0IiksT2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sZSkse2Rpc3BsYXlOYW1lOnQsY29udGV4dDplLmNvbnRleHR9KX0sdC5wcm90b3R5cGUuaW5pdGlhbGl6ZU9ic2VydmFibGVRdWVyeT1mdW5jdGlvbigpe2lmKHRoaXMuc3NySW5pdGlhdGVkKCkmJih0aGlzLmN1cnJlbnRPYnNlcnZhYmxlPXRoaXMuY29udGV4dC5yZW5kZXJQcm9taXNlcy5nZXRTU1JPYnNlcnZhYmxlKHRoaXMuZ2V0T3B0aW9ucygpKSksIXRoaXMuY3VycmVudE9ic2VydmFibGUpe3ZhciBlPXRoaXMucHJlcGFyZU9ic2VydmFibGVRdWVyeU9wdGlvbnMoKTt0aGlzLnByZXZpb3VzLm9ic2VydmFibGVRdWVyeU9wdGlvbnM9T2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sZSkse2NoaWxkcmVuOm51bGx9KSx0aGlzLmN1cnJlbnRPYnNlcnZhYmxlPXRoaXMucmVmcmVzaENsaWVudCgpLmNsaWVudC53YXRjaFF1ZXJ5KE9iamVjdCh1LmEpKHt9LGUpKSx0aGlzLnNzckluaXRpYXRlZCgpJiZ0aGlzLmNvbnRleHQucmVuZGVyUHJvbWlzZXMucmVnaXN0ZXJTU1JPYnNlcnZhYmxlKHRoaXMuY3VycmVudE9ic2VydmFibGUsZSl9fSx0LnByb3RvdHlwZS51cGRhdGVPYnNlcnZhYmxlUXVlcnk9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnJlbnRPYnNlcnZhYmxlKXtpZighdGhpcy5nZXRPcHRpb25zKCkuc2tpcCl7dmFyIGU9T2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sdGhpcy5wcmVwYXJlT2JzZXJ2YWJsZVF1ZXJ5T3B0aW9ucygpKSx7Y2hpbGRyZW46bnVsbH0pO09iamVjdChjLmEpKGUsdGhpcy5wcmV2aW91cy5vYnNlcnZhYmxlUXVlcnlPcHRpb25zKXx8KHRoaXMucHJldmlvdXMub2JzZXJ2YWJsZVF1ZXJ5T3B0aW9ucz1lLHRoaXMuY3VycmVudE9ic2VydmFibGUuc2V0T3B0aW9ucyhlKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSkpfX1lbHNlIHRoaXMuaW5pdGlhbGl6ZU9ic2VydmFibGVRdWVyeSgpfSx0LnByb3RvdHlwZS5zdGFydFF1ZXJ5U3Vic2NyaXB0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dm9pZCAwPT09ZSYmKGU9dGhpcy5vbk5ld0RhdGEpLHRoaXMuY3VycmVudFN1YnNjcmlwdGlvbnx8dGhpcy5nZXRPcHRpb25zKCkuc2tpcHx8KHRoaXMuY3VycmVudFN1YnNjcmlwdGlvbj10aGlzLmN1cnJlbnRPYnNlcnZhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihuKXt2YXIgcj1uLmxvYWRpbmcsbz1uLm5ldHdvcmtTdGF0dXMsaT1uLmRhdGEsYT10LnByZXZpb3VzLnJlc3VsdDthJiZhLmxvYWRpbmc9PT1yJiZhLm5ldHdvcmtTdGF0dXM9PT1vJiZPYmplY3QoYy5hKShhLmRhdGEsaSl8fGUoKX0sZXJyb3I6ZnVuY3Rpb24obil7aWYodC5yZXN1YnNjcmliZVRvUXVlcnkoKSwhbi5oYXNPd25Qcm9wZXJ0eSgiZ3JhcGhRTEVycm9ycyIpKXRocm93IG47dmFyIHI9dC5wcmV2aW91cy5yZXN1bHQ7KHImJnIubG9hZGluZ3x8IU9iamVjdChjLmEpKG4sdC5wcmV2aW91cy5lcnJvcikpJiYodC5wcmV2aW91cy5lcnJvcj1uLGUoKSl9fSkpfSx0LnByb3RvdHlwZS5yZXN1YnNjcmliZVRvUXVlcnk9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZVF1ZXJ5U3Vic2NyaXB0aW9uKCk7dmFyIGU9dGhpcy5jdXJyZW50T2JzZXJ2YWJsZTtpZihlKXt2YXIgdD1lLmdldExhc3RFcnJvcigpLG49ZS5nZXRMYXN0UmVzdWx0KCk7ZS5yZXNldExhc3RSZXN1bHRzKCksdGhpcy5zdGFydFF1ZXJ5U3Vic2NyaXB0aW9uKCksT2JqZWN0LmFzc2lnbihlLHtsYXN0RXJyb3I6dCxsYXN0UmVzdWx0Om59KX19LHQucHJvdG90eXBlLmhhbmRsZUVycm9yT3JDb21wbGV0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnJlbnRPYnNlcnZhYmxlJiZ0aGlzLnByZXZpb3VzLnJlc3VsdCl7dmFyIGU9dGhpcy5wcmV2aW91cy5yZXN1bHQsdD1lLmRhdGEsbj1lLmxvYWRpbmcscj1lLmVycm9yO2lmKCFuKXt2YXIgbz10aGlzLmdldE9wdGlvbnMoKSxpPW8ucXVlcnksYT1vLnZhcmlhYmxlcyxzPW8ub25Db21wbGV0ZWQsdT1vLm9uRXJyb3IsbD1vLnNraXA7aWYodGhpcy5wcmV2aW91c09wdGlvbnMmJiF0aGlzLnByZXZpb3VzLmxvYWRpbmcmJk9iamVjdChjLmEpKHRoaXMucHJldmlvdXNPcHRpb25zLnF1ZXJ5LGkpJiZPYmplY3QoYy5hKSh0aGlzLnByZXZpb3VzT3B0aW9ucy52YXJpYWJsZXMsYSkpcmV0dXJuOyFzfHxyfHxsP3UmJnImJnUocik6cyh0KX19fSx0LnByb3RvdHlwZS5yZW1vdmVRdWVyeVN1YnNjcmlwdGlvbj1mdW5jdGlvbigpe3RoaXMuY3VycmVudFN1YnNjcmlwdGlvbiYmKHRoaXMuY3VycmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGRlbGV0ZSB0aGlzLmN1cnJlbnRTdWJzY3JpcHRpb24pfSx0LnByb3RvdHlwZS5yZW1vdmVPYnNlcnZhYmxlPWZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudE9ic2VydmFibGUmJih0aGlzLmN1cnJlbnRPYnNlcnZhYmxlLnRlYXJEb3duUXVlcnkoKSxlJiZkZWxldGUgdGhpcy5jdXJyZW50T2JzZXJ2YWJsZSl9LHQucHJvdG90eXBlLm9ic2VydmFibGVRdWVyeUZpZWxkcz1mdW5jdGlvbigpe3ZhciBlO3JldHVybnt2YXJpYWJsZXM6bnVsbD09PShlPXRoaXMuY3VycmVudE9ic2VydmFibGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZhcmlhYmxlcyxyZWZldGNoOnRoaXMub2JzUmVmZXRjaCxmZXRjaE1vcmU6dGhpcy5vYnNGZXRjaE1vcmUsdXBkYXRlUXVlcnk6dGhpcy5vYnNVcGRhdGVRdWVyeSxzdGFydFBvbGxpbmc6dGhpcy5vYnNTdGFydFBvbGxpbmcsc3RvcFBvbGxpbmc6dGhpcy5vYnNTdG9wUG9sbGluZyxzdWJzY3JpYmVUb01vcmU6dGhpcy5vYnNTdWJzY3JpYmVUb01vcmV9fSx0fShkKTtmdW5jdGlvbiB2KGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIG89T2JqZWN0KHIudXNlQ29udGV4dCkoT2JqZWN0KGEuYSkoKSksaT1PYmplY3Qoci51c2VSZWR1Y2VyKSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUrMX0pLDApLHM9aVswXSxsPWlbMV0sZj10P09iamVjdCh1LmEpKE9iamVjdCh1LmEpKHt9LHQpLHtxdWVyeTplfSk6e3F1ZXJ5OmV9LGg9T2JqZWN0KHIudXNlUmVmKSgpLGQ9aC5jdXJyZW50fHwoaC5jdXJyZW50PW5ldyBwKHtvcHRpb25zOmYsY29udGV4dDpvLG9uTmV3RGF0YTpmdW5jdGlvbigpe2Quc3NySW5pdGlhdGVkKCk/bCgpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGguY3VycmVudCYmbCgpfSkpfX0pKTtkLnNldE9wdGlvbnMoZiksZC5jb250ZXh0PW87dmFyIHYsYix5LG09e29wdGlvbnM6T2JqZWN0KHUuYSkoT2JqZWN0KHUuYSkoe30sZikse29uRXJyb3I6dm9pZCAwLG9uQ29tcGxldGVkOnZvaWQgMH0pLGNvbnRleHQ6byx0aWNrOnN9LGc9KHY9ZnVuY3Rpb24oKXtyZXR1cm4gbj9kLmV4ZWN1dGVMYXp5KCk6ZC5leGVjdXRlKCl9LGI9bSwoeT1PYmplY3Qoci51c2VSZWYpKCkpLmN1cnJlbnQmJk9iamVjdChjLmEpKGIseS5jdXJyZW50LmtleSl8fCh5LmN1cnJlbnQ9e2tleTpiLHZhbHVlOnYoKX0pLHkuY3VycmVudC52YWx1ZSksTz1uP2dbMV06ZztyZXR1cm4gT2JqZWN0KHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZC5jbGVhbnVwKCl9fSksW10pLE9iamVjdChyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuYWZ0ZXJFeGVjdXRlKHtsYXp5Om59KX0pLFtPLmxvYWRpbmcsTy5uZXR3b3JrU3RhdHVzLE8uZXJyb3IsTy5kYXRhXSksZ31mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIHYoZSx0LCEwKX12YXIgeT1uKDQ2OCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPXQub3B0aW9ucyxyPXQuY29udGV4dCxvPXQucmVzdWx0LGk9dC5zZXRSZXN1bHQsYT1lLmNhbGwodGhpcyxuLHIpfHx0aGlzO3JldHVybiBhLnJ1bk11dGF0aW9uPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSxhLm9uTXV0YXRpb25TdGFydCgpO3ZhciB0PWEuZ2VuZXJhdGVOZXdNdXRhdGlvbklkKCk7cmV0dXJuIGEubXV0YXRlKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBhLm9uTXV0YXRpb25Db21wbGV0ZWQoZSx0KSxlfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgbj1hLmdldE9wdGlvbnMoKS5vbkVycm9yO2lmKGEub25NdXRhdGlvbkVycm9yKGUsdCksbilyZXR1cm4gbihlKSx7ZGF0YTp2b2lkIDAsZXJyb3JzOmV9O3Rocm93IGV9KSl9LGEudmVyaWZ5RG9jdW1lbnRUeXBlKG4ubXV0YXRpb24saC5hLk11dGF0aW9uKSxhLnJlc3VsdD1vLGEuc2V0UmVzdWx0PWksYS5tb3N0UmVjZW50TXV0YXRpb25JZD0wLGF9cmV0dXJuIE9iamVjdCh1LmMpKHQsZSksdC5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc01vdW50ZWQ9ITAsdGhpcy52ZXJpZnlEb2N1bWVudFR5cGUodGhpcy5nZXRPcHRpb25zKCkubXV0YXRpb24saC5hLk11dGF0aW9uKSxbdGhpcy5ydW5NdXRhdGlvbixPYmplY3QodS5hKShPYmplY3QodS5hKSh7fSxlKSx7Y2xpZW50OnRoaXMucmVmcmVzaENsaWVudCgpLmNsaWVudH0pXX0sdC5wcm90b3R5cGUuYWZ0ZXJFeGVjdXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNNb3VudGVkPSEwLHRoaXMudW5tb3VudC5iaW5kKHRoaXMpfSx0LnByb3RvdHlwZS5jbGVhbnVwPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5tdXRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVmcmVzaENsaWVudCgpLmNsaWVudC5tdXRhdGUoT2JqZWN0KHkuYikodGhpcy5nZXRPcHRpb25zKCksZSkpfSx0LnByb3RvdHlwZS5vbk11dGF0aW9uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdC5sb2FkaW5nfHx0aGlzLmdldE9wdGlvbnMoKS5pZ25vcmVSZXN1bHRzfHx0aGlzLnVwZGF0ZVJlc3VsdCh7bG9hZGluZzohMCxlcnJvcjp2b2lkIDAsZGF0YTp2b2lkIDAsY2FsbGVkOiEwfSl9LHQucHJvdG90eXBlLm9uTXV0YXRpb25Db21wbGV0ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldE9wdGlvbnMoKSxyPW4ub25Db21wbGV0ZWQsbz1uLmlnbm9yZVJlc3VsdHMsaT1lLmRhdGEsYT1lLmVycm9ycyxzPWEmJmEubGVuZ3RoPjA/bmV3IGwuYSh7Z3JhcGhRTEVycm9yczphfSk6dm9pZCAwO3RoaXMuaXNNb3N0UmVjZW50TXV0YXRpb24odCkmJiFvJiZ0aGlzLnVwZGF0ZVJlc3VsdCh7Y2FsbGVkOiEwLGxvYWRpbmc6ITEsZGF0YTppLGVycm9yOnN9KSxyJiZyKGkpfSx0LnByb3RvdHlwZS5vbk11dGF0aW9uRXJyb3I9ZnVuY3Rpb24oZSx0KXt0aGlzLmlzTW9zdFJlY2VudE11dGF0aW9uKHQpJiZ0aGlzLnVwZGF0ZVJlc3VsdCh7bG9hZGluZzohMSxlcnJvcjplLGRhdGE6dm9pZCAwLGNhbGxlZDohMH0pfSx0LnByb3RvdHlwZS5nZW5lcmF0ZU5ld011dGF0aW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubW9zdFJlY2VudE11dGF0aW9uSWR9LHQucHJvdG90eXBlLmlzTW9zdFJlY2VudE11dGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1vc3RSZWNlbnRNdXRhdGlvbklkPT09ZX0sdC5wcm90b3R5cGUudXBkYXRlUmVzdWx0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNNb3VudGVkJiYoIXRoaXMucHJldmlvdXNSZXN1bHR8fCFPYmplY3QoYy5hKSh0aGlzLnByZXZpb3VzUmVzdWx0LGUpKSlyZXR1cm4gdGhpcy5zZXRSZXN1bHQoZSksdGhpcy5wcmV2aW91c1Jlc3VsdD1lLGV9LHR9KGQpO2Z1bmN0aW9uIGcoZSx0KXt2YXIgbj1PYmplY3Qoci51c2VDb250ZXh0KShPYmplY3QoYS5hKSgpKSxvPU9iamVjdChyLnVzZVN0YXRlKSh7Y2FsbGVkOiExLGxvYWRpbmc6ITF9KSxpPW9bMF0scz1vWzFdLGM9dD9PYmplY3QodS5hKShPYmplY3QodS5hKSh7fSx0KSx7bXV0YXRpb246ZX0pOnttdXRhdGlvbjplfSxsPU9iamVjdChyLnVzZVJlZikoKTt2YXIgZj0obC5jdXJyZW50fHwobC5jdXJyZW50PW5ldyBtKHtvcHRpb25zOmMsY29udGV4dDpuLHJlc3VsdDppLHNldFJlc3VsdDpzfSkpLGwuY3VycmVudCk7cmV0dXJuIGYuc2V0T3B0aW9ucyhjKSxmLmNvbnRleHQ9bixPYmplY3Qoci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBmLmFmdGVyRXhlY3V0ZSgpfSkpLGYuZXhlY3V0ZShpKX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIHYoZSx0LCExKX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSl9LDYxNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTtsZXQgcj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdztmdW5jdGlvbiBvKCl7cmV0dXJuIHImJndpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz9NYXRoLmZsb29yKHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS8xZTMpOm51bGx9fSw2MTc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmE9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfX0sNjE4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMjUpLG89bigyMzcpLGk9bigzMzApLGE9bigxMTUpO3QuYT1mdW5jdGlvbihlLHQsbil7aWYoIU9iamVjdChhLmEpKG4pKXJldHVybiExO3ZhciBzPXR5cGVvZiB0O3JldHVybiEhKCJudW1iZXIiPT1zP09iamVjdChvLmEpKG4pJiZPYmplY3QoaS5hKSh0LG4ubGVuZ3RoKToic3RyaW5nIj09cyYmdCBpbiBuKSYmT2JqZWN0KHIuYSkoblt0XSxlKX19LDYxOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX0sbz1uKDMxMiksaT1uKDMzMSksYT1vLmE/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0KG8uYSkoZSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKHQpLHdyaXRhYmxlOiEwfSl9OmkuYSxzPTgwMCx1PTE2LGM9RGF0ZS5ub3c7dmFyIGw9ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9YygpLG89dS0oci1uKTtpZihuPXIsbz4wKXtpZigrK3Q+PXMpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19KGEpO3QuYT1sfSw2MjA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGUuY2FsbCh0KTtjYXNlIDE6cmV0dXJuIGUuY2FsbCh0LG5bMF0pO2Nhc2UgMjpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gZS5hcHBseSh0LG4pfSxvPU1hdGgubWF4O3QuYT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9byh2b2lkIDA9PT10P2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMsYT0tMSxzPW8oaS5sZW5ndGgtdCwwKSx1PUFycmF5KHMpOysrYTxzOyl1W2FdPWlbdCthXTthPS0xO2Zvcih2YXIgYz1BcnJheSh0KzEpOysrYTx0OyljW2FdPWlbYV07cmV0dXJuIGNbdF09bih1KSxyKGUsdGhpcyxjKX19fSw2MjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE4OSksbz1uKDM5NSksaT1uKDE2NiksYT0iW29iamVjdCBPYmplY3RdIixzPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsYz1zLnRvU3RyaW5nLGw9dS5oYXNPd25Qcm9wZXJ0eSxmPWMuY2FsbChPYmplY3QpO3QuYT1mdW5jdGlvbihlKXtpZighT2JqZWN0KGkuYSkoZSl8fE9iamVjdChyLmEpKGUpIT1hKXJldHVybiExO3ZhciB0PU9iamVjdChvLmEpKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPWwuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmYy5jYWxsKG4pPT1mfX0sNjIzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5hPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSw2MjY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwOCk7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByLmF9KSl9LDYyNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYT1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdH19LDYyODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKTt2YXIgcj1PYmplY3QuZnJlZXplKHtRVUVSWToiUVVFUlkiLE1VVEFUSU9OOiJNVVRBVElPTiIsU1VCU0NSSVBUSU9OOiJTVUJTQ1JJUFRJT04iLEZJRUxEOiJGSUVMRCIsRlJBR01FTlRfREVGSU5JVElPTjoiRlJBR01FTlRfREVGSU5JVElPTiIsRlJBR01FTlRfU1BSRUFEOiJGUkFHTUVOVF9TUFJFQUQiLElOTElORV9GUkFHTUVOVDoiSU5MSU5FX0ZSQUdNRU5UIixWQVJJQUJMRV9ERUZJTklUSU9OOiJWQVJJQUJMRV9ERUZJTklUSU9OIixTQ0hFTUE6IlNDSEVNQSIsU0NBTEFSOiJTQ0FMQVIiLE9CSkVDVDoiT0JKRUNUIixGSUVMRF9ERUZJTklUSU9OOiJGSUVMRF9ERUZJTklUSU9OIixBUkdVTUVOVF9ERUZJTklUSU9OOiJBUkdVTUVOVF9ERUZJTklUSU9OIixJTlRFUkZBQ0U6IklOVEVSRkFDRSIsVU5JT046IlVOSU9OIixFTlVNOiJFTlVNIixFTlVNX1ZBTFVFOiJFTlVNX1ZBTFVFIixJTlBVVF9PQkpFQ1Q6IklOUFVUX09CSkVDVCIsSU5QVVRfRklFTERfREVGSU5JVElPTjoiSU5QVVRfRklFTERfREVGSU5JVElPTiJ9KX0sNjI5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oMTkpLG89ZnVuY3Rpb24oZSl7aWYoIWUmJiJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gpdGhyb3cgbmV3IHIuYSgyMil9fSw2MzA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5TeW1ib2w7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4paWYobi5vYnNlcnZhYmxlKXQ9bi5vYnNlcnZhYmxlO2Vsc2V7dD0iZnVuY3Rpb24iPT10eXBlb2Ygbi5mb3I/bi5mb3IoImh0dHBzOi8vZ2l0aHViLmNvbS9iZW5sZXNoL3N5bWJvbC1vYnNlcnZhYmxlIik6bigiaHR0cHM6Ly9naXRodWIuY29tL2Jlbmxlc2gvc3ltYm9sLW9ic2VydmFibGUiKTt0cnl7bi5vYnNlcnZhYmxlPXR9Y2F0Y2goZSl7fX1lbHNlIHQ9IkBAb2JzZXJ2YWJsZSI7cmV0dXJuIHR9bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpfSw2MzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0fHwodD17fSksImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PXtjbXA6dH0pO3ZhciBuLHI9ImJvb2xlYW4iPT10eXBlb2YgdC5jeWNsZXMmJnQuY3ljbGVzLG89dC5jbXAmJihuPXQuY21wLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBvPXtrZXk6dCx2YWx1ZTplW3RdfSxpPXtrZXk6cix2YWx1ZTplW3JdfTtyZXR1cm4gbihvLGkpfX0pLGk9W107cmV0dXJuIGZ1bmN0aW9uIGUodCl7aWYodCYmdC50b0pTT04mJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvSlNPTiYmKHQ9dC50b0pTT04oKSksdm9pZCAwIT09dCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBpc0Zpbml0ZSh0KT8iIit0OiJudWxsIjtpZigib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO3ZhciBuLGE7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKGE9IlsiLG49MDtuPHQubGVuZ3RoO24rKyluJiYoYSs9IiwiKSxhKz1lKHRbbl0pfHwibnVsbCI7cmV0dXJuIGErIl0ifWlmKG51bGw9PT10KXJldHVybiJudWxsIjtpZigtMSE9PWkuaW5kZXhPZih0KSl7aWYocilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoIl9fY3ljbGVfXyIpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04iKX12YXIgcz1pLnB1c2godCktMSx1PU9iamVjdC5rZXlzKHQpLnNvcnQobyYmbyh0KSk7Zm9yKGE9IiIsbj0wO248dS5sZW5ndGg7bisrKXt2YXIgYz11W25dLGw9ZSh0W2NdKTtsJiYoYSYmKGErPSIsIiksYSs9SlNPTi5zdHJpbmdpZnkoYykrIjoiK2wpfXJldHVybiBpLnNwbGljZShzLDEpLCJ7IithKyJ9In19KGUpfX0sNjMyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpO3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRDb250ZXh0KCkudXJpO3JldHVybiBufHwoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChlKTp0fHwiL2dyYXBocWwiKX19LDYzMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKTt2YXIgcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgQWJvcnRDb250cm9sbGVyKXJldHVybntjb250cm9sbGVyOiExLHNpZ25hbDohMX07dmFyIGU9bmV3IEFib3J0Q29udHJvbGxlcjtyZXR1cm57Y29udHJvbGxlcjplLHNpZ25hbDplLnNpZ25hbH19fSw2MzQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9big0NzgpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHIpe3ZhciBuPXI7dGhyb3cgbi5uYW1lPSJTZXJ2ZXJQYXJzZUVycm9yIixuLnJlc3BvbnNlPXQsbi5zdGF0dXNDb2RlPXQuc3RhdHVzLG4uYm9keVRleHQ9ZSxufX0pKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gdC5zdGF0dXM+PTMwMCYmT2JqZWN0KHIuYSkodCxuLCJSZXNwb25zZSBub3Qgc3VjY2Vzc2Z1bDogUmVjZWl2ZWQgc3RhdHVzIGNvZGUgIit0LnN0YXR1cyksQXJyYXkuaXNBcnJheShuKXx8by5jYWxsKG4sImRhdGEiKXx8by5jYWxsKG4sImVycm9ycyIpfHxPYmplY3Qoci5hKSh0LG4sIlNlcnZlciByZXNwb25zZSB3YXMgbWlzc2luZyBmb3IgcXVlcnkgJyIrKEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9wZXJhdGlvbk5hbWV9KSk6ZS5vcGVyYXRpb25OYW1lKSsiJy4iKSxufSkpfX19LDYzNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTt2YXIgcj1uKDIzNSk7ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiB0KHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIuYX0pfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZ0KFN5bWJvbC5zcGVjaWVzKSx0KCJAQHNwZWNpZXMiKSxlfX0sNjM5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrTWFwJiYhKCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiYiUmVhY3ROYXRpdmUiPT09bmF2aWdhdG9yLnByb2R1Y3QpfSw2NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTt2YXIgcj1uKDQ1KTtmdW5jdGlvbiBvKCl7dmFyIGU7Y29uc3QgdD1udWxsPT09KGU9T2JqZWN0KHIuYikoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucGF0aG5hbWU7aWYodCl7bGV0IGU9dC5zcGxpdCgiLyIpLmZpbHRlcihlPT4hIWUpO3JldHVybiBlWzBdP2VbMF0udG9Mb3dlckNhc2UoKTpudWxsfXJldHVybiBudWxsfX0sNjQzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO3ZhciByPW4oNCk7Y29uc3Qgbz1uZXcgci5iKCgpPT5Qcm9taXNlLmFsbChbbi5lKDEpLG4uZSgyKSxuLmUoMyksbi5lKDQpLG4uZSg1KSxuLmUoNiksbi5lKDcpLG4uZSgxMCksbi5lKDEyKSxuLmUoMTQpLG4uZSgxNyksbi5lKDE2KSxuLmUoMjQpLG4uZSgyOCksbi5lKDI5KSxuLmUoMzApLG4uZSgzMSksbi5lKDMyKSxuLmUoMzQpLG4uZSgzNiksbi5lKDM1KSxuLmUoNDApLG4uZSg0MSksbi5lKDUzKSxuLmUoMzY3KV0pLnRoZW4obi5iaW5kKG51bGwsMTkzOSkpKSxpPW5ldyByLmEobyxlPT5lLmdldENhbGVuZGFyQm9vdHN0cmFwT3B0aW9ucyl9LDY0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxMiksbi5lKDE0KSxuLmUoMTcpLG4uZSgyNCksbi5lKDI4KSxuLmUoMzApLG4uZSgzNSksbi5lKDUzKSxuLmUoNTUpLG4uZSg5OSksbi5lKDExMCksbi5lKDExMyksbi5lKDEyNSksbi5lKDEzMiksbi5lKDE4Myksbi5lKDIzOCksbi5lKDM5MildKS50aGVuKG4uYmluZChudWxsLDE5NDEpKSksaT1uZXcgci5hKG8sZT0+ZS5nZXRDYWxlbmRhckRlZXBMaW5rQm9vdHN0cmFwT3B0aW9ucyl9LDY0NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxKSxuLmUoMiksbi5lKDMpLG4uZSg0KSxuLmUoMTIpLG4uZSgxNCksbi5lKDE3KSxuLmUoMTYpLG4uZSgyMCksbi5lKDI0KSxuLmUoMjgpLG4uZSgzMCksbi5lKDMzKSxuLmUoMzUpLG4uZSg0MSksbi5lKDUzKSxuLmUoNTUpLG4uZSg0Niksbi5lKDYxKSxuLmUoNjApLG4uZSg3Myksbi5lKDk0KSxuLmUoOTkpLG4uZSgxMTApLG4uZSg0MjgpXSkudGhlbihuLmJpbmQobnVsbCwxOTQwKSkpLGk9bmV3IHIuYShvLGU9PmUuZ2V0TWFpbERlZXBMaW5rQm9vdHN0cmFwT3B0aW9ucyl9LDY0NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9big0KTtjb25zdCBvPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDEyKSxuLmUoNTMpLG4uZSg1NSksbi5lKDY2KSxuLmUoMjA4KSxuLmUoNTU3KV0pLnRoZW4obi5iaW5kKG51bGwsMjExOCkpKSxpPW5ldyByLmMobyxlPT5lLmNvbXBvbmVudHMpLGE9bmV3IHIuYShvLGU9PmUudG9nZ2xlTWF4aW1pemUpfSw2NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImkiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZCh0LCJqIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKHQsImsiLChmdW5jdGlvbigpe3JldHVybiBsfSkpLG4uZCh0LCJoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZn0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBkfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKHQsImwiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJtIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuZCgoKT0+UHJvbWlzZS5hbGwoW24uZSgxNyksbi5lKDc2KSxuLmUoMzU3KSxuLmUoNTE4KV0pLnRoZW4obi5iaW5kKG51bGwsNDg0KSkpO2xldCBpPW5ldyByLmEobyxlPT5lLmluaXRpYWxpemVBbmFseXRpY3MpLGE9bmV3IHIuYShvLGU9PmUuZmx1c2gpLHM9bmV3IHIuYShvLGU9PmUubG9nRGF0YXBvaW50KSx1PW5ldyByLmEobyxlPT5lLmxvZ1BlcmZvcm1hbmNlRGF0YXBvaW50KSxjPW5ldyByLmEobyxlPT5lLmdldFJlc291cmNlVGltaW5nRm9yVXJsKSxsPW5ldyByLmEobyxlPT5lLmxvZ1NpZ3NEYXRhcG9pbnQpLGY9bmV3IHIuYShvLGU9PmUubG9nQ0xQQXJpYURhdGFQb2ludCk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gby5pbXBvcnQoKS50aGVuKHQ9PnQuZ2V0T1RlbEFkZGluc0xvZ2dlcihlKSl9ZnVuY3Rpb24gZCgpe3JldHVybiBvLmltcG9ydCgpLnRoZW4oZT0+ZS5nZXRBY3Rpb25hYmxlTWVzc2FnZUxvZ2dlcigpKX1sZXQgcD1uZXcgci5hKG8sZT0+ZS5sb2dBZGRpbnNDdXN0b21lckNvbnRlbnQpLHY9bmV3IHIuYShvLGU9PmUubG9nQWRkaW5zVGVsZW1ldHJ5RXZlbnQpLGI9bmV3IHIuYShvLGU9PmUubG9nVXNhZ2UpLHk9bmV3IHIuYShvLGU9PmUudHJhY2tOZXR3b3JrUmVzcG9uc2UpfSw2NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSk7dmFyIHI9bigxMyksbz1uKDE4MiksaT1uKDk4KSxhPW4oMikscz1uKDE4Myk7Y29uc3QgdT0iQXV0aG9yaXphdGlvbiIsYz0ieC1hbmNob3JtYWlsYm94IjtmdW5jdGlvbiBsKGUsdCxuKXtjb25zdCBsPU9iamVjdChpLmEpKCk7bFsiWC1SZXEtU291cmNlIl09T2JqZWN0KGEubSkoKTtjb25zdCBmPU9iamVjdChyLmEpKCk7Zi5pc0ZlYXR1cmVFbmFibGVkKCJmd2stdXNlSnNvbk5ldFNlcmlhbGl6ZXIiKSYmKGxbIlgtVXNlSnNvbk5ldFNlcmlhbGl6ZXIiXT0iMSIpO2xldCBoPVByb21pc2UucmVzb2x2ZShsKSxkPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLHA9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIWUmJmYuZ2V0QXV0aFRva2VuJiYoZD1mLmdldEF1dGhUb2tlbih2b2lkIDAsdCkpLCFuJiZmLmdldEFuY2hvck1haWxib3gmJihwPWYuZ2V0QW5jaG9yTWFpbGJveCh0KSksaD1Qcm9taXNlLmFsbChbZCxwXSkudGhlbigoW2UsdF0pPT4oZSYmKGxbdV09ZSksdCYmKGxbY109dCksbCkpLE9iamVjdChvLmEpKGwpLE9iamVjdChzLmEpKGwpLGguYmVzdEVmZm9ydD1sLGh9fSw2NjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMpO2NvbnN0IG89T2JqZWN0KHIuYWN0aW9uKSgib25WaWV3TW9kZUNoYW5nZWQiLGU9Pih7dmlld01vZGU6ZX0pKTt2YXIgaT1uKDIzMCksYT1uKDc0KSxzPW4oMTEpLHU9big0Nyk7Y29uc3QgYz0iYm9vdHN0cmFwUmliYm9uSW1wb3J0IjtmdW5jdGlvbiBsKCl7Y29uc3QgZT1PYmplY3QoaS5iKSgpLnZpZXdNb2RlOzI9PT1lfHwxPT09ZXx8MD09PWUmJk9iamVjdCh1LmspKCJtb24tcmliYm9uLXRvb2xiYXIiKT9PYmplY3Qocy5lKSh3aW5kb3csYywidHJ1ZSIpOk9iamVjdChzLmQpKHdpbmRvdyxjKX1jb25zdCBmPU9iamVjdChyLm11dGF0b3JBY3Rpb24pKCJvblZpZXdNb2RlQ2hhbmdlZEludGVybmFsIixlPT57T2JqZWN0KGEucCkoIlZpZXdNb2RlQ2hhbmdlZCIse2Zyb206T2JqZWN0KGkuYikoKS52aWV3TW9kZSx0bzplfSksT2JqZWN0KGkuYikoKS52aWV3TW9kZT1lLGwoKX0pO3ZhciBoPW4oNTM5KTtPYmplY3Qoci5vcmNoZXN0cmF0b3IpKG8sYXN5bmMgZT0+e2NvbnN0e3ZpZXdNb2RlOnR9PWU7cmV0dXJuIGYodCksT2JqZWN0KGguYikodCl9KTt2YXIgZD1uKDI0MikscD1uKDE1Myk7Y29uc3Qgdj1PYmplY3Qoci5tdXRhdG9yQWN0aW9uKSgiaW5pdGlhbGl6ZUNvbW1hbmRpbmdWaWV3TW9kZSIsZT0+e2xldCB0PU9iamVjdCh1LmspKCJtb24tcmliYm9uIik/KGU9Pnt2YXIgdDtsZXQgbj1udWxsPT09KHQ9ZS5maWx0ZXIoZT0+KG51bGw9PWU/dm9pZCAwOmUuZmVhdHVyZSk9PWQuZC5Db21tYW5kaW5nKVswXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQudmlld01vZGU7aWYoW3ZvaWQgMCwwLDEsMl0uaW5jbHVkZXMobikpcmV0dXJuIG59KShlKTowO3ZvaWQgMD09PXQmJih0PU9iamVjdChwLmEpKCJyaWJib25EZWZhdWx0VG9TTFIiKT8xOjAsT2JqZWN0KHAuYSkoInJpYmJvblBlcnNpc3REZWZhdWx0IikmJk9iamVjdChoLmIpKHQpKSxPYmplY3QoaS5iKSgpLnZpZXdNb2RlPXQsbCgpfSksYj0oKT0+e2NvbnN0IGU9aS5hLnZpZXdNb2RlO3JldHVybiAyPT09ZXx8MT09PWV8fDA9PT1lJiZPYmplY3QodS5rKSgibW9uLXJpYmJvbi10b29sYmFyIil9O3ZhciB5PW4oNzcxKTtuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiB2fSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHkuYX0pKX0sNjk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtmdW5jdGlvbiBvKGUpe3JldHVybiEhZSYmZTw3fW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksZnVuY3Rpb24oZSl7ZVtlLmxvYWRpbmc9MV09ImxvYWRpbmciLGVbZS5zZXRWYXJpYWJsZXM9Ml09InNldFZhcmlhYmxlcyIsZVtlLmZldGNoTW9yZT0zXT0iZmV0Y2hNb3JlIixlW2UucmVmZXRjaD00XT0icmVmZXRjaCIsZVtlLnBvbGw9Nl09InBvbGwiLGVbZS5yZWFkeT03XT0icmVhZHkiLGVbZS5lcnJvcj04XT0iZXJyb3IifShyfHwocj17fSkpfSw3MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMyksbz1uKDE2KTtjb25zdCBpPXt1c2VyQ29uZmlndXJhdGlvbjp7fSxjb25uZWN0ZWRBY2NvdW50c1VzZXJDb25maWd1cmF0aW9uTWFwOm5ldyBvLk9ic2VydmFibGVNYXAoe30pLGRlZmF1bHRGb2xkZXJOYW1lVG9JZE1hcDpuZXcgby5PYnNlcnZhYmxlTWFwKHt9KSxkZWZhdWx0Rm9sZGVySWRUb05hbWVNYXA6bmV3IG8uT2JzZXJ2YWJsZU1hcCh7fSl9LGE9ci5jcmVhdGVTdG9yZSgib3dhU2Vzc2lvblN0b3JlIixpKSgpO3QuYT1hfSw3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKTt2YXIgcj1uKDM1KSxvPW4oMjIpO2NvbnN0IGk9WyJYLUJFU2VydmVyIiwiWC1GRVNlcnZlciIsIlgtTVNFZGdlLVJlZiJdLGE9WzQwMyw0MDQsNTAzXTtmdW5jdGlvbiBzKGUpe2xldCB0PSIiO2lmKGUuc3RhdHVzKXtpZih0Kz1lLnN0YXR1cyxhLmluZGV4T2YoZS5zdGF0dXMpPi0xKXt0Kz0ifCI7Zm9yKGxldCBuPTA7bjxpLmxlbmd0aDtuKyspe2NvbnN0IG89aVtuXTtpZihPYmplY3Qoci5hKShlLG8pKXt0Kz1vO2JyZWFrfX19fWVsc2UgZS5uZXR3b3JrRXJyb3I/dD0iTmV0d29ya1Jlc3BvbnNlRXJyb3IiOih0PSJVbmtub3duUmVzcG9uc2VFcnJvciIsT2JqZWN0KG8uYSkoImJyZXMiLE9iamVjdC5rZXlzKGUpLmpvaW4oInwiKSkpO3JldHVybiBuPW5ldyBFcnJvcih0KSxzPWUsbi5yZXNwb25zZT1zLG4uc3RhdHVzPXMuc3RhdHVzLG47dmFyIG4sc319LDcyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBzfSkpO3ZhciByPW4oMzUpLG89bigyKSxpPW4oMjIpO2NvbnN0IGE9WyJYLU9XQS1FcnJvciIsIlgtQXV0aC1FcnJvciIsIlgtUmVkaXItRXJyb3IiLCJYLUpJVC1FcnJvciJdO2Z1bmN0aW9uIHMoZSl7bGV0IHQ9e2VycjoiVW5rbm93biIsZXNyYzoiUnVudGltZSJ9O2lmKGUpe3QuZXQ9ZS51cmw/IlNlcnZlckVycm9yIjoiQ2xpZW50RXJyb3IiLGUuc291cmNlJiYodC5lc3JjPWUuc291cmNlKSwoZS5uYW1lfHxlLm1lc3NhZ2UpJiYodC5lcnI9YCR7ZS5uYW1lfTogJHtlLm1lc3NhZ2V9YCk7Y29uc3Qgbj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlO3QuZXN0YWNrPU9iamVjdChyLmEpKG4sIlgtSW5uZXJFeGNlcHRpb24iKXx8ZS5zdGFjayx0LnN0PShudWxsPT1uP3ZvaWQgMDpuLnN0YXR1cyl8fChudWxsPT1lP3ZvaWQgMDplLnN0YXR1cyk7Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKyspe2xldCBpPWFbZV0scz1PYmplY3Qoci5hKShuLGkpO2lmKHMpe3QuZWhrPWksdC5lcnI9T2JqZWN0KG8uVCkocyk7YnJlYWt9fWNvbnN0IHM9T2JqZWN0KHIuYSkobiwieC1tcy1kaWFnbm9zdGljcyIpO3MmJk9iamVjdChpLmEpKCJ4LW1zLWRpYWdub3N0aWNzIixzKSx0LmVmZT1PYmplY3Qoci5hKShuLCJYLUZFU2VydmVyIiksdC5lYmU9T2JqZWN0KHIuYSkobiwiWC1CRVNlcnZlciIpLHQuZXdzdmVyPU9iamVjdChyLmEpKG4sIlgtT1dBLVZlcnNpb24iKSx0LnJlcWlkPU9iamVjdChyLmEpKG4sInJlc3BvbnNlLWlkIiksdC5lbXNnPU9iamVjdChyLmEpKG4sIlgtT1dBRXJyb3JNZXNzYWdlSUQiKSx0LmVzdGFjayYmKHQuZXN0YWNrLmxlbmd0aD4xMDI0JiYodC5lc3RhY2s9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0xO2U8dC5sZW5ndGg7ZSsrKWlmKHRbMF0hPXRbZV0pcmV0dXJuIHQuc2xpY2UoZS0xKS5qb2luKCJcbiIpO3JldHVybiBlfSh0LmVzdGFjaykpLHQuZXN0YWNrLmxlbmd0aD4xMDI0JiYodC5lc3RhY2s9dC5lc3RhY2suc3Vic3RyaW5nKDAsMTAyNCkpKX1yZXR1cm4gdH19LDczOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiB1fSkpO3ZhciByPU9iamVjdC5wcm90b3R5cGUsbz1yLnRvU3RyaW5nLGk9ci5oYXNPd25Qcm9wZXJ0eSxhPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxzPW5ldyBNYXA7ZnVuY3Rpb24gdShlLHQpe3RyeXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe2lmKHQ9PT1uKXJldHVybiEwO3ZhciByPW8uY2FsbCh0KSxzPW8uY2FsbChuKTtpZihyIT09cylyZXR1cm4hMTtzd2l0Y2gocil7Y2FzZSJbb2JqZWN0IEFycmF5XSI6aWYodC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtjYXNlIltvYmplY3QgT2JqZWN0XSI6aWYoaCh0LG4pKXJldHVybiEwO3ZhciB1PWModCksbD1jKG4pLGQ9dS5sZW5ndGg7aWYoZCE9PWwubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcD0wO3A8ZDsrK3ApaWYoIWkuY2FsbChuLHVbcF0pKXJldHVybiExO2ZvcihwPTA7cDxkOysrcCl7dmFyIHY9dVtwXTtpZighZSh0W3ZdLG5bdl0pKXJldHVybiExfXJldHVybiEwO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PT1uLm5hbWUmJnQubWVzc2FnZT09PW4ubWVzc2FnZTtjYXNlIltvYmplY3QgTnVtYmVyXSI6aWYodCE9dClyZXR1cm4gbiE9bjtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuK3Q9PStuO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PSIiK247Y2FzZSJbb2JqZWN0IE1hcF0iOmNhc2UiW29iamVjdCBTZXRdIjppZih0LnNpemUhPT1uLnNpemUpcmV0dXJuITE7aWYoaCh0LG4pKXJldHVybiEwO2Zvcih2YXIgYj10LmVudHJpZXMoKSx5PSJbb2JqZWN0IE1hcF0iPT09cjs7KXt2YXIgbT1iLm5leHQoKTtpZihtLmRvbmUpYnJlYWs7dmFyIGc9bS52YWx1ZSxPPWdbMF0sdz1nWzFdO2lmKCFuLmhhcyhPKSlyZXR1cm4hMTtpZih5JiYhZSh3LG4uZ2V0KE8pKSlyZXR1cm4hMX1yZXR1cm4hMDtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6dD1uZXcgVWludDhBcnJheSh0KSxuPW5ldyBVaW50OEFycmF5KG4pO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnZhciBqPXQuYnl0ZUxlbmd0aDtpZihqPT09bi5ieXRlTGVuZ3RoKWZvcig7ai0tJiZ0W2pdPT09bltqXTspO3JldHVybi0xPT09ajtjYXNlIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iOmNhc2UiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iOmNhc2UiW29iamVjdCBBc3luY0dlbmVyYXRvckZ1bmN0aW9uXSI6Y2FzZSJbb2JqZWN0IEZ1bmN0aW9uXSI6dmFyIEU9YS5jYWxsKHQpO3JldHVybiBFPT09YS5jYWxsKG4pJiYoQT1mLCEoKGs9KFM9RSkubGVuZ3RoLUEubGVuZ3RoKT49MCYmUy5pbmRleE9mKEEsayk9PT1rKSl9dmFyIFMsQSxrO3JldHVybiExfShlLHQpfWZpbmFsbHl7cy5jbGVhcigpfX1mdW5jdGlvbiBjKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIobCxlKX1mdW5jdGlvbiBsKGUpe3JldHVybiB2b2lkIDAhPT10aGlzW2VdfXZhciBmPSJ7IFtuYXRpdmUgY29kZV0gfSI7ZnVuY3Rpb24gaChlLHQpe3ZhciBuPXMuZ2V0KGUpO2lmKG4pe2lmKG4uaGFzKHQpKXJldHVybiEwfWVsc2Ugcy5zZXQoZSxuPW5ldyBTZXQpO3JldHVybiBuLmFkZCh0KSwhMX19LDc0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NSksbz1uKDM5NCksaT1uKDI0Myk7Y2xhc3MgYSBleHRlbmRzIGkuYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtpc1ZlcmJvc2U6ITB9KSl9fXZhciBzPW4oMzk3KSx1PW4oMTAwKTtmdW5jdGlvbiBjKGUsdCxuKXtsZXQgcj1uZXcgYShlLG4pO3QmJnIuYWRkQ3VzdG9tRGF0YSh0KSxyLmVuZCgpfXZhciBsPW4oNTg1KSxmPW4oNTk3KTtuLmQodCwiaiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZX0pKSxuLmQodCwiaSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZH0pKSxuLmQodCwibyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIua30pKSxuLmQodCwibSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuaH0pKSxuLmQodCwibiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuaX0pKSxuLmQodCwiaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuY30pKSxuLmQodCwiZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYn0pKSxuLmQodCwiayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZn0pKSxuLmQodCwibCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZ30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiBzLmF9KSksbi5kKHQsInIiLChmdW5jdGlvbigpe3JldHVybiBzLmR9KSksbi5kKHQsInMiLChmdW5jdGlvbigpe3JldHVybiBzLmV9KSksbi5kKHQsInAiLChmdW5jdGlvbigpe3JldHVybiB1LmF9KSksbi5kKHQsInEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSkpLG4uZCh0LCJmIiwoZnVuY3Rpb24oKXtyZXR1cm4gZi5hfSkpfSw3NDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBhfSkpO3ZhciByLG89bigzKTshZnVuY3Rpb24oZSl7ZVtlLk9wdGlvbnNOb3RMb2FkZWQ9MF09Ik9wdGlvbnNOb3RMb2FkZWQiLGVbZS5PcHRpb25zTG9hZGluZz0xXT0iT3B0aW9uc0xvYWRpbmciLGVbZS5PcHRpb25zTG9hZGVkPTJdPSJPcHRpb25zTG9hZGVkIn0ocnx8KHI9e30pKTtjb25zdCBpPXtsb2FkU3RhdGU6ci5PcHRpb25zTm90TG9hZGVkfSxhPU9iamVjdChvLmNyZWF0ZVN0b3JlKSgib3dzT3B0aW9uc0xvYWRTdGF0ZVN0b3JlIixpKX0sNzQ5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBpfSkpO3ZhciByPW4oMyksbz1uKDUyMCk7Y29uc3QgaT1PYmplY3Qoci5hY3Rpb24pKCJBUFBMWV9ERUZBVUxUX09QVElPTlNfT05fTE9BRF9GQUlMIiwoZT1PYmplY3Qoby5hKSgpKT0+KHtkZWZhdWx0T3B0aW9uczplfSkpfSw3NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMyk7bGV0IG89e2ZlYXR1cmVGbGFnczpuZXcobigxNikuT2JzZXJ2YWJsZU1hcCl9O3QuYT1PYmplY3Qoci5jcmVhdGVTdG9yZSkoImZlYXR1cmVGbGFncyIsbyl9LDc2NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMCksbz1uKDI2MCksaT1uKDI3KSxhPW4oNDkyKTtmdW5jdGlvbiBzKGUsdCxuLHMpe3JldHVybiBPYmplY3QoaS5kKShlLGU9Pntjb25zdCBuPXQoZSk7cmV0dXJuIGU9PnIuY3JlYXRlRWxlbWVudChvLkFwb2xsb1Byb3ZpZGVyLHtjbGllbnQ6T2JqZWN0KGEuYSkoKX0sci5jcmVhdGVFbGVtZW50KG4sT2JqZWN0LmFzc2lnbih7fSxlKSkpfSxuLHMpfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX0sNzcxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpO3ZhciByPW4oMjMwKTtjb25zdCBvPWU9PnIuYS52aWV3TW9kZT09PWV9LDc4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9big0NzcpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnN0YXJ0PWUuc3RhcnQsdGhpcy5lbmQ9dC5lbmQsdGhpcy5zdGFydFRva2VuPWUsdGhpcy5lbmRUb2tlbj10LHRoaXMuc291cmNlPW59cmV0dXJuIGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH19LGV9KCk7T2JqZWN0KHIuYSkobyk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsbyxpLGEpe3RoaXMua2luZD1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1uLHRoaXMubGluZT1yLHRoaXMuY29sdW1uPW8sdGhpcy52YWx1ZT1hLHRoaXMucHJldj1pLHRoaXMubmV4dD1udWxsfXJldHVybiBlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57a2luZDp0aGlzLmtpbmQsdmFsdWU6dGhpcy52YWx1ZSxsaW5lOnRoaXMubGluZSxjb2x1bW46dGhpcy5jb2x1bW59fSxlfSgpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIG51bGwhPWUmJiJzdHJpbmciPT10eXBlb2YgZS5raW5kfU9iamVjdChyLmEpKGkpfSw3ODg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSk7dmFyIHI9big0NzMpLG89big0MTIpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIE9iamVjdChyLmMpKGUse2xlYXZlOmF9KX12YXIgYT17TmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sVmFyaWFibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIiQiK2UubmFtZX0sRG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZS5kZWZpbml0aW9ucywiXG5cbiIpKyJcbiJ9LE9wZXJhdGlvbkRlZmluaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcGVyYXRpb24sbj1lLm5hbWUscj1sKCIoIix1KGUudmFyaWFibGVEZWZpbml0aW9ucywiLCAiKSwiKSIpLG89dShlLmRpcmVjdGl2ZXMsIiAiKSxpPWUuc2VsZWN0aW9uU2V0O3JldHVybiBufHxvfHxyfHwicXVlcnkiIT09dD91KFt0LHUoW24scl0pLG8saV0sIiAiKTppfSxWYXJpYWJsZURlZmluaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YXJpYWJsZSxuPWUudHlwZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kaXJlY3RpdmVzO3JldHVybiB0KyI6ICIrbitsKCIgPSAiLHIpK2woIiAiLHUobywiICIpKX0sU2VsZWN0aW9uU2V0OmZ1bmN0aW9uKGUpe3JldHVybiBjKGUuc2VsZWN0aW9ucyl9LEZpZWxkOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWxpYXMsbj1lLm5hbWUscj1lLmFyZ3VtZW50cyxvPWUuZGlyZWN0aXZlcyxpPWUuc2VsZWN0aW9uU2V0LGE9bCgiIix0LCI6ICIpK24scz1hK2woIigiLHUociwiLCAiKSwiKSIpO3JldHVybiBzLmxlbmd0aD44MCYmKHM9YStsKCIoXG4iLGYodShyLCJcbiIpKSwiXG4pIikpLHUoW3MsdShvLCIgIiksaV0sIiAiKX0sQXJndW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSsiOiAiK2UudmFsdWV9LEZyYWdtZW50U3ByZWFkOmZ1bmN0aW9uKGUpe3JldHVybiIuLi4iK2UubmFtZStsKCIgIix1KGUuZGlyZWN0aXZlcywiICIpKX0sSW5saW5lRnJhZ21lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlQ29uZGl0aW9uLG49ZS5kaXJlY3RpdmVzLHI9ZS5zZWxlY3Rpb25TZXQ7cmV0dXJuIHUoWyIuLi4iLGwoIm9uICIsdCksdShuLCIgIikscl0sIiAiKX0sRnJhZ21lbnREZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUudHlwZUNvbmRpdGlvbixyPWUudmFyaWFibGVEZWZpbml0aW9ucyxvPWUuZGlyZWN0aXZlcyxpPWUuc2VsZWN0aW9uU2V0O3JldHVybigiZnJhZ21lbnQgIi5jb25jYXQodCkuY29uY2F0KGwoIigiLHUociwiLCAiKSwiKSIpLCIgIikrIm9uICIuY29uY2F0KG4sIiAiKS5jb25jYXQobCgiIix1KG8sIiAiKSwiICIpKStpKX0sSW50VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LEZsb2F0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9LFN0cmluZ1ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5ibG9jaz9PYmplY3Qoby5jKShuLCJkZXNjcmlwdGlvbiI9PT10PyIiOiIgICIpOkpTT04uc3RyaW5naWZ5KG4pfSxCb29sZWFuVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU/InRydWUiOiJmYWxzZSJ9LE51bGxWYWx1ZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sRW51bVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxMaXN0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIlsiK3UoZS52YWx1ZXMsIiwgIikrIl0ifSxPYmplY3RWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4ieyIrdShlLmZpZWxkcywiLCAiKSsifSJ9LE9iamVjdEZpZWxkOmZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUrIjogIitlLnZhbHVlfSxEaXJlY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIkAiK2UubmFtZStsKCIoIix1KGUuYXJndW1lbnRzLCIsICIpLCIpIil9LE5hbWVkVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lfSxMaXN0VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4iWyIrZS50eXBlKyJdIn0sTm9uTnVsbFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZSsiISJ9LFNjaGVtYURlZmluaXRpb246cygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXJlY3RpdmVzLG49ZS5vcGVyYXRpb25UeXBlcztyZXR1cm4gdShbInNjaGVtYSIsdSh0LCIgIiksYyhuKV0sIiAiKX0pKSxPcGVyYXRpb25UeXBlRGVmaW5pdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5vcGVyYXRpb24rIjogIitlLnR5cGV9LFNjYWxhclR5cGVEZWZpbml0aW9uOnMoKGZ1bmN0aW9uKGUpe3JldHVybiB1KFsic2NhbGFyIixlLm5hbWUsdShlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKX0pKSxPYmplY3RUeXBlRGVmaW5pdGlvbjpzKChmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmludGVyZmFjZXMscj1lLmRpcmVjdGl2ZXMsbz1lLmZpZWxkcztyZXR1cm4gdShbInR5cGUiLHQsbCgiaW1wbGVtZW50cyAiLHUobiwiICYgIikpLHUociwiICIpLGMobyldLCIgIil9KSksRmllbGREZWZpbml0aW9uOnMoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuYXJndW1lbnRzLHI9ZS50eXBlLG89ZS5kaXJlY3RpdmVzO3JldHVybiB0KyhkKG4pP2woIihcbiIsZih1KG4sIlxuIikpLCJcbikiKTpsKCIoIix1KG4sIiwgIiksIikiKSkrIjogIityK2woIiAiLHUobywiICIpKX0pKSxJbnB1dFZhbHVlRGVmaW5pdGlvbjpzKChmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLnR5cGUscj1lLmRlZmF1bHRWYWx1ZSxvPWUuZGlyZWN0aXZlcztyZXR1cm4gdShbdCsiOiAiK24sbCgiPSAiLHIpLHUobywiICIpXSwiICIpfSkpLEludGVyZmFjZVR5cGVEZWZpbml0aW9uOnMoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuaW50ZXJmYWNlcyxyPWUuZGlyZWN0aXZlcyxvPWUuZmllbGRzO3JldHVybiB1KFsiaW50ZXJmYWNlIix0LGwoImltcGxlbWVudHMgIix1KG4sIiAmICIpKSx1KHIsIiAiKSxjKG8pXSwiICIpfSkpLFVuaW9uVHlwZURlZmluaXRpb246cygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLHI9ZS50eXBlcztyZXR1cm4gdShbInVuaW9uIix0LHUobiwiICIpLHImJjAhPT1yLmxlbmd0aD8iPSAiK3UociwiIHwgIik6IiJdLCIgIil9KSksRW51bVR5cGVEZWZpbml0aW9uOnMoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxyPWUudmFsdWVzO3JldHVybiB1KFsiZW51bSIsdCx1KG4sIiAiKSxjKHIpXSwiICIpfSkpLEVudW1WYWx1ZURlZmluaXRpb246cygoZnVuY3Rpb24oZSl7cmV0dXJuIHUoW2UubmFtZSx1KGUuZGlyZWN0aXZlcywiICIpXSwiICIpfSkpLElucHV0T2JqZWN0VHlwZURlZmluaXRpb246cygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLHI9ZS5maWVsZHM7cmV0dXJuIHUoWyJpbnB1dCIsdCx1KG4sIiAiKSxjKHIpXSwiICIpfSkpLERpcmVjdGl2ZURlZmluaXRpb246cygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5hcmd1bWVudHMscj1lLnJlcGVhdGFibGUsbz1lLmxvY2F0aW9ucztyZXR1cm4iZGlyZWN0aXZlIEAiK3QrKGQobik/bCgiKFxuIixmKHUobiwiXG4iKSksIlxuKSIpOmwoIigiLHUobiwiLCAiKSwiKSIpKSsocj8iIHJlcGVhdGFibGUiOiIiKSsiIG9uICIrdShvLCIgfCAiKX0pKSxTY2hlbWFFeHRlbnNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXJlY3RpdmVzLG49ZS5vcGVyYXRpb25UeXBlcztyZXR1cm4gdShbImV4dGVuZCBzY2hlbWEiLHUodCwiICIpLGMobildLCIgIil9LFNjYWxhclR5cGVFeHRlbnNpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHUoWyJleHRlbmQgc2NhbGFyIixlLm5hbWUsdShlLmRpcmVjdGl2ZXMsIiAiKV0sIiAiKX0sT2JqZWN0VHlwZUV4dGVuc2lvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmludGVyZmFjZXMscj1lLmRpcmVjdGl2ZXMsbz1lLmZpZWxkcztyZXR1cm4gdShbImV4dGVuZCB0eXBlIix0LGwoImltcGxlbWVudHMgIix1KG4sIiAmICIpKSx1KHIsIiAiKSxjKG8pXSwiICIpfSxJbnRlcmZhY2VUeXBlRXh0ZW5zaW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuaW50ZXJmYWNlcyxyPWUuZGlyZWN0aXZlcyxvPWUuZmllbGRzO3JldHVybiB1KFsiZXh0ZW5kIGludGVyZmFjZSIsdCxsKCJpbXBsZW1lbnRzICIsdShuLCIgJiAiKSksdShyLCIgIiksYyhvKV0sIiAiKX0sVW5pb25UeXBlRXh0ZW5zaW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUuZGlyZWN0aXZlcyxyPWUudHlwZXM7cmV0dXJuIHUoWyJleHRlbmQgdW5pb24iLHQsdShuLCIgIiksciYmMCE9PXIubGVuZ3RoPyI9ICIrdShyLCIgfCAiKToiIl0sIiAiKX0sRW51bVR5cGVFeHRlbnNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLHI9ZS52YWx1ZXM7cmV0dXJuIHUoWyJleHRlbmQgZW51bSIsdCx1KG4sIiAiKSxjKHIpXSwiICIpfSxJbnB1dE9iamVjdFR5cGVFeHRlbnNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5kaXJlY3RpdmVzLHI9ZS5maWVsZHM7cmV0dXJuIHUoWyJleHRlbmQgaW5wdXQiLHQsdShuLCIgIiksYyhyKV0sIiAiKX19O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1KFt0LmRlc2NyaXB0aW9uLGUodCldLCJcbiIpfX1mdW5jdGlvbiB1KGUpe3ZhciB0LG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiO3JldHVybiBudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLmpvaW4obikpJiZ2b2lkIDAhPT10P3Q6IiJ9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbCgie1xuIixmKHUoZSwiXG4iKSksIlxufSIpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiI7cmV0dXJuIG51bGwhPXQmJiIiIT09dD9lK3QrbjoiIn1mdW5jdGlvbiBmKGUpe3JldHVybiBsKCIgICIsZS5yZXBsYWNlKC9cbi9nLCJcbiAgIikpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuLTEhPT1lLmluZGV4T2YoIlxuIil9ZnVuY3Rpb24gZChlKXtyZXR1cm4gbnVsbCE9ZSYmZS5zb21lKGgpfX0sNzk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDUpO3QuQVdUUGlpS2luZD1yLkFXVFBpaUtpbmQ7dmFyIG89bigyNzEpO3QuQVdUPW8uZGVmYXVsdCx0LkFXVF9DT0xMRUNUT1JfVVJMX1VOSVRFRF9TVEFURVM9Imh0dHBzOi8vdXMucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8iLHQuQVdUX0NPTExFQ1RPUl9VUkxfR0VSTUFOWT0iaHR0cHM6Ly9kZS5waXBlLmFyaWEubWljcm9zb2Z0LmNvbS9Db2xsZWN0b3IvMy4wLyIsdC5BV1RfQ09MTEVDVE9SX1VSTF9KQVBBTj0iaHR0cHM6Ly9qcC5waXBlLmFyaWEubWljcm9zb2Z0LmNvbS9Db2xsZWN0b3IvMy4wLyIsdC5BV1RfQ09MTEVDVE9SX1VSTF9BVVNUUkFMSUE9Imh0dHBzOi8vYXUucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8iLHQuQVdUX0NPTExFQ1RPUl9VUkxfRVVST1BFPSJodHRwczovL2V1LnBpcGUuYXJpYS5taWNyb3NvZnQuY29tL0NvbGxlY3Rvci8zLjAvIn0sODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJjIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImUiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImYiLChmdW5jdGlvbigpe3JldHVybiBjfSkpOwovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgpQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KdmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKGUsdCl9O2Z1bmN0aW9uIG8oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4oaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGEoZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiBzKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoZSl7dHJ5e3Uoci5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KHIudGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9dSgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbixyLG8saSxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBpPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBzKGkpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthOyl0cnl7aWYobj0xLHImJihvPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoaT1bMiZpWzBdLG8udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm89aTticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09aVswXXx8Mj09PWlbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighb3x8aVsxXT5vWzBdJiZpWzFdPG9bM10pKXthLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89aTticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGkpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1pPXQuY2FsbChlLGEpfWNhdGNoKGUpe2k9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLHNdKX19fWZ1bmN0aW9uIGMoKXtmb3IodmFyIGU9MCx0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgcj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PG47dCsrKWZvcih2YXIgaT1hcmd1bWVudHNbdF0sYT0wLHM9aS5sZW5ndGg7YTxzO2ErKyxvKyspcltvXT1pW2FdO3JldHVybiByfX0sODAyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxuJiZvKGUsbiksZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PYnNlcnZhYmxlPXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2x9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoKSYmQm9vbGVhbihTeW1ib2xbZV0pfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpP1N5bWJvbFtlXToiQEAiK2V9O2EoKSYmIXMoIm9ic2VydmFibGUiKSYmKFN5bWJvbC5vYnNlcnZhYmxlPVN5bWJvbCgib2JzZXJ2YWJsZSIpKTt2YXIgYz11KCJpdGVyYXRvciIpLGw9dSgib2JzZXJ2YWJsZSIpLGY9dSgic3BlY2llcyIpO2Z1bmN0aW9uIGgoZSx0KXt2YXIgbj1lW3RdO2lmKG51bGwhPW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IobisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIG59fWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwIT09dCYmbnVsbD09PSh0PXRbZl0pJiYodD12b2lkIDApLHZvaWQgMCE9PXQ/dDpFfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFfWZ1bmN0aW9uIHYoZSl7di5sb2c/di5sb2coZSk6c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSkpfWZ1bmN0aW9uIGIoZSl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSgpfWNhdGNoKGUpe3YoZSl9fSkpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5fY2xlYW51cDtpZih2b2lkIDAhPT10JiYoZS5fY2xlYW51cD12b2lkIDAsdCkpdHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXQoKTtlbHNle3ZhciBuPWgodCwidW5zdWJzY3JpYmUiKTtuJiZuLmNhbGwodCl9fWNhdGNoKGUpe3YoZSl9fWZ1bmN0aW9uIG0oZSl7ZS5fb2JzZXJ2ZXI9dm9pZCAwLGUuX3F1ZXVlPXZvaWQgMCxlLl9zdGF0ZT0iY2xvc2VkIn1mdW5jdGlvbiBnKGUsdCxuKXtlLl9zdGF0ZT0icnVubmluZyI7dmFyIHI9ZS5fb2JzZXJ2ZXI7dHJ5e3ZhciBvPWgocix0KTtzd2l0Y2godCl7Y2FzZSJuZXh0IjpvJiZvLmNhbGwocixuKTticmVhaztjYXNlImVycm9yIjppZihtKGUpLCFvKXRocm93IG47by5jYWxsKHIsbik7YnJlYWs7Y2FzZSJjb21wbGV0ZSI6bShlKSxvJiZvLmNhbGwocil9fWNhdGNoKGUpe3YoZSl9ImNsb3NlZCI9PT1lLl9zdGF0ZT95KGUpOiJydW5uaW5nIj09PWUuX3N0YXRlJiYoZS5fc3RhdGU9InJlYWR5Iil9ZnVuY3Rpb24gTyhlLHQsbil7aWYoImNsb3NlZCIhPT1lLl9zdGF0ZSl7aWYoImJ1ZmZlcmluZyIhPT1lLl9zdGF0ZSlyZXR1cm4icmVhZHkiIT09ZS5fc3RhdGU/KGUuX3N0YXRlPSJidWZmZXJpbmciLGUuX3F1ZXVlPVt7dHlwZTp0LHZhbHVlOm59XSx2b2lkIGIoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUuX3F1ZXVlO2lmKHQpe2UuX3F1ZXVlPXZvaWQgMCxlLl9zdGF0ZT0icmVhZHkiO2Zvcih2YXIgbj0wO248dC5sZW5ndGgmJihnKGUsdFtuXS50eXBlLHRbbl0udmFsdWUpLCJjbG9zZWQiIT09ZS5fc3RhdGUpOysrbik7fX0oZSl9KSkpOnZvaWQgZyhlLHQsbik7ZS5fcXVldWUucHVzaCh7dHlwZTp0LHZhbHVlOm59KX19dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7cih0aGlzLGUpLHRoaXMuX2NsZWFudXA9dm9pZCAwLHRoaXMuX29ic2VydmVyPXQsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3N0YXRlPSJpbml0aWFsaXppbmciO3ZhciBvPW5ldyBqKHRoaXMpO3RyeXt0aGlzLl9jbGVhbnVwPW4uY2FsbCh2b2lkIDAsbyl9Y2F0Y2goZSl7by5lcnJvcihlKX0iaW5pdGlhbGl6aW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9InJlYWR5Iil9cmV0dXJuIGkoZSxbe2tleToidW5zdWJzY3JpYmUiLHZhbHVlOmZ1bmN0aW9uKCl7ImNsb3NlZCIhPT10aGlzLl9zdGF0ZSYmKG0odGhpcykseSh0aGlzKSl9fSx7a2V5OiJjbG9zZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiJjbG9zZWQiPT09dGhpcy5fc3RhdGV9fV0pLGV9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10fXJldHVybiBpKGUsW3trZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKGUpe08odGhpcy5fc3Vic2NyaXB0aW9uLCJuZXh0IixlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtPKHRoaXMuX3N1YnNjcmlwdGlvbiwiZXJyb3IiLGUpfX0se2tleToiY29tcGxldGUiLHZhbHVlOmZ1bmN0aW9uKCl7Tyh0aGlzLl9zdWJzY3JpcHRpb24sImNvbXBsZXRlIil9fSx7a2V5OiJjbG9zZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiJjbG9zZWQiPT09dGhpcy5fc3Vic2NyaXB0aW9uLl9zdGF0ZX19XSksZX0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihyKHRoaXMsZSksISh0aGlzIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JzZXJ2YWJsZSBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24iKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYnNlcnZhYmxlIGluaXRpYWxpemVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3N1YnNjcmliZXI9dH1yZXR1cm4gaShlLFt7a2V5OiJzdWJzY3JpYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fChlPXtuZXh0OmUsZXJyb3I6YXJndW1lbnRzWzFdLGNvbXBsZXRlOmFyZ3VtZW50c1syXX0pLG5ldyB3KGUsdGhpcy5fc3Vic2NyaWJlcil9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl2YXIgbz10LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXt0cnl7ZSh0LGkpfWNhdGNoKGUpe3IoZSksby51bnN1YnNjcmliZSgpfX0sZXJyb3I6cixjb21wbGV0ZTpufSk7ZWxzZSByKG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIikpO2Z1bmN0aW9uIGkoKXtvLnVuc3Vic2NyaWJlKCksbigpfX0pKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBuZXcoZCh0aGlzKSkoKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXt0cnl7dD1lKHQpfWNhdGNoKGUpe3JldHVybiBuLmVycm9yKGUpfW4ubmV4dCh0KX0sZXJyb3I6ZnVuY3Rpb24oZSl7bi5lcnJvcihlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtuLmNvbXBsZXRlKCl9fSl9KSl9fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gbmV3KGQodGhpcykpKChmdW5jdGlvbihuKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7dHJ5e2lmKCFlKHQpKXJldHVybn1jYXRjaChlKXtyZXR1cm4gbi5lcnJvcihlKX1uLm5leHQodCl9LGVycm9yOmZ1bmN0aW9uKGUpe24uZXJyb3IoZSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7bi5jb21wbGV0ZSgpfX0pfSkpfX0se2tleToicmVkdWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7dmFyIG49ZCh0aGlzKSxyPWFyZ3VtZW50cy5sZW5ndGg+MSxvPSExLGk9YXJndW1lbnRzWzFdLGE9aTtyZXR1cm4gbmV3IG4oKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXt2YXIgaT0hbztpZihvPSEwLCFpfHxyKXRyeXthPWUoYSx0KX1jYXRjaChlKXtyZXR1cm4gbi5lcnJvcihlKX1lbHNlIGE9dH0sZXJyb3I6ZnVuY3Rpb24oZSl7bi5lcnJvcihlKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighbyYmIXIpcmV0dXJuIG4uZXJyb3IobmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlZHVjZSBhbiBlbXB0eSBzZXF1ZW5jZSIpKTtuLm5leHQoYSksbi5jb21wbGV0ZSgpfX0pfSkpfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgbz1kKHRoaXMpO3JldHVybiBuZXcgbygoZnVuY3Rpb24odCl7dmFyIHIsaT0wO3JldHVybiBmdW5jdGlvbiBlKGEpe3I9YS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oZSl7dC5uZXh0KGUpfSxlcnJvcjpmdW5jdGlvbihlKXt0LmVycm9yKGUpfSxjb21wbGV0ZTpmdW5jdGlvbigpe2k9PT1uLmxlbmd0aD8ocj12b2lkIDAsdC5jb21wbGV0ZSgpKTplKG8uZnJvbShuW2krK10pKX19KX0oZSksZnVuY3Rpb24oKXtyJiYoci51bnN1YnNjcmliZSgpLHI9dm9pZCAwKX19KSl9fSx7a2V5OiJmbGF0TWFwIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7dmFyIG49ZCh0aGlzKTtyZXR1cm4gbmV3IG4oKGZ1bmN0aW9uKHIpe3ZhciBvPVtdLGk9dC5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7aWYoZSl0cnl7dD1lKHQpfWNhdGNoKGUpe3JldHVybiByLmVycm9yKGUpfXZhciBpPW4uZnJvbSh0KS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oZSl7ci5uZXh0KGUpfSxlcnJvcjpmdW5jdGlvbihlKXtyLmVycm9yKGUpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciBlPW8uaW5kZXhPZihpKTtlPj0wJiZvLnNwbGljZShlLDEpLGEoKX19KTtvLnB1c2goaSl9LGVycm9yOmZ1bmN0aW9uKGUpe3IuZXJyb3IoZSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7YSgpfX0pO2Z1bmN0aW9uIGEoKXtpLmNsb3NlZCYmMD09PW8ubGVuZ3RoJiZyLmNvbXBsZXRlKCl9cmV0dXJuIGZ1bmN0aW9uKCl7by5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51bnN1YnNjcmliZSgpfSkpLGkudW5zdWJzY3JpYmUoKX19KSl9fSx7a2V5OmwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319XSxbe2tleToiZnJvbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczplO2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIG9iamVjdCIpO3ZhciByPWgodCxsKTtpZihyKXt2YXIgbz1yLmNhbGwodCk7aWYoT2JqZWN0KG8pIT09byl0aHJvdyBuZXcgVHlwZUVycm9yKG8rIiBpcyBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIHAobykmJm8uY29uc3RydWN0b3I9PT1uP286bmV3IG4oKGZ1bmN0aW9uKGUpe3JldHVybiBvLnN1YnNjcmliZShlKX0pKX1pZihzKCJpdGVyYXRvciIpJiYocj1oKHQsYykpKXJldHVybiBuZXcgbigoZnVuY3Rpb24oZSl7YigoZnVuY3Rpb24oKXtpZighZS5jbG9zZWQpe3ZhciBuPSEwLG89ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgYSxzPXIuY2FsbCh0KVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPXMubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgdT1hLnZhbHVlO2lmKGUubmV4dCh1KSxlLmNsb3NlZClyZXR1cm59fWNhdGNoKGUpe289ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBpfX1lLmNvbXBsZXRlKCl9fSkpfSkpO2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG5ldyBuKChmdW5jdGlvbihlKXtiKChmdW5jdGlvbigpe2lmKCFlLmNsb3NlZCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoZS5uZXh0KHRbbl0pLGUuY2xvc2VkKXJldHVybjtlLmNvbXBsZXRlKCl9fSkpfSkpO3Rocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBvYnNlcnZhYmxlIil9fSx7a2V5OiJvZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOmU7cmV0dXJuIG5ldyBvKChmdW5jdGlvbihlKXtiKChmdW5jdGlvbigpe2lmKCFlLmNsb3NlZCl7Zm9yKHZhciB0PTA7dDxuLmxlbmd0aDsrK3QpaWYoZS5uZXh0KG5bdF0pLGUuY2xvc2VkKXJldHVybjtlLmNvbXBsZXRlKCl9fSkpfSkpfX0se2tleTpmLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX1dKSxlfSgpO3QuT2JzZXJ2YWJsZT1FLGEoKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsU3ltYm9sKCJleHRlbnNpb25zIikse3ZhbHVlOntzeW1ib2w6bCxob3N0UmVwb3J0RXJyb3I6dn0sY29uZmlndXJhYmxlOiEwfSl9LDgwMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlLHQpe3ZhciByLG89big2MzApO3I9InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PWU/ZTp0O09iamVjdChvLmEpKHIpfSkuY2FsbCh0aGlzLG4oMTQxKSxuKDM5OCkoZSkpfSw4MDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9bigyMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG5ldyByLmEoKGZ1bmN0aW9uKHQpe3QuZXJyb3IoZSl9KSl9fSw4MDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9bigwKSxvPW4ubihyKSxpPW4oMTkpLGE9big0MDQpLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGllbnQsbj1lLmNoaWxkcmVuLHI9T2JqZWN0KGEuYSkoKTtyZXR1cm4gby5hLmNyZWF0ZUVsZW1lbnQoci5Db25zdW1lcixudWxsLChmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHQmJmUuY2xpZW50IT09dCYmKGU9T2JqZWN0LmFzc2lnbih7fSxlLHtjbGllbnQ6dH0pKSxPYmplY3QoaS5iKShlLmNsaWVudCwyOCksby5hLmNyZWF0ZUVsZW1lbnQoci5Qcm92aWRlcix7dmFsdWU6ZX0sbil9KSl9fSw4MDY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgpLG89bigxMzQpLGk9big0NzEpLGE9bigzNDkpLHM9big5MCksdT1uKDEyNTcpLGM9bigxOSksbD1uKDI0NyksZj1uKDMxMyksaD1uKDg0MCksZD1uKDgzOSkscD1uKDczKTt2YXIgdixiLHk9big2MzkpLG09big1NSksZz1PYmplY3QuY3JlYXRlKG51bGwpLE89ZnVuY3Rpb24oKXtyZXR1cm4gZ30sdz1PYmplY3QuY3JlYXRlKG51bGwpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49dGhpczt0aGlzLnBvbGljaWVzPWUsdGhpcy5ncm91cD10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucm9vdElkcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucmVmcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZ2V0RmllbGRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qocy5mKShlKT9uLmdldChlLl9fcmVmLHQpOmUmJmVbdF19LHRoaXMuY2FuUmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHMuZikoZSk/bi5oYXMoZS5fX3JlZik6Im9iamVjdCI9PXR5cGVvZiBlfSx0aGlzLnRvUmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBPYmplY3Qocy5nKShlKTtpZihPYmplY3Qocy5mKShlKSlyZXR1cm4gZTt2YXIgcj1uLnBvbGljaWVzLmlkZW50aWZ5KGUpWzBdO2lmKHIpe3ZhciBvPU9iamVjdChzLmcpKHIpO3JldHVybiB0JiZuLm1lcmdlKHIsZSksb319fXJldHVybiBlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qoci5hKSh7fSx0aGlzLmRhdGEpfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubG9va3VwKGUsITApfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmdyb3VwLmRlcGVuZChlLHQpLG0uYy5jYWxsKHRoaXMuZGF0YSxlKSl7dmFyIG49dGhpcy5kYXRhW2VdO2lmKG4mJm0uYy5jYWxsKG4sdCkpcmV0dXJuIG5bdF19cmV0dXJuIl9fdHlwZW5hbWUiPT09dCYmbS5jLmNhbGwodGhpcy5wb2xpY2llcy5yb290VHlwZW5hbWVzQnlJZCxlKT90aGlzLnBvbGljaWVzLnJvb3RUeXBlbmFtZXNCeUlkW2VdOnRoaXMgaW5zdGFuY2VvZiBBP3RoaXMucGFyZW50LmdldChlLHQpOnZvaWQgMH0sZS5wcm90b3R5cGUubG9va3VwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJnRoaXMuZ3JvdXAuZGVwZW5kKGUsIl9fZXhpc3RzIiksbS5jLmNhbGwodGhpcy5kYXRhLGUpP3RoaXMuZGF0YVtlXTp0aGlzIGluc3RhbmNlb2YgQT90aGlzLnBhcmVudC5sb29rdXAoZSx0KTp0aGlzLnBvbGljaWVzLnJvb3RUeXBlbmFtZXNCeUlkW2VdP09iamVjdC5jcmVhdGUobnVsbCk6dm9pZCAwfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLmxvb2t1cChlKSxvPW5ldyBkLmEoaykubWVyZ2Uocix0KTtpZih0aGlzLmRhdGFbZV09byxvIT09ciYmKGRlbGV0ZSB0aGlzLnJlZnNbZV0sdGhpcy5ncm91cC5jYWNoaW5nKSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyfHwoaS5fX2V4aXN0cz0xKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighcnx8cltlXSE9PW9bZV0pe2lbZV09MTt2YXIgdD1PYmplY3QobS5iKShlKTt0PT09ZXx8bi5wb2xpY2llcy5oYXNLZXlBcmdzKG8uX190eXBlbmFtZSx0KXx8KGlbdF09MSksdm9pZCAwIT09b1tlXXx8biBpbnN0YW5jZW9mIEF8fGRlbGV0ZSBvW2VdfX0pKSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gbi5ncm91cC5kaXJ0eShlLHQpfSkpfX0sZS5wcm90b3R5cGUubW9kaWZ5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPXRoaXMubG9va3VwKGUpO2lmKG8pe3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksYT0hMSx1PSEwLGM9e0RFTEVURTpnLElOVkFMSURBVEU6dyxpc1JlZmVyZW5jZTpzLmYsdG9SZWZlcmVuY2U6dGhpcy50b1JlZmVyZW5jZSxjYW5SZWFkOnRoaXMuY2FuUmVhZCxyZWFkRmllbGQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5wb2xpY2llcy5yZWFkRmllbGQoInN0cmluZyI9PXR5cGVvZiB0P3tmaWVsZE5hbWU6dCxmcm9tOnJ8fE9iamVjdChzLmcpKGUpfTp0LHtzdG9yZTpufSl9fTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKChmdW5jdGlvbihzKXt2YXIgbD1PYmplY3QobS5iKShzKSxmPW9bc107aWYodm9pZCAwIT09Zil7dmFyIGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0W3NdfHx0W2xdO2lmKGgpe3ZhciBkPWg9PT1PP2c6aChmLE9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGMpLHtmaWVsZE5hbWU6bCxzdG9yZUZpZWxkTmFtZTpzLHN0b3JhZ2U6bi5nZXRTdG9yYWdlKGUscyl9KSk7ZD09PXc/bi5ncm91cC5kaXJ0eShlLHMpOihkPT09ZyYmKGQ9dm9pZCAwKSxkIT09ZiYmKGlbc109ZCxhPSEwLGY9ZCkpfXZvaWQgMCE9PWYmJih1PSExKX19KSksYSlyZXR1cm4gdGhpcy5tZXJnZShlLGkpLHUmJih0aGlzIGluc3RhbmNlb2YgQT90aGlzLmRhdGFbZV09dm9pZCAwOmRlbGV0ZSB0aGlzLmRhdGFbZV0sdGhpcy5ncm91cC5kaXJ0eShlLCJfX2V4aXN0cyIpKSwhMH1yZXR1cm4hMX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPXRoaXMubG9va3VwKGUpO2lmKG8pe3ZhciBpPXRoaXMuZ2V0RmllbGRWYWx1ZShvLCJfX3R5cGVuYW1lIiksYT10JiZuP3RoaXMucG9saWNpZXMuZ2V0U3RvcmVGaWVsZE5hbWUoe3R5cGVuYW1lOmksZmllbGROYW1lOnQsYXJnczpufSk6dDtyZXR1cm4gdGhpcy5tb2RpZnkoZSxhPygocj17fSlbYV09TyxyKTpPKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuZXZpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIGUuaWQmJihtLmMuY2FsbCh0aGlzLmRhdGEsZS5pZCkmJih0PXRoaXMuZGVsZXRlKGUuaWQsZS5maWVsZE5hbWUsZS5hcmdzKSksdGhpcyBpbnN0YW5jZW9mIEEmJih0PXRoaXMucGFyZW50LmV2aWN0KGUpfHx0KSwoZS5maWVsZE5hbWV8fHQpJiZ0aGlzLmdyb3VwLmRpcnR5KGUuaWQsZS5maWVsZE5hbWV8fCJfX2V4aXN0cyIpKSx0fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMucmVwbGFjZShudWxsKX0sZS5wcm90b3R5cGUuZXh0cmFjdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnRvT2JqZWN0KCksbj1bXTtyZXR1cm4gdGhpcy5nZXRSb290SWRTZXQoKS5mb3JFYWNoKChmdW5jdGlvbih0KXttLmMuY2FsbChlLnBvbGljaWVzLnJvb3RUeXBlbmFtZXNCeUlkLHQpfHxuLnB1c2godCl9KSksbi5sZW5ndGgmJih0Ll9fTUVUQT17ZXh0cmFSb290SWRzOm4uc29ydCgpfSksdH0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZSYmbS5jLmNhbGwoZSxuKXx8dC5kZWxldGUobil9KSksZSl7dmFyIG49ZS5fX01FVEEsbz1PYmplY3Qoci5lKShlLFsiX19NRVRBIl0pO09iamVjdC5rZXlzKG8pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QubWVyZ2UoZSxvW2VdKX0pKSxuJiZuLmV4dHJhUm9vdElkcy5mb3JFYWNoKHRoaXMucmV0YWluLHRoaXMpfX0sZS5wcm90b3R5cGUucmV0YWluPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvb3RJZHNbZV09KHRoaXMucm9vdElkc1tlXXx8MCkrMX0sZS5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbihlKXtpZih0aGlzLnJvb3RJZHNbZV0+MCl7dmFyIHQ9LS10aGlzLnJvb3RJZHNbZV07cmV0dXJuIHR8fGRlbGV0ZSB0aGlzLnJvb3RJZHNbZV0sdH1yZXR1cm4gMH0sZS5wcm90b3R5cGUuZ2V0Um9vdElkU2V0PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgU2V0KSxPYmplY3Qua2V5cyh0aGlzLnJvb3RJZHMpLmZvckVhY2goZS5hZGQsZSksdGhpcyBpbnN0YW5jZW9mIEE/dGhpcy5wYXJlbnQuZ2V0Um9vdElkU2V0KGUpOk9iamVjdC5rZXlzKHRoaXMucG9saWNpZXMucm9vdFR5cGVuYW1lc0J5SWQpLmZvckVhY2goZS5hZGQsZSksZX0sZS5wcm90b3R5cGUuZ2M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5nZXRSb290SWRTZXQoKSxuPXRoaXMudG9PYmplY3QoKTt0LmZvckVhY2goKGZ1bmN0aW9uKHIpe20uYy5jYWxsKG4scikmJihPYmplY3Qua2V5cyhlLmZpbmRDaGlsZFJlZklkcyhyKSkuZm9yRWFjaCh0LmFkZCx0KSxkZWxldGUgbltyXSl9KSk7dmFyIHI9T2JqZWN0LmtleXMobik7aWYoci5sZW5ndGgpe2Zvcih2YXIgbz10aGlzO28gaW5zdGFuY2VvZiBBOylvPW8ucGFyZW50O3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG8uZGVsZXRlKGUpfSkpfXJldHVybiByfSxlLnByb3RvdHlwZS5maW5kQ2hpbGRSZWZJZHM9ZnVuY3Rpb24oZSl7aWYoIW0uYy5jYWxsKHRoaXMucmVmcyxlKSl7dmFyIHQ9dGhpcy5yZWZzW2VdPU9iamVjdC5jcmVhdGUobnVsbCksbj1uZXcgU2V0KFt0aGlzLmRhdGFbZV1dKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfTtuLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdChzLmYpKGUpP3RbZS5fX3JlZl09ITA6cihlKSYmT2JqZWN0LnZhbHVlcyhlKS5maWx0ZXIocikuZm9yRWFjaChuLmFkZCxuKX0pKX1yZXR1cm4gdGhpcy5yZWZzW2VdfSxlLnByb3RvdHlwZS5tYWtlQ2FjaGVLZXk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIHRoaXMuZ3JvdXAua2V5TWFrZXIubG9va3VwQXJyYXkoZSl9LGV9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYWNoaW5nPWUsdGhpcy5kPW51bGwsdGhpcy5rZXlNYWtlcj1uZXcgby5hKHkuYSksdGhpcy5kPWU/T2JqZWN0KG8uYikoKTpudWxsfXJldHVybiBlLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmQpe3RoaXMuZChTKGUsdCkpO3ZhciBuPU9iamVjdChtLmIpKHQpO24hPT10JiZ0aGlzLmQoUyhlLG4pKX19LGUucHJvdG90eXBlLmRpcnR5PWZ1bmN0aW9uKGUsdCl7dGhpcy5kJiZ0aGlzLmQuZGlydHkoUyhlLHQpKX0sZX0oKTtmdW5jdGlvbiBTKGUsdCl7cmV0dXJuIHQrIiMiK2V9dj1qfHwoaj17fSksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPXQucG9saWNpZXMscj10LnJlc3VsdENhY2hpbmcsaT12b2lkIDA9PT1yfHxyLGE9dC5zZWVkLHM9ZS5jYWxsKHRoaXMsbixuZXcgRShpKSl8fHRoaXM7cmV0dXJuIHMuc3RvcmFnZVRyaWU9bmV3IG8uYSh5LmEpLHMuc2hhcmVkTGF5ZXJHcm91cD1uZXcgRShpKSxhJiZzLnJlcGxhY2UoYSksc31yZXR1cm4gT2JqZWN0KHIuYykodCxlKSx0LnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgQShlLHRoaXMsdCx0aGlzLnNoYXJlZExheWVyR3JvdXApfSx0LnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5nZXRTdG9yYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmFnZVRyaWUubG9va3VwQXJyYXkoYXJndW1lbnRzKX0sdH0odiksdi5Sb290PWI7dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scixvKXt2YXIgaT1lLmNhbGwodGhpcyxuLnBvbGljaWVzLG8pfHx0aGlzO3JldHVybiBpLmlkPXQsaS5wYXJlbnQ9bixpLnJlcGxheT1yLGkuZ3JvdXA9byxyKGkpLGl9cmV0dXJuIE9iamVjdChyLmMpKHQsZSksdC5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQoZSx0aGlzLG4sdGhpcy5ncm91cCl9LHQucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnBhcmVudC5yZW1vdmVMYXllcihlKTtyZXR1cm4gZT09PXRoaXMuaWQ/KHRoaXMuZ3JvdXAuY2FjaGluZyYmT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRhdGFbZV0hPT1uLmxvb2t1cChlKSYmdC5kZWxldGUoZSl9KSksbik6bj09PXRoaXMucGFyZW50P3RoaXM6bi5hZGRMYXllcih0aGlzLmlkLHRoaXMucmVwbGF5KX0sdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sdGhpcy5wYXJlbnQudG9PYmplY3QoKSksdGhpcy5kYXRhKX0sdC5wcm90b3R5cGUuZmluZENoaWxkUmVmSWRzPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50LmZpbmRDaGlsZFJlZklkcyh0KTtyZXR1cm4gbS5jLmNhbGwodGhpcy5kYXRhLHQpP09iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LG4pLGUucHJvdG90eXBlLmZpbmRDaGlsZFJlZklkcy5jYWxsKHRoaXMsdCkpOm59LHQucHJvdG90eXBlLmdldFN0b3JhZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYXJlbnQ7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGUuZ2V0U3RvcmFnZS5hcHBseShlLGFyZ3VtZW50cyl9LHR9KGopO2Z1bmN0aW9uIGsoZSx0LG4pe3ZhciByPWVbbl0sbz10W25dO3JldHVybiBPYmplY3QocC5hKShyLG8pP3I6b31mdW5jdGlvbiBJKGUpe3JldHVybiEhKGUgaW5zdGFuY2VvZiBqJiZlLmdyb3VwLmNhY2hpbmcpfWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gbmV3IGEuYShlLm1lc3NhZ2UsdC5wYXRoLnNsaWNlKCksdC5xdWVyeSx0LmNsaWVudE9ubHksdC52YXJpYWJsZXMpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuY29uZmlnPWUsdGhpcy5leGVjdXRlU2VsZWN0aW9uU2V0PU9iamVjdChvLmMpKChmdW5jdGlvbihlKXtyZXR1cm4gdC5leGVjU2VsZWN0aW9uU2V0SW1wbChlKX0pLHtrZXlBcmdzOmZ1bmN0aW9uKGUpe3JldHVybltlLnNlbGVjdGlvblNldCxlLm9iamVjdE9yUmVmZXJlbmNlLGUuY29udGV4dF19LG1ha2VDYWNoZUtleTpmdW5jdGlvbihlLHQsbil7aWYoSShuLnN0b3JlKSlyZXR1cm4gbi5zdG9yZS5tYWtlQ2FjaGVLZXkoZSxPYmplY3Qocy5mKSh0KT90Ll9fcmVmOnQsbi52YXJTdHJpbmcpfX0pLHRoaXMua25vd25SZXN1bHRzPW5ldyBXZWFrTWFwLHRoaXMuZXhlY3V0ZVN1YlNlbGVjdGVkQXJyYXk9T2JqZWN0KG8uYykoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmV4ZWNTdWJTZWxlY3RlZEFycmF5SW1wbChlKX0pLHttYWtlQ2FjaGVLZXk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWVsZCxuPWUuYXJyYXkscj1lLmNvbnRleHQ7aWYoSShyLnN0b3JlKSlyZXR1cm4gci5zdG9yZS5tYWtlQ2FjaGVLZXkodCxuLHIudmFyU3RyaW5nKX19KSx0aGlzLmNvbmZpZz1PYmplY3Qoci5hKSh7YWRkVHlwZW5hbWU6ITB9LGUpfXJldHVybiBlLnByb3RvdHlwZS5kaWZmUXVlcnlBZ2FpbnN0U3RvcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9yZSxuPWUucXVlcnksbz1lLnJvb3RJZCxpPXZvaWQgMD09PW8/IlJPT1RfUVVFUlkiOm8sYT1lLnZhcmlhYmxlcyx1PWUucmV0dXJuUGFydGlhbERhdGEsYz12b2lkIDA9PT11fHx1LGg9dGhpcy5jb25maWcuY2FjaGUucG9saWNpZXM7YT1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxPYmplY3QobC5iKShPYmplY3QobC5oKShuKSkpLGEpO3ZhciBkPXRoaXMuZXhlY3V0ZVNlbGVjdGlvblNldCh7c2VsZWN0aW9uU2V0Ok9iamVjdChsLmUpKG4pLnNlbGVjdGlvblNldCxvYmplY3RPclJlZmVyZW5jZTpPYmplY3Qocy5nKShpKSxjb250ZXh0OntzdG9yZTp0LHF1ZXJ5Om4scG9saWNpZXM6aCx2YXJpYWJsZXM6YSx2YXJTdHJpbmc6SlNPTi5zdHJpbmdpZnkoYSksZnJhZ21lbnRNYXA6T2JqZWN0KGYuYSkoT2JqZWN0KGwuZCkobikpLHBhdGg6W10sY2xpZW50T25seTohMX19KSxwPWQubWlzc2luZyYmZC5taXNzaW5nLmxlbmd0aD4wO2lmKHAmJiFjKXRocm93IGQubWlzc2luZ1swXTtyZXR1cm57cmVzdWx0OmQucmVzdWx0LG1pc3Npbmc6ZC5taXNzaW5nLGNvbXBsZXRlOiFwfX0sZS5wcm90b3R5cGUuaXNGcmVzaD1mdW5jdGlvbihlLHQsbixyKXtpZihJKHIuc3RvcmUpJiZ0aGlzLmtub3duUmVzdWx0cy5nZXQoZSk9PT1uKXt2YXIgbz10aGlzLmV4ZWN1dGVTZWxlY3Rpb25TZXQucGVlayhuLHQscik7aWYobyYmZT09PW8ucmVzdWx0KXJldHVybiEwfXJldHVybiExfSxlLnByb3RvdHlwZS5leGVjU2VsZWN0aW9uU2V0SW1wbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5zZWxlY3Rpb25TZXQscj1lLm9iamVjdE9yUmVmZXJlbmNlLG89ZS5jb250ZXh0O2lmKE9iamVjdChzLmYpKHIpJiYhby5wb2xpY2llcy5yb290VHlwZW5hbWVzQnlJZFtyLl9fcmVmXSYmIW8uc3RvcmUuaGFzKHIuX19yZWYpKXJldHVybntyZXN1bHQ6e30sbWlzc2luZzpbVChuZXcgYy5hKDQpLG8pXX07dmFyIGk9by52YXJpYWJsZXMsYT1vLnBvbGljaWVzLGw9by5zdG9yZSxwPVtdLHY9e3Jlc3VsdDpudWxsfSxiPWwuZ2V0RmllbGRWYWx1ZShyLCJfX3R5cGVuYW1lIik7ZnVuY3Rpb24geSgpe3JldHVybiB2Lm1pc3Npbmd8fCh2Lm1pc3Npbmc9W10pfWZ1bmN0aW9uIG0oZSl7dmFyIHQ7cmV0dXJuIGUubWlzc2luZyYmKHQ9eSgpKS5wdXNoLmFwcGx5KHQsZS5taXNzaW5nKSxlLnJlc3VsdH10aGlzLmNvbmZpZy5hZGRUeXBlbmFtZSYmInN0cmluZyI9PXR5cGVvZiBiJiYhYS5yb290SWRzQnlUeXBlbmFtZVtiXSYmcC5wdXNoKHtfX3R5cGVuYW1lOmJ9KTt2YXIgZz1uZXcgU2V0KG4uc2VsZWN0aW9ucyk7cmV0dXJuIGcuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG47aWYoT2JqZWN0KGguYykoZSxpKSlpZihPYmplY3Qocy5kKShlKSl7dmFyIGw9YS5yZWFkRmllbGQoe2ZpZWxkTmFtZTplLm5hbWUudmFsdWUsZmllbGQ6ZSx2YXJpYWJsZXM6by52YXJpYWJsZXMsZnJvbTpyfSxvKSxkPU9iamVjdChzLmgpKGUpO28ucGF0aC5wdXNoKGQpO3ZhciB2PW8uY2xpZW50T25seTtvLmNsaWVudE9ubHk9dnx8ISghZS5kaXJlY3RpdmVzfHwhZS5kaXJlY3RpdmVzLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJjbGllbnQiPT09ZS5uYW1lLnZhbHVlfSkpKSx2b2lkIDA9PT1sP3UuYS5hZGRlZChlKXx8eSgpLnB1c2goVChuZXcgYy5hKDUpLG8pKTpBcnJheS5pc0FycmF5KGwpP2w9bSh0LmV4ZWN1dGVTdWJTZWxlY3RlZEFycmF5KHtmaWVsZDplLGFycmF5OmwsY29udGV4dDpvfSkpOmUuc2VsZWN0aW9uU2V0JiZudWxsIT1sJiYobD1tKHQuZXhlY3V0ZVNlbGVjdGlvblNldCh7c2VsZWN0aW9uU2V0OmUuc2VsZWN0aW9uU2V0LG9iamVjdE9yUmVmZXJlbmNlOmwsY29udGV4dDpvfSkpKSx2b2lkIDAhPT1sJiZwLnB1c2goKChuPXt9KVtkXT1sLG4pKSxvLmNsaWVudE9ubHk9dixPYmplY3QoYy5iKShvLnBhdGgucG9wKCk9PT1kKX1lbHNle3ZhciBPPU9iamVjdChmLmIpKGUsby5mcmFnbWVudE1hcCk7TyYmYS5mcmFnbWVudE1hdGNoZXMoTyxiKSYmTy5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucy5mb3JFYWNoKGcuYWRkLGcpfX0pKSx2LnJlc3VsdD1PYmplY3QoZC5jKShwKSx0aGlzLmtub3duUmVzdWx0cy5zZXQodi5yZXN1bHQsbiksdn0sZS5wcm90b3R5cGUuZXhlY1N1YlNlbGVjdGVkQXJyYXlJbXBsPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcyxyPWUuZmllbGQsbz1lLmFycmF5LGk9ZS5jb250ZXh0O2Z1bmN0aW9uIGEoZSxuKXtyZXR1cm4gZS5taXNzaW5nJiYodD10fHxbXSkucHVzaC5hcHBseSh0LGUubWlzc2luZyksT2JqZWN0KGMuYikoaS5wYXRoLnBvcCgpPT09biksZS5yZXN1bHR9cmV0dXJuIHIuc2VsZWN0aW9uU2V0JiYobz1vLmZpbHRlcihpLnN0b3JlLmNhblJlYWQpKSx7cmVzdWx0Om89by5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PT1lP251bGw6KGkucGF0aC5wdXNoKHQpLEFycmF5LmlzQXJyYXkoZSk/YShuLmV4ZWN1dGVTdWJTZWxlY3RlZEFycmF5KHtmaWVsZDpyLGFycmF5OmUsY29udGV4dDppfSksdCk6ci5zZWxlY3Rpb25TZXQ/YShuLmV4ZWN1dGVTZWxlY3Rpb25TZXQoe3NlbGVjdGlvblNldDpyLnNlbGVjdGlvblNldCxvYmplY3RPclJlZmVyZW5jZTplLGNvbnRleHQ6aX0pLHQpOihPYmplY3QoYy5iKShpLnBhdGgucG9wKCk9PT10KSxlKSl9KSksbWlzc2luZzp0fX0sZX0oKTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmNhY2hlPWUsdGhpcy5yZWFkZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUud3JpdGVUb1N0b3JlPWZ1bmN0aW9uKGUpe3ZhciB0PWUucXVlcnksbj1lLnJlc3VsdCxvPWUuZGF0YUlkLGk9ZS5zdG9yZSxhPWUudmFyaWFibGVzLHU9T2JqZWN0KGwuZikodCksaD1PYmplY3QobS5kKSgpO2E9T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sT2JqZWN0KGwuYikodSkpLGEpO3ZhciBkPXRoaXMucHJvY2Vzc1NlbGVjdGlvblNldCh7cmVzdWx0Om58fE9iamVjdC5jcmVhdGUobnVsbCksZGF0YUlkOm8sc2VsZWN0aW9uU2V0OnUuc2VsZWN0aW9uU2V0LG1lcmdlVHJlZTp7bWFwOm5ldyBNYXB9LGNvbnRleHQ6e3N0b3JlOmksd3JpdHRlbjpPYmplY3QuY3JlYXRlKG51bGwpLG1lcmdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgubWVyZ2UoZSx0KX0sdmFyaWFibGVzOmEsdmFyU3RyaW5nOkpTT04uc3RyaW5naWZ5KGEpLGZyYWdtZW50TWFwOk9iamVjdChmLmEpKE9iamVjdChsLmQpKHQpKX19KTtpZighT2JqZWN0KHMuZikoZCkpdGhyb3cgbmV3IGMuYSg3KTtyZXR1cm4gaS5yZXRhaW4oZC5fX3JlZiksZH0sZS5wcm90b3R5cGUucHJvY2Vzc1NlbGVjdGlvblNldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5kYXRhSWQscj1lLnJlc3VsdCxvPWUuc2VsZWN0aW9uU2V0LGk9ZS5jb250ZXh0LGE9ZS5tZXJnZVRyZWUsdT10aGlzLmNhY2hlLnBvbGljaWVzLGw9dS5pZGVudGlmeShyLG8saS5mcmFnbWVudE1hcCksZD1sWzBdLHA9bFsxXTtpZigic3RyaW5nIj09dHlwZW9mKG49bnx8ZCkpe3ZhciB2PWkud3JpdHRlbltuXXx8KGkud3JpdHRlbltuXT1bXSksYj1PYmplY3Qocy5nKShuKTtpZih2LmluZGV4T2Yobyk+PTApcmV0dXJuIGI7aWYodi5wdXNoKG8pLHRoaXMucmVhZGVyJiZ0aGlzLnJlYWRlci5pc0ZyZXNoKHIsYixvLGkpKXJldHVybiBifXZhciB5PU9iamVjdC5jcmVhdGUobnVsbCk7cCYmKHk9aS5tZXJnZSh5LHApKTt2YXIgbT1uJiZ1LnJvb3RUeXBlbmFtZXNCeUlkW25dfHxPYmplY3Qocy5jKShyLG8saS5mcmFnbWVudE1hcCl8fG4mJmkuc3RvcmUuZ2V0KG4sIl9fdHlwZW5hbWUiKTsic3RyaW5nIj09dHlwZW9mIG0mJih5Ll9fdHlwZW5hbWU9bSk7dmFyIGc9bmV3IFNldChvLnNlbGVjdGlvbnMpO2lmKGcuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG47aWYoT2JqZWN0KGguYykoZSxpLnZhcmlhYmxlcykpaWYoT2JqZWN0KHMuZCkoZSkpe3ZhciBvPU9iamVjdChzLmgpKGUpLGw9cltvXTtpZih2b2lkIDAhPT1sKXt2YXIgZD11LmdldFN0b3JlRmllbGROYW1lKHt0eXBlbmFtZTptLGZpZWxkTmFtZTplLm5hbWUudmFsdWUsZmllbGQ6ZSx2YXJpYWJsZXM6aS52YXJpYWJsZXN9KSxwPVIoYSxkKSx2PXQucHJvY2Vzc0ZpZWxkVmFsdWUobCxlLGkscCksYj1lLnNlbGVjdGlvblNldCYmaS5zdG9yZS5nZXRGaWVsZFZhbHVlKHYsIl9fdHlwZW5hbWUiKXx8dm9pZCAwLE89dS5nZXRNZXJnZUZ1bmN0aW9uKG0sZS5uYW1lLnZhbHVlLGIpO08/cC5pbmZvPXtmaWVsZDplLHR5cGVuYW1lOm0sbWVyZ2U6T306UChhLGQpLHk9aS5tZXJnZSh5LCgobj17fSlbZF09dixuKSl9ZWxzZSBpZih1LnVzaW5nUG9zc2libGVUeXBlcyYmIU9iamVjdChoLmIpKFsiZGVmZXIiLCJjbGllbnQiXSxlKSl0aHJvdyBuZXcgYy5hKDgpfWVsc2V7dmFyIHc9T2JqZWN0KGYuYikoZSxpLmZyYWdtZW50TWFwKTt3JiZ1LmZyYWdtZW50TWF0Y2hlcyh3LG0scixpLnZhcmlhYmxlcykmJncuc2VsZWN0aW9uU2V0LnNlbGVjdGlvbnMuZm9yRWFjaChnLmFkZCxnKX19KSksInN0cmluZyI9PXR5cGVvZiBuKXt2YXIgTz1PYmplY3Qocy5nKShuKTtyZXR1cm4gYS5tYXAuc2l6ZSYmKHk9dGhpcy5hcHBseU1lcmdlcyhhLE8seSxpKSksaS5zdG9yZS5tZXJnZShuLHkpLE99cmV0dXJuIHl9LGUucHJvdG90eXBlLnByb2Nlc3NGaWVsZFZhbHVlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXM7cmV0dXJuIHQuc2VsZWN0aW9uU2V0JiZudWxsIT09ZT9BcnJheS5pc0FycmF5KGUpP2UubWFwKChmdW5jdGlvbihlLGkpe3ZhciBhPW8ucHJvY2Vzc0ZpZWxkVmFsdWUoZSx0LG4sUihyLGkpKTtyZXR1cm4gUChyLGkpLGF9KSk6dGhpcy5wcm9jZXNzU2VsZWN0aW9uU2V0KHtyZXN1bHQ6ZSxzZWxlY3Rpb25TZXQ6dC5zZWxlY3Rpb25TZXQsY29udGV4dDpuLG1lcmdlVHJlZTpyfSk6ZX0sZS5wcm90b3R5cGUuYXBwbHlNZXJnZXM9ZnVuY3Rpb24oZSx0LG4sbyxpKXt2YXIgYSx1PXRoaXM7aWYoZS5tYXAuc2l6ZSYmIU9iamVjdChzLmYpKG4pKXt2YXIgbCxmPUFycmF5LmlzQXJyYXkobil8fCFPYmplY3Qocy5mKSh0KSYmIU9iamVjdChtLmYpKHQpP3ZvaWQgMDp0LGg9bjtmJiYhaSYmKGk9W09iamVjdChzLmYpKGYpP2YuX19yZWY6Zl0pO3ZhciBkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Im51bWJlciI9PXR5cGVvZiB0P2VbdF06dm9pZCAwOm8uc3RvcmUuZ2V0RmllbGRWYWx1ZShlLFN0cmluZyh0KSl9O2UubWFwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aSYmaS5wdXNoKHQpO3ZhciBuPWQoZix0KSxyPWQoaCx0KSxhPXUuYXBwbHlNZXJnZXMoZSxuLHIsbyxpKTthIT09ciYmKGw9bHx8bmV3IE1hcCkuc2V0KHQsYSksaSYmT2JqZWN0KGMuYikoaS5wb3AoKT09PXQpfSkpLGwmJihuPUFycmF5LmlzQXJyYXkoaCk/aC5zbGljZSgwKTpPYmplY3Qoci5hKSh7fSxoKSxsLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7blt0XT1lfSkpKX1yZXR1cm4gZS5pbmZvP3RoaXMuY2FjaGUucG9saWNpZXMucnVuTWVyZ2VGdW5jdGlvbih0LG4sZS5pbmZvLG8saSYmKGE9by5zdG9yZSkuZ2V0U3RvcmFnZS5hcHBseShhLGkpKTpufSxlfSgpLE09W107ZnVuY3Rpb24gUihlLHQpe3ZhciBuPWUubWFwO3JldHVybiBuLmhhcyh0KXx8bi5zZXQodCxNLnBvcCgpfHx7bWFwOm5ldyBNYXB9KSxuLmdldCh0KX1mdW5jdGlvbiBQKGUsdCl7dmFyIG49ZS5tYXAscj1uLmdldCh0KTshcnx8ci5pbmZvfHxyLm1hcC5zaXplfHwoTS5wdXNoKHIpLG4uZGVsZXRlKHQpKX1uZXcgU2V0O3ZhciBOPW4oMjY3KSxEPW4oNDEzKTtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSk7dmFyIEI9e2RhdGFJZEZyb21PYmplY3Q6RC5iLGFkZFR5cGVuYW1lOiEwLHJlc3VsdENhY2hpbmc6ITAsdHlwZVBvbGljaWVzOnt9fSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi53YXRjaGVzPW5ldyBTZXQsbi50eXBlbmFtZURvY3VtZW50Q2FjaGU9bmV3IE1hcCxuLm1ha2VWYXI9Ti5jLG4udHhDb3VudD0wLG4ubWF5YmVCcm9hZGNhc3RXYXRjaD1PYmplY3Qoby5jKSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5icm9hZGNhc3RXYXRjaC5jYWxsKG4sZSwhIXQpfSkse21ha2VDYWNoZUtleTpmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGltaXN0aWM/bi5vcHRpbWlzdGljRGF0YTpuLmRhdGE7aWYoSSh0KSl7dmFyIHI9ZS5vcHRpbWlzdGljLG89ZS5yb290SWQsaT1lLnZhcmlhYmxlcztyZXR1cm4gdC5tYWtlQ2FjaGVLZXkoZS5xdWVyeSxlLmNhbGxiYWNrLEpTT04uc3RyaW5naWZ5KHtvcHRpbWlzdGljOnIscm9vdElkOm8sdmFyaWFibGVzOml9KSl9fX0pLG4ud2F0Y2hEZXA9T2JqZWN0KG8uYikoKSxuLmNvbmZpZz1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxCKSx0KSxuLmFkZFR5cGVuYW1lPSEhbi5jb25maWcuYWRkVHlwZW5hbWUsbi5wb2xpY2llcz1uZXcgRC5hKHtjYWNoZTpuLGRhdGFJZEZyb21PYmplY3Q6bi5jb25maWcuZGF0YUlkRnJvbU9iamVjdCxwb3NzaWJsZVR5cGVzOm4uY29uZmlnLnBvc3NpYmxlVHlwZXMsdHlwZVBvbGljaWVzOm4uY29uZmlnLnR5cGVQb2xpY2llc30pLG4uZGF0YT1uZXcgai5Sb290KHtwb2xpY2llczpuLnBvbGljaWVzLHJlc3VsdENhY2hpbmc6bi5jb25maWcucmVzdWx0Q2FjaGluZ30pLG4ub3B0aW1pc3RpY0RhdGE9bi5kYXRhLG4uc3RvcmVXcml0ZXI9bmV3IEMobixuLnN0b3JlUmVhZGVyPW5ldyB4KHtjYWNoZTpuLGFkZFR5cGVuYW1lOm4uYWRkVHlwZW5hbWV9KSksbn1yZXR1cm4gT2JqZWN0KHIuYykodCxlKSx0LnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLmRhdGEucmVwbGFjZShlKSx0aGlzfSx0LnByb3RvdHlwZS5leHRyYWN0PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksKGU/dGhpcy5vcHRpbWlzdGljRGF0YTp0aGlzLmRhdGEpLmV4dHJhY3QoKX0sdC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXt2YXIgdD1lLnJldHVyblBhcnRpYWxEYXRhLG49dm9pZCAwIT09dCYmdDt0cnl7cmV0dXJuIHRoaXMuc3RvcmVSZWFkZXIuZGlmZlF1ZXJ5QWdhaW5zdFN0b3JlKHtzdG9yZTplLm9wdGltaXN0aWM/dGhpcy5vcHRpbWlzdGljRGF0YTp0aGlzLmRhdGEscXVlcnk6ZS5xdWVyeSx2YXJpYWJsZXM6ZS52YXJpYWJsZXMscm9vdElkOmUucm9vdElkLGNvbmZpZzp0aGlzLmNvbmZpZyxyZXR1cm5QYXJ0aWFsRGF0YTpufSkucmVzdWx0fHxudWxsfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBhLmEpcmV0dXJuIG51bGw7dGhyb3cgZX19LHQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4rK3RoaXMudHhDb3VudCx0aGlzLnN0b3JlV3JpdGVyLndyaXRlVG9TdG9yZSh7c3RvcmU6dGhpcy5kYXRhLHF1ZXJ5OmUucXVlcnkscmVzdWx0OmUucmVzdWx0LGRhdGFJZDplLmRhdGFJZCx2YXJpYWJsZXM6ZS52YXJpYWJsZXN9KX1maW5hbGx5ey0tdGhpcy50eENvdW50fHwhMT09PWUuYnJvYWRjYXN0fHx0aGlzLmJyb2FkY2FzdFdhdGNoZXMoKX19LHQucHJvdG90eXBlLm1vZGlmeT1mdW5jdGlvbihlKXtpZihtLmMuY2FsbChlLCJpZCIpJiYhZS5pZClyZXR1cm4hMTt2YXIgdD1lLm9wdGltaXN0aWM/dGhpcy5vcHRpbWlzdGljRGF0YTp0aGlzLmRhdGE7dHJ5e3JldHVybisrdGhpcy50eENvdW50LHQubW9kaWZ5KGUuaWR8fCJST09UX1FVRVJZIixlLmZpZWxkcyl9ZmluYWxseXstLXRoaXMudHhDb3VudHx8ITE9PT1lLmJyb2FkY2FzdHx8dGhpcy5icm9hZGNhc3RXYXRjaGVzKCl9fSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0b3JlUmVhZGVyLmRpZmZRdWVyeUFnYWluc3RTdG9yZSh7c3RvcmU6ZS5vcHRpbWlzdGljP3RoaXMub3B0aW1pc3RpY0RhdGE6dGhpcy5kYXRhLHJvb3RJZDplLmlkfHwiUk9PVF9RVUVSWSIscXVlcnk6ZS5xdWVyeSx2YXJpYWJsZXM6ZS52YXJpYWJsZXMscmV0dXJuUGFydGlhbERhdGE6ZS5yZXR1cm5QYXJ0aWFsRGF0YSxjb25maWc6dGhpcy5jb25maWd9KX0sdC5wcm90b3R5cGUud2F0Y2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy53YXRjaGVzLnNpemV8fE9iamVjdChOLmQpKHRoaXMpLHRoaXMud2F0Y2hlcy5hZGQoZSksZS5pbW1lZGlhdGUmJnRoaXMubWF5YmVCcm9hZGNhc3RXYXRjaChlKSxmdW5jdGlvbigpe3Qud2F0Y2hlcy5kZWxldGUoZSkmJiF0LndhdGNoZXMuc2l6ZSYmT2JqZWN0KE4uYikodCksdC53YXRjaERlcC5kaXJ0eShlKSx0Lm1heWJlQnJvYWRjYXN0V2F0Y2guZm9yZ2V0KGUpfX0sdC5wcm90b3R5cGUuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpbWlzdGljRGF0YS5nYygpfSx0LnByb3RvdHlwZS5yZXRhaW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD90aGlzLm9wdGltaXN0aWNEYXRhOnRoaXMuZGF0YSkucmV0YWluKGUpfSx0LnByb3RvdHlwZS5yZWxlYXNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ/dGhpcy5vcHRpbWlzdGljRGF0YTp0aGlzLmRhdGEpLnJlbGVhc2UoZSl9LHQucHJvdG90eXBlLmlkZW50aWZ5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qocy5mKShlKT9lLl9fcmVmOnRoaXMucG9saWNpZXMuaWRlbnRpZnkoZSlbMF19LHQucHJvdG90eXBlLmV2aWN0PWZ1bmN0aW9uKGUpe2lmKCFlLmlkKXtpZihtLmMuY2FsbChlLCJpZCIpKXJldHVybiExO2U9T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30sZSkse2lkOiJST09UX1FVRVJZIn0pfXRyeXtyZXR1cm4rK3RoaXMudHhDb3VudCx0aGlzLm9wdGltaXN0aWNEYXRhLmV2aWN0KGUpfWZpbmFsbHl7LS10aGlzLnR4Q291bnR8fCExPT09ZS5icm9hZGNhc3R8fHRoaXMuYnJvYWRjYXN0V2F0Y2hlcygpfX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNsZWFyKCksdGhpcy5vcHRpbWlzdGljRGF0YT10aGlzLmRhdGEsdGhpcy5icm9hZGNhc3RXYXRjaGVzKCksUHJvbWlzZS5yZXNvbHZlKCl9LHQucHJvdG90eXBlLnJlbW92ZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpbWlzdGljRGF0YS5yZW1vdmVMYXllcihlKTt0IT09dGhpcy5vcHRpbWlzdGljRGF0YSYmKHRoaXMub3B0aW1pc3RpY0RhdGE9dCx0aGlzLmJyb2FkY2FzdFdhdGNoZXMoKSl9LHQucHJvdG90eXBlLnBlcmZvcm1UcmFuc2FjdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1mdW5jdGlvbih0KXt2YXIgcj1uLG89ci5kYXRhLGk9ci5vcHRpbWlzdGljRGF0YTsrK24udHhDb3VudCx0JiYobi5kYXRhPW4ub3B0aW1pc3RpY0RhdGE9dCk7dHJ5e2Uobil9ZmluYWxseXstLW4udHhDb3VudCxuLmRhdGE9byxuLm9wdGltaXN0aWNEYXRhPWl9fSxvPSExOyJzdHJpbmciPT10eXBlb2YgdD8odGhpcy5vcHRpbWlzdGljRGF0YT10aGlzLm9wdGltaXN0aWNEYXRhLmFkZExheWVyKHQsciksbz0hMCk6bnVsbD09PXQ/cih0aGlzLmRhdGEpOnIoKSx0aGlzLmJyb2FkY2FzdFdhdGNoZXMobyl9LHQucHJvdG90eXBlLnRyYW5zZm9ybURvY3VtZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuYWRkVHlwZW5hbWUpe3ZhciB0PXRoaXMudHlwZW5hbWVEb2N1bWVudENhY2hlLmdldChlKTtyZXR1cm4gdHx8KHQ9T2JqZWN0KHUuYSkoZSksdGhpcy50eXBlbmFtZURvY3VtZW50Q2FjaGUuc2V0KGUsdCksdGhpcy50eXBlbmFtZURvY3VtZW50Q2FjaGUuc2V0KHQsdCkpLHR9cmV0dXJuIGV9LHQucHJvdG90eXBlLmJyb2FkY2FzdFdhdGNoZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnR4Q291bnR8fHRoaXMud2F0Y2hlcy5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdC5tYXliZUJyb2FkY2FzdFdhdGNoKG4sZSl9KSl9LHQucHJvdG90eXBlLmJyb2FkY2FzdFdhdGNoPWZ1bmN0aW9uKGUsdCl7dGhpcy53YXRjaERlcC5kaXJ0eShlKSx0aGlzLndhdGNoRGVwKGUpO3ZhciBuPXRoaXMuZGlmZih7cXVlcnk6ZS5xdWVyeSx2YXJpYWJsZXM6ZS52YXJpYWJsZXMsb3B0aW1pc3RpYzplLm9wdGltaXN0aWN9KTtlLm9wdGltaXN0aWMmJnQmJihuLmZyb21PcHRpbWlzdGljVHJhbnNhY3Rpb249ITApLGUuY2FsbGJhY2sobil9LHR9KGkuYSl9LDgxNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBofSkpO3ZhciByPW4oMTQ2KSxvPW4oMzcpLGk9big3OCksYT1uKDE1KSxzPW4oNDc5KSx1PW4oNjI4KSxjPW4oNDgwKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIG5ldyBkKGUsdCkucGFyc2VEb2N1bWVudCgpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbj1uZXcgZChlLHQpO24uZXhwZWN0VG9rZW4oYS5hLlNPRik7dmFyIHI9bi5wYXJzZVZhbHVlTGl0ZXJhbCghMSk7cmV0dXJuIG4uZXhwZWN0VG9rZW4oYS5hLkVPRikscn1mdW5jdGlvbiBoKGUsdCl7dmFyIG49bmV3IGQoZSx0KTtuLmV4cGVjdFRva2VuKGEuYS5TT0YpO3ZhciByPW4ucGFyc2VUeXBlUmVmZXJlbmNlKCk7cmV0dXJuIG4uZXhwZWN0VG9rZW4oYS5hLkVPRikscn12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj1PYmplY3Qocy5iKShlKT9lOm5ldyBzLmEoZSk7dGhpcy5fbGV4ZXI9bmV3IGMuYShuKSx0aGlzLl9vcHRpb25zPXR9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQucGFyc2VOYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHBlY3RUb2tlbihhLmEuTkFNRSk7cmV0dXJue2tpbmQ6by5hLk5BTUUsdmFsdWU6ZS52YWx1ZSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjtyZXR1cm57a2luZDpvLmEuRE9DVU1FTlQsZGVmaW5pdGlvbnM6dGhpcy5tYW55KGEuYS5TT0YsdGhpcy5wYXJzZURlZmluaXRpb24sYS5hLkVPRiksbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZURlZmluaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLnBlZWsoYS5hLk5BTUUpKXN3aXRjaCh0aGlzLl9sZXhlci50b2tlbi52YWx1ZSl7Y2FzZSJxdWVyeSI6Y2FzZSJtdXRhdGlvbiI6Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiB0aGlzLnBhcnNlT3BlcmF0aW9uRGVmaW5pdGlvbigpO2Nhc2UiZnJhZ21lbnQiOnJldHVybiB0aGlzLnBhcnNlRnJhZ21lbnREZWZpbml0aW9uKCk7Y2FzZSJzY2hlbWEiOmNhc2Uic2NhbGFyIjpjYXNlInR5cGUiOmNhc2UiaW50ZXJmYWNlIjpjYXNlInVuaW9uIjpjYXNlImVudW0iOmNhc2UiaW5wdXQiOmNhc2UiZGlyZWN0aXZlIjpyZXR1cm4gdGhpcy5wYXJzZVR5cGVTeXN0ZW1EZWZpbml0aW9uKCk7Y2FzZSJleHRlbmQiOnJldHVybiB0aGlzLnBhcnNlVHlwZVN5c3RlbUV4dGVuc2lvbigpfWVsc2V7aWYodGhpcy5wZWVrKGEuYS5CUkFDRV9MKSlyZXR1cm4gdGhpcy5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb24oKTtpZih0aGlzLnBlZWtEZXNjcmlwdGlvbigpKXJldHVybiB0aGlzLnBhcnNlVHlwZVN5c3RlbURlZmluaXRpb24oKX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX0sdC5wYXJzZU9wZXJhdGlvbkRlZmluaXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjtpZih0aGlzLnBlZWsoYS5hLkJSQUNFX0wpKXJldHVybntraW5kOm8uYS5PUEVSQVRJT05fREVGSU5JVElPTixvcGVyYXRpb246InF1ZXJ5IixuYW1lOnZvaWQgMCx2YXJpYWJsZURlZmluaXRpb25zOltdLGRpcmVjdGl2ZXM6W10sc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKSxsb2M6dGhpcy5sb2MoZSl9O3ZhciB0LG49dGhpcy5wYXJzZU9wZXJhdGlvblR5cGUoKTtyZXR1cm4gdGhpcy5wZWVrKGEuYS5OQU1FKSYmKHQ9dGhpcy5wYXJzZU5hbWUoKSkse2tpbmQ6by5hLk9QRVJBVElPTl9ERUZJTklUSU9OLG9wZXJhdGlvbjpuLG5hbWU6dCx2YXJpYWJsZURlZmluaXRpb25zOnRoaXMucGFyc2VWYXJpYWJsZURlZmluaXRpb25zKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlT3BlcmF0aW9uVHlwZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZXhwZWN0VG9rZW4oYS5hLk5BTUUpO3N3aXRjaChlLnZhbHVlKXtjYXNlInF1ZXJ5IjpyZXR1cm4icXVlcnkiO2Nhc2UibXV0YXRpb24iOnJldHVybiJtdXRhdGlvbiI7Y2FzZSJzdWJzY3JpcHRpb24iOnJldHVybiJzdWJzY3JpcHRpb24ifXRocm93IHRoaXMudW5leHBlY3RlZChlKX0sdC5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkoYS5hLlBBUkVOX0wsdGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbixhLmEuUEFSRU5fUil9LHQucGFyc2VWYXJpYWJsZURlZmluaXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjtyZXR1cm57a2luZDpvLmEuVkFSSUFCTEVfREVGSU5JVElPTix2YXJpYWJsZTp0aGlzLnBhcnNlVmFyaWFibGUoKSx0eXBlOih0aGlzLmV4cGVjdFRva2VuKGEuYS5DT0xPTiksdGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSksZGVmYXVsdFZhbHVlOnRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihhLmEuRVFVQUxTKT90aGlzLnBhcnNlVmFsdWVMaXRlcmFsKCEwKTp2b2lkIDAsZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMCksbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZVZhcmlhYmxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4oYS5hLkRPTExBUikse2tpbmQ6by5hLlZBUklBQkxFLG5hbWU6dGhpcy5wYXJzZU5hbWUoKSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlU2VsZWN0aW9uU2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJue2tpbmQ6by5hLlNFTEVDVElPTl9TRVQsc2VsZWN0aW9uczp0aGlzLm1hbnkoYS5hLkJSQUNFX0wsdGhpcy5wYXJzZVNlbGVjdGlvbixhLmEuQlJBQ0VfUiksbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZVNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBlZWsoYS5hLlNQUkVBRCk/dGhpcy5wYXJzZUZyYWdtZW50KCk6dGhpcy5wYXJzZUZpZWxkKCl9LHQucGFyc2VGaWVsZD1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLl9sZXhlci50b2tlbixyPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihhLmEuQ09MT04pPyhlPXIsdD10aGlzLnBhcnNlTmFtZSgpKTp0PXIse2tpbmQ6by5hLkZJRUxELGFsaWFzOmUsbmFtZTp0LGFyZ3VtZW50czp0aGlzLnBhcnNlQXJndW1lbnRzKCExKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wZWVrKGEuYS5CUkFDRV9MKT90aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCk6dm9pZCAwLGxvYzp0aGlzLmxvYyhuKX19LHQucGFyc2VBcmd1bWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT90aGlzLnBhcnNlQ29uc3RBcmd1bWVudDp0aGlzLnBhcnNlQXJndW1lbnQ7cmV0dXJuIHRoaXMub3B0aW9uYWxNYW55KGEuYS5QQVJFTl9MLHQsYS5hLlBBUkVOX1IpfSx0LnBhcnNlQXJndW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbix0PXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4oYS5hLkNPTE9OKSx7a2luZDpvLmEuQVJHVU1FTlQsbmFtZTp0LHZhbHVlOnRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITEpLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VDb25zdEFyZ3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJue2tpbmQ6by5hLkFSR1VNRU5ULG5hbWU6dGhpcy5wYXJzZU5hbWUoKSx2YWx1ZToodGhpcy5leHBlY3RUb2tlbihhLmEuQ09MT04pLHRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITApKSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdFRva2VuKGEuYS5TUFJFQUQpO3ZhciB0PXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJvbiIpO3JldHVybiF0JiZ0aGlzLnBlZWsoYS5hLk5BTUUpP3traW5kOm8uYS5GUkFHTUVOVF9TUFJFQUQsbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksbG9jOnRoaXMubG9jKGUpfTp7a2luZDpvLmEuSU5MSU5FX0ZSQUdNRU5ULHR5cGVDb25kaXRpb246dD90aGlzLnBhcnNlTmFtZWRUeXBlKCk6dm9pZCAwLGRpcmVjdGl2ZXM6dGhpcy5wYXJzZURpcmVjdGl2ZXMoITEpLHNlbGVjdGlvblNldDp0aGlzLnBhcnNlU2VsZWN0aW9uU2V0KCksbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZUZyYWdtZW50RGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuZXhwZWN0S2V5d29yZCgiZnJhZ21lbnQiKSwhMD09PShudWxsPT09KGU9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXhwZXJpbWVudGFsRnJhZ21lbnRWYXJpYWJsZXMpP3traW5kOm8uYS5GUkFHTUVOVF9ERUZJTklUSU9OLG5hbWU6dGhpcy5wYXJzZUZyYWdtZW50TmFtZSgpLHZhcmlhYmxlRGVmaW5pdGlvbnM6dGhpcy5wYXJzZVZhcmlhYmxlRGVmaW5pdGlvbnMoKSx0eXBlQ29uZGl0aW9uOih0aGlzLmV4cGVjdEtleXdvcmQoIm9uIiksdGhpcy5wYXJzZU5hbWVkVHlwZSgpKSxkaXJlY3RpdmVzOnRoaXMucGFyc2VEaXJlY3RpdmVzKCExKSxzZWxlY3Rpb25TZXQ6dGhpcy5wYXJzZVNlbGVjdGlvblNldCgpLGxvYzp0aGlzLmxvYyh0KX06e2tpbmQ6by5hLkZSQUdNRU5UX0RFRklOSVRJT04sbmFtZTp0aGlzLnBhcnNlRnJhZ21lbnROYW1lKCksdHlwZUNvbmRpdGlvbjoodGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpLHRoaXMucGFyc2VOYW1lZFR5cGUoKSksZGlyZWN0aXZlczp0aGlzLnBhcnNlRGlyZWN0aXZlcyghMSksc2VsZWN0aW9uU2V0OnRoaXMucGFyc2VTZWxlY3Rpb25TZXQoKSxsb2M6dGhpcy5sb2ModCl9fSx0LnBhcnNlRnJhZ21lbnROYW1lPWZ1bmN0aW9uKCl7aWYoIm9uIj09PXRoaXMuX2xleGVyLnRva2VuLnZhbHVlKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLnBhcnNlTmFtZSgpfSx0LnBhcnNlVmFsdWVMaXRlcmFsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xleGVyLnRva2VuO3N3aXRjaCh0LmtpbmQpe2Nhc2UgYS5hLkJSQUNLRVRfTDpyZXR1cm4gdGhpcy5wYXJzZUxpc3QoZSk7Y2FzZSBhLmEuQlJBQ0VfTDpyZXR1cm4gdGhpcy5wYXJzZU9iamVjdChlKTtjYXNlIGEuYS5JTlQ6cmV0dXJuIHRoaXMuX2xleGVyLmFkdmFuY2UoKSx7a2luZDpvLmEuSU5ULHZhbHVlOnQudmFsdWUsbG9jOnRoaXMubG9jKHQpfTtjYXNlIGEuYS5GTE9BVDpyZXR1cm4gdGhpcy5fbGV4ZXIuYWR2YW5jZSgpLHtraW5kOm8uYS5GTE9BVCx2YWx1ZTp0LnZhbHVlLGxvYzp0aGlzLmxvYyh0KX07Y2FzZSBhLmEuU1RSSU5HOmNhc2UgYS5hLkJMT0NLX1NUUklORzpyZXR1cm4gdGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwoKTtjYXNlIGEuYS5OQU1FOnN3aXRjaCh0aGlzLl9sZXhlci5hZHZhbmNlKCksdC52YWx1ZSl7Y2FzZSJ0cnVlIjpyZXR1cm57a2luZDpvLmEuQk9PTEVBTix2YWx1ZTohMCxsb2M6dGhpcy5sb2ModCl9O2Nhc2UiZmFsc2UiOnJldHVybntraW5kOm8uYS5CT09MRUFOLHZhbHVlOiExLGxvYzp0aGlzLmxvYyh0KX07Y2FzZSJudWxsIjpyZXR1cm57a2luZDpvLmEuTlVMTCxsb2M6dGhpcy5sb2ModCl9O2RlZmF1bHQ6cmV0dXJue2tpbmQ6by5hLkVOVU0sdmFsdWU6dC52YWx1ZSxsb2M6dGhpcy5sb2ModCl9fWNhc2UgYS5hLkRPTExBUjppZighZSlyZXR1cm4gdGhpcy5wYXJzZVZhcmlhYmxlKCl9dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9LHQucGFyc2VTdHJpbmdMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJuIHRoaXMuX2xleGVyLmFkdmFuY2UoKSx7a2luZDpvLmEuU1RSSU5HLHZhbHVlOmUudmFsdWUsYmxvY2s6ZS5raW5kPT09YS5hLkJMT0NLX1NUUklORyxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlTGlzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJue2tpbmQ6by5hLkxJU1QsdmFsdWVzOnRoaXMuYW55KGEuYS5CUkFDS0VUX0wsKGZ1bmN0aW9uKCl7cmV0dXJuIHQucGFyc2VWYWx1ZUxpdGVyYWwoZSl9KSxhLmEuQlJBQ0tFVF9SKSxsb2M6dGhpcy5sb2Mobil9fSx0LnBhcnNlT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLl9sZXhlci50b2tlbjtyZXR1cm57a2luZDpvLmEuT0JKRUNULGZpZWxkczp0aGlzLmFueShhLmEuQlJBQ0VfTCwoZnVuY3Rpb24oKXtyZXR1cm4gdC5wYXJzZU9iamVjdEZpZWxkKGUpfSksYS5hLkJSQUNFX1IpLGxvYzp0aGlzLmxvYyhuKX19LHQucGFyc2VPYmplY3RGaWVsZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9sZXhlci50b2tlbixuPXRoaXMucGFyc2VOYW1lKCk7cmV0dXJuIHRoaXMuZXhwZWN0VG9rZW4oYS5hLkNPTE9OKSx7a2luZDpvLmEuT0JKRUNUX0ZJRUxELG5hbWU6bix2YWx1ZTp0aGlzLnBhcnNlVmFsdWVMaXRlcmFsKGUpLGxvYzp0aGlzLmxvYyh0KX19LHQucGFyc2VEaXJlY3RpdmVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTt0aGlzLnBlZWsoYS5hLkFUKTspdC5wdXNoKHRoaXMucGFyc2VEaXJlY3RpdmUoZSkpO3JldHVybiB0fSx0LnBhcnNlRGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdFRva2VuKGEuYS5BVCkse2tpbmQ6by5hLkRJUkVDVElWRSxuYW1lOnRoaXMucGFyc2VOYW1lKCksYXJndW1lbnRzOnRoaXMucGFyc2VBcmd1bWVudHMoZSksbG9jOnRoaXMubG9jKHQpfX0sdC5wYXJzZVR5cGVSZWZlcmVuY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuX2xleGVyLnRva2VuO3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oYS5hLkJSQUNLRVRfTCk/KGU9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKSx0aGlzLmV4cGVjdFRva2VuKGEuYS5CUkFDS0VUX1IpLGU9e2tpbmQ6by5hLkxJU1RfVFlQRSx0eXBlOmUsbG9jOnRoaXMubG9jKHQpfSk6ZT10aGlzLnBhcnNlTmFtZWRUeXBlKCksdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGEuYS5CQU5HKT97a2luZDpvLmEuTk9OX05VTExfVFlQRSx0eXBlOmUsbG9jOnRoaXMubG9jKHQpfTplfSx0LnBhcnNlTmFtZWRUeXBlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47cmV0dXJue2tpbmQ6by5hLk5BTUVEX1RZUEUsbmFtZTp0aGlzLnBhcnNlTmFtZSgpLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VUeXBlU3lzdGVtRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGVla0Rlc2NyaXB0aW9uKCk/dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk6dGhpcy5fbGV4ZXIudG9rZW47aWYoZS5raW5kPT09YS5hLk5BTUUpc3dpdGNoKGUudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYURlZmluaXRpb24oKTtjYXNlInNjYWxhciI6cmV0dXJuIHRoaXMucGFyc2VTY2FsYXJUeXBlRGVmaW5pdGlvbigpO2Nhc2UidHlwZSI6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVEZWZpbml0aW9uKCk7Y2FzZSJ1bmlvbiI6cmV0dXJuIHRoaXMucGFyc2VVbmlvblR5cGVEZWZpbml0aW9uKCk7Y2FzZSJlbnVtIjpyZXR1cm4gdGhpcy5wYXJzZUVudW1UeXBlRGVmaW5pdGlvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRGVmaW5pdGlvbigpO2Nhc2UiZGlyZWN0aXZlIjpyZXR1cm4gdGhpcy5wYXJzZURpcmVjdGl2ZURlZmluaXRpb24oKX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQoZSl9LHQucGVla0Rlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVlayhhLmEuU1RSSU5HKXx8dGhpcy5wZWVrKGEuYS5CTE9DS19TVFJJTkcpfSx0LnBhcnNlRGVzY3JpcHRpb249ZnVuY3Rpb24oKXtpZih0aGlzLnBlZWtEZXNjcmlwdGlvbigpKXJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpfSx0LnBhcnNlU2NoZW1hRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzY2hlbWEiKTt2YXIgbj10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCkscj10aGlzLm1hbnkoYS5hLkJSQUNFX0wsdGhpcy5wYXJzZU9wZXJhdGlvblR5cGVEZWZpbml0aW9uLGEuYS5CUkFDRV9SKTtyZXR1cm57a2luZDpvLmEuU0NIRU1BX0RFRklOSVRJT04sZGVzY3JpcHRpb246dCxkaXJlY3RpdmVzOm4sb3BlcmF0aW9uVHlwZXM6cixsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlT3BlcmF0aW9uVHlwZURlZmluaXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbix0PXRoaXMucGFyc2VPcGVyYXRpb25UeXBlKCk7dGhpcy5leHBlY3RUb2tlbihhLmEuQ09MT04pO3ZhciBuPXRoaXMucGFyc2VOYW1lZFR5cGUoKTtyZXR1cm57a2luZDpvLmEuT1BFUkFUSU9OX1RZUEVfREVGSU5JVElPTixvcGVyYXRpb246dCx0eXBlOm4sbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZVNjYWxhclR5cGVEZWZpbml0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW4sdD10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInNjYWxhciIpO3ZhciBuPXRoaXMucGFyc2VOYW1lKCkscj10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCk7cmV0dXJue2tpbmQ6by5hLlNDQUxBUl9UWVBFX0RFRklOSVRJT04sZGVzY3JpcHRpb246dCxuYW1lOm4sZGlyZWN0aXZlczpyLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VPYmplY3RUeXBlRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0eXBlIik7dmFyIG49dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLGk9dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApLGE9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm57a2luZDpvLmEuT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjp0LG5hbWU6bixpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczppLGZpZWxkczphLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcz1mdW5jdGlvbigpe3ZhciBlO2lmKCF0aGlzLmV4cGVjdE9wdGlvbmFsS2V5d29yZCgiaW1wbGVtZW50cyIpKXJldHVybltdO2lmKCEwPT09KG51bGw9PT0oZT10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hbGxvd0xlZ2FjeVNETEltcGxlbWVudHNJbnRlcmZhY2VzKSl7dmFyIHQ9W107dGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGEuYS5BTVApO2Rve3QucHVzaCh0aGlzLnBhcnNlTmFtZWRUeXBlKCkpfXdoaWxlKHRoaXMuZXhwZWN0T3B0aW9uYWxUb2tlbihhLmEuQU1QKXx8dGhpcy5wZWVrKGEuYS5OQU1FKSk7cmV0dXJuIHR9cmV0dXJuIHRoaXMuZGVsaW1pdGVkTWFueShhLmEuQU1QLHRoaXMucGFyc2VOYW1lZFR5cGUpfSx0LnBhcnNlRmllbGRzRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiEwPT09KG51bGw9PT0oZT10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hbGxvd0xlZ2FjeVNETEVtcHR5RmllbGRzKSYmdGhpcy5wZWVrKGEuYS5CUkFDRV9MKSYmdGhpcy5fbGV4ZXIubG9va2FoZWFkKCkua2luZD09PWEuYS5CUkFDRV9SPyh0aGlzLl9sZXhlci5hZHZhbmNlKCksdGhpcy5fbGV4ZXIuYWR2YW5jZSgpLFtdKTp0aGlzLm9wdGlvbmFsTWFueShhLmEuQlJBQ0VfTCx0aGlzLnBhcnNlRmllbGREZWZpbml0aW9uLGEuYS5CUkFDRV9SKX0sdC5wYXJzZUZpZWxkRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksbj10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZUFyZ3VtZW50RGVmcygpO3RoaXMuZXhwZWN0VG9rZW4oYS5hLkNPTE9OKTt2YXIgaT10aGlzLnBhcnNlVHlwZVJlZmVyZW5jZSgpLHM9dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApO3JldHVybntraW5kOm8uYS5GSUVMRF9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnQsbmFtZTpuLGFyZ3VtZW50czpyLHR5cGU6aSxkaXJlY3RpdmVzOnMsbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZUFyZ3VtZW50RGVmcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShhLmEuUEFSRU5fTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixhLmEuUEFSRU5fUil9LHQucGFyc2VJbnB1dFZhbHVlRGVmPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW4sdD10aGlzLnBhcnNlRGVzY3JpcHRpb24oKSxuPXRoaXMucGFyc2VOYW1lKCk7dGhpcy5leHBlY3RUb2tlbihhLmEuQ09MT04pO3ZhciByLGk9dGhpcy5wYXJzZVR5cGVSZWZlcmVuY2UoKTt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oYS5hLkVRVUFMUykmJihyPXRoaXMucGFyc2VWYWx1ZUxpdGVyYWwoITApKTt2YXIgcz10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCk7cmV0dXJue2tpbmQ6by5hLklOUFVUX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246dCxuYW1lOm4sdHlwZTppLGRlZmF1bHRWYWx1ZTpyLGRpcmVjdGl2ZXM6cyxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlSW50ZXJmYWNlVHlwZURlZmluaXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbix0PXRoaXMucGFyc2VEZXNjcmlwdGlvbigpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW50ZXJmYWNlIik7dmFyIG49dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VJbXBsZW1lbnRzSW50ZXJmYWNlcygpLGk9dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApLGE9dGhpcy5wYXJzZUZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm57a2luZDpvLmEuSU5URVJGQUNFX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjp0LG5hbWU6bixpbnRlcmZhY2VzOnIsZGlyZWN0aXZlczppLGZpZWxkczphLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VVbmlvblR5cGVEZWZpbml0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW4sdD10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7dmFyIG49dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKSxpPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7cmV0dXJue2tpbmQ6by5hLlVOSU9OX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjp0LG5hbWU6bixkaXJlY3RpdmVzOnIsdHlwZXM6aSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlVW5pb25NZW1iZXJUeXBlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oYS5hLkVRVUFMUyk/dGhpcy5kZWxpbWl0ZWRNYW55KGEuYS5QSVBFLHRoaXMucGFyc2VOYW1lZFR5cGUpOltdfSx0LnBhcnNlRW51bVR5cGVEZWZpbml0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW4sdD10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImVudW0iKTt2YXIgbj10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApLGk9dGhpcy5wYXJzZUVudW1WYWx1ZXNEZWZpbml0aW9uKCk7cmV0dXJue2tpbmQ6by5hLkVOVU1fVFlQRV9ERUZJTklUSU9OLGRlc2NyaXB0aW9uOnQsbmFtZTpuLGRpcmVjdGl2ZXM6cix2YWx1ZXM6aSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25hbE1hbnkoYS5hLkJSQUNFX0wsdGhpcy5wYXJzZUVudW1WYWx1ZURlZmluaXRpb24sYS5hLkJSQUNFX1IpfSx0LnBhcnNlRW51bVZhbHVlRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZURlc2NyaXB0aW9uKCksbj10aGlzLnBhcnNlTmFtZSgpLHI9dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApO3JldHVybntraW5kOm8uYS5FTlVNX1ZBTFVFX0RFRklOSVRJT04sZGVzY3JpcHRpb246dCxuYW1lOm4sZGlyZWN0aXZlczpyLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VJbnB1dE9iamVjdFR5cGVEZWZpbml0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW4sdD10aGlzLnBhcnNlRGVzY3JpcHRpb24oKTt0aGlzLmV4cGVjdEtleXdvcmQoImlucHV0Iik7dmFyIG49dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKSxpPXRoaXMucGFyc2VJbnB1dEZpZWxkc0RlZmluaXRpb24oKTtyZXR1cm57a2luZDpvLmEuSU5QVVRfT0JKRUNUX1RZUEVfREVGSU5JVElPTixkZXNjcmlwdGlvbjp0LG5hbWU6bixkaXJlY3RpdmVzOnIsZmllbGRzOmksbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbmFsTWFueShhLmEuQlJBQ0VfTCx0aGlzLnBhcnNlSW5wdXRWYWx1ZURlZixhLmEuQlJBQ0VfUil9LHQucGFyc2VUeXBlU3lzdGVtRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIubG9va2FoZWFkKCk7aWYoZS5raW5kPT09YS5hLk5BTUUpc3dpdGNoKGUudmFsdWUpe2Nhc2Uic2NoZW1hIjpyZXR1cm4gdGhpcy5wYXJzZVNjaGVtYUV4dGVuc2lvbigpO2Nhc2Uic2NhbGFyIjpyZXR1cm4gdGhpcy5wYXJzZVNjYWxhclR5cGVFeHRlbnNpb24oKTtjYXNlInR5cGUiOnJldHVybiB0aGlzLnBhcnNlT2JqZWN0VHlwZUV4dGVuc2lvbigpO2Nhc2UiaW50ZXJmYWNlIjpyZXR1cm4gdGhpcy5wYXJzZUludGVyZmFjZVR5cGVFeHRlbnNpb24oKTtjYXNlInVuaW9uIjpyZXR1cm4gdGhpcy5wYXJzZVVuaW9uVHlwZUV4dGVuc2lvbigpO2Nhc2UiZW51bSI6cmV0dXJuIHRoaXMucGFyc2VFbnVtVHlwZUV4dGVuc2lvbigpO2Nhc2UiaW5wdXQiOnJldHVybiB0aGlzLnBhcnNlSW5wdXRPYmplY3RUeXBlRXh0ZW5zaW9uKCl9dGhyb3cgdGhpcy51bmV4cGVjdGVkKGUpfSx0LnBhcnNlU2NoZW1hRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInNjaGVtYSIpO3ZhciB0PXRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKSxuPXRoaXMub3B0aW9uYWxNYW55KGEuYS5CUkFDRV9MLHRoaXMucGFyc2VPcGVyYXRpb25UeXBlRGVmaW5pdGlvbixhLmEuQlJBQ0VfUik7aWYoMD09PXQubGVuZ3RoJiYwPT09bi5sZW5ndGgpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJue2tpbmQ6by5hLlNDSEVNQV9FWFRFTlNJT04sZGlyZWN0aXZlczp0LG9wZXJhdGlvblR5cGVzOm4sbG9jOnRoaXMubG9jKGUpfX0sdC5wYXJzZVNjYWxhclR5cGVFeHRlbnNpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgic2NhbGFyIik7dmFyIHQ9dGhpcy5wYXJzZU5hbWUoKSxuPXRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKTtpZigwPT09bi5sZW5ndGgpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJue2tpbmQ6by5hLlNDQUxBUl9UWVBFX0VYVEVOU0lPTixuYW1lOnQsZGlyZWN0aXZlczpuLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VPYmplY3RUeXBlRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInR5cGUiKTt2YXIgdD10aGlzLnBhcnNlTmFtZSgpLG49dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCksaT10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKDA9PT1uLmxlbmd0aCYmMD09PXIubGVuZ3RoJiYwPT09aS5sZW5ndGgpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJue2tpbmQ6by5hLk9CSkVDVF9UWVBFX0VYVEVOU0lPTixuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6cixmaWVsZHM6aSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlSW50ZXJmYWNlVHlwZUV4dGVuc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuO3RoaXMuZXhwZWN0S2V5d29yZCgiZXh0ZW5kIiksdGhpcy5leHBlY3RLZXl3b3JkKCJpbnRlcmZhY2UiKTt2YXIgdD10aGlzLnBhcnNlTmFtZSgpLG49dGhpcy5wYXJzZUltcGxlbWVudHNJbnRlcmZhY2VzKCkscj10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCksaT10aGlzLnBhcnNlRmllbGRzRGVmaW5pdGlvbigpO2lmKDA9PT1uLmxlbmd0aCYmMD09PXIubGVuZ3RoJiYwPT09aS5sZW5ndGgpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJue2tpbmQ6by5hLklOVEVSRkFDRV9UWVBFX0VYVEVOU0lPTixuYW1lOnQsaW50ZXJmYWNlczpuLGRpcmVjdGl2ZXM6cixmaWVsZHM6aSxsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlVW5pb25UeXBlRXh0ZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbGV4ZXIudG9rZW47dGhpcy5leHBlY3RLZXl3b3JkKCJleHRlbmQiKSx0aGlzLmV4cGVjdEtleXdvcmQoInVuaW9uIik7dmFyIHQ9dGhpcy5wYXJzZU5hbWUoKSxuPXRoaXMucGFyc2VEaXJlY3RpdmVzKCEwKSxyPXRoaXMucGFyc2VVbmlvbk1lbWJlclR5cGVzKCk7aWYoMD09PW4ubGVuZ3RoJiYwPT09ci5sZW5ndGgpdGhyb3cgdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJue2tpbmQ6by5hLlVOSU9OX1RZUEVfRVhURU5TSU9OLG5hbWU6dCxkaXJlY3RpdmVzOm4sdHlwZXM6cixsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlRW51bVR5cGVFeHRlbnNpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiZW51bSIpO3ZhciB0PXRoaXMucGFyc2VOYW1lKCksbj10aGlzLnBhcnNlRGlyZWN0aXZlcyghMCkscj10aGlzLnBhcnNlRW51bVZhbHVlc0RlZmluaXRpb24oKTtpZigwPT09bi5sZW5ndGgmJjA9PT1yLmxlbmd0aCl0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm57a2luZDpvLmEuRU5VTV9UWVBFX0VYVEVOU0lPTixuYW1lOnQsZGlyZWN0aXZlczpuLHZhbHVlczpyLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VJbnB1dE9iamVjdFR5cGVFeHRlbnNpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9sZXhlci50b2tlbjt0aGlzLmV4cGVjdEtleXdvcmQoImV4dGVuZCIpLHRoaXMuZXhwZWN0S2V5d29yZCgiaW5wdXQiKTt2YXIgdD10aGlzLnBhcnNlTmFtZSgpLG49dGhpcy5wYXJzZURpcmVjdGl2ZXMoITApLHI9dGhpcy5wYXJzZUlucHV0RmllbGRzRGVmaW5pdGlvbigpO2lmKDA9PT1uLmxlbmd0aCYmMD09PXIubGVuZ3RoKXRocm93IHRoaXMudW5leHBlY3RlZCgpO3JldHVybntraW5kOm8uYS5JTlBVVF9PQkpFQ1RfVFlQRV9FWFRFTlNJT04sbmFtZTp0LGRpcmVjdGl2ZXM6bixmaWVsZHM6cixsb2M6dGhpcy5sb2MoZSl9fSx0LnBhcnNlRGlyZWN0aXZlRGVmaW5pdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZURlc2NyaXB0aW9uKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJkaXJlY3RpdmUiKSx0aGlzLmV4cGVjdFRva2VuKGEuYS5BVCk7dmFyIG49dGhpcy5wYXJzZU5hbWUoKSxyPXRoaXMucGFyc2VBcmd1bWVudERlZnMoKSxpPXRoaXMuZXhwZWN0T3B0aW9uYWxLZXl3b3JkKCJyZXBlYXRhYmxlIik7dGhpcy5leHBlY3RLZXl3b3JkKCJvbiIpO3ZhciBzPXRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbnMoKTtyZXR1cm57a2luZDpvLmEuRElSRUNUSVZFX0RFRklOSVRJT04sZGVzY3JpcHRpb246dCxuYW1lOm4sYXJndW1lbnRzOnIscmVwZWF0YWJsZTppLGxvY2F0aW9uczpzLGxvYzp0aGlzLmxvYyhlKX19LHQucGFyc2VEaXJlY3RpdmVMb2NhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxpbWl0ZWRNYW55KGEuYS5QSVBFLHRoaXMucGFyc2VEaXJlY3RpdmVMb2NhdGlvbil9LHQucGFyc2VEaXJlY3RpdmVMb2NhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2xleGVyLnRva2VuLHQ9dGhpcy5wYXJzZU5hbWUoKTtpZih2b2lkIDAhPT11LmFbdC52YWx1ZV0pcmV0dXJuIHQ7dGhyb3cgdGhpcy51bmV4cGVjdGVkKGUpfSx0LmxvYz1mdW5jdGlvbihlKXt2YXIgdDtpZighMCE9PShudWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubm9Mb2NhdGlvbikpcmV0dXJuIG5ldyBpLmEoZSx0aGlzLl9sZXhlci5sYXN0VG9rZW4sdGhpcy5fbGV4ZXIuc291cmNlKX0sdC5wZWVrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sZXhlci50b2tlbi5raW5kPT09ZX0sdC5leHBlY3RUb2tlbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9sZXhlci50b2tlbjtpZih0LmtpbmQ9PT1lKXJldHVybiB0aGlzLl9sZXhlci5hZHZhbmNlKCksdDt0aHJvdyBPYmplY3Qoci5hKSh0aGlzLl9sZXhlci5zb3VyY2UsdC5zdGFydCwiRXhwZWN0ZWQgIi5jb25jYXQodihlKSwiLCBmb3VuZCAiKS5jb25jYXQocCh0KSwiLiIpKX0sdC5leHBlY3RPcHRpb25hbFRva2VuPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xleGVyLnRva2VuO2lmKHQua2luZD09PWUpcmV0dXJuIHRoaXMuX2xleGVyLmFkdmFuY2UoKSx0fSx0LmV4cGVjdEtleXdvcmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbGV4ZXIudG9rZW47aWYodC5raW5kIT09YS5hLk5BTUV8fHQudmFsdWUhPT1lKXRocm93IE9iamVjdChyLmEpKHRoaXMuX2xleGVyLnNvdXJjZSx0LnN0YXJ0LCdFeHBlY3RlZCAiJy5jb25jYXQoZSwnIiwgZm91bmQgJykuY29uY2F0KHAodCksIi4iKSk7dGhpcy5fbGV4ZXIuYWR2YW5jZSgpfSx0LmV4cGVjdE9wdGlvbmFsS2V5d29yZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gdC5raW5kPT09YS5hLk5BTUUmJnQudmFsdWU9PT1lJiYodGhpcy5fbGV4ZXIuYWR2YW5jZSgpLCEwKX0sdC51bmV4cGVjdGVkPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGwhPWU/ZTp0aGlzLl9sZXhlci50b2tlbjtyZXR1cm4gT2JqZWN0KHIuYSkodGhpcy5fbGV4ZXIuc291cmNlLHQuc3RhcnQsIlVuZXhwZWN0ZWQgIi5jb25jYXQocCh0KSwiLiIpKX0sdC5hbnk9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuZXhwZWN0VG9rZW4oZSk7Zm9yKHZhciByPVtdOyF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obik7KXIucHVzaCh0LmNhbGwodGhpcykpO3JldHVybiByfSx0Lm9wdGlvbmFsTWFueT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGUpKXt2YXIgcj1bXTtkb3tyLnB1c2godC5jYWxsKHRoaXMpKX13aGlsZSghdGhpcy5leHBlY3RPcHRpb25hbFRva2VuKG4pKTtyZXR1cm4gcn1yZXR1cm5bXX0sdC5tYW55PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmV4cGVjdFRva2VuKGUpO3ZhciByPVtdO2Rve3IucHVzaCh0LmNhbGwodGhpcykpfXdoaWxlKCF0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4obikpO3JldHVybiByfSx0LmRlbGltaXRlZE1hbnk9ZnVuY3Rpb24oZSx0KXt0aGlzLmV4cGVjdE9wdGlvbmFsVG9rZW4oZSk7dmFyIG49W107ZG97bi5wdXNoKHQuY2FsbCh0aGlzKSl9d2hpbGUodGhpcy5leHBlY3RPcHRpb25hbFRva2VuKGUpKTtyZXR1cm4gbn0sZX0oKTtmdW5jdGlvbiBwKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIHYoZS5raW5kKSsobnVsbCE9dD8nICInLmNvbmNhdCh0LCciJyk6IiIpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE9iamVjdChjLmIpKGUpPyciJy5jb25jYXQoZSwnIicpOmV9fSw4MTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI1KSxvPW4oNjYyKSxpPW4oMCksYT1uKDQzMCkscz1uLm4oYSksdT1uKDE1OCk7Y29uc3QgYz1uLm4odSkuYS5iaW5kKHMuYSk7dC5hPU9iamVjdChyLmEpKChmdW5jdGlvbigpe2NvbnN0IGU9T2JqZWN0KG8uYikoMSk/cy5hLnJpYmJvbkJhclNpbmdsZUxpbmU6T2JqZWN0KG8uYikoMCk/cy5hLnJpYmJvbkJhckNvbW1hbmRCYXI6cy5hLnJpYmJvbkJhck11bHRpbGluZTtyZXR1cm4gaS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YyhzLmEucmliYm9uLGUpfSl9KSl9LDgyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oMTcpLG89bigyMTgpLGk9bigyKSxhPW4oMTIwKSxzPW4oMjIpO2NvbnN0IHU9e29rOiJjbGllbnRzdGFydHVwc3VjY2VzcyIsZmFpbDoiY2xpZW50c3RhcnR1cGVycm9yIix0cmFuc2llbnQ6ImNsaWVudHN0YXJ0dXBlcnJvciJ9O2FzeW5jIGZ1bmN0aW9uIGMoZSx0LG4sYSl7dmFyIGM7bGV0IGQscDt0cnl7ZD1hd2FpdCBPYmplY3QoaS5wKSgpO2NvbnN0IGU9T2JqZWN0KGkuRikoKTtlJiYocD1hd2FpdCBlKX1jYXRjaChlKXt9bGV0IHY9W2YodVtlXXx8ImNsaWVudHN0YXJ0dXBvdGhlciIsZSx0LGQscCldO2lmKHdpbmRvdy5vd2FCYWNrZmlsbGVkRXJyb3JzKWZvcihsZXQgbj0wO248d2luZG93Lm93YUJhY2tmaWxsZWRFcnJvcnMubGVuZ3RoO24rKyl2LnB1c2goZigiYm9vdGV2YWxlcnJvciIsZSx0LGQscCkpO2xldCBiPSIiO2EmJmEuZGlhZ25vc3RpY0luZm8mJihiKz1hLmRpYWdub3N0aWNJbmZvKSx3aW5kb3cub3dhQmFja2ZpbGxlZEVycm9ycyYmd2luZG93Lm93YUJhY2tmaWxsZWRFcnJvcnMubGVuZ3RoPjAmJihiKz0ifCIrd2luZG93Lm93YUJhY2tmaWxsZWRFcnJvcnMubWFwKGwpLmpvaW4oInwiKSksYiYmaCh2WzBdLCJEaWFnbm9zdGljcyIsYik7Y29uc3QgeT1udWxsPT09KGM9d2luZG93LnBlcmZvcm1hbmNlKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5uYXZpZ2F0aW9uO3JldHVybiB5JiZoKHZbMF0sIlJlZGlyZWN0Q291bnQiLHkucmVkaXJlY3RDb3VudCksT2JqZWN0KG8uYikobnVsbD09bj92b2lkIDA6bi5wbHQpLG4mJihuLnN0YXJ0JiZoKHZbMF0sIlN0YXJ0VGltZSIsRGF0ZS5ub3coKS1uLnN0YXJ0KSxoKHZbMF0sIkxvYWRUaW1lIixuLnBsdCkpLGgodlswXSwiTWlzY0RhdGEiLE9iamVjdChzLmIpKHQsbnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSkpLGgodlswXSwiVGltaW5ncyIsT2JqZWN0KHIuYykoKSksdn1mdW5jdGlvbiBsKGUpe2xldCB0PSJudWxsIjtyZXR1cm4gZSYmKHQ9ZVswXSwiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsZWUmJih0Kz0iOiIrZS5jYWxsZWUoKSkpLHR9ZnVuY3Rpb24gZihlLHQsbixvLHMpe2xldCB1PU9iamVjdChhLmEpKGUsbik7cmV0dXJuIHUucHJvcGVydGllcy5Cb290UmVzdWx0PXQsdS5wcm9wZXJ0aWVzLkJvdHRsZW5lY2tzPU9iamVjdChyLmQpKCksdS5wcm9wZXJ0aWVzLkxheWVycz1PYmplY3Qoci5lKSgpLGgodSwiQm9vdFR5cGUiLG8pLHMmJihoKHUsIkhvc3RlZFNjZW5hcmlvIixzLmhvc3RlZFNjZW5hcmlvKSxoKHUsIkhvc3RUZWxlbWV0cnkiLE9iamVjdChpLlQpKHMuaG9zdFRlbGVtZXRyeSkpKSx1fWZ1bmN0aW9uIGgoZSx0LG4pe251bGwhPW4mJm51bGwhPW4mJihlLnByb3BlcnRpZXNbdF09bil9fSw4Mzg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTt2YXIgcj1uKDQpO2NvbnN0IG89bmV3IHIuYyhuZXcgci5iKCgpPT5Qcm9taXNlLmFsbChbbi5lKDEpLG4uZSgyKSxuLmUoMyksbi5lKDQpLG4uZSgxMiksbi5lKDEzKSxuLmUoMTQpLG4uZSgxNSksbi5lKDE5KSxuLmUoMTYpLG4uZSgyMCksbi5lKDMwKSxuLmUoMzMpLG4uZSgzNSksbi5lKDUzKSxuLmUoNTUpLG4uZSg0Niksbi5lKDczKSxuLmUoOTQpLG4uZSgxMDUpLG4uZSgxMTYpLG4uZSgxNjQpLG4uZSgxOTQpLG4uZSgyNDUpLG4uZSg2OTApXSkudGhlbihuLmJpbmQobnVsbCwyMTEzKSkpLGU9PmUuTWFpbEZvbGRlclRyZWVzUGFyZW50Q29udGFpbmVyKSxpPW5ldyByLmEobmV3IHIuZCgoKT0+bi5lKDk0NSkudGhlbihuLmJpbmQobnVsbCwyMDQyKSkpLGU9PmUudG9nZ2xlRm9sZGVyVHJlZUNvbGxhcHNlZCksYT1uZXcgci5jKG5ldyByLmIoKCk9Pm4uZSgxMjAxKS50aGVuKG4uYmluZChudWxsLDIwNDMpKSksZT0+ZS5QcmltYXJ5TWFpbEZvbGRlckhpZXJhcmNoeURvY3VtZW50KTtuZXcgci5jKG5ldyByLmIoKCk9Pm4uZSgyMDgyKS50aGVuKG4uYmluZChudWxsLDIwNDQpKSksZT0+ZS5Gb2xkZXJIaWVyYXJjaHlDb25maWd1cmF0aW9uUXVlcnlEb2N1bWVudCl9LDgzOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBjfSkpO3ZhciByPW4oOCksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGkoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIGEoZSl9ZnVuY3Rpb24gYShlKXt2YXIgdD1lWzBdfHx7fSxuPWUubGVuZ3RoO2lmKG4+MSlmb3IodmFyIHI9bmV3IGMsbz0xO288bjsrK28pdD1yLm1lcmdlKHQsZVtvXSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX12YXIgdT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMubWVyZ2UoZVtuXSx0W25dKX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9dSksdGhpcy5yZWNvbmNpbGVyPWUsdGhpcy5pc09iamVjdD1zLHRoaXMucGFzdENvcGllcz1uZXcgU2V0fXJldHVybiBlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLGk9W10sYT0yO2E8YXJndW1lbnRzLmxlbmd0aDthKyspaVthLTJdPWFyZ3VtZW50c1thXTtyZXR1cm4gcyh0KSYmcyhlKT8oT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoby5jYWxsKGUsYSkpe3ZhciBzPWVbYV07aWYodFthXSE9PXMpe3ZhciB1PW4ucmVjb25jaWxlci5hcHBseShuLE9iamVjdChyLmYpKFtlLHQsYV0saSkpO3UhPT1zJiYoKGU9bi5zaGFsbG93Q29weUZvck1lcmdlKGUpKVthXT11KX19ZWxzZShlPW4uc2hhbGxvd0NvcHlGb3JNZXJnZShlKSlbYV09dFthXX0pKSxlKTp0fSxlLnByb3RvdHlwZS5zaGFsbG93Q29weUZvck1lcmdlPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpJiYhdGhpcy5wYXN0Q29waWVzLmhhcyhlKSYmKGU9QXJyYXkuaXNBcnJheShlKT9lLnNsaWNlKDApOk9iamVjdChyLmEpKHtfX3Byb3RvX186T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxlKSx0aGlzLnBhc3RDb3BpZXMuYWRkKGUpKSxlfSxlfSgpfSw4NDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKHQsImIiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKTt2YXIgcj1uKDQ3Myksbz1uKDE5KTtmdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5kaXJlY3RpdmVzO3JldHVybiFufHwhbi5sZW5ndGh8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2UmJmUubGVuZ3RoJiZlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCJza2lwIj09PShuPWUubmFtZS52YWx1ZSl8fCJpbmNsdWRlIj09PW4pe3ZhciBuLHI9ZS5hcmd1bWVudHM7ZS5uYW1lLnZhbHVlO09iamVjdChvLmIpKHImJjE9PT1yLmxlbmd0aCwzOSk7dmFyIGk9clswXTtPYmplY3Qoby5iKShpLm5hbWUmJiJpZiI9PT1pLm5hbWUudmFsdWUsNDApO3ZhciBhPWkudmFsdWU7T2JqZWN0KG8uYikoYSYmKCJWYXJpYWJsZSI9PT1hLmtpbmR8fCJCb29sZWFuVmFsdWUiPT09YS5raW5kKSw0MSksdC5wdXNoKHtkaXJlY3RpdmU6ZSxpZkFyZ3VtZW50Oml9KX19KSk7cmV0dXJuIHR9KG4pLmV2ZXJ5KChmdW5jdGlvbihlKXt2YXIgbj1lLmRpcmVjdGl2ZSxyPWUuaWZBcmd1bWVudCxpPSExO3JldHVybiJWYXJpYWJsZSI9PT1yLnZhbHVlLmtpbmQ/KGk9dCYmdFtyLnZhbHVlLm5hbWUudmFsdWVdLE9iamVjdChvLmIpKHZvaWQgMCE9PWksMzgpKTppPXIudmFsdWUudmFsdWUsInNraXAiPT09bi5uYW1lLnZhbHVlPyFpOml9KSl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gT2JqZWN0KHIuYykoZSx7RGlyZWN0aXZlOmZ1bmN0aW9uKGUpe3QucHVzaChlLm5hbWUudmFsdWUpfX0pLHR9KHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluZGV4T2YodCk+LTF9KSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmYShbImNsaWVudCJdLGUpJiZhKFsiZXhwb3J0Il0sZSl9fSw4NDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wfW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX0sODQ4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtjb25zdCBvPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDUpLG4uZSg2KSxuLmUoMTIpLG4uZSgxNCksbi5lKDE2KSxuLmUoMjApLG4uZSgyNCksbi5lKDI4KSxuLmUoMzApLG4uZSgzMyksbi5lKDM1KSxuLmUoNDEpLG4uZSg1Myksbi5lKDU1KSxuLmUoNDYpLG4uZSg1Nyksbi5lKDYxKSxuLmUoNzMpLG4uZSg5NCksbi5lKDEwNSksbi5lKDM3OSldKS50aGVuKG4uYmluZChudWxsLDE5NjE3KSkpLGk9bmV3IHIuYShvLGU9PmUuZ2V0TWFpbEJvb3RzdHJhcE9wdGlvbnMpO3ZhciBhPW4oNjQzKTtjb25zdCBzPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMCksbi5lKDEyKSxuLmUoMzApLG4uZSg1Myksbi5lKDU1KSxuLmUoNzgpLG4uZSgxODMpLG4uZSgzNTcpLG4uZSg0MDcpXSkudGhlbihuLmJpbmQobnVsbCwxOTc0MCkpKSx1PW5ldyByLmEocyxlPT5lLmdldFBlb3BsZUJvb3RzdHJhcE9wdGlvbnMpLGM9bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgxKSxuLmUoMiksbi5lKDMpLG4uZSg0KSxuLmUoNSksbi5lKDEwKSxuLmUoMTIpLG4uZSgxNCksbi5lKDE4KSxuLmUoMjIpLG4uZSgyMCksbi5lKDI0KSxuLmUoMjYpLG4uZSgyOCksbi5lKDMwKSxuLmUoMzIpLG4uZSgzMyksbi5lKDM0KSxuLmUoMzcpLG4uZSgzNSksbi5lKDQxKSxuLmUoNTMpLG4uZSg1NSksbi5lKDYwKSxuLmUoMzc0KV0pLnRoZW4obi5iaW5kKG51bGwsMTk1NTQpKSksbD1uZXcgci5hKGMsZT0+ZS5nZXRGaWxlc0Jvb3RzdHJhcE9wdGlvbnMpLGY9bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgwKSxuLmUoOSksbi5lKDE0KSxuLmUoMzUpLG4uZSg1Myksbi5lKDU1KSxuLmUoNTUxKV0pLnRoZW4obi5iaW5kKG51bGwsMTk3MDEpKSksaD1uZXcgci5hKGYsZT0+ZS5nZXRPcmdFeHBsb3JlckJvb3RzdHJhcE9wdGlvbnMpO3ZhciBkPW4oNjQ1KTtjb25zdCBwPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDEyKSxuLmUoMTQpLG4uZSgyMCksbi5lKDMwKSxuLmUoMzMpLG4uZSgzNSksbi5lKDUzKSxuLmUoNTUpLG4uZSg2MSksbi5lKDEyNiksbi5lKDE1OCksbi5lKDIzNSksbi5lKDM4MildKS50aGVuKG4uYmluZChudWxsLDE5NzEwKSkpLHY9bmV3IHIuYShwLGU9PmUuZ2V0QXBwSG9zdEJvb3RzdHJhcE9wdGlvbnMpO3ZhciBiPW4oNjQ0KSx5PW4oMTApO2NvbnN0IG09bmV3IHIuYyhuZXcgci5iKCgpPT5Qcm9taXNlLmFsbChbbi5lKDEpLG4uZSgyKSxuLmUoMyksbi5lKDQpLG4uZSgxMiksbi5lKDE0KSxuLmUoMTYpLG4uZSgyMCksbi5lKDMwKSxuLmUoMzMpLG4uZSgzNSksbi5lKDUzKSxuLmUoNTUpLG4uZSg0Niksbi5lKDczKSxuLmUoOTQpLG4uZSgxMDUpLG4uZSgxMTYpLG4uZSgxNjQpLG4uZSgxOTQpLG4uZSgyNDUpLG4uZSg0MjkpXSkudGhlbihuLmJpbmQobnVsbCwxOTg4NSkpKSxlPT5lLk1haWxGb2xkZXJUcmVlc1BhcmVudENvbnRhaW5lcik7dmFyIGc9big4MzgpLE89bigxNTMpLHc9big2NDcpLGo9big4NTApLEU9big4NTcpO2NvbnN0IFM9bmV3IHIuYyhuZXcgci5iKCgpPT5Qcm9taXNlLmFsbChbbi5lKDQpLG4uZSgxMiksbi5lKDI0KSxuLmUoNTMpLG4uZSg1NSksbi5lKDE2Nyksbi5lKDU0MildKS50aGVuKG4uYmluZChudWxsLDE5NTQzKSkpLGU9PmUuZGVmYXVsdCksQT1uZXcgci5jKG5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDEyKSxuLmUoMjQpLG4uZSg1Myksbi5lKDU1KSxuLmUoMTU4KSxuLmUoMjM1KSxuLmUoMzk4KV0pLnRoZW4obi5iaW5kKG51bGwsMTk4MjMpKSksZT0+ZS5MZWZ0UmFpbCk7dmFyIGs9bigxMSk7Y29uc3QgST17c3VpdGVXcmFwcGVyOk9iamVjdChPLmEpKCJvdXRsb29rU3VpdGVIZWFkZXJTdHJhdGVneSIpP3cuYTp2b2lkIDAsYXBwQmFyU3RyYXRlZ3k6T2JqZWN0KHkuaSkoIm5vdmFhcHBiYXIiKT9TOkF9LFQ9T2JqZWN0KGsuYikod2luZG93LCJib290c3RyYXBSaWJib25JbXBvcnQiKSx4PXtjYWxlbmRhclJpYmJvblByb3ZpZGVyOlQ/ai5iOnZvaWQgMH0sQz17bWFpbFJpYmJvblByb3ZpZGVyOlQ/RS5iOnZvaWQgMH07bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBNfSkpO2NvbnN0IE09e01haWw6e29wdGlvbnM6aSxzdHJhdGVnaWVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7Zm9sZGVyVmlld1N0cmF0ZWd5Ok9iamVjdCh5LmkpKCJncWxmb2xkZXJzIik/Zy5hOm19LEkpLEMpfSxDYWxlbmRhcjp7b3B0aW9uczphLmEsc3RyYXRlZ2llczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkseCl9LFBlb3BsZTp7b3B0aW9uczp1LHN0cmF0ZWdpZXM6SX0sRmlsZXNIdWI6e29wdGlvbnM6bCxzdHJhdGVnaWVzOkl9LE1haWxEZWVwTGluazp7b3B0aW9uczpkLmEsc3RyYXRlZ2llczpJfSxPcmdFeHBsb3Jlcjp7b3B0aW9uczpoLHN0cmF0ZWdpZXM6SX0sQXBwSG9zdDp7b3B0aW9uczp2LHN0cmF0ZWdpZXM6SX0sQ2FsZW5kYXJEZWVwTGluazp7b3B0aW9uczpiLmEsc3RyYXRlZ2llczpJfX19LDg1MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSk7dmFyIHI9big0KSxvPW4oMjcpLGk9big4MTgpO2NvbnN0IGE9bmV3IHIuYigoKT0+UHJvbWlzZS5hbGwoW24uZSgwKSxuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDYpLG4uZSgxMCksbi5lKDkpLG4uZSgxMSksbi5lKDEyKSxuLmUoMTQpLG4uZSgxOCksbi5lKDE2KSxuLmUoMjApLG4uZSgyNCksbi5lKDIzKSxuLmUoMjgpLG4uZSgyOSksbi5lKDMwKSxuLmUoMzEpLG4uZSgzMiksbi5lKDMzKSxuLmUoMzQpLG4uZSgzNiksbi5lKDM3MildKS50aGVuKG4uYmluZChudWxsLDIxMTEpKSk7bGV0IHM9T2JqZWN0KG8uZCkoYSxlPT5lLkNhbGVuZGFyUmliYm9uLGkuYSk7Y29uc3QgdT1uZXcgby5iKGEsZT0+ZS5DYWxlbmRhclJpYmJvbil9LDg1NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSk7dmFyIHI9big0KSxvPW4oNzY1KTtjb25zdCBpPW5ldyByLmIoKCk9PlByb21pc2UuYWxsKFtuLmUoMSksbi5lKDIpLG4uZSgzKSxuLmUoNCksbi5lKDUpLG4uZSgxMCksbi5lKDEyKSxuLmUoMTMpLG4uZSgxNSksbi5lKDE4KSxuLmUoMTkpLG4uZSgxNiksbi5lKDIxKSxuLmUoMjApLG4uZSgyNCksbi5lKDIzKSxuLmUoMjUpLG4uZSgyNiksbi5lKDI4KSxuLmUoMjkpLG4uZSgzMCksbi5lKDMzKSxuLmUoMzgpLG4uZSgzNSksbi5lKDQzMCldKS50aGVuKG4uYmluZChudWxsLDIxMTcpKSksYT1PYmplY3Qoby5hKShpLGU9PmUuTWFpbFJpYmJvbikscz1uZXcgci5jKGksZT0+ZS5NYWlsUmliYm9uKX0sODY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSk7dmFyIHI9bigxMik7ZnVuY3Rpb24gbygpe3JldHVybiBPYmplY3Qoci5hKSgpLmlzUHdhfX0sODY1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMjEpLG89bigyKSxpPW4oMTA2KSxhPW4oMzIxKSxzPW4oNCksdT1uKDg0OCk7ZnVuY3Rpb24gYyhlLHQpe3ZhciBuLHI7cmV0dXJuIHRbMV09PWUmJigwPT0obnVsbD09PShuPXRbMl0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmluZGV4T2YoImRlZXBsaW5rIikpfHwwPT0obnVsbD09PShyPXRbM10pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmluZGV4T2YoImRlZXBsaW5rIikpKX1uZXcgcy5kKCgpPT5Qcm9taXNlLmFsbChbbi5lKDU1KSxuLmUoMTI1KSxuLmUoMzk2KV0pLnRoZW4obi5iaW5kKG51bGwsMTk5ODgpKSkuaW1wb3J0KCksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBofSkpO2NvbnN0IGw9ImE2YzZhZDk1ZWJlOTQ4MGM5MDEzYjJlM2NlZWQwNDVjLWJmYzQxNzc0LWJhYzEtNDg0ZC1hNjI2LThjNzBkOTlmZGZlZS03MzIyIixmPXtDYWxlbmRhcjpsLFBlb3BsZToiOTBjMzFlOWY3MDJjNDU2NGIxMjAxNjcyNDdkM2NkOWYtZDg5NGE0ZTUtNzJmNC00MjIxLWFiMDAtOTRlMTM1OWRmYjYwLTcxMzciLEZpbGVzSHViOiI1NjQ2OGY2OTkxYzM0ODAyOWM2YmJhNDAzYjQ0NDYwNy03ZjVkNmNkMS03ZmJlLTRhYjEtYmUwMy0zYjJiNmFlYjNlYjQtNzY5NiIsT3JnRXhwbG9yZXI6bCxDYWxlbmRhckRlZXBMaW5rOmx9O2Z1bmN0aW9uIGgoZSx0LG4scyxsKXt2YXIgaDtjb25zdCBkPWZ1bmN0aW9uKCl7dmFyIGU7Y29uc3QgdD1udWxsPT09KGU9bnVsbD09PXdpbmRvd3x8dm9pZCAwPT09d2luZG93P3ZvaWQgMDp3aW5kb3cubG9jYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnBhdGhuYW1lO2lmKHQpe2NvbnN0IGU9dC5zcGxpdCgiLyIpO2lmKGMoIm1haWwiLGUpKXJldHVybiBpLmEuTWFpbERlZXBMaW5rO2lmKGMoImNhbGVuZGFyIixlKSlyZXR1cm4gaS5hLkNhbGVuZGFyRGVlcExpbms7aWYoMD09dC5pbmRleE9mKCIvY2FsZW5kYXIiKSlyZXR1cm4gaS5hLkNhbGVuZGFyO2lmKDA9PXQuaW5kZXhPZigiL3Blb3BsZSIpKXJldHVybiBpLmEuUGVvcGxlO2lmKDA9PXQuaW5kZXhPZigiL2ZpbGVzIikpcmV0dXJuIGkuYS5GaWxlc0h1YjtpZigwPT10LmluZGV4T2YoIi9vcmdleHBsb3JlciIpKXJldHVybiBpLmEuT3JnRXhwbG9yZXI7aWYoMD09dC5pbmRleE9mKCIvaG9zdCIpKXJldHVybiBpLmEuQXBwSG9zdH1yZXR1cm4gaS5hLk1haWx9KCkscD11LmFbZF07T2JqZWN0KHIuYSkoe2FwcDpkLHN0YXJ0dXBBcmlhVG9rZW46ZltkXXx8IjNiMWVhMDE0NTBiZTQ4ZjI5NzU5ZDg2ODkzMWUyMjVkLTcxNjc2ODViLWY2ZmYtNDIxYy1hYTY0LThhZTE2ZmU5MjEyOC03MjgzIixydW5CZWZvcmVTdGFydDplLG92ZXJyaWRlQm9vdFByb21pc2VzOnQscnVuQWZ0ZXJSZXF1ZXN0czooKT0+e3RyeXtkb2N1bWVudC5ib2R5LnN0eWxlLm1pbldpZHRoPSI0MThweCIsT2JqZWN0KG8ucikoKX1jYXRjaChlKXt9fSxsb2FkQnBvczohMCxzdHJhdGVnaWVzOnAuc3RyYXRlZ2llcyxib290c3RyYXA6YS5iLG9wdGlvbnM6cC5vcHRpb25zLGlzRGVlcExpbms6ZD09aS5hLk1haWxEZWVwTGlua3x8ZD09aS5hLkNhbGVuZGFyRGVlcExpbmssb25Mb2FkZXJSZW1vdmVkOm4saGFuZGxlQm9vdEVycm9yOnMsY2FjaGVzVG9DbGVhbjpudWxsPT09KGg9T2JqZWN0KGEuYSkoZCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmFwcCxyZXRyeVFzcDpsfSl9fSw4NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdfHwiIixyPWVbM107aWYoIXIpcmV0dXJuIG47aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShhPXIscz1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSx1PSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChzKSwiLyojICIuY29uY2F0KHUsIiAqLyIpKSxpPXIuc291cmNlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiIvKiMgc291cmNlVVJMPSIuY29uY2F0KHIuc291cmNlUm9vdCkuY29uY2F0KGUsIiAqLyIpfSkpO3JldHVybltuXS5jb25jYXQoaSkuY29uY2F0KFtvXSkuam9pbigiXG4iKX12YXIgYSxzLHU7cmV0dXJuW25dLmpvaW4oIlxuIil9KHQsZSk7cmV0dXJuIHRbMl0/IkBtZWRpYSAiLmNvbmNhdCh0WzJdLCJ7IikuY29uY2F0KG4sIn0iKTpufSkpLmpvaW4oIiIpfSx0Lmk9ZnVuY3Rpb24oZSxuKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLCIiXV0pO2Zvcih2YXIgcj17fSxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBpPXRoaXNbb11bMF07bnVsbCE9aSYmKHJbaV09ITApfWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdO251bGwhPXNbMF0mJnJbc1swXV18fChuJiYhc1syXT9zWzJdPW46biYmKHNbMl09IigiLmNvbmNhdChzWzJdLCIpIGFuZCAoIikuY29uY2F0KG4sIikiKSksdC5wdXNoKHMpKX19LHR9fSw4ODpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPXt9LGE9KHI9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93JiZkb2N1bWVudCYmZG9jdW1lbnQuYWxsJiYhd2luZG93LmF0b2J9LGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvfSkscz1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMD09PXRbbl0mJih0W25dPWUuY2FsbCh0aGlzLG4pKSx0W25dfX0oKGZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpfSkpLHU9bnVsbCxjPTAsbD1bXSxmPW4oNDY5KTtmdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbz1pW3IuaWRdO2lmKG8pe28ucmVmcysrO2Zvcih2YXIgYT0wO2E8by5wYXJ0cy5sZW5ndGg7YSsrKW8ucGFydHNbYV0oci5wYXJ0c1thXSk7Zm9yKDthPHIucGFydHMubGVuZ3RoO2ErKylvLnBhcnRzLnB1c2gobShyLnBhcnRzW2FdLHQpKX1lbHNle3ZhciBzPVtdO2ZvcihhPTA7YTxyLnBhcnRzLmxlbmd0aDthKyspcy5wdXNoKG0oci5wYXJ0c1thXSx0KSk7aVtyLmlkXT17aWQ6ci5pZCxyZWZzOjEscGFydHM6c319fX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciBuPVtdLHI9e30sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgaT1lW29dLGE9dC5iYXNlP2lbMF0rdC5iYXNlOmlbMF0scz17Y3NzOmlbMV0sbWVkaWE6aVsyXSxzb3VyY2VNYXA6aVszXX07clthXT9yW2FdLnBhcnRzLnB1c2gocyk6bi5wdXNoKHJbYV09e2lkOmEscGFydHM6W3NdfSl9cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe3ZhciBuPXMoZS5pbnNlcnRJbnRvKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0SW50bycgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7dmFyIHI9bFtsLmxlbmd0aC0xXTtpZigidG9wIj09PWUuaW5zZXJ0QXQpcj9yLm5leHRTaWJsaW5nP24uaW5zZXJ0QmVmb3JlKHQsci5uZXh0U2libGluZyk6bi5hcHBlbmRDaGlsZCh0KTpuLmluc2VydEJlZm9yZSh0LG4uZmlyc3RDaGlsZCksbC5wdXNoKHQpO2Vsc2V7aWYoImJvdHRvbSIhPT1lLmluc2VydEF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcuIE11c3QgYmUgJ3RvcCcgb3IgJ2JvdHRvbScuIik7bi5hcHBlbmRDaGlsZCh0KX19ZnVuY3Rpb24gdihlKXtpZihudWxsPT09ZS5wYXJlbnROb2RlKXJldHVybiExO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTt2YXIgdD1sLmluZGV4T2YoZSk7dD49MCYmbC5zcGxpY2UodCwxKX1mdW5jdGlvbiBiKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIGUuYXR0cnMudHlwZT0idGV4dC9jc3MiLHkodCxlLmF0dHJzKSxwKGUsdCksdH1mdW5jdGlvbiB5KGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUobix0W25dKX0pKX1mdW5jdGlvbiBtKGUsdCl7dmFyIG4scixvLGk7aWYodC50cmFuc2Zvcm0mJmUuY3NzKXtpZighKGk9dC50cmFuc2Zvcm0oZS5jc3MpKSlyZXR1cm4gZnVuY3Rpb24oKXt9O2UuY3NzPWl9aWYodC5zaW5nbGV0b24pe3ZhciBhPWMrKztuPXV8fCh1PWIodCkpLHI9dy5iaW5kKG51bGwsbixhLCExKSxvPXcuYmluZChudWxsLG4sYSwhMCl9ZWxzZSBlLnNvdXJjZU1hcCYmImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmImZ1bmN0aW9uIj09dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwmJiJmdW5jdGlvbiI9PXR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMJiYiZnVuY3Rpb24iPT10eXBlb2YgQmxvYiYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2E/KG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO3JldHVybiBlLmF0dHJzLnR5cGU9InRleHQvY3NzIixlLmF0dHJzLnJlbD0ic3R5bGVzaGVldCIseSh0LGUuYXR0cnMpLHAoZSx0KSx0fSh0KSxyPUUuYmluZChudWxsLG4sdCksbz1mdW5jdGlvbigpe3Yobiksbi5ocmVmJiZVUkwucmV2b2tlT2JqZWN0VVJMKG4uaHJlZil9KToobj1iKHQpLHI9ai5iaW5kKG51bGwsbiksbz1mdW5jdGlvbigpe3Yobil9KTtyZXR1cm4gcihlKSxmdW5jdGlvbih0KXtpZih0KXtpZih0LmNzcz09PWUuY3NzJiZ0Lm1lZGlhPT09ZS5tZWRpYSYmdC5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47cihlPXQpfWVsc2UgbygpfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCIpOyh0PXR8fHt9KS5hdHRycz0ib2JqZWN0Ij09dHlwZW9mIHQuYXR0cnM/dC5hdHRyczp7fSx0LnNpbmdsZXRvbnx8KHQuc2luZ2xldG9uPWEoKSksdC5pbnNlcnRJbnRvfHwodC5pbnNlcnRJbnRvPSJoZWFkIiksdC5pbnNlcnRBdHx8KHQuaW5zZXJ0QXQ9ImJvdHRvbSIpO3ZhciBuPWQoZSx0KTtyZXR1cm4gaChuLHQpLGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBhPW5bb107KHM9aVthLmlkXSkucmVmcy0tLHIucHVzaChzKX1lJiZoKGQoZSx0KSx0KTtmb3Iobz0wO288ci5sZW5ndGg7bysrKXt2YXIgcztpZigwPT09KHM9cltvXSkucmVmcyl7Zm9yKHZhciB1PTA7dTxzLnBhcnRzLmxlbmd0aDt1Kyspcy5wYXJ0c1t1XSgpO2RlbGV0ZSBpW3MuaWRdfX19fTt2YXIgZyxPPShnPVtdLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdbZV09dCxnLmZpbHRlcihCb29sZWFuKS5qb2luKCJcbiIpfSk7ZnVuY3Rpb24gdyhlLHQsbixyKXt2YXIgbz1uPyIiOnIuY3NzO2lmKGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1PKHQsbyk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvKSxhPWUuY2hpbGROb2RlczthW3RdJiZlLnJlbW92ZUNoaWxkKGFbdF0pLGEubGVuZ3RoP2UuaW5zZXJ0QmVmb3JlKGksYVt0XSk6ZS5hcHBlbmRDaGlsZChpKX19ZnVuY3Rpb24gaihlLHQpe3ZhciBuPXQuY3NzLHI9dC5tZWRpYTtpZihyJiZlLnNldEF0dHJpYnV0ZSgibWVkaWEiLHIpLGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1uO2Vsc2V7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKX19ZnVuY3Rpb24gRShlLHQsbil7dmFyIHI9bi5jc3Msbz1uLnNvdXJjZU1hcCxpPXZvaWQgMD09PXQuY29udmVydFRvQWJzb2x1dGVVcmxzJiZvOyh0LmNvbnZlcnRUb0Fic29sdXRlVXJsc3x8aSkmJihyPWYocikpLG8mJihyKz0iXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkobykpKSkrIiAqLyIpO3ZhciBhPW5ldyBCbG9iKFtyXSx7dHlwZToidGV4dC9jc3MifSkscz1lLmhyZWY7ZS5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwoYSkscyYmVVJMLnJldm9rZU9iamVjdFVSTChzKX19LDg5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImMiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSk7dmFyIHI9bigzNiksbz1uKDQ1KSxpPW4oNjQpO2NvbnN0IGE9ZT0+MT09ZS5sZW5ndGgmJiFpc05hTihwYXJzZUludChlKSkscz1lPT4hIWUubWF0Y2goLy4rQC4rLyk7ZnVuY3Rpb24gdShlLHQpe3ZhciBuO2xldCBhPWU7Y29uc3Qgcz1udWxsPT09KG49T2JqZWN0KG8uYikoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucGF0aG5hbWU7aWYocyl7Y29uc3QgZT1zLnNwbGl0KCIvIitPYmplY3QoaS5hKSgpKyIvIilbMV07aWYoZSl7Y29uc3Qgbj1lLnNwbGl0KCIvIilbMF07biYmdC5maWx0ZXIoZT0+ZShuKSkubGVuZ3RoPjAmJihhPU9iamVjdChyLmEpKGEsbikpfX1yZXR1cm4gT2JqZWN0KHIuYikoYSl9fSw5MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJnIiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQodCwiZiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKHQsImoiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZCh0LCJpIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBkfSkpLG4uZCh0LCJoIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQodCwiYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKHQsImQiLChmdW5jdGlvbigpe3JldHVybiBifSkpLG4uZCh0LCJlIiwoZnVuY3Rpb24oKXtyZXR1cm4geX0pKTt2YXIgcj1uKDYzMSksbz1uLm4ociksaT1uKDE5KSxhPW4oMzEzKTtmdW5jdGlvbiBzKGUpe3JldHVybntfX3JlZjpTdHJpbmcoZSl9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIEJvb2xlYW4oZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYic3RyaW5nIj09dHlwZW9mIGUuX19yZWYpfWZ1bmN0aW9uIGMoZSx0LG4scil7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIkludFZhbHVlIj09PWUua2luZH0obil8fGZ1bmN0aW9uKGUpe3JldHVybiJGbG9hdFZhbHVlIj09PWUua2luZH0obikpZVt0LnZhbHVlXT1OdW1iZXIobi52YWx1ZSk7ZWxzZSBpZihmdW5jdGlvbihlKXtyZXR1cm4iQm9vbGVhblZhbHVlIj09PWUua2luZH0obil8fGZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmdWYWx1ZSI9PT1lLmtpbmR9KG4pKWVbdC52YWx1ZV09bi52YWx1ZTtlbHNlIGlmKGZ1bmN0aW9uKGUpe3JldHVybiJPYmplY3RWYWx1ZSI9PT1lLmtpbmR9KG4pKXt2YXIgbz17fTtuLmZpZWxkcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBjKG8sZS5uYW1lLGUudmFsdWUscil9KSksZVt0LnZhbHVlXT1vfWVsc2UgaWYoZnVuY3Rpb24oZSl7cmV0dXJuIlZhcmlhYmxlIj09PWUua2luZH0obikpe3ZhciBhPShyfHx7fSlbbi5uYW1lLnZhbHVlXTtlW3QudmFsdWVdPWF9ZWxzZSBpZihmdW5jdGlvbihlKXtyZXR1cm4iTGlzdFZhbHVlIj09PWUua2luZH0obikpZVt0LnZhbHVlXT1uLnZhbHVlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPXt9O3JldHVybiBjKG4sdCxlLHIpLG5bdC52YWx1ZV19KSk7ZWxzZSBpZihmdW5jdGlvbihlKXtyZXR1cm4iRW51bVZhbHVlIj09PWUua2luZH0obikpZVt0LnZhbHVlXT1uLnZhbHVlO2Vsc2V7aWYoIWZ1bmN0aW9uKGUpe3JldHVybiJOdWxsVmFsdWUiPT09ZS5raW5kfShuKSl0aHJvdyBuZXcgaS5hKDUzKTtlW3QudmFsdWVdPW51bGx9fWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj1udWxsO2UuZGlyZWN0aXZlcyYmKG49e30sZS5kaXJlY3RpdmVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bZS5uYW1lLnZhbHVlXT17fSxlLmFyZ3VtZW50cyYmZS5hcmd1bWVudHMuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG89ci5uYW1lLGk9ci52YWx1ZTtyZXR1cm4gYyhuW2UubmFtZS52YWx1ZV0sbyxpLHQpfSkpfSkpKTt2YXIgcj1udWxsO3JldHVybiBlLmFyZ3VtZW50cyYmZS5hcmd1bWVudHMubGVuZ3RoJiYocj17fSxlLmFyZ3VtZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLm5hbWUsbz1lLnZhbHVlO3JldHVybiBjKHIsbixvLHQpfSkpKSxoKGUubmFtZS52YWx1ZSxyLG4pfXZhciBmPVsiY29ubmVjdGlvbiIsImluY2x1ZGUiLCJza2lwIiwiY2xpZW50IiwicmVzdCIsImV4cG9ydCJdO2Z1bmN0aW9uIGgoZSx0LG4pe2lmKHQmJm4mJm4uY29ubmVjdGlvbiYmbi5jb25uZWN0aW9uLmtleSl7aWYobi5jb25uZWN0aW9uLmZpbHRlciYmbi5jb25uZWN0aW9uLmZpbHRlci5sZW5ndGg+MCl7dmFyIHI9bi5jb25uZWN0aW9uLmZpbHRlcj9uLmNvbm5lY3Rpb24uZmlsdGVyOltdO3Iuc29ydCgpO3ZhciBpPXt9O3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lbZV09dFtlXX0pKSxuLmNvbm5lY3Rpb24ua2V5KyIoIitKU09OLnN0cmluZ2lmeShpKSsiKSJ9cmV0dXJuIG4uY29ubmVjdGlvbi5rZXl9dmFyIGE9ZTtpZih0KXt2YXIgcz1vKCkodCk7YSs9IigiK3MrIikifXJldHVybiBuJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXstMT09PWYuaW5kZXhPZihlKSYmKG5bZV0mJk9iamVjdC5rZXlzKG5bZV0pLmxlbmd0aD9hKz0iQCIrZSsiKCIrSlNPTi5zdHJpbmdpZnkobltlXSkrIikiOmErPSJAIitlKX0pKSxhfWZ1bmN0aW9uIGQoZSx0KXtpZihlLmFyZ3VtZW50cyYmZS5hcmd1bWVudHMubGVuZ3RoKXt2YXIgbj17fTtyZXR1cm4gZS5hcmd1bWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5uYW1lLG89ZS52YWx1ZTtyZXR1cm4gYyhuLHIsbyx0KX0pKSxufXJldHVybiBudWxsfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUuYWxpYXM/ZS5hbGlhcy52YWx1ZTplLm5hbWUudmFsdWV9ZnVuY3Rpb24gdihlLHQsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlLl9fdHlwZW5hbWUpcmV0dXJuIGUuX190eXBlbmFtZTtmb3IodmFyIHI9MCxvPXQuc2VsZWN0aW9ucztyPG8ubGVuZ3RoO3IrKyl7dmFyIGk9b1tyXTtpZihiKGkpKXtpZigiX190eXBlbmFtZSI9PT1pLm5hbWUudmFsdWUpcmV0dXJuIGVbcChpKV19ZWxzZXt2YXIgcz12KGUsT2JqZWN0KGEuYikoaSxuKS5zZWxlY3Rpb25TZXQsbik7aWYoInN0cmluZyI9PXR5cGVvZiBzKXJldHVybiBzfX19ZnVuY3Rpb24gYihlKXtyZXR1cm4iRmllbGQiPT09ZS5raW5kfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIklubGluZUZyYWdtZW50Ij09PWUua2luZH19LDk1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiBvfSkpLG4uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTt2YXIgcj1uKDExKTtjb25zdCBvPSJzZG1wIjtmdW5jdGlvbiBpKCl7dHJ5e2NvbnN0IGU9T2JqZWN0KHIuYSkod2luZG93LG8pO3JldHVybiBlP0pTT04ucGFyc2UoZSkuSW5ib3hSZWFkaW5nUGFuZVBvc2l0aW9uOnZvaWQgMH1maW5hbGx5e3JldHVybn19fSw5NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUuaGVhZGVycykmJm51bGwhPWUuaGVhZGVycy5nZXQoIlgtT1dBLUV4cGxpY2l0TG9nb25Vc2VyIil9bi5kKHQsImEiLChmdW5jdGlvbigpe3JldHVybiByfSkpfSw5NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKTt2YXIgcj1uKDEzKTtmdW5jdGlvbiBvKGUpe3JldHVybiEhT2JqZWN0KHIuYSkoKS5nZXRBdXRoVG9rZW4mJig0MDE9PWV8fDQ0MD09ZSl9fSw5ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJiIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxuLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7dmFyIHI9big1OCksbz1uKDIpO2Z1bmN0aW9uIGkoZSl7Y29uc3QgdD1hKCk7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57ZS5zZXQobix0W25dKX0pfWZ1bmN0aW9uIGEoKXtjb25zdCBlPU9iamVjdChvLnYpKCJ0YXJnZXRTZXJ2ZXIiKSx0PXsiWC1PV0EtQ0FOQVJZIjpPYmplY3Qoci5hKShlKX0sbj1PYmplY3Qoci5jKShlKTtyZXR1cm4gbiYmKHRbIlgtT1dBLUNBTkFSWS1ERUJVRyJdPW4pLHR9fSw5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSxuLmQodCwiYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSk7Y29uc3Qgcj0iTVMtQ1YiLG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGk9e21heENvcnJlbGF0aW9uVmVjdG9yTGVuZ3RoOjEyNyxiYXNlTGVuZ3RoOjIyLHZhbGlkYXRpb25QYXR0ZXJuOm5ldyBSZWdFeHAoIl5bIitvKyJdezIyfSguWzAtOV0rKSskIil9O3ZhciBhPSIiLHM9MDtmdW5jdGlvbiB1KCl7cmV0dXJuIGEuY29uY2F0KCIuIixzLnRvU3RyaW5nKCkpfWZ1bmN0aW9uIGMoKXtyZXR1cm4hIWwodSgpKSYmYS5sZW5ndGgrMSsocysxKyIiKS5sZW5ndGg8PWkubWF4Q29ycmVsYXRpb25WZWN0b3JMZW5ndGh9ZnVuY3Rpb24gbChlKXtyZXR1cm4gaS52YWxpZGF0aW9uUGF0dGVybi50ZXN0KGUpJiZlLmxlbmd0aDw9aS5tYXhDb3JyZWxhdGlvblZlY3Rvckxlbmd0aH1mdW5jdGlvbiBmKCl7cmV0dXJuIGwodSgpKT9jKCk/KHMrPTEsdSgpKTpudWxsOihhPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPSIiLHQ9MDt0PGkuYmFzZUxlbmd0aDt0KyspZSs9by5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8ubGVuZ3RoKSk7cmV0dXJuIGV9KCkscz0wLGwoZT11KCkpP2U6IiIpO3ZhciBlfX0sOTk1OmZ1bmN0aW9uKGUsdCxuKXsodD1lLmV4cG9ydHM9big4NykoITEpKS5wdXNoKFtlLmksIi5fMnJvWElSbFhiZjRYNFdod2diZVFSV3stbXMtZmxleC1pdGVtLWFsaWduOmVuZDthbGlnbi1zZWxmOmZsZXgtZW5kfS5fM205dV9pNTJ0WDV1VW90Q19ScDlMb3t3aWR0aDoyMHB4O2hlaWdodDoyMHB4fWh0bWxbZGlyXSAuXzNtOXVfaTUydFg1dVVvdENfUnA5TG86aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1uZXV0cmFsTGlnaHQpfWh0bWxbZGlyXSAuXzNtOXVfaTUydFg1dVVvdENfUnA5TG86YWN0aXZlLGh0bWxbZGlyXSAuXzIzOWtJUF8tWklfa3loRjVRNm9QMUcsaHRtbFtkaXJdIC5fMjM5a0lQXy1aSV9reWhGNVE2b1AxRzpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5ldXRyYWxRdWF0ZXJuYXJ5QWx0KX0ubm92MUtSaVEza1h2N1VTSjkxQnFfe2NvbG9yOnZhcigtLWJsYWNrKX1odG1sW2Rpcl0gLm5vdjFLUmlRM2tYdjdVU0o5MUJxX3ttYXJnaW46MCAycHh9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubm92MUtSaVEza1h2N1VTSjkxQnFfe2NvbG9yOiMwMDB9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDp3aGl0ZS1vbi1ibGFjayl7Lm5vdjFLUmlRM2tYdjdVU0o5MUJxX3tjb2xvcjojZmZmfX0uXzFSZWlWV1p5NmpCTFRJQURERnhkVkV7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbGluZS1wYWNrOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofWh0bWxbZGlyXSAuXzFSZWlWV1p5NmpCTFRJQURERnhkVkV7YmFja2dyb3VuZDp2YXIoLS1uZXV0cmFsTGlnaHRlcil9Ll8zWVlRdFpQM0dvUWhLbjBLTE0ySWlELC5fMUN4WXBiQXBwdUkxamFWdC1LMnVXanstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW59Ll8xQ3hZcGJBcHB1STFqYVZ0LUsydVdqe2hlaWdodDo0MHB4fS5fMWswRlJMdFVsUDlDUmVJbVNzVmdMQ3tkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWl0ZW0tYWxpZ246ZW5kO2FsaWduLXNlbGY6ZmxleC1lbmQ7LXdlYmtpdC1ib3gtYWxpZ246ZW5kOy1tcy1mbGV4LWFsaWduOmVuZDthbGlnbi1pdGVtczpmbGV4LWVuZDt3aWR0aDoyMHB4O3otaW5kZXg6MjtoZWlnaHQ6OTBweH1odG1sW2Rpcl0gLl8xazBGUkx0VWxQOUNSZUltU3NWZ0xDe2JhY2tncm91bmQ6dmFyKC0tbmV1dHJhbExpZ2h0ZXIpfS5fMWswRlJMdFVsUDlDUmVJbVNzVmdMQy56LTg4bDhnTWJGZ1pBUVUyR0NzczgsLl8xazBGUkx0VWxQOUNSZUltU3NWZ0xDLl8yUi02OHpNVTd2SnE0VGdDcnVqdE94e2hlaWdodDo0MHB4fWh0bWxbZGlyXSAuXzFrMEZSTHRVbFA5Q1JlSW1Tc1ZnTEMuRGhBd25ZYmtmZWZkQXoxNkdtcktPe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbmV1dHJhbExpZ2h0KX0iLCIiXSksdC5sb2NhbHM9e3ZpZXdNb2RlTWVudVdyYXBwZXI6Il8ycm9YSVJsWGJmNFg0V2h3Z2JlUVJXIix2aWV3TW9kZU1lbnU6Il8zbTl1X2k1MnRYNXVVb3RDX1JwOUxvIix2aWV3TW9kZU1lbnVTZWxlY3RlZENvbG9yOiJfMjM5a0lQXy1aSV9reWhGNVE2b1AxRyIsdmlld01vZGVNZW51SWNvbjoibm92MUtSaVEza1h2N1VTSjkxQnFfIixyb290OiJfMVJlaVZXWnk2akJMVElBRERGeGRWRSIscmliYm9uQ29udGFpbmVyOiJfM1lZUXRaUDNHb1FoS24wS0xNMklpRCIscmliYm9uVG9vbGJhckNvbnRhaW5lcjoiXzFDeFlwYkFwcHVJMWphVnQtSzJ1V2oiLG1vZGVNZW51Q29udGFpbmVyOiJfMWswRlJMdFVsUDlDUmVJbVNzVmdMQyIsY29tbWFuZEJhcjoiei04OGw4Z01iRmdaQVFVMkdDc3M4IixzaW5nbGVMaW5lOiJfMlItNjh6TVU3dkpxNFRnQ3J1anRPeCIsZGFya1RoZW1lOiJEaEF3bllia2ZlZmRBejE2R21yS08ifX19KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3dhLm1haWxpbmRleC5qcy5tYXAKc2VsZi5zY3JpcHRzTG9hZGVkWydvd2EubWFpbGluZGV4LmpzJ10gPSAxOyBzZWxmLnNjcmlwdFByb2Nlc3NFbmQgPSBzZWxmLnNjcmlwdFByb2Nlc3NFbmQgfHwge307IHNlbGYuc2NyaXB0UHJvY2Vzc0VuZFsnb3dhLm1haWxpbmRleC5qcyddID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTs8L3NjcmlwdD48L2JvZHk+Cgo8L2h0bWw+">
</a></td>
<td>
<p style="color:rgb(61,77,90); font-family:Calibri,Verdana,Arial,Helvetica; font-size:12pt">
This email has been checked for viruses by Avast antivirus software. <br>
<a href="https://www.avast.com/antivirus" target="_blank">www.avast.com</a> </p>
</td>
</tr>
</tbody>
</table>
<br>
<a href="#x_m_244795078803448233_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div>
</div>
_______________________________________________<br>
KeyStoneChapter mailing list<br>
<a href="mailto:KeyStoneChapter@nfbnet.org" target="_blank">KeyStoneChapter@nfbnet.org</a><br>
<a href="http://nfbnet.org/mailman/listinfo/keystonechapter_nfbnet.org" rel="noreferrer" target="_blank">http://nfbnet.org/mailman/listinfo/keystonechapter_nfbnet.org</a><br>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="x_gmail_signature">
<div dir="ltr">Thanks,
<div>
<div>LyVette </div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>